blob: dfb453ac55526342d00aba551dd1d90ff0ea308a [file] [log] [blame]
{"version":3,"file":"material-sidenav.umd.js","sources":["../../src/material/sidenav/sidenav-module.ts","../../src/material/sidenav/sidenav.ts","../../src/material/sidenav/drawer.ts","../../src/material/sidenav/drawer-animations.ts","../../node_modules/tslib/tslib.es6.js"],"sourcesContent":["/**\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 {PlatformModule} from '@angular/cdk/platform';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatDrawer, MatDrawerContainer, MatDrawerContent} from './drawer';\nimport {MatSidenav, MatSidenavContainer, MatSidenavContent} from './sidenav';\n\n\n@NgModule({\n imports: [\n CommonModule,\n MatCommonModule,\n ScrollingModule,\n PlatformModule,\n ],\n exports: [\n MatCommonModule,\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ],\n declarations: [\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ],\n})\nexport class MatSidenavModule {}\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 ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n forwardRef,\n Inject,\n Input,\n ViewEncapsulation,\n QueryList,\n ElementRef,\n NgZone,\n} from '@angular/core';\nimport {MatDrawer, MatDrawerContainer, MatDrawerContent} from './drawer';\nimport {matDrawerAnimations} from './drawer-animations';\nimport {coerceBooleanProperty, coerceNumberProperty} from '@angular/cdk/coercion';\nimport {ScrollDispatcher} from '@angular/cdk/scrolling';\n\n\n@Component({\n moduleId: module.id,\n selector: 'mat-sidenav-content',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-drawer-content mat-sidenav-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatSidenavContent extends MatDrawerContent {\n constructor(\n changeDetectorRef: ChangeDetectorRef,\n @Inject(forwardRef(() => MatSidenavContainer)) container: MatSidenavContainer,\n elementRef: ElementRef<HTMLElement>,\n scrollDispatcher: ScrollDispatcher,\n ngZone: NgZone) {\n super(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone);\n }\n}\n\n\n@Component({\n moduleId: module.id,\n selector: 'mat-sidenav',\n exportAs: 'matSidenav',\n templateUrl: 'drawer.html',\n animations: [matDrawerAnimations.transformDrawer],\n host: {\n 'class': 'mat-drawer mat-sidenav',\n 'tabIndex': '-1',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-sidenav-fixed]': 'fixedInViewport',\n '[style.top.px]': 'fixedInViewport ? fixedTopGap : null',\n '[style.bottom.px]': 'fixedInViewport ? fixedBottomGap : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatSidenav extends MatDrawer {\n /** Whether the sidenav is fixed in the viewport. */\n @Input()\n get fixedInViewport(): boolean { return this._fixedInViewport; }\n set fixedInViewport(value) { this._fixedInViewport = coerceBooleanProperty(value); }\n private _fixedInViewport = false;\n\n /**\n * The gap between the top of the sidenav and the top of the viewport when the sidenav is in fixed\n * mode.\n */\n @Input()\n get fixedTopGap(): number { return this._fixedTopGap; }\n set fixedTopGap(value) { this._fixedTopGap = coerceNumberProperty(value); }\n private _fixedTopGap = 0;\n\n /**\n * The gap between the bottom of the sidenav and the bottom of the viewport when the sidenav is in\n * fixed mode.\n */\n @Input()\n get fixedBottomGap(): number { return this._fixedBottomGap; }\n set fixedBottomGap(value) { this._fixedBottomGap = coerceNumberProperty(value); }\n private _fixedBottomGap = 0;\n}\n\n\n@Component({\n moduleId: module.id,\n selector: 'mat-sidenav-container',\n exportAs: 'matSidenavContainer',\n templateUrl: 'sidenav-container.html',\n styleUrls: ['drawer.css'],\n host: {\n 'class': 'mat-drawer-container mat-sidenav-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatSidenavContainer extends MatDrawerContainer {\n @ContentChildren(MatSidenav) _drawers: QueryList<MatSidenav>;\n @ContentChild(MatSidenavContent, {static: false}) _content: MatSidenavContent;\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 {AnimationEvent} from '@angular/animations';\nimport {FocusMonitor, FocusOrigin, FocusTrap, FocusTrapFactory} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {Platform} from '@angular/cdk/platform';\nimport {CdkScrollable, ScrollDispatcher, ViewportRuler} from '@angular/cdk/scrolling';\nimport {DOCUMENT} from '@angular/common';\nimport {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DoCheck,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n HostListener,\n HostBinding,\n} from '@angular/core';\nimport {fromEvent, merge, Observable, Subject} from 'rxjs';\nimport {\n debounceTime,\n filter,\n map,\n startWith,\n take,\n takeUntil,\n distinctUntilChanged,\n} from 'rxjs/operators';\nimport {matDrawerAnimations} from './drawer-animations';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\n/**\n * Throws an exception when two MatDrawer are matching the same position.\n * @docs-private\n */\nexport function throwMatDuplicatedDrawerError(position: string) {\n throw Error(`A drawer was already declared for 'position=\"${position}\"'`);\n}\n\n\n/** Result of the toggle promise that indicates the state of the drawer. */\nexport type MatDrawerToggleResult = 'open' | 'close';\n\n/** Configures whether drawers should use auto sizing by default. */\nexport const MAT_DRAWER_DEFAULT_AUTOSIZE =\n new InjectionToken<boolean>('MAT_DRAWER_DEFAULT_AUTOSIZE', {\n providedIn: 'root',\n factory: MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY,\n });\n\n/** @docs-private */\nexport function MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY(): boolean {\n return false;\n}\n\n@Component({\n moduleId: module.id,\n selector: 'mat-drawer-content',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-drawer-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatDrawerContent extends CdkScrollable implements AfterContentInit {\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n @Inject(forwardRef(() => MatDrawerContainer)) public _container: MatDrawerContainer,\n elementRef: ElementRef<HTMLElement>,\n scrollDispatcher: ScrollDispatcher,\n ngZone: NgZone) {\n super(elementRef, scrollDispatcher, ngZone);\n }\n\n ngAfterContentInit() {\n this._container._contentMarginChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\n\n\n/**\n * This component corresponds to a drawer that can be opened on the drawer container.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-drawer',\n exportAs: 'matDrawer',\n templateUrl: 'drawer.html',\n animations: [matDrawerAnimations.transformDrawer],\n host: {\n 'class': 'mat-drawer',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n 'tabIndex': '-1',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestroy {\n private _focusTrap: FocusTrap;\n private _elementFocusedBeforeDrawerWasOpened: HTMLElement | null = null;\n\n /** Whether the drawer is initialized. Used for disabling the initial animation. */\n private _enableAnimations = false;\n\n /** The side that the drawer is attached to. */\n @Input()\n get position(): 'start' | 'end' { return this._position; }\n set position(value: 'start' | 'end') {\n // Make sure we have a valid value.\n value = value === 'end' ? 'end' : 'start';\n if (value != this._position) {\n this._position = value;\n this.onPositionChanged.emit();\n }\n }\n private _position: 'start' | 'end' = 'start';\n\n /** Mode of the drawer; one of 'over', 'push' or 'side'. */\n @Input()\n get mode(): 'over' | 'push' | 'side' { return this._mode; }\n set mode(value: 'over' | 'push' | 'side') {\n this._mode = value;\n this._modeChanged.next();\n }\n private _mode: 'over' | 'push' | 'side' = 'over';\n\n /** Whether the drawer can be closed with the escape key or by clicking on the backdrop. */\n @Input()\n get disableClose(): boolean { return this._disableClose; }\n set disableClose(value: boolean) { this._disableClose = coerceBooleanProperty(value); }\n private _disableClose: boolean = false;\n\n /** Whether the drawer should focus the first focusable element automatically when opened. */\n @Input()\n get autoFocus(): boolean { return this._autoFocus; }\n set autoFocus(value: boolean) { this._autoFocus = coerceBooleanProperty(value); }\n private _autoFocus: boolean = true;\n\n /** How the sidenav was opened (keypress, mouse click etc.) */\n private _openedVia: FocusOrigin | null;\n\n /** Emits whenever the drawer has started animating. */\n _animationStarted = new Subject<AnimationEvent>();\n\n /** Emits whenever the drawer is done animating. */\n _animationEnd = new Subject<AnimationEvent>();\n\n /** Current state of the sidenav animation. */\n // @HostBinding is used in the class as it is expected to be extended. Since @Component decorator\n // metadata is not inherited by child classes, instead the host binding data is defined in a way\n // that can be inherited.\n // tslint:disable:no-host-decorator-in-concrete\n @HostBinding('@transform')\n _animationState: 'open-instant' | 'open' | 'void' = 'void';\n\n /** Event emitted when the drawer open state is changed. */\n @Output() readonly openedChange: EventEmitter<boolean> =\n // Note this has to be async in order to avoid some issues with two-bindings (see #8872).\n new EventEmitter<boolean>(/* isAsync */true);\n\n /** Event emitted when the drawer has been opened. */\n @Output('opened')\n get _openedStream(): Observable<void> {\n return this.openedChange.pipe(filter(o => o), map(() => {}));\n }\n\n /** Event emitted when the drawer has started opening. */\n @Output()\n get openedStart(): Observable<void> {\n return this._animationStarted.pipe(\n filter(e => e.fromState !== e.toState && e.toState.indexOf('open') === 0),\n map(() => {})\n );\n }\n\n /** Event emitted when the drawer has been closed. */\n @Output('closed')\n get _closedStream(): Observable<void> {\n return this.openedChange.pipe(filter(o => !o), map(() => {}));\n }\n\n /** Event emitted when the drawer has started closing. */\n @Output()\n get closedStart(): Observable<void> {\n return this._animationStarted.pipe(\n filter(e => e.fromState !== e.toState && e.toState === 'void'),\n map(() => {})\n );\n }\n\n /** Emits when the component is destroyed. */\n private readonly _destroyed = new Subject<void>();\n\n /** Event emitted when the drawer's position changes. */\n // tslint:disable-next-line:no-output-on-prefix\n @Output('positionChanged') onPositionChanged: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * An observable that emits when the drawer mode changes. This is used by the drawer container to\n * to know when to when the mode changes so it can adapt the margins on the content.\n */\n readonly _modeChanged = new Subject();\n\n get _isFocusTrapEnabled(): boolean {\n // The focus trap is only enabled when the drawer is open in any mode other than side.\n return this.opened && this.mode !== 'side';\n }\n\n constructor(private _elementRef: ElementRef<HTMLElement>,\n private _focusTrapFactory: FocusTrapFactory,\n private _focusMonitor: FocusMonitor,\n private _platform: Platform,\n private _ngZone: NgZone,\n @Optional() @Inject(DOCUMENT) private _doc: any) {\n\n this.openedChange.subscribe((opened: boolean) => {\n if (opened) {\n if (this._doc) {\n this._elementFocusedBeforeDrawerWasOpened = this._doc.activeElement as HTMLElement;\n }\n\n if (this._isFocusTrapEnabled && this._focusTrap) {\n this._trapFocus();\n }\n } else {\n this._restoreFocus();\n }\n });\n\n /**\n * Listen to `keydown` events outside the zone so that change detection is not run every\n * time a key is pressed. Instead we re-enter the zone only if the `ESC` key is pressed\n * and we don't have close disabled.\n */\n this._ngZone.runOutsideAngular(() => {\n (fromEvent(this._elementRef.nativeElement, 'keydown') as Observable<KeyboardEvent>).pipe(\n filter(event => {\n return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n }),\n takeUntil(this._destroyed)\n ).subscribe(event => this._ngZone.run(() => {\n this.close();\n event.stopPropagation();\n event.preventDefault();\n }));\n });\n\n // We need a Subject with distinctUntilChanged, because the `done` event\n // fires twice on some browsers. See https://github.com/angular/angular/issues/24084\n this._animationEnd.pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n })).subscribe((event: AnimationEvent) => {\n const {fromState, toState} = event;\n\n if ((toState.indexOf('open') === 0 && fromState === 'void') ||\n (toState === 'void' && fromState.indexOf('open') === 0)) {\n this.openedChange.emit(this._opened);\n }\n });\n }\n\n /** Traps focus inside the drawer. */\n private _trapFocus() {\n if (!this.autoFocus) {\n return;\n }\n\n this._focusTrap.focusInitialElementWhenReady().then(hasMovedFocus => {\n // If there were no focusable elements, focus the sidenav itself so the keyboard navigation\n // still works. We need to check that `focus` is a function due to Universal.\n if (!hasMovedFocus && typeof this._elementRef.nativeElement.focus === 'function') {\n this._elementRef.nativeElement.focus();\n }\n });\n }\n\n /**\n * If focus is currently inside the drawer, restores it to where it was before the drawer\n * opened.\n */\n private _restoreFocus() {\n if (!this.autoFocus) {\n return;\n }\n\n const activeEl = this._doc && this._doc.activeElement;\n\n if (activeEl && this._elementRef.nativeElement.contains(activeEl)) {\n if (this._elementFocusedBeforeDrawerWasOpened instanceof HTMLElement) {\n this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened, this._openedVia);\n } else {\n this._elementRef.nativeElement.blur();\n }\n }\n\n this._elementFocusedBeforeDrawerWasOpened = null;\n this._openedVia = null;\n }\n\n ngAfterContentInit() {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n this._focusTrap.enabled = this._isFocusTrapEnabled;\n }\n\n ngAfterContentChecked() {\n // Enable the animations after the lifecycle hooks have run, in order to avoid animating\n // drawers that are open by default. When we're on the server, we shouldn't enable the\n // animations, because we don't want the drawer to animate the first time the user sees\n // the page.\n if (this._platform.isBrowser) {\n this._enableAnimations = true;\n }\n }\n\n ngOnDestroy() {\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n\n this._animationStarted.complete();\n this._animationEnd.complete();\n this._modeChanged.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /**\n * Whether the drawer is opened. We overload this because we trigger an event when it\n * starts or end.\n */\n @Input()\n get opened(): boolean { return this._opened; }\n set opened(value: boolean) { this.toggle(coerceBooleanProperty(value)); }\n private _opened: boolean = false;\n\n /**\n * Open the drawer.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n open(openedVia?: FocusOrigin): Promise<MatDrawerToggleResult> {\n return this.toggle(true, openedVia);\n }\n\n /** Close the drawer. */\n close(): Promise<MatDrawerToggleResult> {\n return this.toggle(false);\n }\n\n /**\n * Toggle this drawer.\n * @param isOpen Whether the drawer should be open.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n toggle(isOpen: boolean = !this.opened, openedVia: FocusOrigin = 'program'):\n Promise<MatDrawerToggleResult> {\n\n this._opened = isOpen;\n\n if (isOpen) {\n this._animationState = this._enableAnimations ? 'open' : 'open-instant';\n this._openedVia = openedVia;\n } else {\n this._animationState = 'void';\n this._restoreFocus();\n }\n\n if (this._focusTrap) {\n this._focusTrap.enabled = this._isFocusTrapEnabled;\n }\n\n return new Promise<MatDrawerToggleResult>(resolve => {\n this.openedChange.pipe(take(1)).subscribe(open => resolve(open ? 'open' : 'close'));\n });\n }\n\n get _width(): number {\n return this._elementRef.nativeElement ? (this._elementRef.nativeElement.offsetWidth || 0) : 0;\n }\n\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritte.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n @HostListener('@transform.start', ['$event'])\n _animationStartListener(event: AnimationEvent) {\n this._animationStarted.next(event);\n }\n\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritte.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n @HostListener('@transform.done', ['$event'])\n _animationDoneListener(event: AnimationEvent) {\n this._animationEnd.next(event);\n }\n}\n\n\n/**\n * `<mat-drawer-container>` component.\n *\n * This is the parent component to one or two `<mat-drawer>`s that validates the state internally\n * and coordinates the backdrop and content styling.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-drawer-container',\n exportAs: 'matDrawerContainer',\n templateUrl: 'drawer-container.html',\n styleUrls: ['drawer.css'],\n host: {\n 'class': 'mat-drawer-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatDrawerContainer implements AfterContentInit, DoCheck, OnDestroy {\n @ContentChildren(MatDrawer) _drawers: QueryList<MatDrawer>;\n @ContentChild(MatDrawerContent, {static: false}) _content: MatDrawerContent;\n @ViewChild(MatDrawerContent, {static: false}) _userContent: MatDrawerContent;\n\n /** The drawer child with the `start` position. */\n get start(): MatDrawer | null { return this._start; }\n\n /** The drawer child with the `end` position. */\n get end(): MatDrawer | null { return this._end; }\n\n /**\n * Whether to automatically resize the container whenever\n * the size of any of its drawers changes.\n *\n * **Use at your own risk!** Enabling this option can cause layout thrashing by measuring\n * the drawers on every change detection cycle. Can be configured globally via the\n * `MAT_DRAWER_DEFAULT_AUTOSIZE` token.\n */\n @Input()\n get autosize(): boolean { return this._autosize; }\n set autosize(value: boolean) { this._autosize = coerceBooleanProperty(value); }\n private _autosize: boolean;\n\n /**\n * Whether the drawer container should have a backdrop while one of the sidenavs is open.\n * If explicitly set to `true`, the backdrop will be enabled for drawers in the `side`\n * mode as well.\n */\n @Input()\n get hasBackdrop() {\n if (this._backdropOverride == null) {\n return !this._start || this._start.mode !== 'side' || !this._end || this._end.mode !== 'side';\n }\n\n return this._backdropOverride;\n }\n set hasBackdrop(value: any) {\n this._backdropOverride = value == null ? null : coerceBooleanProperty(value);\n }\n _backdropOverride: boolean | null;\n\n /** Event emitted when the drawer backdrop is clicked. */\n @Output() readonly backdropClick: EventEmitter<void> = new EventEmitter<void>();\n\n /** The drawer at the start/end position, independent of direction. */\n private _start: MatDrawer | null;\n private _end: MatDrawer | null;\n\n /**\n * The drawer at the left/right. When direction changes, these will change as well.\n * They're used as aliases for the above to set the left/right style properly.\n * In LTR, _left == _start and _right == _end.\n * In RTL, _left == _end and _right == _start.\n */\n private _left: MatDrawer | null;\n private _right: MatDrawer | null;\n\n /** Emits when the component is destroyed. */\n private readonly _destroyed = new Subject<void>();\n\n /** Emits on every ngDoCheck. Used for debouncing reflows. */\n private readonly _doCheckSubject = new Subject<void>();\n\n /**\n * Margins to be applied to the content. These are used to push / shrink the drawer content when a\n * drawer is open. We use margin rather than transform even for push mode because transform breaks\n * fixed position elements inside of the transformed element.\n */\n _contentMargins: {left: number|null, right: number|null} = {left: null, right: null};\n\n readonly _contentMarginChanges = new Subject<{left: number|null, right: number|null}>();\n\n /** Reference to the CdkScrollable instance that wraps the scrollable content. */\n get scrollable(): CdkScrollable {\n return this._userContent || this._content;\n }\n\n constructor(@Optional() private _dir: Directionality,\n private _element: ElementRef<HTMLElement>,\n private _ngZone: NgZone,\n private _changeDetectorRef: ChangeDetectorRef,\n viewportRuler: ViewportRuler,\n @Inject(MAT_DRAWER_DEFAULT_AUTOSIZE) defaultAutosize = false,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n\n // If a `Dir` directive exists up the tree, listen direction changes\n // and update the left/right properties to point to the proper start/end.\n if (_dir) {\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._validateDrawers();\n this.updateContentMargins();\n });\n }\n\n // Since the minimum width of the sidenav depends on the viewport width,\n // we need to recompute the margins if the viewport changes.\n viewportRuler.change()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this.updateContentMargins());\n\n this._autosize = defaultAutosize;\n }\n\n ngAfterContentInit() {\n this._drawers.changes.pipe(startWith(null)).subscribe(() => {\n this._validateDrawers();\n\n this._drawers.forEach((drawer: MatDrawer) => {\n this._watchDrawerToggle(drawer);\n this._watchDrawerPosition(drawer);\n this._watchDrawerMode(drawer);\n });\n\n if (!this._drawers.length ||\n this._isDrawerOpen(this._start) ||\n this._isDrawerOpen(this._end)) {\n this.updateContentMargins();\n }\n\n this._changeDetectorRef.markForCheck();\n });\n\n this._doCheckSubject.pipe(\n debounceTime(10), // Arbitrary debounce time, less than a frame at 60fps\n takeUntil(this._destroyed)\n ).subscribe(() => this.updateContentMargins());\n }\n\n ngOnDestroy() {\n this._contentMarginChanges.complete();\n this._doCheckSubject.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /** Calls `open` of both start and end drawers */\n open(): void {\n this._drawers.forEach(drawer => drawer.open());\n }\n\n /** Calls `close` of both start and end drawers */\n close(): void {\n this._drawers.forEach(drawer => drawer.close());\n }\n\n /**\n * Recalculates and updates the inline styles for the content. Note that this should be used\n * sparingly, because it causes a reflow.\n */\n updateContentMargins() {\n // 1. For drawers in `over` mode, they don't affect the content.\n // 2. For drawers in `side` mode they should shrink the content. We do this by adding to the\n // left margin (for left drawer) or right margin (for right the drawer).\n // 3. For drawers in `push` mode the should shift the content without resizing it. We do this by\n // adding to the left or right margin and simultaneously subtracting the same amount of\n // margin from the other side.\n let left = 0;\n let right = 0;\n\n if (this._left && this._left.opened) {\n if (this._left.mode == 'side') {\n left += this._left._width;\n } else if (this._left.mode == 'push') {\n const width = this._left._width;\n left += width;\n right -= width;\n }\n }\n\n if (this._right && this._right.opened) {\n if (this._right.mode == 'side') {\n right += this._right._width;\n } else if (this._right.mode == 'push') {\n const width = this._right._width;\n right += width;\n left -= width;\n }\n }\n\n // If either `right` or `left` is zero, don't set a style to the element. This\n // allows users to specify a custom size via CSS class in SSR scenarios where the\n // measured widths will always be zero. Note that we reset to `null` here, rather\n // than below, in order to ensure that the types in the `if` below are consistent.\n left = left || null!;\n right = right || null!;\n\n if (left !== this._contentMargins.left || right !== this._contentMargins.right) {\n this._contentMargins = {left, right};\n\n // Pull back into the NgZone since in some cases we could be outside. We need to be careful\n // to do it only when something changed, otherwise we can end up hitting the zone too often.\n this._ngZone.run(() => this._contentMarginChanges.next(this._contentMargins));\n }\n }\n\n ngDoCheck() {\n // If users opted into autosizing, do a check every change detection cycle.\n if (this._autosize && this._isPushed()) {\n // Run outside the NgZone, otherwise the debouncer will throw us into an infinite loop.\n this._ngZone.runOutsideAngular(() => this._doCheckSubject.next());\n }\n }\n\n /**\n * Subscribes to drawer events in order to set a class on the main container element when the\n * drawer is open and the backdrop is visible. This ensures any overflow on the container element\n * is properly hidden.\n */\n private _watchDrawerToggle(drawer: MatDrawer): void {\n drawer._animationStarted.pipe(\n filter((event: AnimationEvent) => event.fromState !== event.toState),\n takeUntil(this._drawers.changes),\n )\n .subscribe((event: AnimationEvent) => {\n // Set the transition class on the container so that the animations occur. This should not\n // be set initially because animations should only be triggered via a change in state.\n if (event.toState !== 'open-instant' && this._animationMode !== 'NoopAnimations') {\n this._element.nativeElement.classList.add('mat-drawer-transition');\n }\n\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n\n if (drawer.mode !== 'side') {\n drawer.openedChange.pipe(takeUntil(this._drawers.changes)).subscribe(() =>\n this._setContainerClass(drawer.opened));\n }\n }\n\n /**\n * Subscribes to drawer onPositionChanged event in order to\n * re-validate drawers when the position changes.\n */\n private _watchDrawerPosition(drawer: MatDrawer): void {\n if (!drawer) {\n return;\n }\n // NOTE: We need to wait for the microtask queue to be empty before validating,\n // since both drawers may be swapping positions at the same time.\n drawer.onPositionChanged.pipe(takeUntil(this._drawers.changes)).subscribe(() => {\n this._ngZone.onMicrotaskEmpty.asObservable().pipe(take(1)).subscribe(() => {\n this._validateDrawers();\n });\n });\n }\n\n /** Subscribes to changes in drawer mode so we can run change detection. */\n private _watchDrawerMode(drawer: MatDrawer): void {\n if (drawer) {\n drawer._modeChanged.pipe(takeUntil(merge(this._drawers.changes, this._destroyed)))\n .subscribe(() => {\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n\n /** Toggles the 'mat-drawer-opened' class on the main 'mat-drawer-container' element. */\n private _setContainerClass(isAdd: boolean): void {\n if (isAdd) {\n this._element.nativeElement.classList.add('mat-drawer-opened');\n } else {\n this._element.nativeElement.classList.remove('mat-drawer-opened');\n }\n }\n\n /** Validate the state of the drawer children components. */\n private _validateDrawers() {\n this._start = this._end = null;\n\n // Ensure that we have at most one start and one end drawer.\n this._drawers.forEach(drawer => {\n if (drawer.position == 'end') {\n if (this._end != null) {\n throwMatDuplicatedDrawerError('end');\n }\n this._end = drawer;\n } else {\n if (this._start != null) {\n throwMatDuplicatedDrawerError('start');\n }\n this._start = drawer;\n }\n });\n\n this._right = this._left = null;\n\n // Detect if we're LTR or RTL.\n if (this._dir && this._dir.value === 'rtl') {\n this._left = this._end;\n this._right = this._start;\n } else {\n this._left = this._start;\n this._right = this._end;\n }\n }\n\n /** Whether the container is being pushed to the side by one of the drawers. */\n private _isPushed() {\n return (this._isDrawerOpen(this._start) && this._start.mode != 'over') ||\n (this._isDrawerOpen(this._end) && this._end.mode != 'over');\n }\n\n _onBackdropClicked() {\n this.backdropClick.emit();\n this._closeModalDrawer();\n }\n\n _closeModalDrawer() {\n // Close all open drawers where closing is not disabled and the mode is not `side`.\n [this._start, this._end]\n .filter(drawer => drawer && !drawer.disableClose && this._canHaveBackdrop(drawer))\n .forEach(drawer => drawer!.close());\n }\n\n _isShowingBackdrop(): boolean {\n return (this._isDrawerOpen(this._start) && this._canHaveBackdrop(this._start)) ||\n (this._isDrawerOpen(this._end) && this._canHaveBackdrop(this._end));\n }\n\n private _canHaveBackdrop(drawer: MatDrawer): boolean {\n return drawer.mode !== 'side' || !!this._backdropOverride;\n }\n\n private _isDrawerOpen(drawer: MatDrawer | null): drawer is MatDrawer {\n return drawer != null && drawer.opened;\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 */\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the Material drawers.\n * @docs-private\n */\nexport const matDrawerAnimations: {\n readonly transformDrawer: AnimationTriggerMetadata;\n} = {\n /** Animation that slides a drawer in and out. */\n transformDrawer: trigger('transform', [\n // We remove the `transform` here completely, rather than setting it to zero, because:\n // 1. Having a transform can cause elements with ripples or an animated\n // transform to shift around in Chrome with an RTL layout (see #10023).\n // 2. 3d transforms causes text to appear blurry on IE and Edge.\n state('open, open-instant', style({\n 'transform': 'none',\n 'visibility': 'visible',\n })),\n state('void', style({\n // Avoids the shadow showing up when closed in SSR.\n 'box-shadow': 'none',\n 'visibility': 'hidden',\n })),\n transition('void => open-instant', animate('0ms')),\n transition('void <=> open, open-instant => void',\n animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)'))\n ])\n};\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n"],"names":["MatCommonModule","PlatformModule","ScrollingModule","CommonModule","NgModule","ContentChild","ContentChildren","ViewEncapsulation","ChangeDetectionStrategy","Component","Input","tslib_1.__extends","NgZone","ScrollDispatcher","ViewChild","Optional","Inject","ANIMATION_MODULE_TYPE","ElementRef","Directionality","take","takeUntil","debounceTime","Subject","EventEmitter","HostListener","Output","HostBinding","DOCUMENT","distinctUntilChanged","InjectionToken","transition","animate","state","style","trigger"],"mappings":"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"}