UNPKG

ngx-pluto

Version:
157 lines 17.7 kB
/** * @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 */ export class NpStepperComponent { /** * @param {?} elemRef */ constructor(elemRef) { this.elemRef = elemRef; this._selectedIndex = 0; } /** * @return {?} */ get selectedIndex() { return this._selectedIndex; } /** * @param {?} index * @return {?} */ set selectedIndex(index) { /** @type {?} */ let 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); } /** * @return {?} */ ngOnInit() { } /** * @return {?} */ ngAfterContentInit() { this.selectedIndex = this._selectedIndex; } /** * @return {?} */ ngAfterViewInit() { this.adjustStepHeaderTitlePosition(); } // Adjust first and last step header title position /** * @private * @return {?} */ adjustStepHeaderTitlePosition() { /** @type {?} */ let progressContainer = (/** @type {?} */ (this.elemRef.nativeElement.querySelector('.progress-container'))); /** @type {?} */ let headerIcon = (/** @type {?} */ (this.elemRef.nativeElement.querySelector('.progress-circle-template'))); /** @type {?} */ let headerCircle = (/** @type {?} */ (this.elemRef.nativeElement.querySelector('.progress-circle'))); /** @type {?} */ let headerTitleFirst = (/** @type {?} */ (this.elemRef.nativeElement.querySelector('.step-title-first'))); /** @type {?} */ let headerTitleLast = (/** @type {?} */ (this.elemRef.nativeElement.querySelector('.step-title-last'))); if (progressContainer && (headerIcon || headerCircle) && headerTitleFirst && headerTitleLast) { /** @type {?} */ let progressContainerWidth = progressContainer.offsetWidth; /** @type {?} */ let headerWidth = headerIcon ? headerIcon.offsetWidth : headerCircle.offsetWidth; headerTitleFirst.style.marginLeft = '-' + Math.abs(progressContainerWidth - headerWidth) + 'px'; headerTitleLast.style.marginRight = '-' + Math.abs(progressContainerWidth - headerWidth) + 'px'; } } /** * @return {?} */ next() { this.selectedIndex = Math.min(this._selectedIndex + 1, this.steps.length - 1); } /** * @return {?} */ previous() { this.selectedIndex = Math.max(this._selectedIndex - 1, 0); } /** * @return {?} */ reset() { this.selectedIndex = 0; } /** * @param {?} idx * @return {?} */ setStatus(idx) { if (this.steps) { this.steps.toArray().forEach((/** * @param {?} v * @param {?} i * @return {?} */ (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 = () => [ { type: ElementRef } ]; NpStepperComponent.propDecorators = { steps: [{ type: ContentChildren, args: [NpStep,] }], selectedIndex: [{ type: Input }] }; if (false) { /** @type {?} */ NpStepperComponent.prototype.steps; /** * @type {?} * @private */ NpStepperComponent.prototype._selectedIndex; /** * @type {?} * @private */ NpStepperComponent.prototype.elemRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1wbHV0by8iLCJzb3VyY2VzIjpbImxpYi9zdGVwcGVyL3N0ZXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQTJCLEtBQUssRUFBaUYsZUFBZSxFQUFFLFNBQVMsRUFBb0IsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRPLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7Ozs7QUFZaEMsTUFBTSxPQUFPLGtCQUFrQjs7OztJQXlCN0IsWUFBb0IsT0FBbUI7UUFBbkIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQXJCL0IsbUJBQWMsR0FBRyxDQUFDLENBQUM7SUFxQmdCLENBQUM7Ozs7SUFwQjVDLElBQWEsYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRTVELElBQUksYUFBYSxDQUFDLEtBQWE7O1lBQ3pCLEdBQUcsR0FBRyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO1lBQ1gsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQixPQUFPO1NBQ1I7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQztRQUMx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SEFBMkI7Z0JBRTNCLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJOzthQUN0Qzs7OztZQVptTSxVQUFVOzs7b0JBZ0IzTSxlQUFlLFNBQUMsTUFBTTs0QkFHdEIsS0FBSzs7OztJQUhOLG1DQUFrRDs7Ozs7SUFFbEQsNENBQTJCOzs7OztJQXFCZixxQ0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgSW5wdXQsIE9uSW5pdCwgZm9yd2FyZFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgSG9zdExpc3RlbmVyLCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgQWZ0ZXJDb250ZW50SW5pdCwgRWxlbWVudFJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBOR19WQUxJREFUT1JTLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBWYWxpZGF0aW9uRXJyb3JzLCBBYnN0cmFjdENvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTnBTdGVwIH0gZnJvbSBcIi4vc3RlcFwiO1xyXG5cclxuLyoqXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgbnAtc3RlcHBlcmAsXHJcbiAgdGVtcGxhdGVVcmw6ICdzdGVwcGVyLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydzdGVwcGVyLnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgTnBTdGVwcGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0IHtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihOcFN0ZXApIHN0ZXBzOiBRdWVyeUxpc3Q8TnBTdGVwPjtcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJbmRleCA9IDA7XHJcbiAgQElucHV0KCkgZ2V0IHNlbGVjdGVkSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zZWxlY3RlZEluZGV4OyB9XHJcblxyXG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4OiBudW1iZXIpIHtcclxuICAgIGxldCBpZHggPSAraW5kZXg7XHJcbiAgICBpZiAoaWR4IDwgMCkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEluZGV4ID0gMDtcclxuICAgICAgdGhpcy5zZXRTdGF0dXMoaWR4KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnN0ZXBzICYmIHRoaXMuc3RlcHMubGVuZ3RoID4gMCAmJiBpZHggPiB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleCA9IHRoaXMuc3RlcHMubGVuZ3RoIC0gMTtcclxuICAgICAgdGhpcy5zZXRTdGF0dXMoaWR4KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3NlbGVjdGVkSW5kZXggPSBpZHg7XHJcbiAgICB0aGlzLnNldFN0YXR1cyhpZHgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtUmVmOiBFbGVtZW50UmVmKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdGhpcy5fc2VsZWN0ZWRJbmRleDtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWRqdXN0U3RlcEhlYWRlclRpdGxlUG9zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIEFkanVzdCBmaXJzdCBhbmQgbGFzdCBzdGVwIGhlYWRlciB0aXRsZSBwb3NpdGlvblxyXG4gIHByaXZhdGUgYWRqdXN0U3RlcEhlYWRlclRpdGxlUG9zaXRpb24oKSB7XHJcbiAgICBsZXQgcHJvZ3Jlc3NDb250YWluZXIgPSB0aGlzLmVsZW1SZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucHJvZ3Jlc3MtY29udGFpbmVyJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBsZXQgaGVhZGVySWNvbiA9IHRoaXMuZWxlbVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wcm9ncmVzcy1jaXJjbGUtdGVtcGxhdGUnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGxldCBoZWFkZXJDaXJjbGUgPSB0aGlzLmVsZW1SZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucHJvZ3Jlc3MtY2lyY2xlJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBsZXQgaGVhZGVyVGl0bGVGaXJzdCA9IHRoaXMuZWxlbVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zdGVwLXRpdGxlLWZpcnN0JykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBsZXQgaGVhZGVyVGl0bGVMYXN0ID0gdGhpcy5lbGVtUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnN0ZXAtdGl0bGUtbGFzdCcpIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIGlmIChwcm9ncmVzc0NvbnRhaW5lciAmJiAoaGVhZGVySWNvbiB8fCBoZWFkZXJDaXJjbGUpICYmIGhlYWRlclRpdGxlRmlyc3QgJiYgaGVhZGVyVGl0bGVMYXN0KSB7XHJcbiAgICAgIGxldCBwcm9ncmVzc0NvbnRhaW5lcldpZHRoID0gcHJvZ3Jlc3NDb250YWluZXIub2Zmc2V0V2lkdGg7XHJcbiAgICAgIGxldCBoZWFkZXJXaWR0aCA9IGhlYWRlckljb24gPyBoZWFkZXJJY29uLm9mZnNldFdpZHRoIDogaGVhZGVyQ2lyY2xlLm9mZnNldFdpZHRoO1xyXG4gICAgICBoZWFkZXJUaXRsZUZpcnN0LnN0eWxlLm1hcmdpbkxlZnQgPSAnLScgKyBNYXRoLmFicyhwcm9ncmVzc0NvbnRhaW5lcldpZHRoIC0gaGVhZGVyV2lkdGgpICsgJ3B4JztcclxuICAgICAgaGVhZGVyVGl0bGVMYXN0LnN0eWxlLm1hcmdpblJpZ2h0ID0gJy0nICsgTWF0aC5hYnMocHJvZ3Jlc3NDb250YWluZXJXaWR0aCAtIGhlYWRlcldpZHRoKSArICdweCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gTWF0aC5taW4odGhpcy5fc2VsZWN0ZWRJbmRleCArIDEsIHRoaXMuc3RlcHMubGVuZ3RoIC0gMSk7XHJcbiAgfVxyXG5cclxuICBwcmV2aW91cygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IE1hdGgubWF4KHRoaXMuX3NlbGVjdGVkSW5kZXggLSAxLCAwKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcclxuICB9XHJcblxyXG4gIHNldFN0YXR1cyhpZHgpIHtcclxuICAgIGlmICh0aGlzLnN0ZXBzKSB7XHJcbiAgICAgIHRoaXMuc3RlcHMudG9BcnJheSgpLmZvckVhY2goKHYsIGkpID0+IHtcclxuICAgICAgICBpZiAoaSA8IGlkeCkge1xyXG4gICAgICAgICAgdi5zdGF0dXMgPSAnZmluaXNoJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGkgPT09IGlkeCkge1xyXG4gICAgICAgICAgdi5zdGF0dXMgPSAncHJvY2Vzcyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpID4gaWR4KSB7XHJcbiAgICAgICAgICB2LnN0YXR1cyA9ICd3YWl0JztcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuIl19