UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

866 lines 78.7 kB
import { __decorate, __extends, __metadata } from "tslib"; import { CommonModule } from '@angular/common'; import { Component, ElementRef, EventEmitter, HostBinding, Input, NgModule, Output, Renderer2, ViewChild, ContentChild, AfterViewInit } from '@angular/core'; import { IgxProcessBarTextTemplateDirective, IgxProgressBarGradientDirective, } from './progressbar.common'; var ONE_PERCENT = 0.01; var MIN_VALUE = 0; export var IgxTextAlign; (function (IgxTextAlign) { IgxTextAlign["START"] = "start"; IgxTextAlign["CENTER"] = "center"; IgxTextAlign["END"] = "end"; })(IgxTextAlign || (IgxTextAlign = {})); export var IgxProgressType; (function (IgxProgressType) { IgxProgressType["DANGER"] = "danger"; IgxProgressType["INFO"] = "info"; IgxProgressType["WARNING"] = "warning"; IgxProgressType["SUCCESS"] = "success"; })(IgxProgressType || (IgxProgressType = {})); var BaseProgress = /** @class */ (function () { function BaseProgress() { /** * @hidden */ this.requestAnimationId = undefined; /** * @hidden */ this._valueInPercent = MIN_VALUE; /** * @hidden */ this._max = 100; /** * @hidden */ this._value = MIN_VALUE; /** * @hidden */ this._animate = true; } Object.defineProperty(BaseProgress.prototype, "valueInPercent", { /** *Returns the `IgxLinearProgressBarComponent`/`IgxCircularProgressBarComponent` value in percentage. *```typescript *@ViewChild("MyProgressBar") *public progressBar: IgxLinearProgressBarComponent; // IgxCircularProgressBarComponent *public valuePercent(event){ * let percentValue = this.progressBar.valueInPercent; * alert(percentValue); *} *``` */ get: function () { return this._valueInPercent; }, /** *Sets the `IgxLinearProgressBarComponent`/`IgxCircularProgressBarComponent` value in percentage. *```typescript *@ViewChild("MyProgressBar") *public progressBar: IgxLinearProgressBarComponent; // IgxCircularProgressBarComponent * public setValue(event){ * this.progressBar.valueInPercent = 56; *} * //... *``` *```html *<button igxButton="fab" igxRipple="" (click)="setValue()">setValue</button> *``` */ set: function (value) { this._valueInPercent = value; }, enumerable: true, configurable: true }); /** * @hidden */ BaseProgress.prototype.runAnimation = function (val, step) { var _this = this; this.requestAnimationId = requestAnimationFrame(function () { return _this.updateProgressSmoothly.call(_this, val, step); }); }; /** * @hidden */ BaseProgress.prototype.updateProgressSmoothly = function (val, step) { var _this = this; this._value += step; var passedValue = convertInPercentage(val, this._max); var progressValue = convertInPercentage(this._value, this._max); if (this.valueInPercent === passedValue) { this.updateProgress(val); cancelAnimationFrame(this.requestAnimationId); } else if (this.isInLimitRange(progressValue, passedValue, step)) { this.updateProgress(val); cancelAnimationFrame(this.requestAnimationId); } else { this.valueInPercent = progressValue; this.requestAnimationId = requestAnimationFrame(function () { return _this.updateProgressSmoothly.call(_this, val, step); }); } }; /** * @hidden */ BaseProgress.prototype.updateProgressDirectly = function (val) { this._value = val; this.valueInPercent = convertInPercentage(this._value, this._max); }; /** * @hidden */ BaseProgress.prototype.directionFlow = function (currentValue, prevValue, step) { if (currentValue < prevValue) { return step; } return -step; }; /** * @hidden */ BaseProgress.prototype.isInLimitRange = function (val, comparator, step) { return this.isExceedingUpperLimit(val, comparator, step) || this.isExceedingLowerLimit(val, comparator, step); }; /** * @hidden * * * @param val * @param comparator * @param step */ BaseProgress.prototype.isExceedingUpperLimit = function (val, comparator, step) { return val > comparator && step > 0; }; /** * @hidden * * @param val * @param comparator * @param step */ BaseProgress.prototype.isExceedingLowerLimit = function (val, comparator, step) { return val < comparator && step < 0; }; /** * @hidden * @param step */ BaseProgress.prototype.updateProgress = function (val) { this._value = val; this.valueInPercent = convertInPercentage(this._value, this._max); }; return BaseProgress; }()); export { BaseProgress }; var NEXT_LINEAR_ID = 0; var NEXT_CIRCULAR_ID = 0; var NEXT_GRADIENT_ID = 0; var IgxLinearProgressBarComponent = /** @class */ (function (_super) { __extends(IgxLinearProgressBarComponent, _super); function IgxLinearProgressBarComponent() { var _this = _super.call(this) || this; _this.valueMin = 0; _this.cssClass = 'igx-linear-bar'; /** *Set `IgxLinearProgressBarComponent` to have striped style. By default it is set to false. *```html *<igx-linear-bar [striped]="true" [max]="200" [value]="50"></igx-linear-bar> *``` */ _this.striped = false; /** *Set `IgxLinearProgressBarComponent` to have indeterminate. By default it is set to false. *```html *<igx-linear-bar [indeterminate]="true"></igx-linear-bar> *``` */ _this.indeterminate = false; /**An @Input property that sets the value of the `role` attribute. If not provided it will be automatically set to `progressbar`. * ```html *<igx-linear-bar role="progressbar"></igx-linear-bar> * ``` */ _this.role = 'progressbar'; /**An @Input property that sets the value of `id` attribute. If not provided it will be automatically generated. * ```html *<igx-linear-bar [id]="'igx-linear-bar-55'" [striped]="true" [max]="200" [value]="50"></igx-linear-bar> * ``` */ _this.id = "igx-linear-bar-" + NEXT_LINEAR_ID++; /** *Set the position that defines where the text is aligned. Possible options - `IgxTextAlign.START` (default), `IgxTextAlign.CENTER`, `IgxTextAlign.END`. *```typescript *public positionCenter: IgxTextAlign; *public ngOnInit() { * this.positionCenter = IgxTextAlign.CENTER; *} * //... *``` * ```html *<igx-linear-bar type="warning" [text]="'Custom text'" [textAlign]="positionCenter" [striped]="true"></igx-linear-bar> *``` */ _this.textAlign = IgxTextAlign.START; /** *Set the text to be visible. By default it is set to true. * ```html *<igx-linear-bar type="default" [textVisibility]="false"></igx-linear-bar> *``` */ _this.textVisibility = true; /** *Set the position that defines if the text should be aligned above the progress line. By default is set to false. *```html *<igx-linear-bar type="danger" [textTop]="true"></igx-linear-bar> *``` */ _this.textTop = false; /** *Set type of the `IgxLinearProgressBarComponent`. Possible options - `default`, `success`, `info`, `warning`, and `danger`. *```html *<igx-linear-bar [striped]="false" [max]="100" [value]="0" type="danger"></igx-linear-bar> *``` */ _this.type = 'default'; /** *An event, which is triggered after a progress is changed. *```typescript *public progressChange(event) { * alert("Progress made!"); *} * //... *``` *```html *<igx-linear-bar (onProgressChanged)="progressChange($event)" type="success"> *``` */ _this.onProgressChanged = new EventEmitter(); return _this; } Object.defineProperty(IgxLinearProgressBarComponent.prototype, "animate", { /** *Returns whether the `IgxLinearProgressBarComponent` has animation true/false. *```typescript *@ViewChild("MyProgressBar") *public progressBar: IgxLinearProgressBarComponent; *public animationStatus(event) { * let animationStatus = this.progressBar.animate; * alert(animationStatus); *} *``` */ get: function () { return this._animate; }, /** *Animation on progress `IgxLinearProgressBarComponent`. By default it is set to true. *```html *<igx-linear-bar [animate]="false" [striped]="true" [max]="200" [value]="50"></igx-linear-bar> *``` */ set: function (animate) { this._animate = animate; }, enumerable: true, configurable: true }); Object.defineProperty(IgxLinearProgressBarComponent.prototype, "max", { /** *Returns the the maximum progress value of the `IgxLinearProgressBarComponent`. *```typescript *@ViewChild("MyProgressBar") *public progressBar: IgxLinearProgressBarComponent; *public maxValue(event) { * let max = this.progressBar.max; * alert(max); *} *``` */ get: function () { return this._max; }, /** *Set maximum value that can be passed. By default it is set to 100. *```html *<igx-linear-bar [striped]="false" [max]="200" [value]="0"></igx-linear-bar> *``` */ set: function (maxNum) { this._max = maxNum; }, enumerable: true, configurable: true }); Object.defineProperty(IgxLinearProgressBarComponent.prototype, "step", { /** *Returns the value which update the progress indicator of the `IgxLinearProgressBarComponent`. *```typescript *@ViewChild("MyProgressBar") *public progressBar: IgxLinearProgressBarComponent; *public stepValue(event) { * let step = this.progressBar.step; * alert(step); *} *``` */ get: function () { if (this._step) { return this._step; } return this._max * ONE_PERCENT; }, /** *Sets the value by which progress indicator is updated. By default it is 1% of the maximum value. *```html *<igx-linear-bar [striped]="false" [max]="200" [value]="0" [step]="1"></igx-linear-bar> *``` */ set: function (val) { this._step = Number(val); }, enumerable: true, configurable: true }); Object.defineProperty(IgxLinearProgressBarComponent.prototype, "value", { /** *Returns value that indicates the current `IgxLinearProgressBarComponent` position. *```typescript *@ViewChild("MyProgressBar") *public progressBar: IgxLinearProgressBarComponent; *public getValue(event) { * let value = this.progressBar.value; * alert(value); *} *``` */ get: function () { return this._value; }, /** *Set value that indicates the current `IgxLinearProgressBarComponent` position. *```html *<igx-linear-bar [striped]="false" [max]="200" [value]="50"></igx-linear-bar> *``` */ set: function (val) { val = Number(val); if (this._value === val || this.indeterminate) { return; } var valueInRange = getValueInProperRange(val, this.max); if (isNaN(valueInRange)) { return; } var changedValues = { currentValue: valueInRange, previousValue: this._value }; var updateValue = _super.prototype.directionFlow.call(this, this._value, val, this.step); if (this._animate && val >= this.step) { _super.prototype.runAnimation.call(this, valueInRange, updateValue); } else { _super.prototype.updateProgressDirectly.call(this, valueInRange); } this.onProgressChanged.emit(changedValues); }, enumerable: true, configurable: true }); Object.defineProperty(IgxLinearProgressBarComponent.prototype, "danger", { /** * @hidden */ get: function () { return this.type === IgxProgressType.DANGER; }, enumerable: true, configurable: true }); Object.defineProperty(IgxLinearProgressBarComponent.prototype, "info", { /** * @hidden */ get: function () { return this.type === IgxProgressType.INFO; }, enumerable: true, configurable: true }); Object.defineProperty(IgxLinearProgressBarComponent.prototype, "warning", { /** * @hidden */ get: function () { return this.type === IgxProgressType.WARNING; }, enumerable: true, configurable: true }); Object.defineProperty(IgxLinearProgressBarComponent.prototype, "success", { /** * @hidden */ get: function () { return this.type === IgxProgressType.SUCCESS; }, enumerable: true, configurable: true }); __decorate([ Input(), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean]) ], IgxLinearProgressBarComponent.prototype, "animate", null); __decorate([ HostBinding('attr.aria-valuemax'), Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], IgxLinearProgressBarComponent.prototype, "max", null); __decorate([ Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], IgxLinearProgressBarComponent.prototype, "step", null); __decorate([ HostBinding('attr.aria-valuemin'), __metadata("design:type", Object) ], IgxLinearProgressBarComponent.prototype, "valueMin", void 0); __decorate([ HostBinding('class.igx-linear-bar'), __metadata("design:type", Object) ], IgxLinearProgressBarComponent.prototype, "cssClass", void 0); __decorate([ HostBinding('class.igx-linear-bar--striped'), Input(), __metadata("design:type", Object) ], IgxLinearProgressBarComponent.prototype, "striped", void 0); __decorate([ HostBinding('class.igx-linear-bar--indeterminate'), Input(), __metadata("design:type", Object) ], IgxLinearProgressBarComponent.prototype, "indeterminate", void 0); __decorate([ HostBinding('attr.role'), Input(), __metadata("design:type", Object) ], IgxLinearProgressBarComponent.prototype, "role", void 0); __decorate([ HostBinding('attr.id'), Input(), __metadata("design:type", Object) ], IgxLinearProgressBarComponent.prototype, "id", void 0); __decorate([ Input(), __metadata("design:type", String) ], IgxLinearProgressBarComponent.prototype, "textAlign", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxLinearProgressBarComponent.prototype, "textVisibility", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxLinearProgressBarComponent.prototype, "textTop", void 0); __decorate([ Input(), __metadata("design:type", String) ], IgxLinearProgressBarComponent.prototype, "text", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxLinearProgressBarComponent.prototype, "type", void 0); __decorate([ HostBinding('attr.aria-valuenow'), Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Object]) ], IgxLinearProgressBarComponent.prototype, "value", null); __decorate([ Output(), __metadata("design:type", Object) ], IgxLinearProgressBarComponent.prototype, "onProgressChanged", void 0); __decorate([ HostBinding('class.igx-linear-bar--danger'), __metadata("design:type", Object), __metadata("design:paramtypes", []) ], IgxLinearProgressBarComponent.prototype, "danger", null); __decorate([ HostBinding('class.igx-linear-bar--info'), __metadata("design:type", Object), __metadata("design:paramtypes", []) ], IgxLinearProgressBarComponent.prototype, "info", null); __decorate([ HostBinding('class.igx-linear-bar--warning'), __metadata("design:type", Object), __metadata("design:paramtypes", []) ], IgxLinearProgressBarComponent.prototype, "warning", null); __decorate([ HostBinding('class.igx-linear-bar--success'), __metadata("design:type", Object), __metadata("design:paramtypes", []) ], IgxLinearProgressBarComponent.prototype, "success", null); IgxLinearProgressBarComponent = __decorate([ Component({ selector: 'igx-linear-bar', template: "<div class=\"igx-linear-bar__base\">\n <div class=\"igx-linear-bar__indicator\"\n [style.width.%]=\"valueInPercent\"></div>\n</div>\n\n<span\n class=\"igx-linear-bar__value\"\n [ngClass]=\"{\n 'igx-linear-bar__value--start': textAlign === 'start',\n 'igx-linear-bar__value--center': textAlign === 'center',\n 'igx-linear-bar__value--end': textAlign === 'end',\n 'igx-linear-bar__value--top': textTop,\n 'igx-linear-bar__value--hidden': !textVisibility\n }\">\n {{text ? text : valueInPercent + '%'}}\n</span>\n" }), __metadata("design:paramtypes", []) ], IgxLinearProgressBarComponent); return IgxLinearProgressBarComponent; }(BaseProgress)); export { IgxLinearProgressBarComponent }; var IgxCircularProgressBarComponent = /** @class */ (function (_super) { __extends(IgxCircularProgressBarComponent, _super); function IgxCircularProgressBarComponent(renderer) { var _this = _super.call(this) || this; _this.renderer = renderer; _this.STROKE_OPACITY_DVIDER = 100; _this.STROKE_OPACITY_ADDITION = .2; /** @hidden */ _this.cssClass = 'igx-circular-bar'; /** *An event, which is triggered after a progress is changed. *```typescript *public progressChange(event) { * alert("Progress made!"); *} * //... *``` *```html *<igx-circular-bar [value]="currentValue" (onProgressChanged)="progressChange($event)"></igx-circular-bar> *``` */ _this.onProgressChanged = new EventEmitter(); /** *An @Input property that sets the value of `id` attribute. If not provided it will be automatically generated. *```html *<igx-circular-bar [id]="'igx-circular-bar-55'" [value]="50"></igx-circular-bar> *``` */ _this.id = "igx-circular-bar-" + NEXT_CIRCULAR_ID++; /** * @hidden */ _this.gradientId = "igx-circular-gradient-" + NEXT_GRADIENT_ID++; /** *An @Input property that sets the value of the `indeterminate` attribute. If not provided it will be automatically set to false. *```html *<igx-circular-bar [indeterminate]="true"></igx-circular-bar> *``` */ _this.indeterminate = false; /** *Sets the text visibility. By default it is set to true. *```html *<igx-circular-bar [textVisibility]="false"></igx-circular-bar> *``` */ _this.textVisibility = true; _this._circleRadius = 46; _this._circumference = 2 * Math.PI * _this._circleRadius; return _this; } Object.defineProperty(IgxCircularProgressBarComponent.prototype, "context", { /** * @hidden */ get: function () { return { $implicit: { value: this.value, valueInPercent: this.valueInPercent, max: this.max } }; }, enumerable: true, configurable: true }); Object.defineProperty(IgxCircularProgressBarComponent.prototype, "animate", { /** *Returns whether the `IgxCircularProgressBarComponent` has animation true/false. *```typescript *@ViewChild("MyProgressBar") *public progressBar: IgxCircularProgressBarComponent; *public animationStatus(event) { * let animationStatus = this.progressBar.animate; * alert(animationStatus); *} *``` */ get: function () { return this._animate; }, /** *Animation on progress `IgxCircularProgressBarComponent`. By default it is set to true. *```html *<igx-circular-bar [animate]="false" [value]="50"></igx-circular-bar> *``` */ set: function (animate) { this._animate = animate; }, enumerable: true, configurable: true }); Object.defineProperty(IgxCircularProgressBarComponent.prototype, "max", { /** *Returns the the maximum progress value of the `IgxCircularProgressBarComponent`. *```typescript *@ViewChild("MyProgressBar") *public progressBar: IgxCircularProgressBarComponent; *public maxValue(event) { * let max = this.progressBar.max; * alert(max); *} *``` *```html *<igx-circular-bar [max]="245" [animate]="false" [value]="currentValue"></igx-circular-bar> *``` */ get: function () { return this._max; }, /** *Set maximum value that can be passed. By default it is set to 100. *```html *<igx-circular-bar [max]="200" [value]="0"></igx-circular-bar> *``` */ set: function (maxNum) { this._max = maxNum; }, enumerable: true, configurable: true }); Object.defineProperty(IgxCircularProgressBarComponent.prototype, "step", { /** *Returns the value which update the progress indicator of the `IgxCircularProgressBarComponent`. *```typescript *@ViewChild("MyProgressBar") *public progressBar: IgxCircularProgressBarComponent; *public stepValue(event) { * let step = this.progressBar.step; * alert(step); *} *``` */ get: function () { if (this._step) { return this._step; } return this._max * ONE_PERCENT; }, /** *Sets the value by which progress indicator is updated. By default it is 1% of the maximum value. *```html *<igx-circular-bar [striped]="false" [max]="200" [value]="0" [step]="1"></igx-circular-bar> *``` */ set: function (val) { this._step = Number(val); }, enumerable: true, configurable: true }); Object.defineProperty(IgxCircularProgressBarComponent.prototype, "value", { /** *Returns value that indicates the current `IgxCircularProgressBarComponent` position. *```typescript *@ViewChild("MyProgressBar") *public progressBar: IgxCircularProgressBarComponent; *public getValue(event) { * let value = this.progressBar.value; * alert(value); *} *``` *```html *<button igxButton="fab" igxRipple="" (click)="getValue()">Click</button> *``` */ get: function () { return this._value; }, /** *Set value that indicates the current `IgxCircularProgressBarComponent` position. *```html *<igx-circular-bar [value]="50"></igx-circular-bar> *``` */ set: function (val) { val = Number(val); if (this._value === val || this.indeterminate) { return; } var valueInProperRange = getValueInProperRange(val, this.max); if (isNaN(valueInProperRange)) { return; } var changedValues = { currentValue: valueInProperRange, previousValue: this._value }; var updateValue = _super.prototype.directionFlow.call(this, this._value, val, this.step); if (this.animate && val >= this.step) { _super.prototype.runAnimation.call(this, valueInProperRange, updateValue); } else { this.updateProgressDirectly(valueInProperRange); } this.onProgressChanged.emit(changedValues); }, enumerable: true, configurable: true }); IgxCircularProgressBarComponent.prototype.ngAfterViewInit = function () { this.renderer.setStyle(this._svgCircle.nativeElement, 'stroke', "url(#" + this.gradientId + ")"); }; /** * @hidden */ IgxCircularProgressBarComponent.prototype.updateProgressSmoothly = function (val, step) { // Set frames for the animation var FRAMES = [{ strokeDashoffset: this.getProgress(this._value), strokeOpacity: (this._value / this.STROKE_OPACITY_DVIDER) + this.STROKE_OPACITY_ADDITION }, { strokeDashoffset: this.getProgress(this.valueInPercent), strokeOpacity: (this.valueInPercent / this.STROKE_OPACITY_DVIDER) + this.STROKE_OPACITY_ADDITION }]; this._svgCircle.nativeElement.animate(FRAMES, { easing: 'ease-out', fill: 'forwards' }); _super.prototype.updateProgressSmoothly.call(this, val, step); }; Object.defineProperty(IgxCircularProgressBarComponent.prototype, "textContent", { /** * @hidden */ get: function () { return this.text; }, enumerable: true, configurable: true }); /** * @hidden */ IgxCircularProgressBarComponent.prototype.updateProgressDirectly = function (val) { _super.prototype.updateProgressDirectly.call(this, val); this.renderer.setStyle(this._svgCircle.nativeElement, 'stroke-dashoffset', this.getProgress(this.valueInPercent)); this.renderer.setStyle(this._svgCircle.nativeElement, 'stroke-opacity', (this.valueInPercent / this.STROKE_OPACITY_DVIDER) + this.STROKE_OPACITY_ADDITION); }; IgxCircularProgressBarComponent.prototype.getProgress = function (percentage) { // Reverse the sign here: '-' should become '+' in RTL mode return this._circumference - (percentage * this._circumference / 100); }; IgxCircularProgressBarComponent.ctorParameters = function () { return [ { type: Renderer2 } ]; }; __decorate([ HostBinding('class.igx-circular-bar'), __metadata("design:type", Object) ], IgxCircularProgressBarComponent.prototype, "cssClass", void 0); __decorate([ Output(), __metadata("design:type", Object) ], IgxCircularProgressBarComponent.prototype, "onProgressChanged", void 0); __decorate([ HostBinding('attr.id'), Input(), __metadata("design:type", Object) ], IgxCircularProgressBarComponent.prototype, "id", void 0); __decorate([ HostBinding('class.igx-circular-bar--indeterminate'), Input(), __metadata("design:type", Object) ], IgxCircularProgressBarComponent.prototype, "indeterminate", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxCircularProgressBarComponent.prototype, "textVisibility", void 0); __decorate([ Input(), __metadata("design:type", String) ], IgxCircularProgressBarComponent.prototype, "text", void 0); __decorate([ ContentChild(IgxProcessBarTextTemplateDirective, { read: IgxProcessBarTextTemplateDirective }), __metadata("design:type", IgxProcessBarTextTemplateDirective) ], IgxCircularProgressBarComponent.prototype, "textTemplate", void 0); __decorate([ ContentChild(IgxProgressBarGradientDirective, { read: IgxProgressBarGradientDirective }), __metadata("design:type", IgxProgressBarGradientDirective) ], IgxCircularProgressBarComponent.prototype, "gradientTemplate", void 0); __decorate([ Input(), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean]) ], IgxCircularProgressBarComponent.prototype, "animate", null); __decorate([ Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], IgxCircularProgressBarComponent.prototype, "max", null); __decorate([ Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], IgxCircularProgressBarComponent.prototype, "step", null); __decorate([ Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], IgxCircularProgressBarComponent.prototype, "value", null); __decorate([ ViewChild('circle', { static: true }), __metadata("design:type", ElementRef) ], IgxCircularProgressBarComponent.prototype, "_svgCircle", void 0); IgxCircularProgressBarComponent = __decorate([ Component({ selector: 'igx-circular-bar', template: "<svg #svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\"\n viewBox=\"0 0 100 100\"\n preserveAspectRatio=\"xMidYMid meet\"\n role=\"progressbar\"\n aria-valuemin=\"0\"\n [attr.aria-valuemax]=\"max\"\n [attr.aria-valuenow]=\"value\">\n <svg:circle class=\"igx-circular-bar__inner\" cx=\"50\" cy=\"50\" r=\"46\" />\n <svg:circle #circle class=\"igx-circular-bar__outer\" cx=\"50\" cy=\"50\" r=\"46\" />\n <svg:text *ngIf=\"textVisibility\" text-anchor=\"middle\" x=\"50\" y=\"60\">\n <ng-container *ngTemplateOutlet=\"textTemplate ? textTemplate.template : defaultTextTemplate;\n context: context\">\n </ng-container>\n </svg:text>\n\n <svg:defs>\n <ng-container\n *ngTemplateOutlet=\"gradientTemplate ? gradientTemplate.template : defaultGradientTemplate;\n context: { $implicit: gradientId }\">\n </ng-container>\n </svg:defs>\n\n <ng-template #defaultTextTemplate>\n <svg:tspan class=\"igx-circular-bar__text\">\n {{textContent ? textContent: valueInPercent + '%'}}\n </svg:tspan>\n </ng-template>\n\n <ng-template #defaultGradientTemplate>\n <svg:linearGradient [id]=\"gradientId\" gradientTransform=\"rotate(90)\">\n <stop offset=\"0%\" class=\"igx-circular-bar__gradient-start\" />\n <stop offset=\"100%\" class=\"igx-circular-bar__gradient-end\" />\n </svg:linearGradient>\n </ng-template>\n</svg>\n\n" }), __metadata("design:paramtypes", [Renderer2]) ], IgxCircularProgressBarComponent); return IgxCircularProgressBarComponent; }(BaseProgress)); export { IgxCircularProgressBarComponent }; export function getValueInProperRange(value, max, min) { if (min === void 0) { min = 0; } return Math.max(Math.min(value, max), min); } export function convertInPercentage(value, max) { return Math.floor(100 * value / max); } /** * @hidden */ var IgxProgressBarModule = /** @class */ (function () { function IgxProgressBarModule() { } IgxProgressBarModule = __decorate([ NgModule({ declarations: [ IgxLinearProgressBarComponent, IgxCircularProgressBarComponent, IgxProcessBarTextTemplateDirective, IgxProgressBarGradientDirective, ], exports: [ IgxLinearProgressBarComponent, IgxCircularProgressBarComponent, IgxProcessBarTextTemplateDirective, IgxProgressBarGradientDirective, ], imports: [CommonModule] }) ], IgxProgressBarModule); return IgxProgressBarModule; }()); export { IgxProgressBarModule }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3NiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9wcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGFBQWEsRUFDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGtDQUFrQyxFQUNsQywrQkFBK0IsR0FDbEMsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDekIsSUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBRXBCLE1BQU0sQ0FBTixJQUFZLFlBSVg7QUFKRCxXQUFZLFlBQVk7SUFDcEIsK0JBQWUsQ0FBQTtJQUNmLGlDQUFpQixDQUFBO0lBQ2pCLDJCQUFXLENBQUE7QUFDZixDQUFDLEVBSlcsWUFBWSxLQUFaLFlBQVksUUFJdkI7QUFFRCxNQUFNLENBQU4sSUFBWSxlQUtYO0FBTEQsV0FBWSxlQUFlO0lBQ3ZCLG9DQUFpQixDQUFBO0lBQ2pCLGdDQUFhLENBQUE7SUFDYixzQ0FBbUIsQ0FBQTtJQUNuQixzQ0FBbUIsQ0FBQTtBQUN2QixDQUFDLEVBTFcsZUFBZSxLQUFmLGVBQWUsUUFLMUI7QUFPRDtJQUFBO1FBQ0k7O1dBRUc7UUFDSyx1QkFBa0IsR0FBVyxTQUFTLENBQUM7UUFFL0M7O1dBRUc7UUFDTyxvQkFBZSxHQUFHLFNBQVMsQ0FBQztRQUN0Qzs7V0FFRztRQUNPLFNBQUksR0FBRyxHQUFHLENBQUM7UUFDckI7O1dBRUc7UUFDTyxXQUFNLEdBQUcsU0FBUyxD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MUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVEOztHQUVHO0FBZ0JIO0lBQUE7SUFBb0MsQ0FBQztJQUF4QixvQkFBb0I7UUFmaEMsUUFBUSxDQUFDO1lBQ04sWUFBWSxFQUFFO2dCQUNWLDZCQUE2QjtnQkFDN0IsK0JBQStCO2dCQUMvQixrQ0FBa0M7Z0JBQ2xDLCtCQUErQjthQUNsQztZQUNELE9BQU8sRUFBRTtnQkFDTCw2QkFBNkI7Z0JBQzdCLCtCQUErQjtnQkFDL0Isa0NBQWtDO2dCQUNsQywrQkFBK0I7YUFDbEM7WUFDRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7U0FDMUIsQ0FBQztPQUNXLG9CQUFvQixDQUFJO0lBQUQsMkJBQUM7Q0FBQSxBQUFyQyxJQUFxQztTQUF4QixvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEFmdGVyVmlld0luaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIElneFByb2Nlc3NCYXJUZXh0VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgSWd4UHJvZ3Jlc3NCYXJHcmFkaWVudERpcmVjdGl2ZSxcbn0gZnJvbSAnLi9wcm9ncmVzc2Jhci5jb21tb24nO1xuaW1wb3J0IHsgSUJhc2VFdmVudEFyZ3MgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcblxuY29uc3QgT05FX1BFUkNFTlQgPSAwLjAxO1xuY29uc3QgTUlOX1ZBTFVFID0gMDtcblxuZXhwb3J0IGVudW0gSWd4VGV4dEFsaWduIHtcbiAgICBTVEFSVCA9ICdzdGFydCcsXG4gICAgQ0VOVEVSID0gJ2NlbnRlcicsXG4gICAgRU5EID0gJ2VuZCdcbn1cblxuZXhwb3J0IGVudW0gSWd4UHJvZ3Jlc3NUeXBlIHtcbiAgICBEQU5HRVIgPSAnZGFuZ2VyJyxcbiAgICBJTkZPID0gJ2luZm8nLFxuICAgIFdBUk5JTkcgPSAnd2FybmluZycsXG4gICAgU1VDQ0VTUyA9ICdzdWNjZXNzJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDaGFuZ2VQcm9ncmVzc0V2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICBwcmV2aW91c1ZhbHVlOiBudW1iZXI7XG4gICAgY3VycmVudFZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlUHJvZ3Jlc3Mge1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlcXVlc3RBbmltYXRpb25JZDogbnVtYmVyID0gdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfdmFsdWVJblBlcmNlbnQgPSBNSU5fVkFMVUU7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfbWF4ID0gMTAwO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX3ZhbHVlID0gTUlOX1ZBT