{"ast":null,"code":"import * as i1$1 from '@angular/cdk/overlay';\nimport { OverlayModule, OverlayConfig } from '@angular/cdk/overlay';\nimport * as i3$1 from '@angular/cdk/portal';\nimport { BasePortalOutlet, CdkPortalOutlet, PortalModule, ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport * as i3 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, ViewChild, NgModule, Injector, TemplateRef, Injectable, Optional, SkipSelf } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport * as i2 from '@angular/material/button';\nimport { MatButtonModule } from '@angular/material/button';\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport * as i1 from '@angular/cdk/platform';\nimport * as i3$2 from '@angular/cdk/layout';\nimport { Breakpoints } from '@angular/cdk/layout';\nimport * as i2$1 from '@angular/cdk/a11y';\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\n/** Injection token that can be used to access the data that was passed in to a snack bar. */\n\nfunction SimpleSnackBar_div_2_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r2 = i0.ɵɵgetCurrentView();\n\n    i0.ɵɵelementStart(0, \"div\", 1);\n    i0.ɵɵelementStart(1, \"button\", 2);\n    i0.ɵɵlistener(\"click\", function SimpleSnackBar_div_2_Template_button_click_1_listener() {\n      i0.ɵɵrestoreView(_r2);\n      const ctx_r1 = i0.ɵɵnextContext();\n      return ctx_r1.action();\n    });\n    i0.ɵɵtext(2);\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementEnd();\n  }\n\n  if (rf & 2) {\n    const ctx_r0 = i0.ɵɵnextContext();\n    i0.ɵɵadvance(2);\n    i0.ɵɵtextInterpolate(ctx_r0.data.action);\n  }\n}\n\nfunction MatSnackBarContainer_ng_template_1_Template(rf, ctx) {}\n\nconst MAT_SNACK_BAR_DATA = new InjectionToken('MatSnackBarData');\n/**\n * Configuration used when opening a snack-bar.\n */\n\nclass MatSnackBarConfig {\n  constructor() {\n    /** The politeness level for the MatAriaLiveAnnouncer announcement. */\n    this.politeness = 'assertive';\n    /**\n     * Message to be announced by the LiveAnnouncer. When opening a snackbar without a custom\n     * component or template, the announcement message will default to the specified message.\n     */\n\n    this.announcementMessage = '';\n    /** The length of time in milliseconds to wait before automatically dismissing the snack bar. */\n\n    this.duration = 0;\n    /** Data being injected into the child component. */\n\n    this.data = null;\n    /** The horizontal position to place the snack bar. */\n\n    this.horizontalPosition = 'center';\n    /** The vertical position to place the snack bar. */\n\n    this.verticalPosition = 'bottom';\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\n/** Maximum amount of milliseconds that can be passed into setTimeout. */\n\n\nconst MAX_TIMEOUT = Math.pow(2, 31) - 1;\n/**\n * Reference to a snack bar dispatched from the snack bar service.\n */\n\nclass MatSnackBarRef {\n  constructor(containerInstance, _overlayRef) {\n    this._overlayRef = _overlayRef;\n    /** Subject for notifying the user that the snack bar has been dismissed. */\n\n    this._afterDismissed = new Subject();\n    /** Subject for notifying the user that the snack bar has opened and appeared. */\n\n    this._afterOpened = new Subject();\n    /** Subject for notifying the user that the snack bar action was called. */\n\n    this._onAction = new Subject();\n    /** Whether the snack bar was dismissed using the action button. */\n\n    this._dismissedByAction = false;\n    this.containerInstance = containerInstance; // Dismiss snackbar on action.\n\n    this.onAction().subscribe(() => this.dismiss());\n\n    containerInstance._onExit.subscribe(() => this._finishDismiss());\n  }\n  /** Dismisses the snack bar. */\n\n\n  dismiss() {\n    if (!this._afterDismissed.closed) {\n      this.containerInstance.exit();\n    }\n\n    clearTimeout(this._durationTimeoutId);\n  }\n  /** Marks the snackbar action clicked. */\n\n\n  dismissWithAction() {\n    if (!this._onAction.closed) {\n      this._dismissedByAction = true;\n\n      this._onAction.next();\n\n      this._onAction.complete();\n    }\n\n    clearTimeout(this._durationTimeoutId);\n  }\n  /**\n   * Marks the snackbar action clicked.\n   * @deprecated Use `dismissWithAction` instead.\n   * @breaking-change 8.0.0\n   */\n\n\n  closeWithAction() {\n    this.dismissWithAction();\n  }\n  /** Dismisses the snack bar after some duration */\n\n\n  _dismissAfter(duration) {\n    // Note that we need to cap the duration to the maximum value for setTimeout, because\n    // it'll revert to 1 if somebody passes in something greater (e.g. `Infinity`). See #17234.\n    this._durationTimeoutId = setTimeout(() => this.dismiss(), Math.min(duration, MAX_TIMEOUT));\n  }\n  /** Marks the snackbar as opened */\n\n\n  _open() {\n    if (!this._afterOpened.closed) {\n      this._afterOpened.next();\n\n      this._afterOpened.complete();\n    }\n  }\n  /** Cleans up the DOM after closing. */\n\n\n  _finishDismiss() {\n    this._overlayRef.dispose();\n\n    if (!this._onAction.closed) {\n      this._onAction.complete();\n    }\n\n    this._afterDismissed.next({\n      dismissedByAction: this._dismissedByAction\n    });\n\n    this._afterDismissed.complete();\n\n    this._dismissedByAction = false;\n  }\n  /** Gets an observable that is notified when the snack bar is finished closing. */\n\n\n  afterDismissed() {\n    return this._afterDismissed;\n  }\n  /** Gets an observable that is notified when the snack bar has opened and appeared. */\n\n\n  afterOpened() {\n    return this.containerInstance._onEnter;\n  }\n  /** Gets an observable that is notified when the snack bar action is called. */\n\n\n  onAction() {\n    return this._onAction;\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\n/**\n * A component used to open as the default snack bar, matching material spec.\n * This should only be used internally by the snack bar service.\n */\n\n\nclass SimpleSnackBar {\n  constructor(snackBarRef, data) {\n    this.snackBarRef = snackBarRef;\n    this.data = data;\n  }\n  /** Performs the action on the snack bar. */\n\n\n  action() {\n    this.snackBarRef.dismissWithAction();\n  }\n  /** If the action button should be shown. */\n\n\n  get hasAction() {\n    return !!this.data.action;\n  }\n\n}\n\nSimpleSnackBar.ɵfac = function SimpleSnackBar_Factory(t) {\n  return new (t || SimpleSnackBar)(i0.ɵɵdirectiveInject(MatSnackBarRef), i0.ɵɵdirectiveInject(MAT_SNACK_BAR_DATA));\n};\n\nSimpleSnackBar.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n  type: SimpleSnackBar,\n  selectors: [[\"simple-snack-bar\"]],\n  hostAttrs: [1, \"mat-simple-snackbar\"],\n  decls: 3,\n  vars: 2,\n  consts: [[\"class\", \"mat-simple-snackbar-action\", 4, \"ngIf\"], [1, \"mat-simple-snackbar-action\"], [\"mat-button\", \"\", 3, \"click\"]],\n  template: function SimpleSnackBar_Template(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵelementStart(0, \"span\");\n      i0.ɵɵtext(1);\n      i0.ɵɵelementEnd();\n      i0.ɵɵtemplate(2, SimpleSnackBar_div_2_Template, 3, 1, \"div\", 0);\n    }\n\n    if (rf & 2) {\n      i0.ɵɵadvance(1);\n      i0.ɵɵtextInterpolate(ctx.data.message);\n      i0.ɵɵadvance(1);\n      i0.ɵɵproperty(\"ngIf\", ctx.hasAction);\n    }\n  },\n  directives: [i3.NgIf, i2.MatButton],\n  styles: [\".mat-simple-snackbar{display:flex;justify-content:space-between;align-items:center;line-height:20px;opacity:1}.mat-simple-snackbar-action{flex-shrink:0;margin:-8px -8px -8px 8px}.mat-simple-snackbar-action button{max-height:36px;min-width:0}[dir=rtl] .mat-simple-snackbar-action{margin-left:-8px;margin-right:8px}\\n\"],\n  encapsulation: 2,\n  changeDetection: 0\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(SimpleSnackBar, [{\n    type: Component,\n    args: [{\n      selector: 'simple-snack-bar',\n      encapsulation: ViewEncapsulation.None,\n      changeDetection: ChangeDetectionStrategy.OnPush,\n      host: {\n        'class': 'mat-simple-snackbar'\n      },\n      template: \"<span>{{data.message}}</span>\\n<div class=\\\"mat-simple-snackbar-action\\\"  *ngIf=\\\"hasAction\\\">\\n  <button mat-button (click)=\\\"action()\\\">{{data.action}}</button>\\n</div>\\n\",\n      styles: [\".mat-simple-snackbar{display:flex;justify-content:space-between;align-items:center;line-height:20px;opacity:1}.mat-simple-snackbar-action{flex-shrink:0;margin:-8px -8px -8px 8px}.mat-simple-snackbar-action button{max-height:36px;min-width:0}[dir=rtl] .mat-simple-snackbar-action{margin-left:-8px;margin-right:8px}\\n\"]\n    }]\n  }], function () {\n    return [{\n      type: MatSnackBarRef\n    }, {\n      type: undefined,\n      decorators: [{\n        type: Inject,\n        args: [MAT_SNACK_BAR_DATA]\n      }]\n    }];\n  }, null);\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\n/**\n * Animations used by the Material snack bar.\n * @docs-private\n */\n\n\nconst matSnackBarAnimations = {\n  /** Animation that shows and hides a snack bar. */\n  snackBarState: trigger('state', [state('void, hidden', style({\n    transform: 'scale(0.8)',\n    opacity: 0\n  })), state('visible', style({\n    transform: 'scale(1)',\n    opacity: 1\n  })), transition('* => visible', animate('150ms cubic-bezier(0, 0, 0.2, 1)')), transition('* => void, * => hidden', animate('75ms cubic-bezier(0.4, 0.0, 1, 1)', style({\n    opacity: 0\n  })))])\n};\n/**\n * Internal component that wraps user-provided snack bar content.\n * @docs-private\n */\n\nclass MatSnackBarContainer extends BasePortalOutlet {\n  constructor(_ngZone, _elementRef, _changeDetectorRef, _platform,\n  /** The snack bar configuration. */\n  snackBarConfig) {\n    super();\n    this._ngZone = _ngZone;\n    this._elementRef = _elementRef;\n    this._changeDetectorRef = _changeDetectorRef;\n    this._platform = _platform;\n    this.snackBarConfig = snackBarConfig;\n    /** The number of milliseconds to wait before announcing the snack bar's content. */\n\n    this._announceDelay = 150;\n    /** Whether the component has been destroyed. */\n\n    this._destroyed = false;\n    /** Subject for notifying that the snack bar has announced to screen readers. */\n\n    this._onAnnounce = new Subject();\n    /** Subject for notifying that the snack bar has exited from view. */\n\n    this._onExit = new Subject();\n    /** Subject for notifying that the snack bar has finished entering the view. */\n\n    this._onEnter = new Subject();\n    /** The state of the snack bar animations. */\n\n    this._animationState = 'void';\n    /**\n     * Attaches a DOM portal to the snack bar container.\n     * @deprecated To be turned into a method.\n     * @breaking-change 10.0.0\n     */\n\n    this.attachDomPortal = portal => {\n      this._assertNotAttached();\n\n      this._applySnackBarClasses();\n\n      return this._portalOutlet.attachDomPortal(portal);\n    }; // Use aria-live rather than a live role like 'alert' or 'status'\n    // because NVDA and JAWS have show inconsistent behavior with live roles.\n\n\n    if (snackBarConfig.politeness === 'assertive' && !snackBarConfig.announcementMessage) {\n      this._live = 'assertive';\n    } else if (snackBarConfig.politeness === 'off') {\n      this._live = 'off';\n    } else {\n      this._live = 'polite';\n    } // Only set role for Firefox. Set role based on aria-live because setting role=\"alert\" implies\n    // aria-live=\"assertive\" which may cause issues if aria-live is set to \"polite\" above.\n\n\n    if (this._platform.FIREFOX) {\n      if (this._live === 'polite') {\n        this._role = 'status';\n      }\n\n      if (this._live === 'assertive') {\n        this._role = 'alert';\n      }\n    }\n  }\n  /** Attach a component portal as content to this snack bar container. */\n\n\n  attachComponentPortal(portal) {\n    this._assertNotAttached();\n\n    this._applySnackBarClasses();\n\n    return this._portalOutlet.attachComponentPortal(portal);\n  }\n  /** Attach a template portal as content to this snack bar container. */\n\n\n  attachTemplatePortal(portal) {\n    this._assertNotAttached();\n\n    this._applySnackBarClasses();\n\n    return this._portalOutlet.attachTemplatePortal(portal);\n  }\n  /** Handle end of animations, updating the state of the snackbar. */\n\n\n  onAnimationEnd(event) {\n    const {\n      fromState,\n      toState\n    } = event;\n\n    if (toState === 'void' && fromState !== 'void' || toState === 'hidden') {\n      this._completeExit();\n    }\n\n    if (toState === 'visible') {\n      // Note: we shouldn't use `this` inside the zone callback,\n      // because it can cause a memory leak.\n      const onEnter = this._onEnter;\n\n      this._ngZone.run(() => {\n        onEnter.next();\n        onEnter.complete();\n      });\n    }\n  }\n  /** Begin animation of snack bar entrance into view. */\n\n\n  enter() {\n    if (!this._destroyed) {\n      this._animationState = 'visible';\n\n      this._changeDetectorRef.detectChanges();\n\n      this._screenReaderAnnounce();\n    }\n  }\n  /** Begin animation of the snack bar exiting from view. */\n\n\n  exit() {\n    // Note: this one transitions to `hidden`, rather than `void`, in order to handle the case\n    // where multiple snack bars are opened in quick succession (e.g. two consecutive calls to\n    // `MatSnackBar.open`).\n    this._animationState = 'hidden'; // Mark this element with an 'exit' attribute to indicate that the snackbar has\n    // been dismissed and will soon be removed from the DOM. This is used by the snackbar\n    // test harness.\n\n    this._elementRef.nativeElement.setAttribute('mat-exit', ''); // If the snack bar hasn't been announced by the time it exits it wouldn't have been open\n    // long enough to visually read it either, so clear the timeout for announcing.\n\n\n    clearTimeout(this._announceTimeoutId);\n    return this._onExit;\n  }\n  /** Makes sure the exit callbacks have been invoked when the element is destroyed. */\n\n\n  ngOnDestroy() {\n    this._destroyed = true;\n\n    this._completeExit();\n  }\n  /**\n   * Waits for the zone to settle before removing the element. Helps prevent\n   * errors where we end up removing an element which is in the middle of an animation.\n   */\n\n\n  _completeExit() {\n    this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n      this._onExit.next();\n\n      this._onExit.complete();\n    });\n  }\n  /** Applies the various positioning and user-configured CSS classes to the snack bar. */\n\n\n  _applySnackBarClasses() {\n    const element = this._elementRef.nativeElement;\n    const panelClasses = this.snackBarConfig.panelClass;\n\n    if (panelClasses) {\n      if (Array.isArray(panelClasses)) {\n        // Note that we can't use a spread here, because IE doesn't support multiple arguments.\n        panelClasses.forEach(cssClass => element.classList.add(cssClass));\n      } else {\n        element.classList.add(panelClasses);\n      }\n    }\n\n    if (this.snackBarConfig.horizontalPosition === 'center') {\n      element.classList.add('mat-snack-bar-center');\n    }\n\n    if (this.snackBarConfig.verticalPosition === 'top') {\n      element.classList.add('mat-snack-bar-top');\n    }\n  }\n  /** Asserts that no content is already attached to the container. */\n\n\n  _assertNotAttached() {\n    if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error('Attempting to attach snack bar content after content is already attached');\n    }\n  }\n  /**\n   * Starts a timeout to move the snack bar content to the live region so screen readers will\n   * announce it.\n   */\n\n\n  _screenReaderAnnounce() {\n    if (!this._announceTimeoutId) {\n      this._ngZone.runOutsideAngular(() => {\n        this._announceTimeoutId = setTimeout(() => {\n          const inertElement = this._elementRef.nativeElement.querySelector('[aria-hidden]');\n\n          const liveElement = this._elementRef.nativeElement.querySelector('[aria-live]');\n\n          if (inertElement && liveElement) {\n            // If an element in the snack bar content is focused before being moved\n            // track it and restore focus after moving to the live region.\n            let focusedElement = null;\n\n            if (this._platform.isBrowser && document.activeElement instanceof HTMLElement && inertElement.contains(document.activeElement)) {\n              focusedElement = document.activeElement;\n            }\n\n            inertElement.removeAttribute('aria-hidden');\n            liveElement.appendChild(inertElement);\n            focusedElement === null || focusedElement === void 0 ? void 0 : focusedElement.focus();\n\n            this._onAnnounce.next();\n\n            this._onAnnounce.complete();\n          }\n        }, this._announceDelay);\n      });\n    }\n  }\n\n}\n\nMatSnackBarContainer.ɵfac = function MatSnackBarContainer_Factory(t) {\n  return new (t || MatSnackBarContainer)(i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.Platform), i0.ɵɵdirectiveInject(MatSnackBarConfig));\n};\n\nMatSnackBarContainer.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n  type: MatSnackBarContainer,\n  selectors: [[\"snack-bar-container\"]],\n  viewQuery: function MatSnackBarContainer_Query(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵviewQuery(CdkPortalOutlet, 7);\n    }\n\n    if (rf & 2) {\n      let _t;\n\n      i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._portalOutlet = _t.first);\n    }\n  },\n  hostAttrs: [1, \"mat-snack-bar-container\"],\n  hostVars: 1,\n  hostBindings: function MatSnackBarContainer_HostBindings(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵsyntheticHostListener(\"@state.done\", function MatSnackBarContainer_animation_state_done_HostBindingHandler($event) {\n        return ctx.onAnimationEnd($event);\n      });\n    }\n\n    if (rf & 2) {\n      i0.ɵɵsyntheticHostProperty(\"@state\", ctx._animationState);\n    }\n  },\n  features: [i0.ɵɵInheritDefinitionFeature],\n  decls: 3,\n  vars: 2,\n  consts: [[\"aria-hidden\", \"true\"], [\"cdkPortalOutlet\", \"\"]],\n  template: function MatSnackBarContainer_Template(rf, ctx) {\n    if (rf & 1) {\n      i0.ɵɵelementStart(0, \"div\", 0);\n      i0.ɵɵtemplate(1, MatSnackBarContainer_ng_template_1_Template, 0, 0, \"ng-template\", 1);\n      i0.ɵɵelementEnd();\n      i0.ɵɵelement(2, \"div\");\n    }\n\n    if (rf & 2) {\n      i0.ɵɵadvance(2);\n      i0.ɵɵattribute(\"aria-live\", ctx._live)(\"role\", ctx._role);\n    }\n  },\n  directives: [i3$1.CdkPortalOutlet],\n  styles: [\".mat-snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:24px;max-width:33vw;min-width:344px;padding:14px 16px;min-height:48px;transform-origin:center}.cdk-high-contrast-active .mat-snack-bar-container{border:solid 1px}.mat-snack-bar-handset{width:100%}.mat-snack-bar-handset .mat-snack-bar-container{margin:8px;max-width:100%;min-width:0;width:100%}\\n\"],\n  encapsulation: 2,\n  data: {\n    animation: [matSnackBarAnimations.snackBarState]\n  }\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatSnackBarContainer, [{\n    type: Component,\n    args: [{\n      selector: 'snack-bar-container',\n      changeDetection: ChangeDetectionStrategy.Default,\n      encapsulation: ViewEncapsulation.None,\n      animations: [matSnackBarAnimations.snackBarState],\n      host: {\n        'class': 'mat-snack-bar-container',\n        '[@state]': '_animationState',\n        '(@state.done)': 'onAnimationEnd($event)'\n      },\n      template: \"<!-- Initially holds the snack bar content, will be empty after announcing to screen readers. -->\\n<div aria-hidden=\\\"true\\\">\\n  <ng-template cdkPortalOutlet></ng-template>\\n</div>\\n\\n<!-- Will receive the snack bar content from the non-live div, move will happen a short delay after opening -->\\n<div [attr.aria-live]=\\\"_live\\\" [attr.role]=\\\"_role\\\"></div>\\n\",\n      styles: [\".mat-snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:24px;max-width:33vw;min-width:344px;padding:14px 16px;min-height:48px;transform-origin:center}.cdk-high-contrast-active .mat-snack-bar-container{border:solid 1px}.mat-snack-bar-handset{width:100%}.mat-snack-bar-handset .mat-snack-bar-container{margin:8px;max-width:100%;min-width:0;width:100%}\\n\"]\n    }]\n  }], function () {\n    return [{\n      type: i0.NgZone\n    }, {\n      type: i0.ElementRef\n    }, {\n      type: i0.ChangeDetectorRef\n    }, {\n      type: i1.Platform\n    }, {\n      type: MatSnackBarConfig\n    }];\n  }, {\n    _portalOutlet: [{\n      type: ViewChild,\n      args: [CdkPortalOutlet, {\n        static: true\n      }]\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\n\nclass MatSnackBarModule {}\n\nMatSnackBarModule.ɵfac = function MatSnackBarModule_Factory(t) {\n  return new (t || MatSnackBarModule)();\n};\n\nMatSnackBarModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n  type: MatSnackBarModule\n});\nMatSnackBarModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n  imports: [[OverlayModule, PortalModule, CommonModule, MatButtonModule, MatCommonModule], MatCommonModule]\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatSnackBarModule, [{\n    type: NgModule,\n    args: [{\n      imports: [OverlayModule, PortalModule, CommonModule, MatButtonModule, MatCommonModule],\n      exports: [MatSnackBarContainer, MatCommonModule],\n      declarations: [MatSnackBarContainer, SimpleSnackBar]\n    }]\n  }], null, null);\n})();\n/** Injection token that can be used to specify default snack bar. */\n\n\nconst MAT_SNACK_BAR_DEFAULT_OPTIONS = new InjectionToken('mat-snack-bar-default-options', {\n  providedIn: 'root',\n  factory: MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY\n});\n/** @docs-private */\n\nfunction MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY() {\n  return new MatSnackBarConfig();\n}\n/**\n * Service to dispatch Material Design snack bar messages.\n */\n\n\nclass MatSnackBar {\n  constructor(_overlay, _live, _injector, _breakpointObserver, _parentSnackBar, _defaultConfig) {\n    this._overlay = _overlay;\n    this._live = _live;\n    this._injector = _injector;\n    this._breakpointObserver = _breakpointObserver;\n    this._parentSnackBar = _parentSnackBar;\n    this._defaultConfig = _defaultConfig;\n    /**\n     * Reference to the current snack bar in the view *at this level* (in the Angular injector tree).\n     * If there is a parent snack-bar service, all operations should delegate to that parent\n     * via `_openedSnackBarRef`.\n     */\n\n    this._snackBarRefAtThisLevel = null;\n    /** The component that should be rendered as the snack bar's simple component. */\n\n    this.simpleSnackBarComponent = SimpleSnackBar;\n    /** The container component that attaches the provided template or component. */\n\n    this.snackBarContainerComponent = MatSnackBarContainer;\n    /** The CSS class to apply for handset mode. */\n\n    this.handsetCssClass = 'mat-snack-bar-handset';\n  }\n  /** Reference to the currently opened snackbar at *any* level. */\n\n\n  get _openedSnackBarRef() {\n    const parent = this._parentSnackBar;\n    return parent ? parent._openedSnackBarRef : this._snackBarRefAtThisLevel;\n  }\n\n  set _openedSnackBarRef(value) {\n    if (this._parentSnackBar) {\n      this._parentSnackBar._openedSnackBarRef = value;\n    } else {\n      this._snackBarRefAtThisLevel = value;\n    }\n  }\n  /**\n   * Creates and dispatches a snack bar with a custom component for the content, removing any\n   * currently opened snack bars.\n   *\n   * @param component Component to be instantiated.\n   * @param config Extra configuration for the snack bar.\n   */\n\n\n  openFromComponent(component, config) {\n    return this._attach(component, config);\n  }\n  /**\n   * Creates and dispatches a snack bar with a custom template for the content, removing any\n   * currently opened snack bars.\n   *\n   * @param template Template to be instantiated.\n   * @param config Extra configuration for the snack bar.\n   */\n\n\n  openFromTemplate(template, config) {\n    return this._attach(template, config);\n  }\n  /**\n   * Opens a snackbar with a message and an optional action.\n   * @param message The message to show in the snackbar.\n   * @param action The label for the snackbar action.\n   * @param config Additional configuration options for the snackbar.\n   */\n\n\n  open(message, action = '', config) {\n    const _config = Object.assign(Object.assign({}, this._defaultConfig), config); // Since the user doesn't have access to the component, we can\n    // override the data to pass in our own message and action.\n\n\n    _config.data = {\n      message,\n      action\n    }; // Since the snack bar has `role=\"alert\"`, we don't\n    // want to announce the same message twice.\n\n    if (_config.announcementMessage === message) {\n      _config.announcementMessage = undefined;\n    }\n\n    return this.openFromComponent(this.simpleSnackBarComponent, _config);\n  }\n  /**\n   * Dismisses the currently-visible snack bar.\n   */\n\n\n  dismiss() {\n    if (this._openedSnackBarRef) {\n      this._openedSnackBarRef.dismiss();\n    }\n  }\n\n  ngOnDestroy() {\n    // Only dismiss the snack bar at the current level on destroy.\n    if (this._snackBarRefAtThisLevel) {\n      this._snackBarRefAtThisLevel.dismiss();\n    }\n  }\n  /**\n   * Attaches the snack bar container component to the overlay.\n   */\n\n\n  _attachSnackBarContainer(overlayRef, config) {\n    const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n    const injector = Injector.create({\n      parent: userInjector || this._injector,\n      providers: [{\n        provide: MatSnackBarConfig,\n        useValue: config\n      }]\n    });\n    const containerPortal = new ComponentPortal(this.snackBarContainerComponent, config.viewContainerRef, injector);\n    const containerRef = overlayRef.attach(containerPortal);\n    containerRef.instance.snackBarConfig = config;\n    return containerRef.instance;\n  }\n  /**\n   * Places a new component or a template as the content of the snack bar container.\n   */\n\n\n  _attach(content, userConfig) {\n    const config = Object.assign(Object.assign(Object.assign({}, new MatSnackBarConfig()), this._defaultConfig), userConfig);\n\n    const overlayRef = this._createOverlay(config);\n\n    const container = this._attachSnackBarContainer(overlayRef, config);\n\n    const snackBarRef = new MatSnackBarRef(container, overlayRef);\n\n    if (content instanceof TemplateRef) {\n      const portal = new TemplatePortal(content, null, {\n        $implicit: config.data,\n        snackBarRef\n      });\n      snackBarRef.instance = container.attachTemplatePortal(portal);\n    } else {\n      const injector = this._createInjector(config, snackBarRef);\n\n      const portal = new ComponentPortal(content, undefined, injector);\n      const contentRef = container.attachComponentPortal(portal); // We can't pass this via the injector, because the injector is created earlier.\n\n      snackBarRef.instance = contentRef.instance;\n    } // Subscribe to the breakpoint observer and attach the mat-snack-bar-handset class as\n    // appropriate. This class is applied to the overlay element because the overlay must expand to\n    // fill the width of the screen for full width snackbars.\n\n\n    this._breakpointObserver.observe(Breakpoints.HandsetPortrait).pipe(takeUntil(overlayRef.detachments())).subscribe(state => {\n      overlayRef.overlayElement.classList.toggle(this.handsetCssClass, state.matches);\n    });\n\n    if (config.announcementMessage) {\n      // Wait until the snack bar contents have been announced then deliver this message.\n      container._onAnnounce.subscribe(() => {\n        this._live.announce(config.announcementMessage, config.politeness);\n      });\n    }\n\n    this._animateSnackBar(snackBarRef, config);\n\n    this._openedSnackBarRef = snackBarRef;\n    return this._openedSnackBarRef;\n  }\n  /** Animates the old snack bar out and the new one in. */\n\n\n  _animateSnackBar(snackBarRef, config) {\n    // When the snackbar is dismissed, clear the reference to it.\n    snackBarRef.afterDismissed().subscribe(() => {\n      // Clear the snackbar ref if it hasn't already been replaced by a newer snackbar.\n      if (this._openedSnackBarRef == snackBarRef) {\n        this._openedSnackBarRef = null;\n      }\n\n      if (config.announcementMessage) {\n        this._live.clear();\n      }\n    });\n\n    if (this._openedSnackBarRef) {\n      // If a snack bar is already in view, dismiss it and enter the\n      // new snack bar after exit animation is complete.\n      this._openedSnackBarRef.afterDismissed().subscribe(() => {\n        snackBarRef.containerInstance.enter();\n      });\n\n      this._openedSnackBarRef.dismiss();\n    } else {\n      // If no snack bar is in view, enter the new snack bar.\n      snackBarRef.containerInstance.enter();\n    } // If a dismiss timeout is provided, set up dismiss based on after the snackbar is opened.\n\n\n    if (config.duration && config.duration > 0) {\n      snackBarRef.afterOpened().subscribe(() => snackBarRef._dismissAfter(config.duration));\n    }\n  }\n  /**\n   * Creates a new overlay and places it in the correct location.\n   * @param config The user-specified snack bar config.\n   */\n\n\n  _createOverlay(config) {\n    const overlayConfig = new OverlayConfig();\n    overlayConfig.direction = config.direction;\n\n    let positionStrategy = this._overlay.position().global(); // Set horizontal position.\n\n\n    const isRtl = config.direction === 'rtl';\n    const isLeft = config.horizontalPosition === 'left' || config.horizontalPosition === 'start' && !isRtl || config.horizontalPosition === 'end' && isRtl;\n    const isRight = !isLeft && config.horizontalPosition !== 'center';\n\n    if (isLeft) {\n      positionStrategy.left('0');\n    } else if (isRight) {\n      positionStrategy.right('0');\n    } else {\n      positionStrategy.centerHorizontally();\n    } // Set horizontal position.\n\n\n    if (config.verticalPosition === 'top') {\n      positionStrategy.top('0');\n    } else {\n      positionStrategy.bottom('0');\n    }\n\n    overlayConfig.positionStrategy = positionStrategy;\n    return this._overlay.create(overlayConfig);\n  }\n  /**\n   * Creates an injector to be used inside of a snack bar component.\n   * @param config Config that was used to create the snack bar.\n   * @param snackBarRef Reference to the snack bar.\n   */\n\n\n  _createInjector(config, snackBarRef) {\n    const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n    return Injector.create({\n      parent: userInjector || this._injector,\n      providers: [{\n        provide: MatSnackBarRef,\n        useValue: snackBarRef\n      }, {\n        provide: MAT_SNACK_BAR_DATA,\n        useValue: config.data\n      }]\n    });\n  }\n\n}\n\nMatSnackBar.ɵfac = function MatSnackBar_Factory(t) {\n  return new (t || MatSnackBar)(i0.ɵɵinject(i1$1.Overlay), i0.ɵɵinject(i2$1.LiveAnnouncer), i0.ɵɵinject(i0.Injector), i0.ɵɵinject(i3$2.BreakpointObserver), i0.ɵɵinject(MatSnackBar, 12), i0.ɵɵinject(MAT_SNACK_BAR_DEFAULT_OPTIONS));\n};\n\nMatSnackBar.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n  token: MatSnackBar,\n  factory: MatSnackBar.ɵfac,\n  providedIn: MatSnackBarModule\n});\n\n(function () {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatSnackBar, [{\n    type: Injectable,\n    args: [{\n      providedIn: MatSnackBarModule\n    }]\n  }], function () {\n    return [{\n      type: i1$1.Overlay\n    }, {\n      type: i2$1.LiveAnnouncer\n    }, {\n      type: i0.Injector\n    }, {\n      type: i3$2.BreakpointObserver\n    }, {\n      type: MatSnackBar,\n      decorators: [{\n        type: Optional\n      }, {\n        type: SkipSelf\n      }]\n    }, {\n      type: MatSnackBarConfig,\n      decorators: [{\n        type: Inject,\n        args: [MAT_SNACK_BAR_DEFAULT_OPTIONS]\n      }]\n    }];\n  }, null);\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\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\n/**\n * Generated bundle index. Do not edit.\n */\n\n\nexport { MAT_SNACK_BAR_DATA, MAT_SNACK_BAR_DEFAULT_OPTIONS, MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY, MatSnackBar, MatSnackBarConfig, MatSnackBarContainer, MatSnackBarModule, MatSnackBarRef, SimpleSnackBar, matSnackBarAnimations };","map":{"version":3,"sources":["D:/Development/Work/CENOS/cenos-ui/node_modules/@angular/material/fesm2015/snack-bar.mjs"],"names":["i1$1","OverlayModule","OverlayConfig","i3$1","BasePortalOutlet","CdkPortalOutlet","PortalModule","ComponentPortal","TemplatePortal","i3","CommonModule","i0","InjectionToken","Component","ViewEncapsulation","ChangeDetectionStrategy","Inject","ViewChild","NgModule","Injector","TemplateRef","Injectable","Optional","SkipSelf","MatCommonModule","i2","MatButtonModule","Subject","take","takeUntil","trigger","state","style","transition","animate","i1","i3$2","Breakpoints","i2$1","MAT_SNACK_BAR_DATA","MatSnackBarConfig","constructor","politeness","announcementMessage","duration","data","horizontalPosition","verticalPosition","MAX_TIMEOUT","Math","pow","MatSnackBarRef","containerInstance","_overlayRef","_afterDismissed","_afterOpened","_onAction","_dismissedByAction","onAction","subscribe","dismiss","_onExit","_finishDismiss","closed","exit","clearTimeout","_durationTimeoutId","dismissWithAction","next","complete","closeWithAction","_dismissAfter","setTimeout","min","_open","dispose","dismissedByAction","afterDismissed","afterOpened","_onEnter","SimpleSnackBar","snackBarRef","action","hasAction","ɵfac","ɵcmp","NgIf","MatButton","type","args","selector","encapsulation","None","changeDetection","OnPush","host","template","styles","undefined","decorators","matSnackBarAnimations","snackBarState","transform","opacity","MatSnackBarContainer","_ngZone","_elementRef","_changeDetectorRef","_platform","snackBarConfig","_announceDelay","_destroyed","_onAnnounce","_animationState","attachDomPortal","portal","_assertNotAttached","_applySnackBarClasses","_portalOutlet","_live","FIREFOX","_role","attachComponentPortal","attachTemplatePortal","onAnimationEnd","event","fromState","toState","_completeExit","onEnter","run","enter","detectChanges","_screenReaderAnnounce","nativeElement","setAttribute","_announceTimeoutId","ngOnDestroy","onMicrotaskEmpty","pipe","element","panelClasses","panelClass","Array","isArray","forEach","cssClass","classList","add","hasAttached","ngDevMode","Error","runOutsideAngular","inertElement","querySelector","liveElement","focusedElement","isBrowser","document","activeElement","HTMLElement","contains","removeAttribute","appendChild","focus","NgZone","ElementRef","ChangeDetectorRef","Platform","Default","animations","static","MatSnackBarModule","ɵmod","ɵinj","imports","exports","declarations","MAT_SNACK_BAR_DEFAULT_OPTIONS","providedIn","factory","MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY","MatSnackBar","_overlay","_injector","_breakpointObserver","_parentSnackBar","_defaultConfig","_snackBarRefAtThisLevel","simpleSnackBarComponent","snackBarContainerComponent","handsetCssClass","_openedSnackBarRef","parent","value","openFromComponent","component","config","_attach","openFromTemplate","open","message","_config","Object","assign","_attachSnackBarContainer","overlayRef","userInjector","viewContainerRef","injector","create","providers","provide","useValue","containerPortal","containerRef","attach","instance","content","userConfig","_createOverlay","container","$implicit","_createInjector","contentRef","observe","HandsetPortrait","detachments","overlayElement","toggle","matches","announce","_animateSnackBar","clear","overlayConfig","direction","positionStrategy","position","global","isRtl","isLeft","isRight","left","right","centerHorizontally","top","bottom","Overlay","LiveAnnouncer","BreakpointObserver","ɵprov"],"mappings":"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","sourcesContent":["import * as i1$1 from '@angular/cdk/overlay';\nimport { OverlayModule, OverlayConfig } from '@angular/cdk/overlay';\nimport * as i3$1 from '@angular/cdk/portal';\nimport { BasePortalOutlet, CdkPortalOutlet, PortalModule, ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport * as i3 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, ViewChild, NgModule, Injector, TemplateRef, Injectable, Optional, SkipSelf } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport * as i2 from '@angular/material/button';\nimport { MatButtonModule } from '@angular/material/button';\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport * as i1 from '@angular/cdk/platform';\nimport * as i3$2 from '@angular/cdk/layout';\nimport { Breakpoints } from '@angular/cdk/layout';\nimport * as i2$1 from '@angular/cdk/a11y';\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/** Injection token that can be used to access the data that was passed in to a snack bar. */\nconst MAT_SNACK_BAR_DATA = new InjectionToken('MatSnackBarData');\n/**\n * Configuration used when opening a snack-bar.\n */\nclass MatSnackBarConfig {\n    constructor() {\n        /** The politeness level for the MatAriaLiveAnnouncer announcement. */\n        this.politeness = 'assertive';\n        /**\n         * Message to be announced by the LiveAnnouncer. When opening a snackbar without a custom\n         * component or template, the announcement message will default to the specified message.\n         */\n        this.announcementMessage = '';\n        /** The length of time in milliseconds to wait before automatically dismissing the snack bar. */\n        this.duration = 0;\n        /** Data being injected into the child component. */\n        this.data = null;\n        /** The horizontal position to place the snack bar. */\n        this.horizontalPosition = 'center';\n        /** The vertical position to place the snack bar. */\n        this.verticalPosition = 'bottom';\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/** Maximum amount of milliseconds that can be passed into setTimeout. */\nconst MAX_TIMEOUT = Math.pow(2, 31) - 1;\n/**\n * Reference to a snack bar dispatched from the snack bar service.\n */\nclass MatSnackBarRef {\n    constructor(containerInstance, _overlayRef) {\n        this._overlayRef = _overlayRef;\n        /** Subject for notifying the user that the snack bar has been dismissed. */\n        this._afterDismissed = new Subject();\n        /** Subject for notifying the user that the snack bar has opened and appeared. */\n        this._afterOpened = new Subject();\n        /** Subject for notifying the user that the snack bar action was called. */\n        this._onAction = new Subject();\n        /** Whether the snack bar was dismissed using the action button. */\n        this._dismissedByAction = false;\n        this.containerInstance = containerInstance;\n        // Dismiss snackbar on action.\n        this.onAction().subscribe(() => this.dismiss());\n        containerInstance._onExit.subscribe(() => this._finishDismiss());\n    }\n    /** Dismisses the snack bar. */\n    dismiss() {\n        if (!this._afterDismissed.closed) {\n            this.containerInstance.exit();\n        }\n        clearTimeout(this._durationTimeoutId);\n    }\n    /** Marks the snackbar action clicked. */\n    dismissWithAction() {\n        if (!this._onAction.closed) {\n            this._dismissedByAction = true;\n            this._onAction.next();\n            this._onAction.complete();\n        }\n        clearTimeout(this._durationTimeoutId);\n    }\n    /**\n     * Marks the snackbar action clicked.\n     * @deprecated Use `dismissWithAction` instead.\n     * @breaking-change 8.0.0\n     */\n    closeWithAction() {\n        this.dismissWithAction();\n    }\n    /** Dismisses the snack bar after some duration */\n    _dismissAfter(duration) {\n        // Note that we need to cap the duration to the maximum value for setTimeout, because\n        // it'll revert to 1 if somebody passes in something greater (e.g. `Infinity`). See #17234.\n        this._durationTimeoutId = setTimeout(() => this.dismiss(), Math.min(duration, MAX_TIMEOUT));\n    }\n    /** Marks the snackbar as opened */\n    _open() {\n        if (!this._afterOpened.closed) {\n            this._afterOpened.next();\n            this._afterOpened.complete();\n        }\n    }\n    /** Cleans up the DOM after closing. */\n    _finishDismiss() {\n        this._overlayRef.dispose();\n        if (!this._onAction.closed) {\n            this._onAction.complete();\n        }\n        this._afterDismissed.next({ dismissedByAction: this._dismissedByAction });\n        this._afterDismissed.complete();\n        this._dismissedByAction = false;\n    }\n    /** Gets an observable that is notified when the snack bar is finished closing. */\n    afterDismissed() {\n        return this._afterDismissed;\n    }\n    /** Gets an observable that is notified when the snack bar has opened and appeared. */\n    afterOpened() {\n        return this.containerInstance._onEnter;\n    }\n    /** Gets an observable that is notified when the snack bar action is called. */\n    onAction() {\n        return this._onAction;\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/**\n * A component used to open as the default snack bar, matching material spec.\n * This should only be used internally by the snack bar service.\n */\nclass SimpleSnackBar {\n    constructor(snackBarRef, data) {\n        this.snackBarRef = snackBarRef;\n        this.data = data;\n    }\n    /** Performs the action on the snack bar. */\n    action() {\n        this.snackBarRef.dismissWithAction();\n    }\n    /** If the action button should be shown. */\n    get hasAction() {\n        return !!this.data.action;\n    }\n}\nSimpleSnackBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: SimpleSnackBar, deps: [{ token: MatSnackBarRef }, { token: MAT_SNACK_BAR_DATA }], target: i0.ɵɵFactoryTarget.Component });\nSimpleSnackBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.1.0\", type: SimpleSnackBar, selector: \"simple-snack-bar\", host: { classAttribute: \"mat-simple-snackbar\" }, ngImport: i0, template: \"<span>{{data.message}}</span>\\n<div class=\\\"mat-simple-snackbar-action\\\"  *ngIf=\\\"hasAction\\\">\\n  <button mat-button (click)=\\\"action()\\\">{{data.action}}</button>\\n</div>\\n\", styles: [\".mat-simple-snackbar{display:flex;justify-content:space-between;align-items:center;line-height:20px;opacity:1}.mat-simple-snackbar-action{flex-shrink:0;margin:-8px -8px -8px 8px}.mat-simple-snackbar-action button{max-height:36px;min-width:0}[dir=rtl] .mat-simple-snackbar-action{margin-left:-8px;margin-right:8px}\\n\"], components: [{ type: i2.MatButton, selector: \"button[mat-button], button[mat-raised-button], button[mat-icon-button],             button[mat-fab], button[mat-mini-fab], button[mat-stroked-button],             button[mat-flat-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }], directives: [{ type: i3.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: SimpleSnackBar, decorators: [{\n            type: Component,\n            args: [{ selector: 'simple-snack-bar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {\n                        'class': 'mat-simple-snackbar',\n                    }, template: \"<span>{{data.message}}</span>\\n<div class=\\\"mat-simple-snackbar-action\\\"  *ngIf=\\\"hasAction\\\">\\n  <button mat-button (click)=\\\"action()\\\">{{data.action}}</button>\\n</div>\\n\", styles: [\".mat-simple-snackbar{display:flex;justify-content:space-between;align-items:center;line-height:20px;opacity:1}.mat-simple-snackbar-action{flex-shrink:0;margin:-8px -8px -8px 8px}.mat-simple-snackbar-action button{max-height:36px;min-width:0}[dir=rtl] .mat-simple-snackbar-action{margin-left:-8px;margin-right:8px}\\n\"] }]\n        }], ctorParameters: function () {\n        return [{ type: MatSnackBarRef }, { type: undefined, decorators: [{\n                        type: Inject,\n                        args: [MAT_SNACK_BAR_DATA]\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/**\n * Animations used by the Material snack bar.\n * @docs-private\n */\nconst matSnackBarAnimations = {\n    /** Animation that shows and hides a snack bar. */\n    snackBarState: trigger('state', [\n        state('void, hidden', style({\n            transform: 'scale(0.8)',\n            opacity: 0,\n        })),\n        state('visible', style({\n            transform: 'scale(1)',\n            opacity: 1,\n        })),\n        transition('* => visible', animate('150ms cubic-bezier(0, 0, 0.2, 1)')),\n        transition('* => void, * => hidden', animate('75ms cubic-bezier(0.4, 0.0, 1, 1)', style({\n            opacity: 0,\n        }))),\n    ]),\n};\n\n/**\n * Internal component that wraps user-provided snack bar content.\n * @docs-private\n */\nclass MatSnackBarContainer extends BasePortalOutlet {\n    constructor(_ngZone, _elementRef, _changeDetectorRef, _platform, \n    /** The snack bar configuration. */\n    snackBarConfig) {\n        super();\n        this._ngZone = _ngZone;\n        this._elementRef = _elementRef;\n        this._changeDetectorRef = _changeDetectorRef;\n        this._platform = _platform;\n        this.snackBarConfig = snackBarConfig;\n        /** The number of milliseconds to wait before announcing the snack bar's content. */\n        this._announceDelay = 150;\n        /** Whether the component has been destroyed. */\n        this._destroyed = false;\n        /** Subject for notifying that the snack bar has announced to screen readers. */\n        this._onAnnounce = new Subject();\n        /** Subject for notifying that the snack bar has exited from view. */\n        this._onExit = new Subject();\n        /** Subject for notifying that the snack bar has finished entering the view. */\n        this._onEnter = new Subject();\n        /** The state of the snack bar animations. */\n        this._animationState = 'void';\n        /**\n         * Attaches a DOM portal to the snack bar container.\n         * @deprecated To be turned into a method.\n         * @breaking-change 10.0.0\n         */\n        this.attachDomPortal = (portal) => {\n            this._assertNotAttached();\n            this._applySnackBarClasses();\n            return this._portalOutlet.attachDomPortal(portal);\n        };\n        // Use aria-live rather than a live role like 'alert' or 'status'\n        // because NVDA and JAWS have show inconsistent behavior with live roles.\n        if (snackBarConfig.politeness === 'assertive' && !snackBarConfig.announcementMessage) {\n            this._live = 'assertive';\n        }\n        else if (snackBarConfig.politeness === 'off') {\n            this._live = 'off';\n        }\n        else {\n            this._live = 'polite';\n        }\n        // Only set role for Firefox. Set role based on aria-live because setting role=\"alert\" implies\n        // aria-live=\"assertive\" which may cause issues if aria-live is set to \"polite\" above.\n        if (this._platform.FIREFOX) {\n            if (this._live === 'polite') {\n                this._role = 'status';\n            }\n            if (this._live === 'assertive') {\n                this._role = 'alert';\n            }\n        }\n    }\n    /** Attach a component portal as content to this snack bar container. */\n    attachComponentPortal(portal) {\n        this._assertNotAttached();\n        this._applySnackBarClasses();\n        return this._portalOutlet.attachComponentPortal(portal);\n    }\n    /** Attach a template portal as content to this snack bar container. */\n    attachTemplatePortal(portal) {\n        this._assertNotAttached();\n        this._applySnackBarClasses();\n        return this._portalOutlet.attachTemplatePortal(portal);\n    }\n    /** Handle end of animations, updating the state of the snackbar. */\n    onAnimationEnd(event) {\n        const { fromState, toState } = event;\n        if ((toState === 'void' && fromState !== 'void') || toState === 'hidden') {\n            this._completeExit();\n        }\n        if (toState === 'visible') {\n            // Note: we shouldn't use `this` inside the zone callback,\n            // because it can cause a memory leak.\n            const onEnter = this._onEnter;\n            this._ngZone.run(() => {\n                onEnter.next();\n                onEnter.complete();\n            });\n        }\n    }\n    /** Begin animation of snack bar entrance into view. */\n    enter() {\n        if (!this._destroyed) {\n            this._animationState = 'visible';\n            this._changeDetectorRef.detectChanges();\n            this._screenReaderAnnounce();\n        }\n    }\n    /** Begin animation of the snack bar exiting from view. */\n    exit() {\n        // Note: this one transitions to `hidden`, rather than `void`, in order to handle the case\n        // where multiple snack bars are opened in quick succession (e.g. two consecutive calls to\n        // `MatSnackBar.open`).\n        this._animationState = 'hidden';\n        // Mark this element with an 'exit' attribute to indicate that the snackbar has\n        // been dismissed and will soon be removed from the DOM. This is used by the snackbar\n        // test harness.\n        this._elementRef.nativeElement.setAttribute('mat-exit', '');\n        // If the snack bar hasn't been announced by the time it exits it wouldn't have been open\n        // long enough to visually read it either, so clear the timeout for announcing.\n        clearTimeout(this._announceTimeoutId);\n        return this._onExit;\n    }\n    /** Makes sure the exit callbacks have been invoked when the element is destroyed. */\n    ngOnDestroy() {\n        this._destroyed = true;\n        this._completeExit();\n    }\n    /**\n     * Waits for the zone to settle before removing the element. Helps prevent\n     * errors where we end up removing an element which is in the middle of an animation.\n     */\n    _completeExit() {\n        this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n            this._onExit.next();\n            this._onExit.complete();\n        });\n    }\n    /** Applies the various positioning and user-configured CSS classes to the snack bar. */\n    _applySnackBarClasses() {\n        const element = this._elementRef.nativeElement;\n        const panelClasses = this.snackBarConfig.panelClass;\n        if (panelClasses) {\n            if (Array.isArray(panelClasses)) {\n                // Note that we can't use a spread here, because IE doesn't support multiple arguments.\n                panelClasses.forEach(cssClass => element.classList.add(cssClass));\n            }\n            else {\n                element.classList.add(panelClasses);\n            }\n        }\n        if (this.snackBarConfig.horizontalPosition === 'center') {\n            element.classList.add('mat-snack-bar-center');\n        }\n        if (this.snackBarConfig.verticalPosition === 'top') {\n            element.classList.add('mat-snack-bar-top');\n        }\n    }\n    /** Asserts that no content is already attached to the container. */\n    _assertNotAttached() {\n        if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n            throw Error('Attempting to attach snack bar content after content is already attached');\n        }\n    }\n    /**\n     * Starts a timeout to move the snack bar content to the live region so screen readers will\n     * announce it.\n     */\n    _screenReaderAnnounce() {\n        if (!this._announceTimeoutId) {\n            this._ngZone.runOutsideAngular(() => {\n                this._announceTimeoutId = setTimeout(() => {\n                    const inertElement = this._elementRef.nativeElement.querySelector('[aria-hidden]');\n                    const liveElement = this._elementRef.nativeElement.querySelector('[aria-live]');\n                    if (inertElement && liveElement) {\n                        // If an element in the snack bar content is focused before being moved\n                        // track it and restore focus after moving to the live region.\n                        let focusedElement = null;\n                        if (this._platform.isBrowser &&\n                            document.activeElement instanceof HTMLElement &&\n                            inertElement.contains(document.activeElement)) {\n                            focusedElement = document.activeElement;\n                        }\n                        inertElement.removeAttribute('aria-hidden');\n                        liveElement.appendChild(inertElement);\n                        focusedElement === null || focusedElement === void 0 ? void 0 : focusedElement.focus();\n                        this._onAnnounce.next();\n                        this._onAnnounce.complete();\n                    }\n                }, this._announceDelay);\n            });\n        }\n    }\n}\nMatSnackBarContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatSnackBarContainer, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.Platform }, { token: MatSnackBarConfig }], target: i0.ɵɵFactoryTarget.Component });\nMatSnackBarContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.1.0\", type: MatSnackBarContainer, selector: \"snack-bar-container\", host: { listeners: { \"@state.done\": \"onAnimationEnd($event)\" }, properties: { \"@state\": \"_animationState\" }, classAttribute: \"mat-snack-bar-container\" }, viewQueries: [{ propertyName: \"_portalOutlet\", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: \"<!-- Initially holds the snack bar content, will be empty after announcing to screen readers. -->\\n<div aria-hidden=\\\"true\\\">\\n  <ng-template cdkPortalOutlet></ng-template>\\n</div>\\n\\n<!-- Will receive the snack bar content from the non-live div, move will happen a short delay after opening -->\\n<div [attr.aria-live]=\\\"_live\\\" [attr.role]=\\\"_role\\\"></div>\\n\", styles: [\".mat-snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:24px;max-width:33vw;min-width:344px;padding:14px 16px;min-height:48px;transform-origin:center}.cdk-high-contrast-active .mat-snack-bar-container{border:solid 1px}.mat-snack-bar-handset{width:100%}.mat-snack-bar-handset .mat-snack-bar-container{margin:8px;max-width:100%;min-width:0;width:100%}\\n\"], directives: [{ type: i3$1.CdkPortalOutlet, selector: \"[cdkPortalOutlet]\", inputs: [\"cdkPortalOutlet\"], outputs: [\"attached\"], exportAs: [\"cdkPortalOutlet\"] }], animations: [matSnackBarAnimations.snackBarState], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatSnackBarContainer, decorators: [{\n            type: Component,\n            args: [{ selector: 'snack-bar-container', changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, animations: [matSnackBarAnimations.snackBarState], host: {\n                        'class': 'mat-snack-bar-container',\n                        '[@state]': '_animationState',\n                        '(@state.done)': 'onAnimationEnd($event)',\n                    }, template: \"<!-- Initially holds the snack bar content, will be empty after announcing to screen readers. -->\\n<div aria-hidden=\\\"true\\\">\\n  <ng-template cdkPortalOutlet></ng-template>\\n</div>\\n\\n<!-- Will receive the snack bar content from the non-live div, move will happen a short delay after opening -->\\n<div [attr.aria-live]=\\\"_live\\\" [attr.role]=\\\"_role\\\"></div>\\n\", styles: [\".mat-snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:24px;max-width:33vw;min-width:344px;padding:14px 16px;min-height:48px;transform-origin:center}.cdk-high-contrast-active .mat-snack-bar-container{border:solid 1px}.mat-snack-bar-handset{width:100%}.mat-snack-bar-handset .mat-snack-bar-container{margin:8px;max-width:100%;min-width:0;width:100%}\\n\"] }]\n        }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.Platform }, { type: MatSnackBarConfig }]; }, propDecorators: { _portalOutlet: [{\n                type: ViewChild,\n                args: [CdkPortalOutlet, { static: true }]\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 */\nclass MatSnackBarModule {\n}\nMatSnackBarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatSnackBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatSnackBarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatSnackBarModule, declarations: [MatSnackBarContainer, SimpleSnackBar], imports: [OverlayModule, PortalModule, CommonModule, MatButtonModule, MatCommonModule], exports: [MatSnackBarContainer, MatCommonModule] });\nMatSnackBarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatSnackBarModule, imports: [[OverlayModule, PortalModule, CommonModule, MatButtonModule, MatCommonModule], MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatSnackBarModule, decorators: [{\n            type: NgModule,\n            args: [{\n                    imports: [OverlayModule, PortalModule, CommonModule, MatButtonModule, MatCommonModule],\n                    exports: [MatSnackBarContainer, MatCommonModule],\n                    declarations: [MatSnackBarContainer, SimpleSnackBar],\n                }]\n        }] });\n\n/** Injection token that can be used to specify default snack bar. */\nconst MAT_SNACK_BAR_DEFAULT_OPTIONS = new InjectionToken('mat-snack-bar-default-options', {\n    providedIn: 'root',\n    factory: MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY,\n});\n/** @docs-private */\nfunction MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY() {\n    return new MatSnackBarConfig();\n}\n/**\n * Service to dispatch Material Design snack bar messages.\n */\nclass MatSnackBar {\n    constructor(_overlay, _live, _injector, _breakpointObserver, _parentSnackBar, _defaultConfig) {\n        this._overlay = _overlay;\n        this._live = _live;\n        this._injector = _injector;\n        this._breakpointObserver = _breakpointObserver;\n        this._parentSnackBar = _parentSnackBar;\n        this._defaultConfig = _defaultConfig;\n        /**\n         * Reference to the current snack bar in the view *at this level* (in the Angular injector tree).\n         * If there is a parent snack-bar service, all operations should delegate to that parent\n         * via `_openedSnackBarRef`.\n         */\n        this._snackBarRefAtThisLevel = null;\n        /** The component that should be rendered as the snack bar's simple component. */\n        this.simpleSnackBarComponent = SimpleSnackBar;\n        /** The container component that attaches the provided template or component. */\n        this.snackBarContainerComponent = MatSnackBarContainer;\n        /** The CSS class to apply for handset mode. */\n        this.handsetCssClass = 'mat-snack-bar-handset';\n    }\n    /** Reference to the currently opened snackbar at *any* level. */\n    get _openedSnackBarRef() {\n        const parent = this._parentSnackBar;\n        return parent ? parent._openedSnackBarRef : this._snackBarRefAtThisLevel;\n    }\n    set _openedSnackBarRef(value) {\n        if (this._parentSnackBar) {\n            this._parentSnackBar._openedSnackBarRef = value;\n        }\n        else {\n            this._snackBarRefAtThisLevel = value;\n        }\n    }\n    /**\n     * Creates and dispatches a snack bar with a custom component for the content, removing any\n     * currently opened snack bars.\n     *\n     * @param component Component to be instantiated.\n     * @param config Extra configuration for the snack bar.\n     */\n    openFromComponent(component, config) {\n        return this._attach(component, config);\n    }\n    /**\n     * Creates and dispatches a snack bar with a custom template for the content, removing any\n     * currently opened snack bars.\n     *\n     * @param template Template to be instantiated.\n     * @param config Extra configuration for the snack bar.\n     */\n    openFromTemplate(template, config) {\n        return this._attach(template, config);\n    }\n    /**\n     * Opens a snackbar with a message and an optional action.\n     * @param message The message to show in the snackbar.\n     * @param action The label for the snackbar action.\n     * @param config Additional configuration options for the snackbar.\n     */\n    open(message, action = '', config) {\n        const _config = Object.assign(Object.assign({}, this._defaultConfig), config);\n        // Since the user doesn't have access to the component, we can\n        // override the data to pass in our own message and action.\n        _config.data = { message, action };\n        // Since the snack bar has `role=\"alert\"`, we don't\n        // want to announce the same message twice.\n        if (_config.announcementMessage === message) {\n            _config.announcementMessage = undefined;\n        }\n        return this.openFromComponent(this.simpleSnackBarComponent, _config);\n    }\n    /**\n     * Dismisses the currently-visible snack bar.\n     */\n    dismiss() {\n        if (this._openedSnackBarRef) {\n            this._openedSnackBarRef.dismiss();\n        }\n    }\n    ngOnDestroy() {\n        // Only dismiss the snack bar at the current level on destroy.\n        if (this._snackBarRefAtThisLevel) {\n            this._snackBarRefAtThisLevel.dismiss();\n        }\n    }\n    /**\n     * Attaches the snack bar container component to the overlay.\n     */\n    _attachSnackBarContainer(overlayRef, config) {\n        const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n        const injector = Injector.create({\n            parent: userInjector || this._injector,\n            providers: [{ provide: MatSnackBarConfig, useValue: config }],\n        });\n        const containerPortal = new ComponentPortal(this.snackBarContainerComponent, config.viewContainerRef, injector);\n        const containerRef = overlayRef.attach(containerPortal);\n        containerRef.instance.snackBarConfig = config;\n        return containerRef.instance;\n    }\n    /**\n     * Places a new component or a template as the content of the snack bar container.\n     */\n    _attach(content, userConfig) {\n        const config = Object.assign(Object.assign(Object.assign({}, new MatSnackBarConfig()), this._defaultConfig), userConfig);\n        const overlayRef = this._createOverlay(config);\n        const container = this._attachSnackBarContainer(overlayRef, config);\n        const snackBarRef = new MatSnackBarRef(container, overlayRef);\n        if (content instanceof TemplateRef) {\n            const portal = new TemplatePortal(content, null, {\n                $implicit: config.data,\n                snackBarRef,\n            });\n            snackBarRef.instance = container.attachTemplatePortal(portal);\n        }\n        else {\n            const injector = this._createInjector(config, snackBarRef);\n            const portal = new ComponentPortal(content, undefined, injector);\n            const contentRef = container.attachComponentPortal(portal);\n            // We can't pass this via the injector, because the injector is created earlier.\n            snackBarRef.instance = contentRef.instance;\n        }\n        // Subscribe to the breakpoint observer and attach the mat-snack-bar-handset class as\n        // appropriate. This class is applied to the overlay element because the overlay must expand to\n        // fill the width of the screen for full width snackbars.\n        this._breakpointObserver\n            .observe(Breakpoints.HandsetPortrait)\n            .pipe(takeUntil(overlayRef.detachments()))\n            .subscribe(state => {\n            overlayRef.overlayElement.classList.toggle(this.handsetCssClass, state.matches);\n        });\n        if (config.announcementMessage) {\n            // Wait until the snack bar contents have been announced then deliver this message.\n            container._onAnnounce.subscribe(() => {\n                this._live.announce(config.announcementMessage, config.politeness);\n            });\n        }\n        this._animateSnackBar(snackBarRef, config);\n        this._openedSnackBarRef = snackBarRef;\n        return this._openedSnackBarRef;\n    }\n    /** Animates the old snack bar out and the new one in. */\n    _animateSnackBar(snackBarRef, config) {\n        // When the snackbar is dismissed, clear the reference to it.\n        snackBarRef.afterDismissed().subscribe(() => {\n            // Clear the snackbar ref if it hasn't already been replaced by a newer snackbar.\n            if (this._openedSnackBarRef == snackBarRef) {\n                this._openedSnackBarRef = null;\n            }\n            if (config.announcementMessage) {\n                this._live.clear();\n            }\n        });\n        if (this._openedSnackBarRef) {\n            // If a snack bar is already in view, dismiss it and enter the\n            // new snack bar after exit animation is complete.\n            this._openedSnackBarRef.afterDismissed().subscribe(() => {\n                snackBarRef.containerInstance.enter();\n            });\n            this._openedSnackBarRef.dismiss();\n        }\n        else {\n            // If no snack bar is in view, enter the new snack bar.\n            snackBarRef.containerInstance.enter();\n        }\n        // If a dismiss timeout is provided, set up dismiss based on after the snackbar is opened.\n        if (config.duration && config.duration > 0) {\n            snackBarRef.afterOpened().subscribe(() => snackBarRef._dismissAfter(config.duration));\n        }\n    }\n    /**\n     * Creates a new overlay and places it in the correct location.\n     * @param config The user-specified snack bar config.\n     */\n    _createOverlay(config) {\n        const overlayConfig = new OverlayConfig();\n        overlayConfig.direction = config.direction;\n        let positionStrategy = this._overlay.position().global();\n        // Set horizontal position.\n        const isRtl = config.direction === 'rtl';\n        const isLeft = config.horizontalPosition === 'left' ||\n            (config.horizontalPosition === 'start' && !isRtl) ||\n            (config.horizontalPosition === 'end' && isRtl);\n        const isRight = !isLeft && config.horizontalPosition !== 'center';\n        if (isLeft) {\n            positionStrategy.left('0');\n        }\n        else if (isRight) {\n            positionStrategy.right('0');\n        }\n        else {\n            positionStrategy.centerHorizontally();\n        }\n        // Set horizontal position.\n        if (config.verticalPosition === 'top') {\n            positionStrategy.top('0');\n        }\n        else {\n            positionStrategy.bottom('0');\n        }\n        overlayConfig.positionStrategy = positionStrategy;\n        return this._overlay.create(overlayConfig);\n    }\n    /**\n     * Creates an injector to be used inside of a snack bar component.\n     * @param config Config that was used to create the snack bar.\n     * @param snackBarRef Reference to the snack bar.\n     */\n    _createInjector(config, snackBarRef) {\n        const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n        return Injector.create({\n            parent: userInjector || this._injector,\n            providers: [\n                { provide: MatSnackBarRef, useValue: snackBarRef },\n                { provide: MAT_SNACK_BAR_DATA, useValue: config.data },\n            ],\n        });\n    }\n}\nMatSnackBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatSnackBar, deps: [{ token: i1$1.Overlay }, { token: i2$1.LiveAnnouncer }, { token: i0.Injector }, { token: i3$2.BreakpointObserver }, { token: MatSnackBar, optional: true, skipSelf: true }, { token: MAT_SNACK_BAR_DEFAULT_OPTIONS }], target: i0.ɵɵFactoryTarget.Injectable });\nMatSnackBar.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatSnackBar, providedIn: MatSnackBarModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.0\", ngImport: i0, type: MatSnackBar, decorators: [{\n            type: Injectable,\n            args: [{ providedIn: MatSnackBarModule }]\n        }], ctorParameters: function () {\n        return [{ type: i1$1.Overlay }, { type: i2$1.LiveAnnouncer }, { type: i0.Injector }, { type: i3$2.BreakpointObserver }, { type: MatSnackBar, decorators: [{\n                        type: Optional\n                    }, {\n                        type: SkipSelf\n                    }] }, { type: MatSnackBarConfig, decorators: [{\n                        type: Inject,\n                        args: [MAT_SNACK_BAR_DEFAULT_OPTIONS]\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\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\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SNACK_BAR_DATA, MAT_SNACK_BAR_DEFAULT_OPTIONS, MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY, MatSnackBar, MatSnackBarConfig, MatSnackBarContainer, MatSnackBarModule, MatSnackBarRef, SimpleSnackBar, matSnackBarAnimations };\n"]},"metadata":{},"sourceType":"module"}