carbon-components-angular
Version:
Next generation components
1 lines • 64.2 kB
Source Map (JSON)
{"version":3,"file":"carbon-components-angular-tabs.mjs","sources":["../../src/tabs/base-tab-header.component.ts","../../src/tabs/tab-header.directive.ts","../../src/tabs/tab-header-group.component.ts","../../src/tabs/tab.component.ts","../../src/tabs/tab-headers.component.ts","../../src/tabs/tab-skeleton.component.ts","../../src/tabs/tabs.component.ts","../../src/tabs/tabs.module.ts","../../src/tabs/carbon-components-angular-tabs.ts"],"sourcesContent":["import {\n\tComponent,\n\tInput,\n\tViewChild,\n\tElementRef,\n\tTemplateRef,\n\tChangeDetectorRef,\n\tHostBinding,\n\tRenderer2\n} from \"@angular/core\";\nimport { EventService } from \"carbon-components-angular/utils\";\n\n/**\n * There are two ways to create a tab, this class is a collection of features\n * & metadata required by both.\n */\n@Component({\n\ttemplate: \"\"\n})\nexport class BaseTabHeader {\n\t/**\n\t * Set to 'true' to have `Tab` items cached and not reloaded on tab switching.\n\t * Duplicate from `n-tabs` to support standalone headers\n\t */\n\t@Input() cacheActive = false;\n\t/**\n\t * Set to 'true' to have tabs automatically activated and have their content displayed when they receive focus.\n\t */\n\t@Input() followFocus: boolean;\n\t/**\n\t * Sets the aria label on the nav element.\n\t */\n\t@Input() ariaLabel: string;\n\t/**\n\t * Sets the aria labelledby on the nav element.\n\t */\n\t@Input() ariaLabelledby: string;\n\n\t@Input() contentBefore: TemplateRef<any>;\n\t@Input() contentAfter: TemplateRef<any>;\n\n\t@Input() type: \"line\" | \"contained\" = \"line\";\n\t@Input() theme: \"dark\" | \"light\" = \"dark\";\n\n\t@HostBinding(\"class.cds--tabs\") tabsClass = true;\n\t@HostBinding(\"class.cds--tabs--contained\") get containedClass() {\n\t\treturn this.type === \"contained\";\n\t}\n\t@HostBinding(\"class.cds--tabs--light\") get themeClass() {\n\t\treturn this.theme === \"light\";\n\t}\n\n\t/**\n\t * Gets the Unordered List element that holds the `Tab` headings from the view DOM.\n\t */\n\t@ViewChild(\"tabList\", { static: true }) headerContainer;\n\n\t/**\n\t * Controls the manual focusing done by tabbing through headings.\n\t */\n\tcurrentSelectedTab: number;\n\t// width of the overflow buttons\n\treadonly OVERFLOW_BUTTON_OFFSET = 44;\n\treadonly longPressMultiplier = 3;\n\treadonly clickMultiplier = 1.5;\n\n\tprotected longPressInterval = null;\n\tprotected tickInterval = null;\n\n\tget hasHorizontalOverflow() {\n\t\tconst tabList = this.headerContainer.nativeElement;\n\t\treturn tabList.scrollWidth > tabList.clientWidth;\n\t}\n\n\tget leftOverflowNavButtonHidden() {\n\t\tconst tabList = this.headerContainer.nativeElement;\n\t\treturn !this.hasHorizontalOverflow || !tabList.scrollLeft;\n\t}\n\n\tget rightOverflowNavButtonHidden() {\n\t\tconst tabList = this.headerContainer.nativeElement;\n\t\treturn !this.hasHorizontalOverflow ||\n\t\t\t(tabList.scrollLeft + tabList.clientWidth) === tabList.scrollWidth;\n\t}\n\n\tconstructor(\n\t\tprotected elementRef: ElementRef,\n\t\tprotected changeDetectorRef: ChangeDetectorRef,\n\t\tprotected eventService: EventService,\n\t\tprotected renderer: Renderer2\n\t) { }\n\n\thandleScroll() {\n\t\tthis.changeDetectorRef.markForCheck();\n\t}\n\n\thandleOverflowNavClick(direction: number, numOftabs = 0) {\n\t\tconst tabList = this.headerContainer.nativeElement;\n\n\t\tconst { clientWidth, scrollLeft, scrollWidth } = tabList;\n\t\tif (direction > 0) {\n\t\t\ttabList.scrollLeft = Math.min(scrollLeft + (scrollWidth / numOftabs) * this.clickMultiplier,\n\t\t\t\tscrollWidth - clientWidth);\n\t\t} else if (direction < 0) {\n\t\t\ttabList.scrollLeft = Math.max(scrollLeft - (scrollWidth / numOftabs) * this.clickMultiplier, 0);\n\t\t}\n\t}\n\n\thandleOverflowNavMouseDown(direction: number) {\n\t\tconst tabList = this.headerContainer.nativeElement;\n\n\t\tthis.longPressInterval = setTimeout(() => {\n\t\t\t// Manually overriding scroll behvior to `auto` to make animation work correctly\n\t\t\tthis.renderer.setStyle(tabList, \"scroll-behavior\", \"auto\");\n\n\t\t\tthis.tickInterval = setInterval(() => {\n\t\t\t\ttabList.scrollLeft += (direction * this.longPressMultiplier);\n\t\t\t\t// clear interval if scroll reaches left or right edge\n\t\t\t\tif (this.leftOverflowNavButtonHidden || this.rightOverflowNavButtonHidden) {\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tclearInterval(this.tickInterval);\n\t\t\t\t\t\tthis.handleOverflowNavMouseUp();\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn () => clearInterval(this.longPressInterval);\n\t\t}, 500);\n\t}\n\n\t/**\n\t * Clear intervals/Timeout & reset scroll behavior\n\t */\n\thandleOverflowNavMouseUp() {\n\t\tclearInterval(this.tickInterval);\n\t\tclearTimeout(this.longPressInterval);\n\n\t\t// Reset scroll behavior\n\t\tthis.renderer.setStyle(this.headerContainer.nativeElement, \"scroll-behavior\", \"smooth\");\n\t}\n}\n","import {\n\tDirective,\n\tInput,\n\tElementRef,\n\tEventEmitter,\n\tOutput,\n\tAfterViewInit,\n\tHostBinding,\n\tHostListener\n} from \"@angular/core\";\n\nimport { Tab } from \"./tab.component\";\n\n@Directive({\n\tselector: \"[cdsTabHeader], [ibmTabHeader]\"\n})\nexport class TabHeader implements AfterViewInit {\n\t@HostBinding(\"attr.tabIndex\") get tabIndex() {\n\t\treturn this.active ? 0 : -1;\n\t}\n\n\t@HostBinding(\"class.cds--tabs__nav-item--selected\") get isSelected() {\n\t\treturn this.active;\n\t}\n\n\t@HostBinding(\"class.cds--tabs__nav-item--disabled\") get isDisabled() {\n\t\treturn this.disabled;\n\t}\n\t/**\n\t * Set to 'true' to have pane reference cached and not reloaded on tab switching.\n\t */\n\t@Input() set cacheActive(shouldCache: boolean) {\n\t\tthis._cacheActive = shouldCache;\n\n\t\t// Updates the pane references associated with the tab header when cache active is changed.\n\t\tif (this.paneReference) {\n\t\t\tthis.paneReference.cacheActive = this.cacheActive;\n\t\t}\n\t}\n\n\t@Input() set paneTabIndex(tabIndex: number | null) {\n\t\tif (this.paneReference) {\n\t\t\tthis.paneReference.tabIndex = tabIndex;\n\t\t}\n\t}\n\n\tget cacheActive() {\n\t\treturn this._cacheActive;\n\t}\n\t/**\n\t * Indicates whether the `Tab` is active/selected.\n\t * Determines whether it's `TabPanel` is rendered.\n\t */\n\t@Input() active = false;\n\t/**\n\t * Indicates whether or not the `Tab` item is disabled.\n\t */\n\t@Input() disabled = false;\n\n\t@HostBinding(\"attr.type\") type = \"button\";\n\t@HostBinding(\"attr.aria-selected\") ariaSelected = this.active;\n\t@HostBinding(\"attr.aria-disabled\") ariaDisabled = this.disabled;\n\t@HostBinding(\"class.cds--tabs__nav-item\") navItem = true;\n\t@HostBinding(\"class.cds--tabs__nav-link\") navLink = true;\n\n\t/**\n\t * Reference to the corresponsing tab pane.\n\t */\n\t@Input() paneReference: Tab;\n\t@HostBinding(\"attr.title\") @Input() title;\n\n\t/**\n\t * Value 'selected' to be emitted after a new `Tab` is selected.\n\t */\n\n\t@Output() selected = new EventEmitter<any>();\n\n\tprotected _cacheActive = false;\n\n\tconstructor(private host: ElementRef) {}\n\n\t@HostListener(\"click\")\n\tonClick() {\n\t\tthis.selectTab();\n\t}\n\n\tngAfterViewInit() {\n\t\tsetTimeout(() => {\n\t\t\tthis.title = this.title ? this.title : this.host.nativeElement.textContent;\n\t\t});\n\t}\n\n\tselectTab() {\n\t\tthis.focus();\n\t\tif (!this.disabled) {\n\t\t\tthis.selected.emit();\n\t\t\tthis.active = true;\n\t\t\tif (this.paneReference) {\n\t\t\t\tthis.paneReference.active = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tfocus() {\n\t\tthis.host.nativeElement.focus();\n\t}\n}\n","import {\n\tComponent,\n\tQueryList,\n\tInput,\n\tHostListener,\n\tContentChildren,\n\tAfterContentInit,\n\tElementRef,\n\tOnChanges,\n\tSimpleChanges,\n\tChangeDetectorRef,\n\tViewChild,\n\tOnInit,\n\tRenderer2\n} from \"@angular/core\";\n\nimport { Subscription } from \"rxjs\";\nimport { EventService } from \"carbon-components-angular/utils\";\n\nimport { TabHeader } from \"./tab-header.directive\";\nimport { BaseTabHeader } from \"./base-tab-header.component\";\n\n@Component({\n\tselector: \"cds-tab-header-group, ibm-tab-header-group\",\n\ttemplate: `\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"cds--tab--overflow-nav-button cds--tab--overflow-nav-button--previous\"\n\t\t\t[ngClass]=\"{\n\t\t\t\t'cds--tab--overflow-nav-button--hidden': leftOverflowNavButtonHidden\n\t\t\t}\"\n\t\t\t(click)=\"handleOverflowNavClick(-1, tabHeaderQuery.length)\"\n\t\t\t(pointerdown)=\"handleOverflowNavMouseDown(-1)\"\n\t\t\t(pointerup)=\"handleOverflowNavMouseUp()\"\n\t\t\t(pointerleave)=\"handleOverflowNavMouseUp()\"\n\t\t\t(pointerout)=\"handleOverflowNavMouseUp()\"\n\t\t\t(pointercancel)=\"handleOverflowNavMouseUp()\">\n\t\t\t<svg\n\t\t\t\tfocusable=\"false\"\n\t\t\t\tpreserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\twidth=\"16\"\n\t\t\t\theight=\"16\"\n\t\t\t\tviewBox=\"0 0 16 16\"\n\t\t\t\taria-hidden=\"true\">\n\t\t\t\t<path d=\"M5 8L10 3 10.7 3.7 6.4 8 10.7 12.3 10 13z\"></path>\n\t\t\t</svg>\n\t\t</button>\n\t\t<div\n\t\t\tclass=\"cds--tab--list\"\n\t\t\trole=\"tablist\"\n\t\t\t[attr.aria-label]=\"ariaLabel\"\n\t\t\t(scroll)=\"handleScroll()\"\n\t\t\t#tabList>\n\t\t\t<ng-container [ngTemplateOutlet]=\"contentBefore\"></ng-container>\n\t\t\t<ng-content></ng-content>\n\t\t\t<ng-container [ngTemplateOutlet]=\"contentAfter\"></ng-container>\n\t\t</div>\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"cds--tab--overflow-nav-button cds--tab--overflow-nav-button--next\"\n\t\t\t[ngClass]=\"{\n\t\t\t\t'cds--tab--overflow-nav-button--hidden': rightOverflowNavButtonHidden\n\t\t\t}\"\n\t\t\t(click)=\"handleOverflowNavClick(1, tabHeaderQuery.length)\"\n\t\t\t(pointerdown)=\"handleOverflowNavMouseDown(1)\"\n\t\t\t(pointerup)=\"handleOverflowNavMouseUp()\"\n\t\t\t(pointerleave)=\"handleOverflowNavMouseUp()\"\n\t\t\t(pointerout)=\"handleOverflowNavMouseUp()\"\n\t\t\t(pointercancel)=\"handleOverflowNavMouseUp()\">\n\t\t\t<svg\n\t\t\t\tfocusable=\"false\"\n\t\t\t\tpreserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\twidth=\"16\"\n\t\t\t\theight=\"16\"\n\t\t\t\tviewBox=\"0 0 16 16\"\n\t\t\t\taria-hidden=\"true\">\n\t\t\t\t<path d=\"M11 8L6 13 5.3 12.3 9.6 8 5.3 3.7 6 3z\"></path>\n\t\t\t</svg>\n\t\t</button>\n\t`\n})\nexport class TabHeaderGroup extends BaseTabHeader implements AfterContentInit, OnChanges, OnInit {\n\t@Input() isNavigation = false;\n\n\t/**\n\t * ContentChildren of all the tabHeaders.\n\t */\n\t@ContentChildren(TabHeader) tabHeaderQuery: QueryList<TabHeader>;\n\n\t@ViewChild(\"tabList\", { static: true }) headerContainer;\n\t/**\n\t * Keeps track of all the subscriptions to the tab header selection events.\n\t */\n\tselectedSubscriptionTracker = new Subscription();\n\n\t/**\n\t * Controls the manual focusing done by tabbing through headings.\n\t */\n\tcurrentSelectedTab = 0;\n\n\tconstructor(\n\t\tprotected elementRef: ElementRef,\n\t\tprotected changeDetectorRef: ChangeDetectorRef,\n\t\tprotected eventService: EventService,\n\t\tprotected renderer: Renderer2\n\t) {\n\t\tsuper(elementRef, changeDetectorRef, eventService, renderer);\n\t}\n\n\t// keyboard accessibility\n\t/**\n\t * Controls the keydown events used for tabbing through the headings.\n\t */\n\t@HostListener(\"keydown\", [\"$event\"])\n\tkeyboardInput(event) {\n\t\tlet tabHeadersArray = this.tabHeaderQuery.toArray();\n\n\t\tif (event.key === \"ArrowRight\") {\n\t\t\tif (this.currentSelectedTab < tabHeadersArray.length - 1) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (this.followFocus && !tabHeadersArray[this.currentSelectedTab + 1].disabled) {\n\t\t\t\t\ttabHeadersArray[this.currentSelectedTab + 1].selectTab();\n\t\t\t\t} else {\n\t\t\t\t\ttabHeadersArray[this.currentSelectedTab + 1].focus();\n\t\t\t\t\tthis.currentSelectedTab++;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (this.followFocus && !tabHeadersArray[0].disabled) {\n\t\t\t\t\ttabHeadersArray[0].selectTab();\n\t\t\t\t} else {\n\t\t\t\t\ttabHeadersArray[0].focus();\n\t\t\t\t\tthis.currentSelectedTab = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (event.key === \"ArrowLeft\") {\n\t\t\tif (this.currentSelectedTab > 0) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (this.followFocus && !tabHeadersArray[this.currentSelectedTab - 1].disabled) {\n\t\t\t\t\ttabHeadersArray[this.currentSelectedTab - 1].selectTab();\n\t\t\t\t} else {\n\t\t\t\t\ttabHeadersArray[this.currentSelectedTab - 1].focus();\n\t\t\t\t\tthis.currentSelectedTab--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (this.followFocus && !tabHeadersArray[tabHeadersArray.length - 1].disabled) {\n\t\t\t\t\ttabHeadersArray[tabHeadersArray.length - 1].selectTab();\n\t\t\t\t} else {\n\t\t\t\t\ttabHeadersArray[tabHeadersArray.length - 1].focus();\n\t\t\t\t\tthis.currentSelectedTab = tabHeadersArray.length - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (event.key === \"Home\") {\n\t\t\tevent.preventDefault();\n\t\t\tif (this.followFocus && !tabHeadersArray[0].disabled) {\n\t\t\t\ttabHeadersArray[0].selectTab();\n\t\t\t} else {\n\t\t\t\ttabHeadersArray[0].focus();\n\t\t\t\tthis.currentSelectedTab = 0;\n\t\t\t}\n\t\t}\n\n\t\tif (event.key === \"End\") {\n\t\t\tevent.preventDefault();\n\t\t\tif (this.followFocus && !tabHeadersArray[tabHeadersArray.length - 1].disabled) {\n\t\t\t\ttabHeadersArray[tabHeadersArray.length - 1].selectTab();\n\t\t\t} else {\n\t\t\t\ttabHeadersArray[tabHeadersArray.length - 1].focus();\n\t\t\t\tthis.currentSelectedTab = tabHeadersArray.length - 1;\n\t\t\t}\n\t\t}\n\n\t\tif ((event.key === \" \") && !this.followFocus) {\n\t\t\ttabHeadersArray[this.currentSelectedTab].selectTab();\n\t\t}\n\t}\n\n\tngOnInit() {\n\t\tthis.eventService.on(window as any, \"resize\", () => this.handleScroll());\n\t}\n\n\tngAfterContentInit() {\n\t\tthis.selectedSubscriptionTracker.unsubscribe();\n\n\t\tif (this.tabHeaderQuery) {\n\t\t\tthis.tabHeaderQuery.toArray()\n\t\t\t\t.forEach(tabHeader => {\n\t\t\t\t\ttabHeader.cacheActive = this.cacheActive;\n\t\t\t\t\ttabHeader.paneTabIndex = this.isNavigation ? null : 0;\n\t\t\t\t});\n\t\t}\n\n\t\tconst selectedSubscriptions = this.tabHeaderQuery.toArray().forEach(tabHeader => {\n\t\t\ttabHeader.selected.subscribe(() => {\n\t\t\t\tthis.currentSelectedTab = this.tabHeaderQuery.toArray().indexOf(tabHeader);\n\t\t\t\t// The Filter takes the current selected tab out, then all other headers are\n\t\t\t\t// deactivated and their associated pane references are also deactivated.\n\t\t\t\tthis.tabHeaderQuery.toArray().filter(header => header !== tabHeader)\n\t\t\t\t\t.forEach(filteredHeader => {\n\t\t\t\t\t\tfilteredHeader.active = false;\n\t\t\t\t\t\tif (filteredHeader.paneReference) {\n\t\t\t\t\t\t\tfilteredHeader.paneReference.active = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t});\n\t\t});\n\t\tthis.selectedSubscriptionTracker.add(selectedSubscriptions);\n\n\t\tsetTimeout(() => this.tabHeaderQuery.toArray()[this.currentSelectedTab].selectTab());\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (this.tabHeaderQuery) {\n\t\t\tif (changes.cacheActive) {\n\t\t\t\tthis.tabHeaderQuery.toArray().forEach(tabHeader => tabHeader.cacheActive = this.cacheActive);\n\t\t\t}\n\n\t\t\tif (changes.isNavigation) {\n\t\t\t\tthis.tabHeaderQuery.toArray()\n\t\t\t\t\t.forEach(tabHeader => tabHeader.paneTabIndex = this.isNavigation ? null : 0);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetSelectedTab(): any {\n\t\tconst selected = this.tabHeaderQuery.toArray()[this.currentSelectedTab];\n\t\tif (selected) {\n\t\t\treturn selected;\n\t\t}\n\t\treturn {\n\t\t\theadingIsTemplate: false,\n\t\t\theading: \"\"\n\t\t};\n\t}\n}\n","import {\n\tComponent,\n\tOnInit,\n\tInput,\n\tOutput,\n\tEventEmitter,\n\tTemplateRef,\n\tHostBinding\n} from \"@angular/core\";\n\n/**\n* The `Tab` component is a child of the `Tabs` component.\n* It represents one `Tab` item and its content within a panel of other `Tab` items.\n*\n*\n* `Tab` takes a string or `TemplateRef` for the header, and any content for the body of the tab.\n* Disabled states should be handled by the application (ie. switch to the tab, but display some\n* indication as to _why_ the tab is disabled).\n*\n* When the tab is selected the `select` output will be triggered.\n* The `select` output will also be triggered for the active tab when the tabs are loaded or updated.\n*\n*\n* Tab with string header:\n*\n* ```html\n* <cds-tab heading='tab1'>\n* \ttab 1 content\n* </cds-tab>\n* ```\n*\n* Tab with custom header:\n*\n* ```html\n* <ng-template #tabHeading>\n* \t<svg cdsIcon=\"facebook\"\n* \t\tsize=\"sm\"\n* \t\tstyle=\"margin-right: 7px;\">\n* \t</svg>\n* \tHello Tab 1\n* </ng-template>\n* <cds-tabs>\n* \t<cds-tab [heading]=\"tabHeading\">\n* \t\tTab 1 content <svg cdsIcon=\"alert\" size=\"lg\"></svg>\n* \t</cds-tab>\n* \t<cds-tab heading='Tab2'>\n* \t\tTab 2 content\n* \t</cds-tab>\n* \t<cds-tab heading='Tab3'>\n* \t\tTab 3 content\n* \t</cds-tab>\n* </cds-tabs>\n* ```\n*/\n@Component({\n\tselector: \"cds-tab, ibm-tab\",\n\ttemplate: `\n\t\t<div\n\t\t\t[attr.tabindex]=\"tabIndex\"\n\t\t\trole=\"tabpanel\"\n\t\t\t*ngIf=\"shouldRender()\"\n\t\t\tclass=\"cds--tab-content\"\n\t\t\t[ngStyle]=\"{'display': active ? null : 'none'}\"\n\t\t\t[attr.aria-labelledby]=\"id + '-header'\"\n\t\t\taria-live=\"polite\">\n\t\t\t<ng-template\n\t\t\t\t*ngIf=\"isTemplate(tabContent)\"\n\t\t\t\t[ngTemplateOutlet]=\"tabContent\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: templateContext }\">\n\t\t\t</ng-template>\n\t\t\t<ng-content></ng-content>\n\t\t</div>\n\t`\n})\nexport class Tab implements OnInit {\n\tprivate static counter = 0;\n\t/**\n\t * Boolean value reflects if the `Tab` is using a custom template for the heading.\n\t * Default value is false.\n\t */\n\tpublic headingIsTemplate = false;\n\n\t/**\n\t * The `Tab`'s title to be displayed or custom temaplate for the `Tab` heading.\n\t */\n\t@Input() heading: string | TemplateRef<any>;\n\t/**\n\t * Optional override for the `tabItem's`'s title attribute which is set in `TabHeaders`.\n\t * `tabItem`'s title attribute is automatically set to `heading`.\n\t *\n\t * You might want to use this if you set `heading` to a `TemplateRef`.\n\t */\n\t@Input() title: string;\n\t/**\n\t * Allows the user to pass data to the custom template for the `Tab` heading.\n\t */\n\t@Input() context: any;\n\t/**\n\t * Indicates whether the `Tab` is active/selected.\n\t * Determines whether it's `TabPanel` is rendered.\n\t */\n\t@Input() active = false;\n\t/**\n\t * Indicates whether or not the `Tab` item is disabled.\n\t */\n\t@Input() disabled = false;\n\n\t@Input() tabIndex = 0;\n\t/**\n\t * Sets the id of the `Tab`. Will be uniquely generated if not provided.\n\t */\n\t@Input() id = `n-tab-${Tab.counter++}`;\n\t/**\n\t * Set to true to have Tab items cached and not reloaded on tab switching.\n\t */\n\t@Input() set cacheActive(shouldCache: boolean) {\n\t\tthis._cacheActive = shouldCache;\n\t}\n\t/**\n\t * Allows life cycle hooks to be called on the rendered content\n\t */\n\t@Input() tabContent: TemplateRef<any>;\n\t/**\n\t * Optional data for templates passed as implicit context\n\t */\n\t@Input() templateContext: any;\n\t/**\n\t * Value 'selected' to be emitted after a new `Tab` is selected.\n\t */\n\t@Output() selected: EventEmitter<void> = new EventEmitter<void>();\n\t/**\n\t * Used to set the id property on the element.\n\t */\n\t@HostBinding(\"attr.id\") attrClass = this.id;\n\n\tget cacheActive() {\n\t\treturn this._cacheActive;\n\t}\n\n\tprotected _cacheActive = false;\n\n\t/**\n\t * Checks for custom heading template on initialization and updates the value\n\t * of the boolean 'headingIsTemplate'.\n\t */\n\tngOnInit() {\n\t\tif (this.heading instanceof TemplateRef) {\n\t\t\tthis.headingIsTemplate = true;\n\t\t}\n\t}\n\n\t/**\n\t * Emit the status of the `Tab`, specifically 'select' and 'selected' properties.\n\t */\n\tdoSelect() {\n\t\tthis.selected.emit();\n\t}\n\n\t/**\n\t* Returns value indicating whether this `Tab` should be rendered in a `TabPanel`.\n\t*/\n\tshouldRender() {\n\t\treturn this.active || this.cacheActive;\n\t}\n\n\tpublic isTemplate(value) {\n\t\treturn value instanceof TemplateRef;\n\t}\n}\n","import {\n\tComponent,\n\tQueryList,\n\tInput,\n\tHostListener,\n\tViewChild,\n\tContentChildren,\n\tAfterContentInit,\n\tViewChildren,\n\tElementRef,\n\tOnChanges,\n\tSimpleChanges,\n\tOnDestroy,\n\tOnInit,\n\tChangeDetectorRef,\n\tRenderer2\n} from \"@angular/core\";\nimport { EventService } from \"carbon-components-angular/utils\";\nimport { I18n } from \"carbon-components-angular/i18n\";\n\nimport { BaseTabHeader } from \"./base-tab-header.component\";\nimport { Tab } from \"./tab.component\";\n\n/**\n * The `TabHeaders` component contains the `Tab` items and controls scroll functionality\n * if content has overflow.\n */\n@Component({\n\tselector: \"cds-tab-headers, ibm-tab-headers\",\n\ttemplate: `\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\t(click)=\"handleOverflowNavClick(-1, tabs.length)\"\n\t\t\t(pointerdown)=\"handleOverflowNavMouseDown(-1)\"\n\t\t\t(pointerup)=\"handleOverflowNavMouseUp()\"\n\t\t\t(pointerleave)=\"handleOverflowNavMouseUp()\"\n\t\t\t(pointerout)=\"handleOverflowNavMouseUp()\"\n\t\t\tclass=\"cds--tab--overflow-nav-button cds--tab--overflow-nav-button--previous\"\n\t\t\t[ngClass]=\"{\n\t\t\t\t'cds--tab--overflow-nav-button--hidden': leftOverflowNavButtonHidden\n\t\t\t}\"\n\t\t\t[title]=\"translations.BUTTON_ARIA_LEFT\">\n\t\t\t<svg\n\t\t\t\tfocusable=\"false\"\n\t\t\t\tpreserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\twidth=\"16\"\n\t\t\t\theight=\"16\"\n\t\t\t\tviewBox=\"0 0 16 16\"\n\t\t\t\taria-hidden=\"true\">\n\t\t\t\t<path d=\"M5 8L10 3 10.7 3.7 6.4 8 10.7 12.3 10 13z\"></path>\n\t\t\t</svg>\n\t\t</button>\n\t\t<div\n\t\t\t#tabList\n\t\t\tclass=\"cds--tab--list\"\n\t\t\trole=\"tablist\"\n\t\t\t[attr.aria-label]=\"ariaLabel || translations.HEADER_ARIA_LABEL\"\n\t\t\t(scroll)=\"handleScroll()\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"contentBefore\"></ng-container>\n\t\t\t<button\n\t\t\t\t*ngFor=\"let tab of tabs; let i = index;\"\n\t\t\t\t#tabItem\n\t\t\t\trole=\"tab\"\n\t\t\t\t[attr.aria-selected]=\"tab.active\"\n\t\t\t\t[attr.tabindex]=\"(tab.active?0:-1)\"\n\t\t\t\t[attr.aria-controls]=\"tab.id\"\n\t\t\t\t[attr.aria-disabled]=\"tab.disabled\"\n\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t'cds--tabs__nav-item--selected': tab.active,\n\t\t\t\t\t'cds--tabs__nav-item--disabled': tab.disabled\n\t\t\t\t}\"\n\t\t\t\tclass=\"cds--tabs__nav-item cds--tabs__nav-link\"\n\t\t\t\ttype=\"button\"\n\t\t\t\tdraggable=\"false\"\n\t\t\t\tid=\"{{tab.id}}-header\"\n\t\t\t\t(focus)=\"onTabFocus(tabItem, i)\"\n\t\t\t\t(click)=\"selectTab(tabItem, tab, i)\">\n\t\t\t\t<ng-container *ngIf=\"!tab.headingIsTemplate\">\n\t\t\t\t\t{{ tab.heading }}\n\t\t\t\t</ng-container>\n\t\t\t\t<ng-template\n\t\t\t\t\t*ngIf=\"tab.headingIsTemplate\"\n\t\t\t\t\t[ngTemplateOutlet]=\"tab.heading\"\n\t\t\t\t\t[ngTemplateOutletContext]=\"{$implicit: tab.context}\">\n\t\t\t\t</ng-template>\n\t\t\t</button>\n\t\t\t<ng-container [ngTemplateOutlet]=\"contentAfter\"></ng-container>\n\t\t</div>\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\t(click)=\"handleOverflowNavClick(1, tabs.length)\"\n\t\t\t(pointerdown)=\"handleOverflowNavMouseDown(1)\"\n\t\t\t(pointerup)=\"handleOverflowNavMouseUp()\"\n\t\t\t(pointerleave)=\"handleOverflowNavMouseUp()\"\n\t\t\t(pointerout)=\"handleOverflowNavMouseUp()\"\n\t\t\tclass=\"cds--tab--overflow-nav-button cds--tab--overflow-nav-button--next\"\n\t\t\t[ngClass]=\"{\n\t\t\t\t'cds--tab--overflow-nav-button--hidden': rightOverflowNavButtonHidden\n\t\t\t}\"\n\t\t\t[title]=\"translations.BUTTON_ARIA_RIGHT\">\n\t\t\t<svg\n\t\t\t\tfocusable=\"false\"\n\t\t\t\tpreserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\twidth=\"16\"\n\t\t\t\theight=\"16\"\n\t\t\t\tviewBox=\"0 0 16 16\"\n\t\t\t\taria-hidden=\"true\">\n\t\t\t\t<path d=\"M11 8L6 13 5.3 12.3 9.6 8 5.3 3.7 6 3z\"></path>\n\t\t\t</svg>\n\t\t</button>\n\t`\n})\n\nexport class TabHeaders extends BaseTabHeader implements AfterContentInit, OnChanges, OnDestroy, OnInit {\n\t/**\n\t * List of `Tab` components.\n\t */\n\t// disable the next line because we need to rename the input\n\t// tslint:disable-next-line\n\t@Input(\"tabs\") tabInput: QueryList<Tab>;\n\n\t@Input() translations = this.i18n.get().TABS;\n\n\t/**\n\t * Gets the Unordered List element that holds the `Tab` headings from the view DOM.\n\t */\n\t@ViewChild(\"tabList\", { static: true }) headerContainer: ElementRef<HTMLElement>;\n\t/**\n\t * ContentChild of all the n-tabs\n\t */\n\t@ContentChildren(Tab) tabQuery: QueryList<Tab>;\n\t/**\n\t * set to tabQuery if tabInput is empty\n\t */\n\ttabs: QueryList<Tab>;\n\t/**\n\t * The index of the first visible tab.\n\t */\n\tfirstVisibleTab = 0;\n\t/**\n\t * The DOM element containing the `Tab` headings displayed.\n\t */\n\t@ViewChildren(\"tabItem\") allTabHeaders: QueryList<ElementRef>;\n\tprivate resizeObserver: ResizeObserver;\n\n\tconstructor(\n\t\tprotected elementRef: ElementRef,\n\t\tprotected changeDetectorRef: ChangeDetectorRef,\n\t\tprotected eventService: EventService,\n\t\tprotected renderer: Renderer2,\n\t\tprotected i18n: I18n\n\t) {\n\t\tsuper(elementRef, changeDetectorRef, eventService, renderer);\n\t}\n\n\t// keyboard accessibility\n\t/**\n\t * Controls the keydown events used for tabbing through the headings.\n\t */\n\t@HostListener(\"keydown\", [\"$event\"])\n\tkeyboardInput(event) {\n\t\tlet tabsArray = this.tabs.toArray();\n\n\t\tif (event.key === \"ArrowRight\") {\n\t\t\tif (this.currentSelectedTab < this.allTabHeaders.length - 1) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (this.followFocus) {\n\t\t\t\t\tthis.selectTab(event.target, tabsArray[this.currentSelectedTab + 1], this.currentSelectedTab);\n\t\t\t\t}\n\t\t\t\tthis.allTabHeaders.toArray()[this.currentSelectedTab + 1].nativeElement.focus();\n\t\t\t} else {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (this.followFocus) {\n\t\t\t\t\tthis.selectTab(event.target, tabsArray[0], 0);\n\t\t\t\t}\n\t\t\t\tthis.allTabHeaders.first.nativeElement.focus();\n\t\t\t}\n\t\t}\n\n\t\tif (event.key === \"ArrowLeft\") {\n\t\t\tif (this.currentSelectedTab > 0) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (this.followFocus) {\n\t\t\t\t\tthis.selectTab(event.target, tabsArray[this.currentSelectedTab - 1], this.currentSelectedTab);\n\t\t\t\t}\n\t\t\t\tthis.allTabHeaders.toArray()[this.currentSelectedTab - 1].nativeElement.focus();\n\t\t\t} else {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (this.followFocus) {\n\t\t\t\t\tthis.selectTab(event.target, tabsArray[this.allTabHeaders.length - 1], this.allTabHeaders.length);\n\t\t\t\t}\n\t\t\t\tthis.allTabHeaders.toArray()[this.allTabHeaders.length - 1].nativeElement.focus();\n\t\t\t}\n\t\t}\n\n\t\tif (event.key === \"Home\") {\n\t\t\tevent.preventDefault();\n\t\t\tif (this.followFocus) {\n\t\t\t\tthis.selectTab(event.target, tabsArray[0], 0);\n\t\t\t}\n\t\t\tthis.allTabHeaders.toArray()[0].nativeElement.focus();\n\t\t}\n\n\t\tif (event.key === \"End\") {\n\t\t\tevent.preventDefault();\n\t\t\tif (this.followFocus) {\n\t\t\t\tthis.selectTab(event.target, tabsArray[this.allTabHeaders.length - 1], this.allTabHeaders.length);\n\t\t\t}\n\t\t\tthis.allTabHeaders.toArray()[this.allTabHeaders.length - 1].nativeElement.focus();\n\t\t}\n\n\t\tif ((event.key === \" \" || event.key === \"Spacebar\") && !this.followFocus) {\n\t\t\tthis.selectTab(event.target, tabsArray[this.currentSelectedTab], this.currentSelectedTab);\n\t\t}\n\t}\n\n\tngOnInit(): void {\n\t\t// Update scroll on resize\n\t\tthis.resizeObserver = new ResizeObserver(() => {\n\t\t\t// Need to explicitly trigger change detection since this runs outside Angular zone\n\t\t\tthis.changeDetectorRef.detectChanges();\n\t\t});\n\t\tthis.resizeObserver.observe(this.headerContainer.nativeElement);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.resizeObserver.unobserve(this.headerContainer.nativeElement);\n\t}\n\n\tngAfterContentInit() {\n\t\tif (!this.tabInput) {\n\t\t\tthis.tabs = this.tabQuery;\n\t\t} else {\n\t\t\tthis.tabs = this.tabInput;\n\t\t}\n\n\t\tthis.tabs.forEach(tab => tab.cacheActive = this.cacheActive);\n\t\tthis.tabs.changes.subscribe(() => {\n\t\t\tthis.setFirstTab();\n\t\t});\n\t\tthis.setFirstTab();\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (this.tabs && changes.cacheActive) {\n\t\t\tthis.tabs.forEach(tab => tab.cacheActive = this.cacheActive);\n\t\t}\n\t}\n\n\t/**\n\t * Controls manually focusing tabs.\n\t */\n\tonTabFocus(ref: HTMLElement, index: number) {\n\t\tthis.currentSelectedTab = index;\n\t\t// reset scroll left because we're already handling it\n\t\tthis.headerContainer.nativeElement.parentElement.scrollLeft = 0;\n\t}\n\n\tgetSelectedTab(): any {\n\t\tconst selected = this.tabs.find(tab => tab.active);\n\t\tif (selected) {\n\t\t\treturn selected;\n\t\t}\n\t\treturn { headingIsTemplate: false, heading: \"\" };\n\t}\n\n\t/**\n\t * Selects `Tab` 'tab' and moves it into view on the view DOM if it is not already.\n\t */\n\tselectTab(ref: HTMLElement, tab: Tab, tabIndex: number) {\n\t\tif (tab.disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.currentSelectedTab = tabIndex;\n\t\tthis.tabs.forEach(_tab => _tab.active = false);\n\t\ttab.active = true;\n\t\ttab.doSelect();\n\t}\n\n\t/**\n\t * Determines which `Tab` is initially selected.\n\t */\n\tprotected setFirstTab() {\n\t\tsetTimeout(() => {\n\t\t\tlet firstTab = this.tabs.find(tab => tab.active);\n\t\t\tif (!firstTab && this.tabs.first) {\n\t\t\t\tfirstTab = this.tabs.first;\n\t\t\t\tfirstTab.active = true;\n\t\t\t}\n\t\t\tif (firstTab) {\n\t\t\t\tfirstTab.doSelect();\n\t\t\t}\n\t\t});\n\t}\n}\n","import {\n\tComponent,\n\tHostBinding,\n\tInput\n} from \"@angular/core\";\n\n/**\n * Skeleton component for tabs\n */\n@Component({\n\tselector: \"cds-tabs-skeleton, ibm-tabs-skeleton\",\n\ttemplate: `\n\t\t<ul class=\"cds--tabs__nav\">\n\t\t\t<li\n\t\t\t\t*ngFor=\"let i of numOfSkeletonTabs\"\n\t\t\t\tclass=\"cds--tabs__nav-item\">\n\t\t\t\t<div class=\"cds--tabs__nav-link\">\n\t\t\t\t\t<span></span>\n\t\t\t\t</div>\n\t\t\t</li>\n\t\t</ul>\n\t`\n})\nexport class TabSkeleton {\n\t/**\n\t * Set number of skeleton tabs to render, default is 5\n\t */\n\t@Input() set numOftabs(num: number) {\n\t\tthis.numOfSkeletonTabs = new Array(num);\n\t}\n\n\t/**\n\t * Set to `true` to put tabs in a loading state.\n\t */\n\t@HostBinding(\"class.cds--skeleton\") skeleton = true;\n\t@HostBinding(\"class.cds--tabs\") tabs = true;\n\tnumOfSkeletonTabs = new Array(5);\n}\n","import {\n\tComponent,\n\tInput,\n\tContentChildren,\n\tQueryList,\n\tAfterContentInit,\n\tContentChild,\n\tOnChanges,\n\tSimpleChanges\n} from \"@angular/core\";\nimport { Tab } from \"./tab.component\";\nimport { TabHeaders } from \"./tab-headers.component\";\n\n/**\n * Build out your application's tabs using this component.\n * This is the parent of the `Tab` and `TabHeader` components.\n *\n * [See demo](../../?path=/story/components-tabs--basic)\n *\n * `Tabs` expects a set of `n-tab` elements\n *\n * ```html\n * <cds-tabs>\n * \t<cds-tab heading='tab1'>\n * \t\ttab 1 content\n * \t</cds-tab>\n * \t<cds-tab heading='tab1'>\n * \t\ttab 2 content\n * \t</cds-tab>\n * \t<!-- ... -->\n * \t<cds-tab heading='tab1'>\n * \t\ttab n content\n * \t</cds-tab>\n * </cds-tabs>\n * ```\n */\n@Component({\n\tselector: \"cds-tabs, ibm-tabs\",\n\ttemplate: `\n\t\t<ng-container *ngIf=\"skeleton\">\n\t\t\t<cds-tabs-skeleton></cds-tabs-skeleton>\n\t\t</ng-container>\n\t\t<ng-container *ngIf=\"!skeleton\">\n\t\t\t<cds-tab-headers\n\t\t\t\t*ngIf=\"hasTabHeaders() && position === 'top'\"\n\t\t\t\t[theme]=\"theme\"\n\t\t\t\t[tabs]=\"tabs\"\n\t\t\t\t[followFocus]=\"followFocus\"\n\t\t\t\t[cacheActive]=\"cacheActive\"\n\t\t\t\t[contentBefore]=\"before\"\n\t\t\t\t[contentAfter]=\"after\"\n\t\t\t\t[ariaLabel]=\"ariaLabel\"\n\t\t\t\t[ariaLabelledby]=\"ariaLabelledby\"\n\t\t\t\t[type]=\"type\">\n\t\t\t</cds-tab-headers>\n\t\t\t<ng-content></ng-content>\n\t\t\t<ng-template #before>\n\t\t\t\t<ng-content select=\"[before]\"></ng-content>\n\t\t\t</ng-template>\n\t\t\t<ng-template #after>\n\t\t\t\t<ng-content select=\"[after]\"></ng-content>\n\t\t\t</ng-template>\n\t\t\t<cds-tab-headers\n\t\t\t\t*ngIf=\"hasTabHeaders() && position === 'bottom'\"\n\t\t\t\t[tabs]=\"tabs\"\n\t\t\t\t[cacheActive]=\"cacheActive\"\n\t\t\t\t[type]=\"type\">\n\t\t\t</cds-tab-headers>\n\t\t</ng-container>\n\t`\n})\nexport class Tabs implements AfterContentInit, OnChanges {\n\t/**\n\t * Takes either the string value 'top' or 'bottom' to place TabHeader\n\t * relative to the `TabPanel`s.\n\t */\n\t@Input() position: \"top\" | \"bottom\" = \"top\";\n\t/**\n\t * Set to 'true' to have `Tab` items cached and not reloaded on tab switching.\n\t */\n\t@Input() cacheActive = false;\n\t/**\n\t * Set to 'true' to have tabs automatically activated and have their content displayed when they receive focus.\n\t */\n\t@Input() followFocus = true;\n\t/**\n\t * Set to `true` to have the tabIndex of the all tabpanels be -1.\n\t */\n\t@Input() isNavigation = false;\n\t/**\n\t * Sets the aria label on the `TabHeader`s nav element.\n\t */\n\t@Input() ariaLabel: string;\n\t/**\n\t * Sets the aria labelledby on the `TabHeader`s nav element.\n\t */\n\t@Input() ariaLabelledby: string;\n\t/**\n\t * Sets the type of the `TabHeader`s\n\t */\n\t@Input() type: \"line\" | \"contained\" = \"line\";\n\t/**\n\t * Sets the theme of `TabHeader`s\n\t */\n\t@Input() theme: \"light\" | \"dark\" = \"dark\";\n\t/**\n\t * Set state of tabs to skeleton\n\t */\n\t@Input() skeleton = false;\n\n\t/**\n\t * Maintains a `QueryList` of the `Tab` elements and updates if `Tab`s are added or removed.\n\t */\n\t@ContentChildren(Tab, { descendants: false }) tabs: QueryList<Tab>;\n\t/**\n\t * Content child of the projected header component\n\t */\n\t@ContentChild(TabHeaders) tabHeaders;\n\n\t/**\n\t * After content is initialized update `Tab`s to cache (if turned on) and set the initial\n\t * selected Tab item.\n\t */\n\tngAfterContentInit() {\n\t\tif (this.tabHeaders) {\n\t\t\tthis.tabHeaders.cacheActive = this.cacheActive;\n\t\t}\n\n\t\tthis.tabs.forEach(tab => {\n\t\t\ttab.tabIndex = this.isNavigation ? null : 0;\n\t\t});\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (this.tabHeaders && changes.cacheActive) {\n\t\t\tthis.tabHeaders.cacheActive = this.cacheActive;\n\t\t}\n\n\t\tif (this.tabs && changes.isNavigation) {\n\t\t\tthis.tabs.forEach(tab => {\n\t\t\t\ttab.tabIndex = this.isNavigation ? null : 0;\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * true if the n-tab's are passed directly to the component as children\n\t */\n\thasTabHeaders() {\n\t\treturn this.tabs.length > 0;\n\t}\n}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { UtilsModule } from \"carbon-components-angular/utils\";\nimport { I18nModule } from \"carbon-components-angular/i18n\";\n\nimport { TabSkeleton } from \"./tab-skeleton.component\";\nimport { BaseTabHeader } from \"./base-tab-header.component\";\nimport { Tabs } from \"./tabs.component\";\nimport { Tab } from \"./tab.component\";\nimport { TabHeader } from \"./tab-header.directive\";\nimport { TabHeaders } from \"./tab-headers.component\";\nimport { TabHeaderGroup } from \"./tab-header-group.component\";\n\n@NgModule({\n\tdeclarations: [\n\t\tBaseTabHeader,\n\t\tTabs,\n\t\tTab,\n\t\tTabHeader,\n\t\tTabHeaders,\n\t\tTabHeaderGroup,\n\t\tTabSkeleton\n\t],\n\texports: [\n\t\tTabs,\n\t\tTab,\n\t\tTabHeader,\n\t\tTabHeaders,\n\t\tTabHeaderGroup,\n\t\tTabSkeleton\n\t],\n\timports: [\n\t\tCommonModule,\n\t\tUtilsModule,\n\t\tI18nModule\n\t]\n})\nexport class TabsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i3","i2.TabHeaders","i3.TabSkeleton"],"mappings":"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