@hxui/angular
Version:
* * *
247 lines • 19 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
*/
import { Component, HostBinding, Input } from '@angular/core';
import { TabsetConfig } from './tabset.config';
var TabsetComponent = /** @class */ (function () {
function TabsetComponent(config) {
this.clazn = true;
this.tabs = [];
this.classMap = {};
Object.assign(this, config);
}
Object.defineProperty(TabsetComponent.prototype, "vertical", {
/** if true tabs will be placed vertically */
get: /**
* if true tabs will be placed vertically
* @return {?}
*/
function () {
return this._vertical;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._vertical = value;
this.setClassMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(TabsetComponent.prototype, "justified", {
/** if true tabs fill the container and have a consistent width */
get: /**
* if true tabs fill the container and have a consistent width
* @return {?}
*/
function () {
return this._justified;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._justified = value;
this.setClassMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(TabsetComponent.prototype, "hasInfo", {
get: /**
* @return {?}
*/
function () {
return this._hasInfo;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._hasInfo = value;
this.setClassMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(TabsetComponent.prototype, "type", {
/** navigation context class: 'tabs' or 'pills' */
get: /**
* navigation context class: 'tabs' or 'pills'
* @return {?}
*/
function () {
return this._type;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._type = value;
this.setClassMap();
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
TabsetComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.isDestroyed = true;
};
/**
* @param {?} tab
* @return {?}
*/
TabsetComponent.prototype.addTab = /**
* @param {?} tab
* @return {?}
*/
function (tab) {
this.tabs.push(tab);
tab.active = this.tabs.length === 1 && tab.active !== false;
};
/**
* @param {?} tab
* @param {?=} options
* @return {?}
*/
TabsetComponent.prototype.removeTab = /**
* @param {?} tab
* @param {?=} options
* @return {?}
*/
function (tab, options) {
if (options === void 0) { options = { reselect: true, emit: true }; }
/** @type {?} */
var index = this.tabs.indexOf(tab);
if (index === -1 || this.isDestroyed) {
return;
}
// Select a new tab if the tab to be removed is selected and not destroyed
if (options.reselect && tab.active && this.hasAvailableTabs(index)) {
/** @type {?} */
var newActiveIndex = this.getClosestTabIndex(index);
this.tabs[newActiveIndex].active = true;
}
if (options.emit) {
tab.removed.emit(tab);
}
this.tabs.splice(index, 1);
if (tab.elementRef.nativeElement && tab.elementRef.nativeElement.remove) {
tab.elementRef.nativeElement.remove();
}
};
/**
* @param {?} index
* @return {?}
*/
TabsetComponent.prototype.getClosestTabIndex = /**
* @param {?} index
* @return {?}
*/
function (index) {
/** @type {?} */
var tabsLength = this.tabs.length;
if (!tabsLength) {
return -1;
}
for (var step = 1; step <= tabsLength; step += 1) {
/** @type {?} */
var prevIndex = index - step;
/** @type {?} */
var nextIndex = index + step;
if (this.tabs[prevIndex] && !this.tabs[prevIndex].disabled) {
return prevIndex;
}
if (this.tabs[nextIndex] && !this.tabs[nextIndex].disabled) {
return nextIndex;
}
}
return -1;
};
/**
* @param {?} index
* @return {?}
*/
TabsetComponent.prototype.hasAvailableTabs = /**
* @param {?} index
* @return {?}
*/
function (index) {
/** @type {?} */
var tabsLength = this.tabs.length;
if (!tabsLength) {
return false;
}
for (var i = 0; i < tabsLength; i += 1) {
if (!this.tabs[i].disabled && i !== index) {
return true;
}
}
return false;
};
/**
* @return {?}
*/
TabsetComponent.prototype.setClassMap = /**
* @return {?}
*/
function () {
var _a;
this.classMap = (_a = {
'is-vertical': this.vertical,
'is-justified': this.justified,
'has-info': this.hasInfo
},
_a["hx-nav-" + this.type] = true,
_a);
};
TabsetComponent.decorators = [
{ type: Component, args: [{
selector: 'hx-tabset',
template: "\n <ul class=\"hx-nav\" [ngClass]=\"classMap\" (click)=\"$event.preventDefault()\">\n <li *ngFor=\"let tabz of tabs\" [ngClass]=\"['hx-nav-item', tabz.customClass || '']\"\n [class.is-active]=\"tabz.active\" [class.is-disabled]=\"tabz.disabled\">\n <a href=\"javascript:void(0);\" class=\"hx-nav-link\"\n [class.is-active]=\"tabz.active\" [class.is-disabled]=\"tabz.disabled\"\n (click)=\"tabz.active = true\">\n <span [ngTransclude]=\"tabz.headingRef\">{{tabz.heading}}</span>\n <span *ngIf=\"tabz.removable\">\n <span (click)=\"$event.preventDefault(); removeTab(tabz);\" class=\"icon close-outline is-small\"></span>\n </span>\n </a>\n </li>\n </ul>\n <div class=\"hx-tab-content\">\n <ng-content></ng-content>\n </div>\n "
},] },
];
/** @nocollapse */
TabsetComponent.ctorParameters = function () { return [
{ type: TabsetConfig }
]; };
TabsetComponent.propDecorators = {
vertical: [{ type: Input }],
justified: [{ type: Input }],
hasInfo: [{ type: Input }],
type: [{ type: Input }],
clazn: [{ type: HostBinding, args: ['class.hx-tab-container',] }]
};
return TabsetComponent;
}());
export { TabsetComponent };
if (false) {
/** @type {?} */
TabsetComponent.prototype.clazn;
/** @type {?} */
TabsetComponent.prototype.tabs;
/** @type {?} */
TabsetComponent.prototype.classMap;
/** @type {?} */
TabsetComponent.prototype.isDestroyed;
/** @type {?} */
TabsetComponent.prototype._vertical;
/** @type {?} */
TabsetComponent.prototype._justified;
/** @type {?} */
TabsetComponent.prototype._hasInfo;
/** @type {?} */
TabsetComponent.prototype._type;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BoeHVpL2FuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvdGFicy90YWJzZXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFHekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DO0lBd0VFLHlCQUFtQixNQUFvQjtRQVhPLFVBQUssR0FBRyxJQUFJLENBQUM7UUFFcEQsU0FBSSxHQUFtQixFQUFFLENBQUM7UUFDMUIsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQVN4QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBbkRELHNCQUNXLHFDQUFRO1FBRm5CLDZDQUE2Qzs7Ozs7UUFDN0M7WUFFRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDeEIsQ0FBQzs7Ozs7UUFDRCxVQUFvQixLQUFjO1lBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDOzs7T0FKQTtJQU9ELHNCQUNXLHNDQUFTO1FBRnBCLGtFQUFrRTs7Ozs7UUFDbEU7WUFFRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekIsQ0FBQzs7Ozs7UUFDRCxVQUFxQixLQUFjO1lBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDOzs7T0FKQTtJQU1ELHNCQUNXLG9DQUFPOzs7O1FBRGxCO1lBRUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUM7Ozs7O1FBQ0QsVUFBbUIsS0FBYztZQUMvQixJQUFJLENBQUMsUUFBUSxHQUFH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aW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5wdXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgVGFiRGlyZWN0aXZlIH0gZnJvbSAnLi90YWIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVGFic2V0Q29uZmlnIH0gZnJvbSAnLi90YWJzZXQuY29uZmlnJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaHgtdGFic2V0JyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPHVsIGNsYXNzPVwiaHgtbmF2XCIgW25nQ2xhc3NdPVwiY2xhc3NNYXBcIiAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cclxuICAgICAgICA8bGkgKm5nRm9yPVwibGV0IHRhYnogb2YgdGFic1wiIFtuZ0NsYXNzXT1cIlsnaHgtbmF2LWl0ZW0nLCB0YWJ6LmN1c3RvbUNsYXNzIHx8ICcnXVwiXHJcbiAgICAgICAgICBbY2xhc3MuaXMtYWN0aXZlXT1cInRhYnouYWN0aXZlXCIgW2NsYXNzLmlzLWRpc2FibGVkXT1cInRhYnouZGlzYWJsZWRcIj5cclxuICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgY2xhc3M9XCJoeC1uYXYtbGlua1wiXHJcbiAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwidGFiei5hY3RpdmVcIiBbY2xhc3MuaXMtZGlzYWJsZWRdPVwidGFiei5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJ0YWJ6LmFjdGl2ZSA9IHRydWVcIj5cclxuICAgICAgICAgICAgPHNwYW4gW25nVHJhbnNjbHVkZV09XCJ0YWJ6LmhlYWRpbmdSZWZcIj57e3RhYnouaGVhZGluZ319PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnoucmVtb3ZhYmxlXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyByZW1vdmVUYWIodGFieik7XCIgY2xhc3M9XCJpY29uIGNsb3NlLW91dGxpbmUgaXMtc21hbGxcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuICAgIDxkaXYgY2xhc3M9XCJoeC10YWItY29udGVudFwiPlxyXG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICA8L2Rpdj5cclxuICBgXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJzZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIC8qKiBpZiB0cnVlIHRhYnMgd2lsbCBiZSBwbGFjZWQgdmVydGljYWxseSAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCB2ZXJ0aWNhbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92ZXJ0aWNhbDtcclxuICB9XHJcbiAgcHVibGljIHNldCB2ZXJ0aWNhbCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fdmVydGljYWwgPSB2YWx1ZTtcclxuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcclxuICB9XHJcblxyXG4gIC8qKiBpZiB0cnVlIHRhYnMgZmlsbCB0aGUgY29udGFpbmVyIGFuZCBoYXZlIGEgY29uc2lzdGVudCB3aWR0aCAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBqdXN0aWZpZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fanVzdGlmaWVkO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGp1c3RpZmllZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fanVzdGlmaWVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgaGFzSW5mbygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9oYXNJbmZvO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGhhc0luZm8odmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2hhc0luZm8gPSB2YWx1ZTtcclxuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcclxuICB9XHJcblxyXG4gIC8qKiBuYXZpZ2F0aW9uIGNvbnRleHQgY2xhc3M6ICd0YWJzJyBvciAncGlsbHMnICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90eXBlO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHR5cGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5oeC10YWItY29udGFpbmVyJykgcHVibGljIGNsYXpuID0gdHJ1ZTtcclxuXHJcbiAgcHVibGljIHRhYnM6IFRhYkRpcmVjdGl2ZVtdID0gW107XHJcbiAgcHVibGljIGNsYXNzTWFwOiBhbnkgPSB7fTtcclxuXHJcbiAgcHJvdGVjdGVkIGlzRGVzdHJveWVkOiBib29sZWFuO1xyXG4gIHByb3RlY3RlZCBfdmVydGljYWw6IGJvb2xlYW47XHJcbiAgcHJvdGVjdGVkIF9qdXN0aWZpZWQ6IGJvb2xlYW47XHJcbiAgcHJvdGVjdGVkIF9oYXNJbmZvOiBib29sZWFuO1xyXG4gIHByb3RlY3RlZCBfdHlwZTogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3IoY29uZmlnOiBUYWJzZXRDb25maWcpIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcywgY29uZmlnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZFRhYih0YWI6IFRhYkRpcmVjdGl2ZSk6IHZvaWQge1xyXG4gICAgdGhpcy50YWJzLnB1c2godGFiKTtcclxuICAgIHRhYi5hY3RpdmUgPSB0aGlzLnRhYnMubGVuZ3RoID09PSAxICYmIHRhYi5hY3RpdmUgIT09IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZVRhYih0YWI6IFRhYkRpcmVjdGl2ZSwgb3B0aW9ucyA9IHtyZXNlbGVjdDogdHJ1ZSwgZW1pdDogdHJ1ZX0pOiB2b2lkIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy50YWJzLmluZGV4T2YodGFiKTtcclxuICAgIGlmIChpbmRleCA9PT0gLTEgfHwgdGhpcy5pc0Rlc3Ryb3llZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBTZWxlY3QgYSBuZXcgdGFiIGlmIHRoZSB0YWIgdG8gYmUgcmVtb3ZlZCBpcyBzZWxlY3RlZCBhbmQgbm90IGRlc3Ryb3llZFxyXG4gICAgaWYgKG9wdGlvbnMucmVzZWxlY3QgJiYgdGFiLmFjdGl2ZSAmJiB0aGlzLmhhc0F2YWlsYWJsZVRhYnMoaW5kZXgpKSB7XHJcbiAgICAgIGNvbnN0IG5ld0FjdGl2ZUluZGV4ID0gdGhpcy5nZXRDbG9zZXN0VGFiSW5kZXgoaW5kZXgpO1xyXG4gICAgICB0aGlzLnRhYnNbbmV3QWN0aXZlSW5kZXhdLmFjdGl2ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5lbWl0KSB7XHJcbiAgICAgIHRhYi5yZW1vdmVkLmVtaXQodGFiKTtcclxuICAgIH1cclxuICAgIHRoaXMudGFicy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgaWYgKHRhYi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgJiYgdGFiLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmUpIHtcclxuICAgICAgdGFiLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRDbG9zZXN0VGFiSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCB0YWJzTGVuZ3RoID0gdGhpcy50YWJzLmxlbmd0aDtcclxuICAgIGlmICghdGFic0xlbmd0aCkge1xyXG4gICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgc3RlcCA9IDE7IHN0ZXAgPD0gdGFic0xlbmd0aDsgc3RlcCArPSAxKSB7XHJcbiAgICAgIGNvbnN0IHByZXZJbmRleCA9IGluZGV4IC0gc3RlcDtcclxuICAgICAgY29uc3QgbmV4dEluZGV4ID0gaW5kZXggKyBzdGVwO1xyXG4gICAgICBpZiAodGhpcy50YWJzW3ByZXZJbmRleF0gJiYgIXRoaXMudGFic1twcmV2SW5kZXhdLmRpc2FibGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHByZXZJbmRleDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50YWJzW25leHRJbmRleF0gJiYgIXRoaXMudGFic1tuZXh0SW5kZXhdLmRpc2FibGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIG5leHRJbmRleDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGhhc0F2YWlsYWJsZVRhYnMoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdGFic0xlbmd0aCA9IHRoaXMudGFicy5sZW5ndGg7XHJcbiAgICBpZiAoIXRhYnNMZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFic0xlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIGlmICghdGhpcy50YWJzW2ldLmRpc2FibGVkICYmIGkgIT09IGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXRDbGFzc01hcCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xhc3NNYXAgPSB7XHJcbiAgICAgICdpcy12ZXJ0aWNhbCc6IHRoaXMudmVydGljYWwsXHJcbiAgICAgICdpcy1qdXN0aWZpZWQnOiB0aGlzLmp1c3RpZmllZCxcclxuICAgICAgJ2hhcy1pbmZvJzogdGhpcy5oYXNJbmZvLFxyXG4gICAgICBbYGh4LW5hdi0ke3RoaXMudHlwZX1gXTogdHJ1ZVxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19