UNPKG

materialize-angular

Version:
190 lines 16 kB
/** * @fileoverview added by tsickle * Generated from: app/completed-components/tab-group/tab-group.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @license * Copyright Workylab. 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://raw.githubusercontent.com/workylab/materialize-angular/master/LICENSE */ import { Component, ContentChildren, ElementRef, EventEmitter, Input, Output, QueryList, Renderer2, ViewChild } from '@angular/core'; import { config } from '../../config'; import { Router } from '@angular/router'; import { supportedEvents } from '../../utils/get-supported-events.util'; import { TabComponent } from './tab/tab.component'; var TabGroupComponent = /** @class */ (function () { function TabGroupComponent(router, renderer) { this.router = router; this.renderer = renderer; this.className = TabGroupComponent.defaultProps.className; this.selectedIndex = TabGroupComponent.defaultProps.selectedIndex; this.transitionDuration = TabGroupComponent.defaultProps.transitionDuration; this.prefix = config.components.prefix; this.onTabSelectEmitter = new EventEmitter(); this.supportedEvents = supportedEvents(); this.update = this.update.bind(this); window.addEventListener(this.supportedEvents.resize, this.update); } /** * @return {?} */ TabGroupComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { setTimeout(this.update, 250); }; /** * @param {?} changes * @return {?} */ TabGroupComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { if (changes.selectedIndex && !changes.selectedIndex.isFirstChange()) { this.moveIndicator(changes.selectedIndex.currentValue, true); } }; /** * @return {?} */ TabGroupComponent.prototype.update = /** * @return {?} */ function () { this.moveIndicator(this.selectedIndex, false); }; /** * @param {?} index * @return {?} */ TabGroupComponent.prototype.selectTab = /** * @param {?} index * @return {?} */ function (index) { var _this = this; /** @type {?} */ var tabs = this.tabs.toArray(); /** @type {?} */ var selectedTab = tabs[index]; if (!selectedTab.disabled) { this.selectedIndex = index; this.onTabSelectEmitter.emit(index); this.moveIndicator(this.selectedIndex, true); if (selectedTab.link) { setTimeout((/** * @return {?} */ function () { _this.router.navigate([selectedTab.link]); }), this.transitionDuration); } } }; /** * @param {?} index * @return {?} */ TabGroupComponent.prototype.activateIndex = /** * @param {?} index * @return {?} */ function (index) { this.tabs.forEach((/** * @param {?} tab * @param {?} i * @return {?} */ function (tab, i) { tab.isActive = i === index; })); }; /** * @param {?} index * @param {?} hasAnimation * @return {?} */ TabGroupComponent.prototype.moveIndicator = /** * @param {?} index * @param {?} hasAnimation * @return {?} */ function (index, hasAnimation) { this.activateIndex(index); /** @type {?} */ var child = this.headerRef.nativeElement.children[index]; /** @type {?} */ var transitionDuration = hasAnimation ? this.transitionDuration + "ms" : null; this.renderer.setStyle(this.indicatorRef.nativeElement, 'transitionDuration', transitionDuration); this.renderer.setStyle(this.indicatorRef.nativeElement, 'width', child.offsetWidth + "px"); this.renderer.setStyle(this.indicatorRef.nativeElement, 'transform', "translateX(" + child.offsetLeft + "px)"); }; TabGroupComponent.defaultProps = { className: '', selectedIndex: 0, transitionDuration: 450 }; TabGroupComponent.decorators = [ { type: Component, args: [{ selector: config.components.prefix + "-tab-group }", template: "<div [ngClass]=\"className\">\n <ul [ngClass]=\"prefix + '-tab-group'\" #header>\n\n <li (click)=\"selectTab(i)\"\n *ngFor=\"let tab of tabs; let i = index\"\n\n [ngClass]=\"prefix + '-tab-group-item'\"\n [class.active]=\"i === selectedIndex\"\n [class.disabled]=\"tab.disabled\"\n [isRippleActive]=\"!tab.disabled\"\n\n materializeRipple\n >\n {{ tab.title }}\n </li>\n\n <div [ngClass]=\"prefix + '-tab-group-indicator-container'\" #indicator>\n <div [ngClass]=\"prefix + '-tab-group-indicator'\"></div>\n </div>\n </ul>\n \n <div>\n <ng-content select=\"materialize-tab\"></ng-content>\n </div>\n</div>\n" }] } ]; /** @nocollapse */ TabGroupComponent.ctorParameters = function () { return [ { type: Router }, { type: Renderer2 } ]; }; TabGroupComponent.propDecorators = { tabs: [{ type: ContentChildren, args: [TabComponent,] }], indicatorRef: [{ type: ViewChild, args: ['indicator', { static: true },] }], headerRef: [{ type: ViewChild, args: ['header', { static: true },] }], onTabSelectEmitter: [{ type: Output, args: ['onSelectTab',] }], className: [{ type: Input }], selectedIndex: [{ type: Input }], transitionDuration: [{ type: Input }] }; return TabGroupComponent; }()); export { TabGroupComponent }; if (false) { /** @type {?} */ TabGroupComponent.defaultProps; /** @type {?} */ TabGroupComponent.prototype.tabs; /** @type {?} */ TabGroupComponent.prototype.indicatorRef; /** @type {?} */ TabGroupComponent.prototype.headerRef; /** @type {?} */ TabGroupComponent.prototype.onTabSelectEmitter; /** @type {?} */ TabGroupComponent.prototype.className; /** @type {?} */ TabGroupComponent.prototype.selectedIndex; /** @type {?} */ TabGroupComponent.prototype.transitionDuration; /** @type {?} */ TabGroupComponent.prototype.prefix; /** @type {?} */ TabGroupComponent.prototype.supportedEvents; /** * @type {?} * @private */ TabGroupComponent.prototype.router; /** * @type {?} * @private */ TabGroupComponent.prototype.renderer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21hdGVyaWFsaXplLWFuZ3VsYXIvIiwic291cmNlcyI6WyJhcHAvY29tcGxldGVkLWNvbXBvbmVudHMvdGFiLWdyb3VwL3RhYi1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBUUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBRVQsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHbkQ7SUF5QkUsMkJBQW9CLE1BQWMsRUFBVSxRQUFtQjtRQUEzQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQVB0RCxjQUFTLEdBQVcsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUM3RCxrQkFBYSxHQUFXLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUM7UUFDckUsdUJBQWtCLEdBQVcsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBRWpGLFdBQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUl2QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNyRCxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsRUFBRSxDQUFDO1FBRXpDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJ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Q3hCLENBQUM7O2dCQVRILFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLGlCQUFlO29CQUNyRCwwcUJBQXlDO2lCQUMxQzs7OztnQkFUUSxNQUFNO2dCQUxiLFNBQVM7Ozt1QkFzQlIsZUFBZSxTQUFDLFlBQVk7K0JBRTVCLFNBQVMsU0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzRCQUN2QyxTQUFTLFNBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtxQ0FFcEMsTUFBTSxTQUFDLGFBQWE7NEJBRXBCLEtBQUs7Z0NBQ0wsS0FBSztxQ0FDTCxLQUFLOztJQWdFUix3QkFBQztDQUFBLEFBcEZELElBb0ZDO1NBaEZZLGlCQUFpQjs7O0lBQzVCLCtCQUlFOztJQUVGLGlDQUE2RDs7SUFFN0QseUNBQW1FOztJQUNuRSxzQ0FBNkQ7O0lBRTdELCtDQUFnRTs7SUFFaEUsc0NBQXNFOztJQUN0RSwwQ0FBOEU7O0lBQzlFLCtDQUF3Rjs7SUFFeEYsbUNBQXlDOztJQUN6Qyw0Q0FBNkM7Ozs7O0lBRWpDLG1DQUFzQjs7Ozs7SUFBRSxxQ0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgV29ya3lsYWIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3dvcmt5bGFiL21hdGVyaWFsaXplLWFuZ3VsYXIvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuLi8uLi9jb25maWcnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHN1cHBvcnRlZEV2ZW50cyB9IGZyb20gJy4uLy4uL3V0aWxzL2dldC1zdXBwb3J0ZWQtZXZlbnRzLnV0aWwnO1xuaW1wb3J0IHsgU3VwcG9ydGVkRXZlbnRzTW9kZWwgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbW1vbi9tb2RlbHMvc3VwcG9ydGVkLWV2ZW50cy5tb2RlbCc7XG5pbXBvcnQgeyBUYWJDb21wb25lbnQgfSBmcm9tICcuL3RhYi90YWIuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYkdyb3VwTW9kZWwgfSBmcm9tICcuL3RhYi1ncm91cC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogYCR7IGNvbmZpZy5jb21wb25lbnRzLnByZWZpeCB9LXRhYi1ncm91cCB9YCxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYi1ncm91cC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVGFiR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICBzdGF0aWMgcmVhZG9ubHkgZGVmYXVsdFByb3BzOiBUYWJHcm91cE1vZGVsID0ge1xuICAgIGNsYXNzTmFtZTogJycsXG4gICAgc2VsZWN0ZWRJbmRleDogMCxcbiAgICB0cmFuc2l0aW9uRHVyYXRpb246IDQ1MFxuICB9O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oVGFiQ29tcG9uZW50KSB0YWJzOiBRdWVyeUxpc3Q8VGFiQ29tcG9uZW50PjtcblxuICBAVmlld0NoaWxkKCdpbmRpY2F0b3InLCB7IHN0YXRpYzogdHJ1ZSB9KSBpbmRpY2F0b3JSZWY6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2hlYWRlcicsIHsgc3RhdGljOiB0cnVlIH0pIGhlYWRlclJlZjogRWxlbWVudFJlZjtcblxuICBAT3V0cHV0KCdvblNlbGVjdFRhYicpIG9uVGFiU2VsZWN0RW1pdHRlcjogRXZlbnRFbWl0dGVyPG51bWJlcj47XG5cbiAgQElucHV0KCkgY2xhc3NOYW1lOiBzdHJpbmcgPSBUYWJHcm91cENvbXBvbmVudC5kZWZhdWx0UHJvcHMuY2xhc3NOYW1lO1xuICBASW5wdXQoKSBzZWxlY3RlZEluZGV4OiBudW1iZXIgPSBUYWJHcm91cENvbXBvbmVudC5kZWZhdWx0UHJvcHMuc2VsZWN0ZWRJbmRleDtcbiAgQElucHV0KCkgdHJhbnNpdGlvbkR1cmF0aW9uOiBudW1iZXIgPSBUYWJHcm91cENvbXBvbmVudC5kZWZhdWx0UHJvcHMudHJhbnNpdGlvbkR1cmF0aW9uO1xuXG4gIHB1YmxpYyBwcmVmaXggPSBjb25maWcuY29tcG9uZW50cy5wcmVmaXg7XG4gIHB1YmxpYyBzdXBwb3J0ZWRFdmVudHM6IFN1cHBvcnRlZEV2ZW50c01vZGVsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuICAgIHRoaXMub25UYWJTZWxlY3RFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gICAgdGhpcy5zdXBwb3J0ZWRFdmVudHMgPSBzdXBwb3J0ZWRFdmVudHMoKTtcblxuICAgIHRoaXMudXBkYXRlID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKHRoaXMuc3VwcG9ydGVkRXZlbnRzLnJlc2l6ZSwgdGhpcy51cGRhdGUpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHNldFRpbWVvdXQodGhpcy51cGRhdGUsIDI1MCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuc2VsZWN0ZWRJbmRleCAmJiAhY2hhbmdlcy5zZWxlY3RlZEluZGV4LmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgdGhpcy5tb3ZlSW5kaWNhdG9yKGNoYW5nZXMuc2VsZWN0ZWRJbmRleC5jdXJyZW50VmFsdWUsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICB0aGlzLm1vdmVJbmRpY2F0b3IodGhpcy5zZWxlY3RlZEluZGV4LCBmYWxzZSk7XG4gIH1cblxuICBzZWxlY3RUYWIoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHRhYnMgPSB0aGlzLnRhYnMudG9BcnJheSgpO1xuICAgIGNvbnN0IHNlbGVjdGVkVGFiID0gdGFic1tpbmRleF07XG5cbiAgICBpZiAoIXNlbGVjdGVkVGFiLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcblxuICAgICAgdGhpcy5vblRhYlNlbGVjdEVtaXR0ZXIuZW1pdChpbmRleCk7XG4gICAgICB0aGlzLm1vdmVJbmRpY2F0b3IodGhpcy5zZWxlY3RlZEluZGV4LCB0cnVlKTtcblxuICAgICAgaWYgKHNlbGVjdGVkVGFiLmxpbmspIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3NlbGVjdGVkVGFiLmxpbmtdKTtcbiAgICAgICAgfSwgdGhpcy50cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFjdGl2YXRlSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMudGFicy5mb3JFYWNoKCh0YWIsIGkpID0+IHtcbiAgICAgIHRhYi5pc0FjdGl2ZSA9IGkgPT09IGluZGV4O1xuICAgIH0pO1xuICB9XG5cbiAgbW92ZUluZGljYXRvcihpbmRleDogbnVtYmVyLCBoYXNBbmltYXRpb246IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFjdGl2YXRlSW5kZXgoaW5kZXgpO1xuXG4gICAgY29uc3QgY2hpbGQgPSB0aGlzLmhlYWRlclJlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuW2luZGV4XTtcbiAgICBjb25zdCB0cmFuc2l0aW9uRHVyYXRpb24gPSBoYXNBbmltYXRpb25cbiAgICAgID8gYCR7IHRoaXMudHJhbnNpdGlvbkR1cmF0aW9uIH1tc2BcbiAgICAgIDogbnVsbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5pbmRpY2F0b3JSZWYubmF0aXZlRWxlbWVudCwgJ3RyYW5zaXRpb25EdXJhdGlvbicsIHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmluZGljYXRvclJlZi5uYXRpdmVFbGVtZW50LCAnd2lkdGgnLCBgJHsgY2hpbGQub2Zmc2V0V2lkdGggfXB4YCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmluZGljYXRvclJlZi5uYXRpdmVFbGVtZW50LCAndHJhbnNmb3JtJywgYHRyYW5zbGF0ZVgoJHsgY2hpbGQub2Zmc2V0TGVmdCB9cHgpYCk7XG4gIH1cbn1cbiJdfQ==