ngx-pluto
Version:
189 lines • 19 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ViewEncapsulation, Input, ContentChildren, QueryList, ElementRef } from "@angular/core";
import { NpStep } from "./step";
/**
* @ignore
*/
var NpStepperComponent = /** @class */ (function () {
function NpStepperComponent(elemRef) {
this.elemRef = elemRef;
this._selectedIndex = 0;
}
Object.defineProperty(NpStepperComponent.prototype, "selectedIndex", {
get: /**
* @return {?}
*/
function () { return this._selectedIndex; },
set: /**
* @param {?} index
* @return {?}
*/
function (index) {
/** @type {?} */
var idx = +index;
if (idx < 0) {
this._selectedIndex = 0;
this.setStatus(idx);
return;
}
if (this.steps && this.steps.length > 0 && idx > this.steps.length - 1) {
this._selectedIndex = this.steps.length - 1;
this.setStatus(idx);
return;
}
this._selectedIndex = idx;
this.setStatus(idx);
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
NpStepperComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
NpStepperComponent.prototype.ngAfterContentInit = /**
* @return {?}
*/
function () {
this.selectedIndex = this._selectedIndex;
};
/**
* @return {?}
*/
NpStepperComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
this.adjustStepHeaderTitlePosition();
};
// Adjust first and last step header title position
// Adjust first and last step header title position
/**
* @private
* @return {?}
*/
NpStepperComponent.prototype.adjustStepHeaderTitlePosition =
// Adjust first and last step header title position
/**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var progressContainer = (/** @type {?} */ (this.elemRef.nativeElement.querySelector('.progress-container')));
/** @type {?} */
var headerIcon = (/** @type {?} */ (this.elemRef.nativeElement.querySelector('.progress-circle-template')));
/** @type {?} */
var headerCircle = (/** @type {?} */ (this.elemRef.nativeElement.querySelector('.progress-circle')));
/** @type {?} */
var headerTitleFirst = (/** @type {?} */ (this.elemRef.nativeElement.querySelector('.step-title-first')));
/** @type {?} */
var headerTitleLast = (/** @type {?} */ (this.elemRef.nativeElement.querySelector('.step-title-last')));
if (progressContainer && (headerIcon || headerCircle) && headerTitleFirst && headerTitleLast) {
/** @type {?} */
var progressContainerWidth = progressContainer.offsetWidth;
/** @type {?} */
var headerWidth = headerIcon ? headerIcon.offsetWidth : headerCircle.offsetWidth;
headerTitleFirst.style.marginLeft = '-' + Math.abs(progressContainerWidth - headerWidth) + 'px';
headerTitleLast.style.marginRight = '-' + Math.abs(progressContainerWidth - headerWidth) + 'px';
}
};
/**
* @return {?}
*/
NpStepperComponent.prototype.next = /**
* @return {?}
*/
function () {
this.selectedIndex = Math.min(this._selectedIndex + 1, this.steps.length - 1);
};
/**
* @return {?}
*/
NpStepperComponent.prototype.previous = /**
* @return {?}
*/
function () {
this.selectedIndex = Math.max(this._selectedIndex - 1, 0);
};
/**
* @return {?}
*/
NpStepperComponent.prototype.reset = /**
* @return {?}
*/
function () {
this.selectedIndex = 0;
};
/**
* @param {?} idx
* @return {?}
*/
NpStepperComponent.prototype.setStatus = /**
* @param {?} idx
* @return {?}
*/
function (idx) {
if (this.steps) {
this.steps.toArray().forEach((/**
* @param {?} v
* @param {?} i
* @return {?}
*/
function (v, i) {
if (i < idx) {
v.status = 'finish';
}
if (i === idx) {
v.status = 'process';
}
if (i > idx) {
v.status = 'wait';
}
}));
}
};
NpStepperComponent.decorators = [
{ type: Component, args: [{
selector: "np-stepper",
template: "<div class=\"np-stepper-wrapper\">\r\n <!-- Step header -->\r\n <div class=\"flex-wrap row-flex\" style=\"align-items: center;\">\r\n <ng-container *ngFor=\"let step of steps; let i = index; let isFirst = first; let isLast = last;\">\r\n <div class=\"flex-wrap col-flex\" style=\"align-items: center;\">\r\n <div class=\"progress-container flex-wrap row-flex\">\r\n <!-- \u7B2C\u4E00\u6B65\u4E0D\u663E\u793A\u5DE6\u4FA7\u8FDE\u63A5\u7EBF -->\r\n <span class=\"progress-line\" *ngIf=\"!isFirst\"\r\n [ngClass]=\"{'progress-line-unselected': selectedIndex < i}\"></span>\r\n\r\n <!-- \u6839\u636Estep\u72B6\u6001\u548C\u662F\u5426\u6709\u81EA\u5B9A\u4E49\u5185\u5BB9\u663E\u793A -->\r\n\r\n <!-- wait\u7B49\u5F85\u4E2D -->\r\n <span *ngIf=\"step.status ==='wait'\" class=\"progress-circle\"\r\n [ngClass]=\"{'progress-circle-unselected': selectedIndex < i}\">\r\n </span>\r\n\r\n <!-- \u8FDB\u884C\u4E2D -->\r\n <ng-container *ngIf=\"step.status ==='process'\">\r\n <ng-container *ngIf=\"step.processContent\">\r\n <span class=\"progress-circle-template\" [ngClass]=\"{'progress-circle-unselected': selectedIndex < i}\">\r\n <ng-container *ngTemplateOutlet=\"step.processContent.template\"></ng-container>\r\n </span>\r\n </ng-container>\r\n <ng-container *ngIf=\"!step.processContent\">\r\n <span class=\"progress-circle\" [ngClass]=\"{'progress-circle-unselected': selectedIndex < i}\">\r\n </span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- \u5DF2\u5B8C\u6210 -->\r\n <ng-container *ngIf=\"step.status ==='finish'\">\r\n <ng-container *ngIf=\"step.finishContent\">\r\n <span class=\"progress-circle-template\" [ngClass]=\"{'progress-circle-unselected': selectedIndex < i}\">\r\n <ng-container *ngTemplateOutlet=\"step.finishContent.template\"></ng-container>\r\n </span>\r\n </ng-container>\r\n <ng-container *ngIf=\"!step.finishContent\">\r\n <span class=\"progress-circle\" [ngClass]=\"{'progress-circle-unselected': selectedIndex < i}\">\r\n </span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- \u6700\u540E\u4E00\u6B65\u4E0D\u663E\u793A\u53F3\u4FA7\u8FDE\u63A5\u7EBF -->\r\n <span class=\"progress-line\" *ngIf=\"!isLast\"\r\n [ngClass]=\"{'progress-line-unselected': selectedIndex < i}\"></span>\r\n </div>\r\n <div class=\"step-title\" *ngIf=\"!step.headerContent\"\r\n [ngClass]=\"{'step-title-first': isFirst, 'step-title-last': isLast, 'step-title-unselected': selectedIndex < i}\">\r\n {{ step.title }}\r\n </div>\r\n <div class=\"step-title\" *ngIf=\"step.headerContent\"\r\n [ngClass]=\"{'step-title-first': isFirst, 'step-title-last': isLast, 'step-title-unselected': selectedIndex < i}\">\r\n <ng-container *ngTemplateOutlet=\"step.headerContent.template\"></ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <!-- Step content -->\r\n <ng-container *ngFor=\"let step of steps; let i = index; let isFirst = first; let isLast = last;\">\r\n <div class=\"flex-wrap row-flex\" *ngIf=\"step.content && selectedIndex === i\">\r\n <ng-container *ngTemplateOutlet=\"step.content\"></ng-container>\r\n </div>\r\n </ng-container>\r\n</div>\r\n",
encapsulation: ViewEncapsulation.None,
styles: [".backdrop-transparent{opacity:0}.flex-wrap{display:flex}.wrap{flex-wrap:wrap}.col-flex{flex-direction:column}.row-flex{flex-direction:row}.middle-flex{justify-content:center;align-items:center}.space-between{justify-content:space-between;align-items:center}.align-center{align-items:center}.np-row{display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.np-column{display:flex;flex-direction:column;flex-basis:100%;flex:1}.np-stepper-wrapper .progress-container{width:100%;min-width:100px;align-items:center;margin-bottom:5px}.np-stepper-wrapper .progress-container .progress-circle,.np-stepper-wrapper .progress-container .progress-circle-template{min-width:20px;min-height:20px;border-radius:50%;display:inline-block}.np-stepper-wrapper .progress-container .progress-circle img,.np-stepper-wrapper .progress-container .progress-circle-template img{width:40px;height:40px;display:block}.np-stepper-wrapper .progress-container .progress-line{width:auto;margin:auto;min-width:80px;height:3px}.np-stepper-wrapper .step-title-first,.np-stepper-wrapper .step-title-last{width:100%;max-width:100px;text-align:center}"]
}] }
];
/** @nocollapse */
NpStepperComponent.ctorParameters = function () { return [
{ type: ElementRef }
]; };
NpStepperComponent.propDecorators = {
steps: [{ type: ContentChildren, args: [NpStep,] }],
selectedIndex: [{ type: Input }]
};
return NpStepperComponent;
}());
export { NpStepperComponent };
if (false) {
/** @type {?} */
NpStepperComponent.prototype.steps;
/**
* @type {?}
* @private
*/
NpStepperComponent.prototype._selectedIndex;
/**
* @type {?}
* @private
*/
NpStepperComponent.prototype.elemRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1wbHV0by8iLCJzb3VyY2VzIjpbImxpYi9zdGVwcGVyL3N0ZXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQTJCLEtBQUssRUFBaUYsZUFBZSxFQUFFLFNBQVMsRUFBb0IsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRPLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7Ozs7QUFLaEM7SUFnQ0UsNEJBQW9CLE9BQW1CO1FBQW5CLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFyQi9CLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO0lBcUJnQixDQUFDO0lBcEI1QyxzQkFBYSw2Q0FBYTs7OztRQUExQixjQUErQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDOzs7OztRQUU1RCxVQUFrQixLQUFhOztnQkFDekIsR0FBRyxHQUFHLENBQUMsS0FBSztZQUNoQixJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BCLE9BQU87YUFDUjtZQUVELElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BCLE9BQU87YUFDUjtZQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO1lBQzFCLElBQUksQ0FBQyxT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QUFBO1NBQ0g7SUFDSCxDQUFDOztnQkF4RkYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0Qix1Z0hBQTJCO29CQUUzQixhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7aUJBQ3RDOzs7O2dCQVptTSxVQUFVOzs7d0JBZ0IzTSxlQUFlLFNBQUMsTUFBTTtnQ0FHdEIsS0FBSzs7SUE2RVIseUJBQUM7Q0FBQSxBQXpGRCxJQXlGQztTQWxGWSxrQkFBa0I7OztJQUU3QixtQ0FBa0Q7Ozs7O0lBRWxELDRDQUEyQjs7Ozs7SUFxQmYscUNBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIElucHV0LCBPbkluaXQsIGZvcndhcmRSZWYsIENoYW5nZURldGVjdG9yUmVmLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIEhvc3RMaXN0ZW5lciwgQ29udGVudENoaWxkcmVuLCBRdWVyeUxpc3QsIEFmdGVyQ29udGVudEluaXQsIEVsZW1lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgTkdfVkFMSURBVE9SUywgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgVmFsaWRhdGlvbkVycm9ycywgQWJzdHJhY3RDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE5wU3RlcCB9IGZyb20gXCIuL3N0ZXBcIjtcclxuXHJcbi8qKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogYG5wLXN0ZXBwZXJgLFxyXG4gIHRlbXBsYXRlVXJsOiAnc3RlcHBlci5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnc3RlcHBlci5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIE5wU3RlcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oTnBTdGVwKSBzdGVwczogUXVlcnlMaXN0PE5wU3RlcD47XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGVkSW5kZXggPSAwO1xyXG4gIEBJbnB1dCgpIGdldCBzZWxlY3RlZEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleDsgfVxyXG5cclxuICBzZXQgc2VsZWN0ZWRJbmRleChpbmRleDogbnVtYmVyKSB7XHJcbiAgICBsZXQgaWR4ID0gK2luZGV4O1xyXG4gICAgaWYgKGlkeCA8IDApIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuc2V0U3RhdHVzKGlkeCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zdGVwcyAmJiB0aGlzLnN0ZXBzLmxlbmd0aCA+IDAgJiYgaWR4ID4gdGhpcy5zdGVwcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkSW5kZXggPSB0aGlzLnN0ZXBzLmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuc2V0U3RhdHVzKGlkeCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9zZWxlY3RlZEluZGV4ID0gaWR4O1xyXG4gICAgdGhpcy5zZXRTdGF0dXMoaWR4KTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbVJlZjogRWxlbWVudFJlZikgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHRoaXMuX3NlbGVjdGVkSW5kZXg7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkanVzdFN0ZXBIZWFkZXJUaXRsZVBvc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyBBZGp1c3QgZmlyc3QgYW5kIGxhc3Qgc3RlcCBoZWFkZXIgdGl0bGUgcG9zaXRpb25cclxuICBwcml2YXRlIGFkanVzdFN0ZXBIZWFkZXJUaXRsZVBvc2l0aW9uKCkge1xyXG4gICAgbGV0IHByb2dyZXNzQ29udGFpbmVyID0gdGhpcy5lbGVtUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnByb2dyZXNzLWNvbnRhaW5lcicpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgbGV0IGhlYWRlckljb24gPSB0aGlzLmVsZW1SZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucHJvZ3Jlc3MtY2lyY2xlLXRlbXBsYXRlJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBsZXQgaGVhZGVyQ2lyY2xlID0gdGhpcy5lbGVtUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnByb2dyZXNzLWNpcmNsZScpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgbGV0IGhlYWRlclRpdGxlRmlyc3QgPSB0aGlzLmVsZW1SZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc3RlcC10aXRsZS1maXJzdCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgbGV0IGhlYWRlclRpdGxlTGFzdCA9IHRoaXMuZWxlbVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zdGVwLXRpdGxlLWxhc3QnKSBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICBpZiAocHJvZ3Jlc3NDb250YWluZXIgJiYgKGhlYWRlckljb24gfHwgaGVhZGVyQ2lyY2xlKSAmJiBoZWFkZXJUaXRsZUZpcnN0ICYmIGhlYWRlclRpdGxlTGFzdCkge1xyXG4gICAgICBsZXQgcHJvZ3Jlc3NDb250YWluZXJXaWR0aCA9IHByb2dyZXNzQ29udGFpbmVyLm9mZnNldFdpZHRoO1xyXG4gICAgICBsZXQgaGVhZGVyV2lkdGggPSBoZWFkZXJJY29uID8gaGVhZGVySWNvbi5vZmZzZXRXaWR0aCA6IGhlYWRlckNpcmNsZS5vZmZzZXRXaWR0aDtcclxuICAgICAgaGVhZGVyVGl0bGVGaXJzdC5zdHlsZS5tYXJnaW5MZWZ0ID0gJy0nICsgTWF0aC5hYnMocHJvZ3Jlc3NDb250YWluZXJXaWR0aCAtIGhlYWRlcldpZHRoKSArICdweCc7XHJcbiAgICAgIGhlYWRlclRpdGxlTGFzdC5zdHlsZS5tYXJnaW5SaWdodCA9ICctJyArIE1hdGguYWJzKHByb2dyZXNzQ29udGFpbmVyV2lkdGggLSBoZWFkZXJXaWR0aCkgKyAncHgnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IE1hdGgubWluKHRoaXMuX3NlbGVjdGVkSW5kZXggKyAxLCB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEpO1xyXG4gIH1cclxuXHJcbiAgcHJldmlvdXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBNYXRoLm1heCh0aGlzLl9zZWxlY3RlZEluZGV4IC0gMSwgMCk7XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XHJcbiAgfVxyXG5cclxuICBzZXRTdGF0dXMoaWR4KSB7XHJcbiAgICBpZiAodGhpcy5zdGVwcykge1xyXG4gICAgICB0aGlzLnN0ZXBzLnRvQXJyYXkoKS5mb3JFYWNoKCh2LCBpKSA9PiB7XHJcbiAgICAgICAgaWYgKGkgPCBpZHgpIHtcclxuICAgICAgICAgIHYuc3RhdHVzID0gJ2ZpbmlzaCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpID09PSBpZHgpIHtcclxuICAgICAgICAgIHYuc3RhdHVzID0gJ3Byb2Nlc3MnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaSA+IGlkeCkge1xyXG4gICAgICAgICAgdi5zdGF0dXMgPSAnd2FpdCc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbiJdfQ==