{"version":3,"file":"progress-spinner.js","sources":["../../../src/material/progress-spinner/progress-spinner-module.ts","../../../src/material/progress-spinner/progress-spinner.ts"],"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 {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatProgressSpinner, MatSpinner} from './progress-spinner';\n\n\n@NgModule({\n  imports: [MatCommonModule, CommonModule],\n  exports: [\n    MatProgressSpinner,\n    MatSpinner,\n    MatCommonModule\n  ],\n  declarations: [\n    MatProgressSpinner,\n    MatSpinner\n  ],\n})\nclass MatProgressSpinnerModule {}\n\nexport {MatProgressSpinnerModule};\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 {coerceNumberProperty} from '@angular/cdk/coercion';\nimport {Platform} from '@angular/cdk/platform';\nimport {DOCUMENT} from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  Inject,\n  InjectionToken,\n  Input,\n  Optional,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {CanColor, CanColorCtor, mixinColor} from '@angular/material/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\n/** Possible mode for a progress spinner. */\nexport type ProgressSpinnerMode = 'determinate' | 'indeterminate';\n\n/**\n * Base reference size of the spinner.\n * @docs-private\n */\nconst BASE_SIZE = 100;\n\n/**\n * Base reference stroke width of the spinner.\n * @docs-private\n */\nconst BASE_STROKE_WIDTH = 10;\n\n// Boilerplate for applying mixins to MatProgressSpinner.\n/** @docs-private */\nclass MatProgressSpinnerBase {\n  constructor(public _elementRef: ElementRef) {}\n}\nconst _MatProgressSpinnerMixinBase: CanColorCtor & typeof MatProgressSpinnerBase =\n    mixinColor(MatProgressSpinnerBase, 'primary');\n\n/** Default `mat-progress-spinner` options that can be overridden. */\nexport interface MatProgressSpinnerDefaultOptions {\n  /** Diameter of the spinner. */\n  diameter?: number;\n  /** Width of the spinner's stroke. */\n  strokeWidth?: number;\n  /**\n   * Whether the animations should be force to be enabled, ignoring if the current environment is\n   * using NoopAnimationsModule.\n   */\n  _forceAnimations?: boolean;\n}\n\n/** Injection token to be used to override the default options for `mat-progress-spinner`. */\nexport const MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS =\n    new InjectionToken<MatProgressSpinnerDefaultOptions>('mat-progress-spinner-default-options', {\n      providedIn: 'root',\n      factory: MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY,\n    });\n\n/** @docs-private */\nexport function MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY(): MatProgressSpinnerDefaultOptions {\n  return {diameter: BASE_SIZE};\n}\n\n// .0001 percentage difference is necessary in order to avoid unwanted animation frames\n// for example because the animation duration is 4 seconds, .1% accounts to 4ms\n// which are enough to see the flicker described in\n// https://github.com/angular/components/issues/8984\nconst INDETERMINATE_ANIMATION_TEMPLATE = `\n @keyframes mat-progress-spinner-stroke-rotate-DIAMETER {\n    0%      { stroke-dashoffset: START_VALUE;  transform: rotate(0); }\n    12.5%   { stroke-dashoffset: END_VALUE;    transform: rotate(0); }\n    12.5001%  { stroke-dashoffset: END_VALUE;    transform: rotateX(180deg) rotate(72.5deg); }\n    25%     { stroke-dashoffset: START_VALUE;  transform: rotateX(180deg) rotate(72.5deg); }\n\n    25.0001%   { stroke-dashoffset: START_VALUE;  transform: rotate(270deg); }\n    37.5%   { stroke-dashoffset: END_VALUE;    transform: rotate(270deg); }\n    37.5001%  { stroke-dashoffset: END_VALUE;    transform: rotateX(180deg) rotate(161.5deg); }\n    50%     { stroke-dashoffset: START_VALUE;  transform: rotateX(180deg) rotate(161.5deg); }\n\n    50.0001%  { stroke-dashoffset: START_VALUE;  transform: rotate(180deg); }\n    62.5%   { stroke-dashoffset: END_VALUE;    transform: rotate(180deg); }\n    62.5001%  { stroke-dashoffset: END_VALUE;    transform: rotateX(180deg) rotate(251.5deg); }\n    75%     { stroke-dashoffset: START_VALUE;  transform: rotateX(180deg) rotate(251.5deg); }\n\n    75.0001%  { stroke-dashoffset: START_VALUE;  transform: rotate(90deg); }\n    87.5%   { stroke-dashoffset: END_VALUE;    transform: rotate(90deg); }\n    87.5001%  { stroke-dashoffset: END_VALUE;    transform: rotateX(180deg) rotate(341.5deg); }\n    100%    { stroke-dashoffset: START_VALUE;  transform: rotateX(180deg) rotate(341.5deg); }\n  }\n`;\n\n/**\n * `<mat-progress-spinner>` component.\n */\n@Component({\n  moduleId: module.id,\n  selector: 'mat-progress-spinner',\n  exportAs: 'matProgressSpinner',\n  host: {\n    'role': 'progressbar',\n    'class': 'mat-progress-spinner',\n    '[class._mat-animation-noopable]': `_noopAnimations`,\n    '[style.width.px]': 'diameter',\n    '[style.height.px]': 'diameter',\n    '[attr.aria-valuemin]': 'mode === \"determinate\" ? 0 : null',\n    '[attr.aria-valuemax]': 'mode === \"determinate\" ? 100 : null',\n    '[attr.aria-valuenow]': 'mode === \"determinate\" ? value : null',\n    '[attr.mode]': 'mode',\n  },\n  inputs: ['color'],\n  templateUrl: 'progress-spinner.html',\n  styleUrls: ['progress-spinner.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class MatProgressSpinner extends _MatProgressSpinnerMixinBase implements CanColor {\n  private _diameter = BASE_SIZE;\n  private _value = 0;\n  private _strokeWidth: number;\n  private _fallbackAnimation = false;\n\n  /**\n   * Element to which we should add the generated style tags for the indeterminate animation.\n   * For most elements this is the document, but for the ones in the Shadow DOM we need to\n   * use the shadow root.\n   */\n  private _styleRoot: Node;\n\n  /**\n   * Tracks diameters of existing instances to de-dupe generated styles (default d = 100).\n   * We need to keep track of which elements the diameters were attached to, because for\n   * elements in the Shadow DOM the style tags are attached to the shadow root, rather\n   * than the document head.\n   */\n  private static _diameters = new WeakMap<Node, Set<number>>();\n\n  /** Whether the _mat-animation-noopable class should be applied, disabling animations.  */\n  _noopAnimations: boolean;\n\n  /** The diameter of the progress spinner (will set width and height of svg). */\n  @Input()\n  get diameter(): number { return this._diameter; }\n  set diameter(size: number) {\n    this._diameter = coerceNumberProperty(size);\n\n    if (!this._fallbackAnimation) {\n      const trackedDiameters = MatProgressSpinner._diameters;\n      const diametersForElement = trackedDiameters.get(this._styleRoot);\n\n      if (!diametersForElement || !diametersForElement.has(this._diameter)) {\n        this._attachStyleNode();\n      }\n    }\n  }\n\n  /** Stroke width of the progress spinner. */\n  @Input()\n  get strokeWidth(): number {\n    return this._strokeWidth || this.diameter / 10;\n  }\n  set strokeWidth(value: number) {\n    this._strokeWidth = coerceNumberProperty(value);\n  }\n\n  /** Mode of the progress circle */\n  @Input() mode: ProgressSpinnerMode = 'determinate';\n\n  /** Value of the progress circle. */\n  @Input()\n  get value(): number {\n    return this.mode === 'determinate' ? this._value : 0;\n  }\n  set value(newValue: number) {\n    this._value = Math.max(0, Math.min(100, coerceNumberProperty(newValue)));\n  }\n\n  constructor(public _elementRef: ElementRef<HTMLElement>,\n              platform: Platform,\n              @Optional() @Inject(DOCUMENT) private _document: any,\n              @Optional() @Inject(ANIMATION_MODULE_TYPE) animationMode: string,\n              @Inject(MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS)\n                  defaults?: MatProgressSpinnerDefaultOptions) {\n\n    super(_elementRef);\n\n    const trackedDiameters = MatProgressSpinner._diameters;\n\n    // The base size is already inserted via the component's structural styles. We still\n    // need to track it so we don't end up adding the same styles again.\n    if (!trackedDiameters.has(_document.head)) {\n      trackedDiameters.set(_document.head, new Set<number>([BASE_SIZE]));\n    }\n\n    this._styleRoot = _getShadowRoot(_elementRef.nativeElement, _document) || _document.head;\n    this._fallbackAnimation = platform.EDGE || platform.TRIDENT;\n    this._noopAnimations = animationMode === 'NoopAnimations' &&\n        (!!defaults && !defaults._forceAnimations);\n\n    if (defaults) {\n      if (defaults.diameter) {\n        this.diameter = defaults.diameter;\n      }\n\n      if (defaults.strokeWidth) {\n        this.strokeWidth = defaults.strokeWidth;\n      }\n    }\n\n    // On IE and Edge, we can't animate the `stroke-dashoffset`\n    // reliably so we fall back to a non-spec animation.\n    const animationClass =\n      `mat-progress-spinner-indeterminate${this._fallbackAnimation ? '-fallback' : ''}-animation`;\n\n    _elementRef.nativeElement.classList.add(animationClass);\n  }\n\n  /** The radius of the spinner, adjusted for stroke width. */\n  get _circleRadius() {\n    return (this.diameter - BASE_STROKE_WIDTH) / 2;\n  }\n\n  /** The view box of the spinner's svg element. */\n  get _viewBox() {\n    const viewBox = this._circleRadius * 2 + this.strokeWidth;\n    return `0 0 ${viewBox} ${viewBox}`;\n  }\n\n  /** The stroke circumference of the svg circle. */\n  get _strokeCircumference(): number {\n    return 2 * Math.PI * this._circleRadius;\n  }\n\n  /** The dash offset of the svg circle. */\n  get _strokeDashOffset() {\n    if (this.mode === 'determinate') {\n      return this._strokeCircumference * (100 - this._value) / 100;\n    }\n\n    // In fallback mode set the circle to 80% and rotate it with CSS.\n    if (this._fallbackAnimation && this.mode === 'indeterminate') {\n      return this._strokeCircumference * 0.2;\n    }\n\n    return null;\n  }\n\n  /** Stroke width of the circle in percent. */\n  get _circleStrokeWidth() {\n    return this.strokeWidth / this.diameter * 100;\n  }\n\n  /** Dynamically generates a style tag containing the correct animation for this diameter. */\n  private _attachStyleNode(): void {\n    const styleTag: HTMLStyleElement = this._document.createElement('style');\n    const styleRoot = this._styleRoot;\n    const currentDiameter = this._diameter;\n    const diameters = MatProgressSpinner._diameters;\n    let diametersForElement = diameters.get(styleRoot);\n\n    styleTag.setAttribute('mat-spinner-animation', currentDiameter + '');\n    styleTag.textContent = this._getAnimationText();\n    styleRoot.appendChild(styleTag);\n\n    if (!diametersForElement) {\n      diametersForElement = new Set<number>();\n      diameters.set(styleRoot, diametersForElement);\n    }\n\n    diametersForElement.add(currentDiameter);\n  }\n\n  /** Generates animation styles adjusted for the spinner's diameter. */\n  private _getAnimationText(): string {\n    return INDETERMINATE_ANIMATION_TEMPLATE\n        // Animation should begin at 5% and end at 80%\n        .replace(/START_VALUE/g, `${0.95 * this._strokeCircumference}`)\n        .replace(/END_VALUE/g, `${0.2 * this._strokeCircumference}`)\n        .replace(/DIAMETER/g, `${this.diameter}`);\n  }\n}\n\n\n/**\n * `<mat-spinner>` component.\n *\n * This is a component definition to be used as a convenience reference to create an\n * indeterminate `<mat-progress-spinner>` instance.\n */\n@Component({\n  moduleId: module.id,\n  selector: 'mat-spinner',\n  host: {\n    'role': 'progressbar',\n    'mode': 'indeterminate',\n    'class': 'mat-spinner mat-progress-spinner',\n    '[class._mat-animation-noopable]': `_noopAnimations`,\n    '[style.width.px]': 'diameter',\n    '[style.height.px]': 'diameter',\n  },\n  inputs: ['color'],\n  templateUrl: 'progress-spinner.html',\n  styleUrls: ['progress-spinner.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class MatSpinner extends MatProgressSpinner {\n  constructor(elementRef: ElementRef<HTMLElement>, platform: Platform,\n              @Optional() @Inject(DOCUMENT) document: any,\n              @Optional() @Inject(ANIMATION_MODULE_TYPE) animationMode: string,\n              @Inject(MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS)\n                  defaults?: MatProgressSpinnerDefaultOptions) {\n    super(elementRef, platform, document, animationMode, defaults);\n    this.mode = 'indeterminate';\n  }\n}\n\n\n/** Gets the shadow root of an element, if supported and the element is inside the Shadow DOM. */\nexport function _getShadowRoot(element: HTMLElement, _document: Document): Node | null {\n  // TODO(crisbeto): see whether we should move this into the CDK\n  // feature detection utilities once #15616 gets merged in.\n  if (typeof window !== 'undefined') {\n    const head = _document.head;\n\n    // Check whether the browser supports Shadow DOM.\n    if (head && ((head as any).createShadowRoot || head.attachShadow)) {\n      const rootNode = element.getRootNode ? element.getRootNode() : null;\n\n      // We need to take the `ShadowRoot` off of `window`, because the built-in types are\n      // incorrect. See https://github.com/Microsoft/TypeScript/issues/27929.\n      if (rootNode instanceof (window as any).ShadowRoot) {\n        return rootNode;\n      }\n    }\n  }\n\n  return null;\n}\n"],"names":[],"mappings":"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"}