UNPKG

carbon-components-angular

Version:
125 lines 16.1 kB
import { Component, Input, ViewChild, HostBinding } from "@angular/core"; import * as i0 from "@angular/core"; import * as i1 from "carbon-components-angular/utils"; /** * There are two ways to create a tab, this class is a collection of features * & metadata required by both. */ export class BaseTabHeader { constructor(elementRef, changeDetectorRef, eventService, renderer) { this.elementRef = elementRef; this.changeDetectorRef = changeDetectorRef; this.eventService = eventService; this.renderer = renderer; /** * Set to 'true' to have `Tab` items cached and not reloaded on tab switching. * Duplicate from `n-tabs` to support standalone headers */ this.cacheActive = false; this.type = "line"; this.theme = "dark"; this.tabsClass = true; // width of the overflow buttons this.OVERFLOW_BUTTON_OFFSET = 44; this.longPressMultiplier = 3; this.clickMultiplier = 1.5; this.longPressInterval = null; this.tickInterval = null; } get containedClass() { return this.type === "contained"; } get themeClass() { return this.theme === "light"; } get hasHorizontalOverflow() { const tabList = this.headerContainer.nativeElement; return tabList.scrollWidth > tabList.clientWidth; } get leftOverflowNavButtonHidden() { const tabList = this.headerContainer.nativeElement; return !this.hasHorizontalOverflow || !tabList.scrollLeft; } get rightOverflowNavButtonHidden() { const tabList = this.headerContainer.nativeElement; return !this.hasHorizontalOverflow || (tabList.scrollLeft + tabList.clientWidth) === tabList.scrollWidth; } handleScroll() { this.changeDetectorRef.markForCheck(); } handleOverflowNavClick(direction, numOftabs = 0) { const tabList = this.headerContainer.nativeElement; const { clientWidth, scrollLeft, scrollWidth } = tabList; if (direction > 0) { tabList.scrollLeft = Math.min(scrollLeft + (scrollWidth / numOftabs) * this.clickMultiplier, scrollWidth - clientWidth); } else if (direction < 0) { tabList.scrollLeft = Math.max(scrollLeft - (scrollWidth / numOftabs) * this.clickMultiplier, 0); } } handleOverflowNavMouseDown(direction) { const tabList = this.headerContainer.nativeElement; this.longPressInterval = setTimeout(() => { // Manually overriding scroll behvior to `auto` to make animation work correctly this.renderer.setStyle(tabList, "scroll-behavior", "auto"); this.tickInterval = setInterval(() => { tabList.scrollLeft += (direction * this.longPressMultiplier); // clear interval if scroll reaches left or right edge if (this.leftOverflowNavButtonHidden || this.rightOverflowNavButtonHidden) { return () => { clearInterval(this.tickInterval); this.handleOverflowNavMouseUp(); }; } }); return () => clearInterval(this.longPressInterval); }, 500); } /** * Clear intervals/Timeout & reset scroll behavior */ handleOverflowNavMouseUp() { clearInterval(this.tickInterval); clearTimeout(this.longPressInterval); // Reset scroll behavior this.renderer.setStyle(this.headerContainer.nativeElement, "scroll-behavior", "smooth"); } } BaseTabHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BaseTabHeader, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.EventService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); BaseTabHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BaseTabHeader, selector: "ng-component", inputs: { cacheActive: "cacheActive", followFocus: "followFocus", ariaLabel: "ariaLabel", ariaLabelledby: "ariaLabelledby", contentBefore: "contentBefore", contentAfter: "contentAfter", type: "type", theme: "theme" }, host: { properties: { "class.cds--tabs": "this.tabsClass", "class.cds--tabs--contained": "this.containedClass", "class.cds--tabs--light": "this.themeClass" } }, viewQueries: [{ propertyName: "headerContainer", first: true, predicate: ["tabList"], descendants: true, static: true }], ngImport: i0, template: "", isInline: true }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BaseTabHeader, decorators: [{ type: Component, args: [{ template: "" }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.EventService }, { type: i0.Renderer2 }]; }, propDecorators: { cacheActive: [{ type: Input }], followFocus: [{ type: Input }], ariaLabel: [{ type: Input }], ariaLabelledby: [{ type: Input }], contentBefore: [{ type: Input }], contentAfter: [{ type: Input }], type: [{ type: Input }], theme: [{ type: Input }], tabsClass: [{ type: HostBinding, args: ["class.cds--tabs"] }], containedClass: [{ type: HostBinding, args: ["class.cds--tabs--contained"] }], themeClass: [{ type: HostBinding, args: ["class.cds--tabs--light"] }], headerContainer: [{ type: ViewChild, args: ["tabList", { static: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10YWItaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90YWJzL2Jhc2UtdGFiLWhlYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUlULFdBQVcsRUFFWCxNQUFNLGVBQWUsQ0FBQzs7O0FBR3ZCOzs7R0FHRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBa0V6QixZQUNXLFVBQXNCLEVBQ3RCLGlCQUFvQyxFQUNwQyxZQUEwQixFQUMxQixRQUFtQjtRQUhuQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQXJFOUI7OztXQUdHO1FBQ00sZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFpQnBCLFNBQUksR0FBeUIsTUFBTSxDQUFDO1FBQ3BDLFVBQUssR0FBcUIsTUFBTSxDQUFDO1FBRVYsY0FBUyxHQUFHLElBQUksQ0FBQztRQWlCakQsZ0NBQWdDO1FBQ3ZCLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUM1Qix3QkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDeEIsb0JBQWUsR0FBRyxHQUFHLENBQUM7UUFFckIsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO0lBdUIxQixDQUFDO0lBN0NMLElBQStDLGNBQWM7UUFDNUQsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBMkMsVUFBVTtRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDO0lBQy9CLENBQUM7SUFtQkQsSUFBSSxxQkFBcUI7UUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FB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QyxDQUFDO0lBQ3pGLENBQUM7OzBHQXhIVyxhQUFhOzhGQUFiLGFBQWEseWlCQUZmLEVBQUU7MkZBRUEsYUFBYTtrQkFIekIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsRUFBRTtpQkFDWjtvTEFNUyxXQUFXO3NCQUFuQixLQUFLO2dCQUlHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUcsU0FBUztzQkFBakIsS0FBSztnQkFJRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUUwQixTQUFTO3NCQUF4QyxXQUFXO3VCQUFDLGlCQUFpQjtnQkFDaUIsY0FBYztzQkFBNUQsV0FBVzt1QkFBQyw0QkFBNEI7Z0JBR0UsVUFBVTtzQkFBcEQsV0FBVzt1QkFBQyx3QkFBd0I7Z0JBT0csZUFBZTtzQkFBdEQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRJbnB1dCxcblx0Vmlld0NoaWxkLFxuXHRFbGVtZW50UmVmLFxuXHRUZW1wbGF0ZVJlZixcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdEhvc3RCaW5kaW5nLFxuXHRSZW5kZXJlcjJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL3V0aWxzXCI7XG5cbi8qKlxuICogVGhlcmUgYXJlIHR3byB3YXlzIHRvIGNyZWF0ZSBhIHRhYiwgdGhpcyBjbGFzcyBpcyBhIGNvbGxlY3Rpb24gb2YgZmVhdHVyZXNcbiAqICYgbWV0YWRhdGEgcmVxdWlyZWQgYnkgYm90aC5cbiAqL1xuQENvbXBvbmVudCh7XG5cdHRlbXBsYXRlOiBcIlwiXG59KVxuZXhwb3J0IGNsYXNzIEJhc2VUYWJIZWFkZXIge1xuXHQvKipcblx0ICogU2V0IHRvICd0cnVlJyB0byBoYXZlIGBUYWJgIGl0ZW1zIGNhY2hlZCBhbmQgbm90IHJlbG9hZGVkIG9uIHRhYiBzd2l0Y2hpbmcuXG5cdCAqIER1cGxpY2F0ZSBmcm9tIGBuLXRhYnNgIHRvIHN1cHBvcnQgc3RhbmRhbG9uZSBoZWFkZXJzXG5cdCAqL1xuXHRASW5wdXQoKSBjYWNoZUFjdGl2ZSA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvICd0cnVlJyB0byBoYXZlIHRhYnMgYXV0b21hdGljYWxseSBhY3RpdmF0ZWQgYW5kIGhhdmUgdGhlaXIgY29udGVudCBkaXNwbGF5ZWQgd2hlbiB0aGV5IHJlY2VpdmUgZm9jdXMuXG5cdCAqL1xuXHRASW5wdXQoKSBmb2xsb3dGb2N1czogYm9vbGVhbjtcblx0LyoqXG5cdCAqIFNldHMgdGhlIGFyaWEgbGFiZWwgb24gdGhlIG5hdiBlbGVtZW50LlxuXHQgKi9cblx0QElucHV0KCkgYXJpYUxhYmVsOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBhcmlhIGxhYmVsbGVkYnkgb24gdGhlIG5hdiBlbGVtZW50LlxuXHQgKi9cblx0QElucHV0KCkgYXJpYUxhYmVsbGVkYnk6IHN0cmluZztcblxuXHRASW5wdXQoKSBjb250ZW50QmVmb3JlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXHRASW5wdXQoKSBjb250ZW50QWZ0ZXI6IFRlbXBsYXRlUmVmPGFueT47XG5cblx0QElucHV0KCkgdHlwZTogXCJsaW5lXCIgfCBcImNvbnRhaW5lZFwiID0gXCJsaW5lXCI7XG5cdEBJbnB1dCgpIHRoZW1lOiBcImRhcmtcIiB8IFwibGlnaHRcIiA9IFwiZGFya1wiO1xuXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tdGFic1wiKSB0YWJzQ2xhc3MgPSB0cnVlO1xuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXRhYnMtLWNvbnRhaW5lZFwiKSBnZXQgY29udGFpbmVkQ2xhc3MoKSB7XG5cdFx0cmV0dXJuIHRoaXMudHlwZSA9PT0gXCJjb250YWluZWRcIjtcblx0fVxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXRhYnMtLWxpZ2h0XCIpIGdldCB0aGVtZUNsYXNzKCkge1xuXHRcdHJldHVybiB0aGlzLnRoZW1lID09PSBcImxpZ2h0XCI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgVW5vcmRlcmVkIExpc3QgZWxlbWVudCB0aGF0IGhvbGRzIHRoZSBgVGFiYCBoZWFkaW5ncyBmcm9tIHRoZSB2aWV3IERPTS5cblx0ICovXG5cdEBWaWV3Q2hpbGQoXCJ0YWJMaXN0XCIsIHsgc3RhdGljOiB0cnVlIH0pIGhlYWRlckNvbnRhaW5lcjtcblxuXHQvKipcblx0ICogQ29udHJvbHMgdGhlIG1hbnVhbCBmb2N1c2luZyBkb25lIGJ5IHRhYmJpbmcgdGhyb3VnaCBoZWFkaW5ncy5cblx0ICovXG5cdGN1cnJlbnRTZWxlY3RlZFRhYjogbnVtYmVyO1xuXHQvLyB3aWR0aCBvZiB0aGUgb3ZlcmZsb3cgYnV0dG9uc1xuXHRyZWFkb25seSBPVkVSRkxPV19CVVRUT05fT0ZGU0VUID0gNDQ7XG5cdHJlYWRvbmx5IGxvbmdQcmVzc011bHRpcGxpZXIgPSAzO1xuXHRyZWFkb25seSBjbGlja011bHRpcGxpZXIgPSAxLjU7XG5cblx0cHJvdGVjdGVkIGxvbmdQcmVzc0ludGVydmFsID0gbnVsbDtcblx0cHJvdGVjdGVkIHRpY2tJbnRlcnZhbCA9IG51bGw7XG5cblx0Z2V0IGhhc0hvcml6b250YWxPdmVyZmxvdygpIHtcblx0XHRjb25zdCB0YWJMaXN0ID0gdGhpcy5oZWFkZXJDb250YWluZXIubmF0aXZlRWxlbWVudDtcblx0XHRyZXR1cm4gdGFiTGlzdC5zY3JvbGxXaWR0aCA+IHRhYkxpc3QuY2xpZW50V2lkdGg7XG5cdH1cblxuXHRnZXQgbGVmdE92ZXJmbG93TmF2QnV0dG9uSGlkZGVuKCkge1xuXHRcdGNvbnN0IHRhYkxpc3QgPSB0aGlzLmhlYWRlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuXHRcdHJldHVybiAhdGhpcy5oYXNIb3Jpem9udGFsT3ZlcmZsb3cgfHwgIXRhYkxpc3Quc2Nyb2xsTGVmdDtcblx0fVxuXG5cdGdldCByaWdodE92ZXJmbG93TmF2QnV0dG9uSGlkZGVuKCkge1xuXHRcdGNvbnN0IHRhYkxpc3QgPSB0aGlzLmhlYWRlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuXHRcdHJldHVybiAhdGhpcy5oYXNIb3Jpem9udGFsT3ZlcmZsb3cgfHxcblx0XHRcdCh0YWJMaXN0LnNjcm9sbExlZnQgKyB0YWJMaXN0LmNsaWVudFdpZHRoKSA9PT0gdGFiTGlzdC5zY3JvbGxXaWR0aDtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuXHRcdHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG5cdFx0cHJvdGVjdGVkIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlLFxuXHRcdHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyXG5cdCkgeyB9XG5cblx0aGFuZGxlU2Nyb2xsKCkge1xuXHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRoYW5kbGVPdmVyZmxvd05hdkNsaWNrKGRpcmVjdGlvbjogbnVtYmVyLCBudW1PZnRhYnMgPSAwKSB7XG5cdFx0Y29uc3QgdGFiTGlzdCA9IHRoaXMuaGVhZGVyQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG5cblx0XHRjb25zdCB7IGNsaWVudFdpZHRoLCBzY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCB9ID0gdGFiTGlzdDtcblx0XHRpZiAoZGlyZWN0aW9uID4gMCkge1xuXHRcdFx0dGFiTGlzdC5zY3JvbGxMZWZ0ID0gTWF0aC5taW4oc2Nyb2xsTGVmdCArIChzY3JvbGxXaWR0aCAvIG51bU9mdGFicykgKiB0aGlzLmNsaWNrTXVsdGlwbGllcixcblx0XHRcdFx0c2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCk7XG5cdFx0fSBlbHNlIGlmIChkaXJlY3Rpb24gPCAwKSB7XG5cdFx0XHR0YWJMaXN0LnNjcm9sbExlZnQgPSBNYXRoLm1heChzY3JvbGxMZWZ0IC0gKHNjcm9sbFdpZHRoIC8gbnVtT2Z0YWJzKSAqIHRoaXMuY2xpY2tNdWx0aXBsaWVyLCAwKTtcblx0XHR9XG5cdH1cblxuXHRoYW5kbGVPdmVyZmxvd05hdk1vdXNlRG93bihkaXJlY3Rpb246IG51bWJlcikge1xuXHRcdGNvbnN0IHRhYkxpc3QgPSB0aGlzLmhlYWRlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuXG5cdFx0dGhpcy5sb25nUHJlc3NJbnRlcnZhbCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0Ly8gTWFudWFsbHkgb3ZlcnJpZGluZyBzY3JvbGwgYmVodmlvciB0byBgYXV0b2AgdG8gbWFrZSBhbmltYXRpb24gd29yayBjb3JyZWN0bHlcblx0XHRcdHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGFiTGlzdCwgXCJzY3JvbGwtYmVoYXZpb3JcIiwgXCJhdXRvXCIpO1xuXG5cdFx0XHR0aGlzLnRpY2tJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdFx0dGFiTGlzdC5zY3JvbGxMZWZ0ICs9IChkaXJlY3Rpb24gKiB0aGlzLmxvbmdQcmVzc011bHRpcGxpZXIpO1xuXHRcdFx0XHQvLyBjbGVhciBpbnRlcnZhbCBpZiBzY3JvbGwgcmVhY2hlcyBsZWZ0IG9yIHJpZ2h0IGVkZ2Vcblx0XHRcdFx0aWYgKHRoaXMubGVmdE92ZXJmbG93TmF2QnV0dG9uSGlkZGVuIHx8IHRoaXMucmlnaHRPdmVyZmxvd05hdkJ1dHRvbkhpZGRlbikge1xuXHRcdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjbGVhckludGVydmFsKHRoaXMudGlja0ludGVydmFsKTtcblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlT3ZlcmZsb3dOYXZNb3VzZVVwKCk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKHRoaXMubG9uZ1ByZXNzSW50ZXJ2YWwpO1xuXHRcdH0sIDUwMCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXIgaW50ZXJ2YWxzL1RpbWVvdXQgJiByZXNldCBzY3JvbGwgYmVoYXZpb3Jcblx0ICovXG5cdGhhbmRsZU92ZXJmbG93TmF2TW91c2VVcCgpIHtcblx0XHRjbGVhckludGVydmFsKHRoaXMudGlja0ludGVydmFsKTtcblx0XHRjbGVhclRpbWVvdXQodGhpcy5sb25nUHJlc3NJbnRlcnZhbCk7XG5cblx0XHQvLyBSZXNldCBzY3JvbGwgYmVoYXZpb3Jcblx0XHR0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaGVhZGVyQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIFwic2Nyb2xsLWJlaGF2aW9yXCIsIFwic21vb3RoXCIpO1xuXHR9XG59XG4iXX0=