materialize-angular
Version:
Material UI Angular library
168 lines • 15.1 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';
export class TabGroupComponent {
/**
* @param {?} router
* @param {?} renderer
*/
constructor(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 {?}
*/
ngAfterViewInit() {
setTimeout(this.update, 250);
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (changes.selectedIndex && !changes.selectedIndex.isFirstChange()) {
this.moveIndicator(changes.selectedIndex.currentValue, true);
}
}
/**
* @return {?}
*/
update() {
this.moveIndicator(this.selectedIndex, false);
}
/**
* @param {?} index
* @return {?}
*/
selectTab(index) {
/** @type {?} */
const tabs = this.tabs.toArray();
/** @type {?} */
const selectedTab = tabs[index];
if (!selectedTab.disabled) {
this.selectedIndex = index;
this.onTabSelectEmitter.emit(index);
this.moveIndicator(this.selectedIndex, true);
if (selectedTab.link) {
setTimeout((/**
* @return {?}
*/
() => {
this.router.navigate([selectedTab.link]);
}), this.transitionDuration);
}
}
}
/**
* @param {?} index
* @return {?}
*/
activateIndex(index) {
this.tabs.forEach((/**
* @param {?} tab
* @param {?} i
* @return {?}
*/
(tab, i) => {
tab.isActive = i === index;
}));
}
/**
* @param {?} index
* @param {?} hasAnimation
* @return {?}
*/
moveIndicator(index, hasAnimation) {
this.activateIndex(index);
/** @type {?} */
const child = this.headerRef.nativeElement.children[index];
/** @type {?} */
const 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 = () => [
{ 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 }]
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21hdGVyaWFsaXplLWFuZ3VsYXIvIiwic291cmNlcyI6WyJhcHAvY29tcGxldGVkLWNvbXBvbmVudHMvdGFiLWdyb3VwL3RhYi1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBUUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBRVQsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFPbkQsTUFBTSxPQUFPLGlCQUFpQjs7Ozs7SUFxQjVCLFlBQW9CLE1BQWMsRUFBVSxRQUFtQjtRQUEzQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQVB0RCxjQUFTLEdBQVcsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUM3RCxrQkFBYSxHQUFXLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUM7UUFDckUsdUJBQWtCLEdBQVcsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBRWpGLFdBQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUl2QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNyRCxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsRUFBRSxDQUFDO1FBRXpDLElBQUksQ0FBQyxNQUFNLEdBQUcs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U0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxHQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTyxjQUFjO2dCQUNyRCwwcUJBQXlDO2FBQzFDOzs7O1lBVFEsTUFBTTtZQUxiLFNBQVM7OzttQkFzQlIsZUFBZSxTQUFDLFlBQVk7MkJBRTVCLFNBQVMsU0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3dCQUN2QyxTQUFTLFNBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtpQ0FFcEMsTUFBTSxTQUFDLGFBQWE7d0JBRXBCLEtBQUs7NEJBQ0wsS0FBSztpQ0FDTCxLQUFLOzs7O0lBZk4sK0JBSUU7O0lBRUYsaUNBQTZEOztJQUU3RCx5Q0FBbUU7O0lBQ25FLHNDQUE2RDs7SUFFN0QsK0NBQWdFOztJQUVoRSxzQ0FBc0U7O0lBQ3RFLDBDQUE4RTs7SUFDOUUsK0NBQXdGOztJQUV4RixtQ0FBeUM7O0lBQ3pDLDRDQUE2Qzs7Ozs7SUFFakMsbUNBQXNCOzs7OztJQUFFLHFDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBXb3JreWxhYi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vd29ya3lsYWIvbWF0ZXJpYWxpemUtYW5ndWxhci9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgc3VwcG9ydGVkRXZlbnRzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZ2V0LXN1cHBvcnRlZC1ldmVudHMudXRpbCc7XG5pbXBvcnQgeyBTdXBwb3J0ZWRFdmVudHNNb2RlbCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY29tbW9uL21vZGVscy9zdXBwb3J0ZWQtZXZlbnRzLm1vZGVsJztcbmltcG9ydCB7IFRhYkNvbXBvbmVudCB9IGZyb20gJy4vdGFiL3RhYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFiR3JvdXBNb2RlbCB9IGZyb20gJy4vdGFiLWdyb3VwLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBgJHsgY29uZmlnLmNvbXBvbmVudHMucHJlZml4IH0tdGFiLWdyb3VwIH1gLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFiLWdyb3VwLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBUYWJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIHN0YXRpYyByZWFkb25seSBkZWZhdWx0UHJvcHM6IFRhYkdyb3VwTW9kZWwgPSB7XG4gICAgY2xhc3NOYW1lOiAnJyxcbiAgICBzZWxlY3RlZEluZGV4OiAwLFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbjogNDUwXG4gIH07XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUYWJDb21wb25lbnQpIHRhYnM6IFF1ZXJ5TGlzdDxUYWJDb21wb25lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ2luZGljYXRvcicsIHsgc3RhdGljOiB0cnVlIH0pIGluZGljYXRvclJlZjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnaGVhZGVyJywgeyBzdGF0aWM6IHRydWUgfSkgaGVhZGVyUmVmOiBFbGVtZW50UmVmO1xuXG4gIEBPdXRwdXQoJ29uU2VsZWN0VGFiJykgb25UYWJTZWxlY3RFbWl0dGVyOiBFdmVudEVtaXR0ZXI8bnVtYmVyPjtcblxuICBASW5wdXQoKSBjbGFzc05hbWU6IHN0cmluZyA9IFRhYkdyb3VwQ29tcG9uZW50LmRlZmF1bHRQcm9wcy5jbGFzc05hbWU7XG4gIEBJbnB1dCgpIHNlbGVjdGVkSW5kZXg6IG51bWJlciA9IFRhYkdyb3VwQ29tcG9uZW50LmRlZmF1bHRQcm9wcy5zZWxlY3RlZEluZGV4O1xuICBASW5wdXQoKSB0cmFuc2l0aW9uRHVyYXRpb246IG51bWJlciA9IFRhYkdyb3VwQ29tcG9uZW50LmRlZmF1bHRQcm9wcy50cmFuc2l0aW9uRHVyYXRpb247XG5cbiAgcHVibGljIHByZWZpeCA9IGNvbmZpZy5jb21wb25lbnRzLnByZWZpeDtcbiAgcHVibGljIHN1cHBvcnRlZEV2ZW50czogU3VwcG9ydGVkRXZlbnRzTW9kZWw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XG4gICAgdGhpcy5vblRhYlNlbGVjdEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICB0aGlzLnN1cHBvcnRlZEV2ZW50cyA9IHN1cHBvcnRlZEV2ZW50cygpO1xuXG4gICAgdGhpcy51cGRhdGUgPSB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5zdXBwb3J0ZWRFdmVudHMucmVzaXplLCB0aGlzLnVwZGF0ZSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc2V0VGltZW91dCh0aGlzLnVwZGF0ZSwgMjUwKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5zZWxlY3RlZEluZGV4ICYmICFjaGFuZ2VzLnNlbGVjdGVkSW5kZXguaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICB0aGlzLm1vdmVJbmRpY2F0b3IoY2hhbmdlcy5zZWxlY3RlZEluZGV4LmN1cnJlbnRWYWx1ZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlKCkge1xuICAgIHRoaXMubW92ZUluZGljYXRvcih0aGlzLnNlbGVjdGVkSW5kZXgsIGZhbHNlKTtcbiAgfVxuXG4gIHNlbGVjdFRhYihpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgdGFicyA9IHRoaXMudGFicy50b0FycmF5KCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRUYWIgPSB0YWJzW2luZGV4XTtcblxuICAgIGlmICghc2VsZWN0ZWRUYWIuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuXG4gICAgICB0aGlzLm9uVGFiU2VsZWN0RW1pdHRlci5lbWl0KGluZGV4KTtcbiAgICAgIHRoaXMubW92ZUluZGljYXRvcih0aGlzLnNlbGVjdGVkSW5kZXgsIHRydWUpO1xuXG4gICAgICBpZiAoc2VsZWN0ZWRUYWIubGluaykge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbc2VsZWN0ZWRUYWIubGlua10pO1xuICAgICAgICB9LCB0aGlzLnRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWN0aXZhdGVJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy50YWJzLmZvckVhY2goKHRhYiwgaSkgPT4ge1xuICAgICAgdGFiLmlzQWN0aXZlID0gaSA9PT0gaW5kZXg7XG4gICAgfSk7XG4gIH1cblxuICBtb3ZlSW5kaWNhdG9yKGluZGV4OiBudW1iZXIsIGhhc0FuaW1hdGlvbjogYm9vbGVhbikge1xuICAgIHRoaXMuYWN0aXZhdGVJbmRleChpbmRleCk7XG5cbiAgICBjb25zdCBjaGlsZCA9IHRoaXMuaGVhZGVyUmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5baW5kZXhdO1xuICAgIGNvbnN0IHRyYW5zaXRpb25EdXJhdGlvbiA9IGhhc0FuaW1hdGlvblxuICAgICAgPyBgJHsgdGhpcy50cmFuc2l0aW9uRHVyYXRpb24gfW1zYFxuICAgICAgOiBudWxsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmluZGljYXRvclJlZi5uYXRpdmVFbGVtZW50LCAndHJhbnNpdGlvbkR1cmF0aW9uJywgdHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaW5kaWNhdG9yUmVmLm5hdGl2ZUVsZW1lbnQsICd3aWR0aCcsIGAkeyBjaGlsZC5vZmZzZXRXaWR0aCB9cHhgKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaW5kaWNhdG9yUmVmLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlWCgkeyBjaGlsZC5vZmZzZXRMZWZ0IH1weClgKTtcbiAgfVxufVxuIl19