@angular/material
Version:
Angular Material
398 lines (386 loc) • 22.8 kB
JavaScript
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/cdk/platform'), require('@angular/material/core'), require('@angular/common'), require('@angular/cdk/coercion')) :
typeof define === 'function' && define.amd ? define(['exports', '@angular/core', '@angular/cdk/platform', '@angular/material/core', '@angular/common', '@angular/cdk/coercion'], factory) :
(factory((global.ng = global.ng || {}, global.ng.material = global.ng.material || {}, global.ng.material.progressSpinner = global.ng.material.progressSpinner || {}),global.ng.core,global.ng.cdk.platform,global.ng.material.core,global.ng.common,global.ng.cdk.coercion));
}(this, (function (exports,_angular_core,_angular_cdk_platform,_angular_material_core,_angular_common,_angular_cdk_coercion) { 'use strict';
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
/* global Reflect, Promise */
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
function __extends(d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* Base reference size of the spinner.
* \@docs-private
*/
var BASE_SIZE = 100;
/**
* Base reference stroke width of the spinner.
* \@docs-private
*/
var BASE_STROKE_WIDTH = 10;
/**
* \@docs-private
*/
var MatProgressSpinnerBase = /** @class */ (function () {
function MatProgressSpinnerBase(_elementRef) {
this._elementRef = _elementRef;
}
return MatProgressSpinnerBase;
}());
var _MatProgressSpinnerMixinBase = _angular_material_core.mixinColor(MatProgressSpinnerBase, 'primary');
// .0001 percentage difference is necessary in order to avoid unwanted animation frames
// for example because the animation duration is 4 seconds, .1% accounts to 4ms
// which are enough to see the flicker described in
// https://github.com/angular/material2/issues/8984
var 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";
/**
* `<mat-progress-spinner>` component.
*/
var MatProgressSpinner = /** @class */ (function (_super) {
__extends(MatProgressSpinner, _super);
function MatProgressSpinner(_elementRef, platform, _document) {
var _this = _super.call(this, _elementRef) || this;
_this._elementRef = _elementRef;
_this._document = _document;
_this._value = 0;
_this._fallbackAnimation = false;
/**
* The width and height of the host element. Will grow with stroke width.
*/
_this._elementSize = BASE_SIZE;
_this._diameter = BASE_SIZE;
/**
* Mode of the progress circle
*/
_this.mode = 'determinate';
_this._fallbackAnimation = platform.EDGE || platform.TRIDENT;
// On IE and Edge, we can't animate the `stroke-dashoffset`
// reliably so we fall back to a non-spec animation.
var /** @type {?} */ animationClass = "mat-progress-spinner-indeterminate" + (_this._fallbackAnimation ? '-fallback' : '') + "-animation";
_elementRef.nativeElement.classList.add(animationClass);
return _this;
}
Object.defineProperty(MatProgressSpinner.prototype, "diameter", {
get: /**
* The diameter of the progress spinner (will set width and height of svg).
* @return {?}
*/
function () { return this._diameter; },
set: /**
* @param {?} size
* @return {?}
*/
function (size) {
this._diameter = _angular_cdk_coercion.coerceNumberProperty(size);
if (!this._fallbackAnimation && !MatProgressSpinner.diameters.has(this._diameter)) {
this._attachStyleNode();
}
this._updateElementSize();
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatProgressSpinner.prototype, "strokeWidth", {
get: /**
* Stroke width of the progress spinner.
* @return {?}
*/
function () {
return this._strokeWidth || this.diameter / 10;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._strokeWidth = _angular_cdk_coercion.coerceNumberProperty(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatProgressSpinner.prototype, "value", {
get: /**
* Value of the progress circle.
* @return {?}
*/
function () {
return this.mode === 'determinate' ? this._value : 0;
},
set: /**
* @param {?} newValue
* @return {?}
*/
function (newValue) {
this._value = Math.max(0, Math.min(100, _angular_cdk_coercion.coerceNumberProperty(newValue)));
},
enumerable: true,
configurable: true
});
/**
* @param {?} changes
* @return {?}
*/
MatProgressSpinner.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
if (changes["strokeWidth"] || changes["diameter"]) {
this._updateElementSize();
}
};
Object.defineProperty(MatProgressSpinner.prototype, "_circleRadius", {
/** The radius of the spinner, adjusted for stroke width. */
get: /**
* The radius of the spinner, adjusted for stroke width.
* @return {?}
*/
function () {
return (this.diameter - BASE_STROKE_WIDTH) / 2;
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatProgressSpinner.prototype, "_viewBox", {
/** The view box of the spinner's svg element. */
get: /**
* The view box of the spinner's svg element.
* @return {?}
*/
function () {
var /** @type {?} */ viewBox = this._circleRadius * 2 + this.strokeWidth;
return "0 0 " + viewBox + " " + viewBox;
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatProgressSpinner.prototype, "_strokeCircumference", {
/** The stroke circumference of the svg circle. */
get: /**
* The stroke circumference of the svg circle.
* @return {?}
*/
function () {
return 2 * Math.PI * this._circleRadius;
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatProgressSpinner.prototype, "_strokeDashOffset", {
/** The dash offset of the svg circle. */
get: /**
* The dash offset of the svg circle.
* @return {?}
*/
function () {
if (this.mode === 'determinate') {
return this._strokeCircumference * (100 - this._value) / 100;
}
// In fallback mode set the circle to 80% and rotate it with CSS.
if (this._fallbackAnimation && this.mode === 'indeterminate') {
return this._strokeCircumference * 0.2;
}
return null;
},
enumerable: true,
configurable: true
});
Object.defineProperty(MatProgressSpinner.prototype, "_circleStrokeWidth", {
/** Stroke width of the circle in percent. */
get: /**
* Stroke width of the circle in percent.
* @return {?}
*/
function () {
return this.strokeWidth / this._elementSize * 100;
},
enumerable: true,
configurable: true
});
/**
* Dynamically generates a style tag containing the correct animation for this diameter.
* @return {?}
*/
MatProgressSpinner.prototype._attachStyleNode = /**
* Dynamically generates a style tag containing the correct animation for this diameter.
* @return {?}
*/
function () {
var /** @type {?} */ styleTag = MatProgressSpinner.styleTag;
if (!styleTag) {
styleTag = this._document.createElement('style');
this._document.head.appendChild(styleTag);
MatProgressSpinner.styleTag = styleTag;
}
if (styleTag && styleTag.sheet) {
(/** @type {?} */ (styleTag.sheet)).insertRule(this._getAnimationText(), 0);
}
MatProgressSpinner.diameters.add(this.diameter);
};
/**
* Generates animation styles adjusted for the spinner's diameter.
* @return {?}
*/
MatProgressSpinner.prototype._getAnimationText = /**
* Generates animation styles adjusted for the spinner's diameter.
* @return {?}
*/
function () {
return INDETERMINATE_ANIMATION_TEMPLATE
.replace(/START_VALUE/g, "" + 0.95 * this._strokeCircumference)
.replace(/END_VALUE/g, "" + 0.2 * this._strokeCircumference)
.replace(/DIAMETER/g, "" + this.diameter);
};
/**
* Updates the spinner element size based on its diameter.
* @return {?}
*/
MatProgressSpinner.prototype._updateElementSize = /**
* Updates the spinner element size based on its diameter.
* @return {?}
*/
function () {
this._elementSize = this._diameter + Math.max(this.strokeWidth - BASE_STROKE_WIDTH, 0);
};
/**
* Tracks diameters of existing instances to de-dupe generated styles (default d = 100)
*/
MatProgressSpinner.diameters = new Set([BASE_SIZE]);
/**
* Used for storing all of the generated keyframe animations.
* \@dynamic
*/
MatProgressSpinner.styleTag = null;
MatProgressSpinner.decorators = [
{ type: _angular_core.Component, args: [{selector: 'mat-progress-spinner',
exportAs: 'matProgressSpinner',
host: {
'role': 'progressbar',
'class': 'mat-progress-spinner',
'[style.width.px]': '_elementSize',
'[style.height.px]': '_elementSize',
'[attr.aria-valuemin]': 'mode === "determinate" ? 0 : null',
'[attr.aria-valuemax]': 'mode === "determinate" ? 100 : null',
'[attr.aria-valuenow]': 'value',
'[attr.mode]': 'mode',
},
inputs: ['color'],
template: "<svg [style.width.px]=\"_elementSize\" [style.height.px]=\"_elementSize\" [attr.viewBox]=\"_viewBox\" preserveAspectRatio=\"xMidYMid meet\" focusable=\"false\"><circle cx=\"50%\" cy=\"50%\" [attr.r]=\"_circleRadius\" [style.animation-name]=\"'mat-progress-spinner-stroke-rotate-' + diameter\" [style.stroke-dashoffset.px]=\"_strokeDashOffset\" [style.stroke-dasharray.px]=\"_strokeCircumference\" [style.stroke-width.%]=\"_circleStrokeWidth\"></circle></svg>",
styles: [".mat-progress-spinner{display:block;position:relative}.mat-progress-spinner svg{position:absolute;transform:rotate(-90deg);top:0;left:0;transform-origin:center;overflow:visible}.mat-progress-spinner circle{fill:transparent;transform-origin:center;transition:stroke-dashoffset 225ms linear}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate]{animation:mat-progress-spinner-linear-rotate 2s linear infinite}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition-property:stroke;animation-duration:4s;animation-timing-function:cubic-bezier(.35,0,.25,1);animation-iteration-count:infinite}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate]{animation:mat-progress-spinner-stroke-rotate-fallback 10s cubic-bezier(.87,.03,.33,1) infinite}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition-property:stroke}@keyframes mat-progress-spinner-linear-rotate{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes mat-progress-spinner-stroke-rotate-100{0%{stroke-dashoffset:268.60617px;transform:rotate(0)}12.5%{stroke-dashoffset:56.54867px;transform:rotate(0)}12.5001%{stroke-dashoffset:56.54867px;transform:rotateX(180deg) rotate(72.5deg)}25%{stroke-dashoffset:268.60617px;transform:rotateX(180deg) rotate(72.5deg)}25.0001%{stroke-dashoffset:268.60617px;transform:rotate(270deg)}37.5%{stroke-dashoffset:56.54867px;transform:rotate(270deg)}37.5001%{stroke-dashoffset:56.54867px;transform:rotateX(180deg) rotate(161.5deg)}50%{stroke-dashoffset:268.60617px;transform:rotateX(180deg) rotate(161.5deg)}50.0001%{stroke-dashoffset:268.60617px;transform:rotate(180deg)}62.5%{stroke-dashoffset:56.54867px;transform:rotate(180deg)}62.5001%{stroke-dashoffset:56.54867px;transform:rotateX(180deg) rotate(251.5deg)}75%{stroke-dashoffset:268.60617px;transform:rotateX(180deg) rotate(251.5deg)}75.0001%{stroke-dashoffset:268.60617px;transform:rotate(90deg)}87.5%{stroke-dashoffset:56.54867px;transform:rotate(90deg)}87.5001%{stroke-dashoffset:56.54867px;transform:rotateX(180deg) rotate(341.5deg)}100%{stroke-dashoffset:268.60617px;transform:rotateX(180deg) rotate(341.5deg)}}@keyframes mat-progress-spinner-stroke-rotate-fallback{0%{transform:rotate(0)}25%{transform:rotate(1170deg)}50%{transform:rotate(2340deg)}75%{transform:rotate(3510deg)}100%{transform:rotate(4680deg)}}"],
changeDetection: _angular_core.ChangeDetectionStrategy.OnPush,
encapsulation: _angular_core.ViewEncapsulation.None,
preserveWhitespaces: false,
},] },
];
/** @nocollapse */
MatProgressSpinner.ctorParameters = function () { return [
{ type: _angular_core.ElementRef, },
{ type: _angular_cdk_platform.Platform, },
{ type: undefined, decorators: [{ type: _angular_core.Optional }, { type: _angular_core.Inject, args: [_angular_common.DOCUMENT,] },] },
]; };
MatProgressSpinner.propDecorators = {
"diameter": [{ type: _angular_core.Input },],
"strokeWidth": [{ type: _angular_core.Input },],
"mode": [{ type: _angular_core.Input },],
"value": [{ type: _angular_core.Input },],
};
return MatProgressSpinner;
}(_MatProgressSpinnerMixinBase));
/**
* `<mat-spinner>` component.
*
* This is a component definition to be used as a convenience reference to create an
* indeterminate `<mat-progress-spinner>` instance.
*/
var MatSpinner = /** @class */ (function (_super) {
__extends(MatSpinner, _super);
function MatSpinner(elementRef, platform, document) {
var _this = _super.call(this, elementRef, platform, document) || this;
_this.mode = 'indeterminate';
return _this;
}
MatSpinner.decorators = [
{ type: _angular_core.Component, args: [{selector: 'mat-spinner',
host: {
'role': 'progressbar',
'mode': 'indeterminate',
'class': 'mat-spinner mat-progress-spinner',
'[style.width.px]': '_elementSize',
'[style.height.px]': '_elementSize',
},
inputs: ['color'],
template: "<svg [style.width.px]=\"_elementSize\" [style.height.px]=\"_elementSize\" [attr.viewBox]=\"_viewBox\" preserveAspectRatio=\"xMidYMid meet\" focusable=\"false\"><circle cx=\"50%\" cy=\"50%\" [attr.r]=\"_circleRadius\" [style.animation-name]=\"'mat-progress-spinner-stroke-rotate-' + diameter\" [style.stroke-dashoffset.px]=\"_strokeDashOffset\" [style.stroke-dasharray.px]=\"_strokeCircumference\" [style.stroke-width.%]=\"_circleStrokeWidth\"></circle></svg>",
styles: [".mat-progress-spinner{display:block;position:relative}.mat-progress-spinner svg{position:absolute;transform:rotate(-90deg);top:0;left:0;transform-origin:center;overflow:visible}.mat-progress-spinner circle{fill:transparent;transform-origin:center;transition:stroke-dashoffset 225ms linear}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate]{animation:mat-progress-spinner-linear-rotate 2s linear infinite}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition-property:stroke;animation-duration:4s;animation-timing-function:cubic-bezier(.35,0,.25,1);animation-iteration-count:infinite}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate]{animation:mat-progress-spinner-stroke-rotate-fallback 10s cubic-bezier(.87,.03,.33,1) infinite}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition-property:stroke}@keyframes mat-progress-spinner-linear-rotate{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes mat-progress-spinner-stroke-rotate-100{0%{stroke-dashoffset:268.60617px;transform:rotate(0)}12.5%{stroke-dashoffset:56.54867px;transform:rotate(0)}12.5001%{stroke-dashoffset:56.54867px;transform:rotateX(180deg) rotate(72.5deg)}25%{stroke-dashoffset:268.60617px;transform:rotateX(180deg) rotate(72.5deg)}25.0001%{stroke-dashoffset:268.60617px;transform:rotate(270deg)}37.5%{stroke-dashoffset:56.54867px;transform:rotate(270deg)}37.5001%{stroke-dashoffset:56.54867px;transform:rotateX(180deg) rotate(161.5deg)}50%{stroke-dashoffset:268.60617px;transform:rotateX(180deg) rotate(161.5deg)}50.0001%{stroke-dashoffset:268.60617px;transform:rotate(180deg)}62.5%{stroke-dashoffset:56.54867px;transform:rotate(180deg)}62.5001%{stroke-dashoffset:56.54867px;transform:rotateX(180deg) rotate(251.5deg)}75%{stroke-dashoffset:268.60617px;transform:rotateX(180deg) rotate(251.5deg)}75.0001%{stroke-dashoffset:268.60617px;transform:rotate(90deg)}87.5%{stroke-dashoffset:56.54867px;transform:rotate(90deg)}87.5001%{stroke-dashoffset:56.54867px;transform:rotateX(180deg) rotate(341.5deg)}100%{stroke-dashoffset:268.60617px;transform:rotateX(180deg) rotate(341.5deg)}}@keyframes mat-progress-spinner-stroke-rotate-fallback{0%{transform:rotate(0)}25%{transform:rotate(1170deg)}50%{transform:rotate(2340deg)}75%{transform:rotate(3510deg)}100%{transform:rotate(4680deg)}}"],
changeDetection: _angular_core.ChangeDetectionStrategy.OnPush,
encapsulation: _angular_core.ViewEncapsulation.None,
preserveWhitespaces: false,
},] },
];
/** @nocollapse */
MatSpinner.ctorParameters = function () { return [
{ type: _angular_core.ElementRef, },
{ type: _angular_cdk_platform.Platform, },
{ type: undefined, decorators: [{ type: _angular_core.Optional }, { type: _angular_core.Inject, args: [_angular_common.DOCUMENT,] },] },
]; };
return MatSpinner;
}(MatProgressSpinner));
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var MatProgressSpinnerModule = /** @class */ (function () {
function MatProgressSpinnerModule() {
}
MatProgressSpinnerModule.decorators = [
{ type: _angular_core.NgModule, args: [{
imports: [_angular_material_core.MatCommonModule, _angular_cdk_platform.PlatformModule],
exports: [
MatProgressSpinner,
MatSpinner,
_angular_material_core.MatCommonModule
],
declarations: [
MatProgressSpinner,
MatSpinner
],
},] },
];
/** @nocollapse */
MatProgressSpinnerModule.ctorParameters = function () { return []; };
return MatProgressSpinnerModule;
}());
exports.MatProgressSpinnerModule = MatProgressSpinnerModule;
exports.MatProgressSpinnerBase = MatProgressSpinnerBase;
exports._MatProgressSpinnerMixinBase = _MatProgressSpinnerMixinBase;
exports.MatProgressSpinner = MatProgressSpinner;
exports.MatSpinner = MatSpinner;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=material-progress-spinner.umd.js.map