materialize-angular
Version:
Material UI Angular library
190 lines • 16 kB
JavaScript
/**
* @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==