UNPKG

primeng

Version:

PrimeNG is an open source UI library for Angular featuring a rich set of 80+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with PrimeB

1 lines 61.6 kB
{"version":3,"file":"primeng-tabview.mjs","sources":["../../src/tabview/style/tabsstyle.ts","../../src/tabview/tabview.ts","../../src/tabview/primeng-tabview.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BaseStyle } from 'primeng/base';\n\nconst theme = ({ dt }) => `\n.p-tabs {\n display: flex;\n flex-direction: column;\n}\n\n.p-tablist {\n display: flex;\n position: relative;\n}\n\n.p-tabs-scrollable > .p-tablist {\n overflow: hidden;\n}\n\n.p-tablist-viewport {\n overflow-x: auto;\n overflow-y: hidden;\n scroll-behavior: smooth;\n scrollbar-width: none;\n overscroll-behavior: contain auto;\n}\n\n.p-tablist-viewport::-webkit-scrollbar {\n display: none;\n}\n\n.p-tablist-tab-list {\n position: relative;\n display: flex;\n background: ${dt('tabs.tablist.background')};\n border-style: solid;\n border-color: ${dt('tabs.tablist.border.color')};\n border-width: ${dt('tabs.tablist.border.width')};\n}\n\n.p-tablist-content {\n flex-grow: 1;\n}\n\n.p-tablist-nav-button {\n all: unset;\n position: absolute !important;\n flex-shrink: 0;\n top: 0;\n z-index: 2;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: ${dt('tabs.nav.button.background')};\n color: ${dt('tabs.nav.button.color')};\n width: ${dt('tabs.nav.button.width')};\n transition: color ${dt('tabs.transition.duration')}, outline-color ${dt('tabs.transition.duration')}, box-shadow ${dt('tabs.transition.duration')};\n box-shadow: ${dt('tabs.nav.button.shadow')};\n outline-color: transparent;\n cursor: pointer;\n}\n\n.p-tablist-nav-button:focus-visible {\n z-index: 1;\n box-shadow: ${dt('tabs.nav.button.focus.ring.shadow')};\n outline: ${dt('tabs.nav.button.focus.ring.width')} ${dt('tabs.nav.button.focus.ring.style')} ${dt('tabs.nav.button.focus.ring.color')};\n outline-offset: ${dt('tabs.nav.button.focus.ring.offset')};\n}\n\n.p-tablist-nav-button:hover {\n color: ${dt('tabs.nav.button.hover.color')};\n}\n\n.p-tablist-prev-button {\n left: 0;\n}\n\n.p-tablist-next-button {\n right: 0;\n}\n\n.p-tab {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n cursor: pointer;\n user-select: none;\n position: relative;\n border-style: solid;\n white-space: nowrap;\n gap: ${dt('tabs.tab.gap')};\n background: ${dt('tabs.tab.background')};\n border-width: ${dt('tabs.tab.border.width')};\n border-color: ${dt('tabs.tab.border.color')};\n color: ${dt('tabs.tab.color')};\n padding: ${dt('tabs.tab.padding')};\n font-weight: ${dt('tabs.tab.font.weight')};\n transition: background ${dt('tabs.transition.duration')}, border-color ${dt('tabs.transition.duration')}, color ${dt('tabs.transition.duration')}, outline-color ${dt('tabs.transition.duration')}, box-shadow ${dt('tabs.transition.duration')};\n margin: ${dt('tabs.tab.margin')};\n outline-color: transparent;\n}\n\n.p-tab:not(.p-disabled):focus-visible {\n z-index: 1;\n box-shadow: ${dt('tabs.tab.focus.ring.shadow')};\n outline: ${dt('tabs.tab.focus.ring.width')} ${dt('tabs.tab.focus.ring.style')} ${dt('tabs.tab.focus.ring.color')};\n outline-offset: ${dt('tabs.tab.focus.ring.offset')};\n}\n\n.p-tab:not(.p-tab-active):not(.p-disabled):hover {\n background: ${dt('tabs.tab.hover.background')};\n border-color: ${dt('tabs.tab.hover.border.color')};\n color: ${dt('tabs.tab.hover.color')};\n}\n\n.p-tab-active {\n background: ${dt('tabs.tab.active.background')};\n border-color: ${dt('tabs.tab.active.border.color')};\n color: ${dt('tabs.tab.active.color')};\n}\n\n.p-tabpanels {\n background: ${dt('tabs.tabpanel.background')};\n color: ${dt('tabs.tabpanel.color')};\n padding: ${dt('tabs.tabpanel.padding')};\n outline: 0 none;\n}\n\n.p-tabpanel:focus-visible {\n box-shadow: ${dt('tabs.tabpanel.focus.ring.shadow')};\n outline: ${dt('tabs.tabpanel.focus.ring.width')} ${dt('tabs.tabpanel.focus.ring.style')} ${dt('tabs.tabpanel.focus.ring.color')};\n outline-offset: ${dt('tabs.tabpanel.focus.ring.offset')};\n}\n\n.p-tablist-active-bar {\n z-index: 1;\n display: block;\n position: absolute;\n bottom: ${dt('tabs.active.bar.bottom')};\n height: ${dt('tabs.active.bar.height')};\n background: ${dt('tabs.active.bar.background')};\n transition: 250ms cubic-bezier(0.35, 0, 0.25, 1);\n}\n`;\n\nconst classes = {\n root: ({ props }) => [\n 'p-tabs p-component',\n {\n 'p-tabs-scrollable': props.scrollable\n }\n ]\n};\n\n@Injectable()\nexport class TabsStyle extends BaseStyle {\n name = 'tabs';\n\n theme = theme;\n\n classes = classes;\n}\n\n/**\n *\n * Tabs facilitates seamless switching between different views.\n *\n * [Live Demo](https://www.primeng.org/tabs/)\n *\n * @module tabsstyle\n *\n */\n\nexport enum TabsClasses {\n /**\n * Class name of the root element\n */\n root = 'p-tabs',\n /**\n * Class name of the wrapper element\n */\n list = 'p-tablist',\n /**\n * Class name of the content element\n */\n content = 'p-tablist-content',\n /**\n * Class name of the tab list element\n */\n tablist = 'p-tablist-tab-list',\n /**\n * Class name of the tab list element\n */\n tab = 'p-tab',\n /**\n * Class name of the inkbar element\n */\n inkbar = 'p-tablist-active-bar',\n /**\n * Class name of the navigation buttons\n */\n button = 'p-tablist-nav-button',\n /**\n * Class name of the tab panels wrapper\n */\n tabpanels = 'p-tabpanels',\n /**\n * Class name of the tab panel element\n */\n tabpanel = 'p-tabs-panel'\n}\n\nexport interface TabsStyle extends BaseStyle {}\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewChecked,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n inject,\n Input,\n NgModule,\n numberAttribute,\n OnDestroy,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { find, findSingle, focus, getAttribute, getOffset, getOuterWidth, getWidth, uuid } from '@primeuix/utils';\nimport { BlockableUI, PrimeTemplate, SharedModule } from 'primeng/api';\nimport { BaseComponent } from 'primeng/basecomponent';\nimport { ChevronLeftIcon, ChevronRightIcon, TimesIcon } from 'primeng/icons';\nimport { Ripple } from 'primeng/ripple';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { Nullable } from 'primeng/ts-helpers';\nimport { Subscription } from 'rxjs';\nimport { TabsStyle } from './style/tabsstyle';\nimport { TabViewChangeEvent, TabViewCloseEvent } from './tabview.interface';\n\n/**\n * TabPanel is a helper component for TabView component.\n * @group Components\n */\n@Component({\n selector: 'p-tabPanel, p-tabpanel',\n standalone: true,\n imports: [CommonModule, SharedModule],\n template: `\n <div\n *ngIf=\"!closed\"\n class=\"p-tabview-panel\"\n role=\"tabpanel\"\n [hidden]=\"!selected\"\n [attr.id]=\"tabView.getTabContentId(id)\"\n [attr.aria-hidden]=\"!selected\"\n [attr.aria-labelledby]=\"tabView.getTabHeaderActionId(id)\"\n [attr.data-pc-name]=\"'tabpanel'\"\n >\n <ng-content></ng-content>\n <ng-container *ngIf=\"(contentTemplate || _contentTemplate) && (cache ? loaded : selected)\">\n <ng-container *ngTemplateOutlet=\"contentTemplate || _contentTemplate\"></ng-container>\n </ng-container>\n </div>\n `,\n\n providers: [TabsStyle]\n})\nexport class TabPanel extends BaseComponent implements AfterContentInit, OnDestroy {\n /**\n * Defines if tab can be removed.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) closable: boolean | undefined = false;\n /**\n * Inline style of the tab header.\n * @group Props\n */\n @Input() get headerStyle(): { [klass: string]: any } | null | undefined {\n return this._headerStyle;\n }\n set headerStyle(headerStyle: { [klass: string]: any } | null | undefined) {\n this._headerStyle = headerStyle;\n this.tabView.cd.markForCheck();\n }\n /**\n * Style class of the tab header.\n * @group Props\n */\n @Input() get headerStyleClass(): string | undefined {\n return this._headerStyleClass;\n }\n set headerStyleClass(headerStyleClass: string | undefined) {\n this._headerStyleClass = headerStyleClass;\n this.tabView.cd.markForCheck();\n }\n /**\n * Whether a lazy loaded panel should avoid getting loaded again on reselection.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) cache: boolean | undefined = true;\n /**\n * Advisory information to display in a tooltip on hover.\n * @group Props\n */\n @Input() tooltip: string | undefined;\n /**\n * Position of the tooltip.\n * @group Props\n */\n @Input() tooltipPosition: 'top' | 'bottom' | 'left' | 'right' | undefined = 'top';\n /**\n * Type of CSS position.\n * @group Props\n */\n @Input() tooltipPositionStyle: string | undefined = 'absolute';\n /**\n * Style class of the tooltip.\n * @group Props\n */\n @Input() tooltipStyleClass: string | undefined;\n /**\n * Defines if tab is active.\n * @defaultValue false\n * @group Props\n */\n @Input() get selected(): boolean {\n return !!this._selected;\n }\n set selected(val: boolean) {\n this._selected = val;\n\n if (!this.loaded) {\n this.cd.detectChanges();\n }\n\n if (val) this.loaded = true;\n }\n /**\n * When true, tab cannot be activated.\n * @defaultValue false\n * @group Props\n */\n @Input() get disabled(): boolean {\n return !!this._disabled;\n }\n set disabled(disabled: boolean) {\n this._disabled = disabled;\n this.tabView.cd.markForCheck();\n }\n /**\n * Title of the tabPanel.\n * @group Props\n */\n @Input() get header(): string {\n return this._header;\n }\n set header(header: string) {\n this._header = header;\n\n // We have to wait for the rendering and then retrieve the actual size element from the DOM.\n // in future `Promise.resolve` can be changed to `queueMicrotask` (if ie11 support will be dropped)\n Promise.resolve().then(() => {\n this.tabView.updateInkBar();\n this.tabView.cd.markForCheck();\n });\n }\n /**\n * Left icon of the tabPanel.\n * @group Props\n * @deprecated since v15.4.2, use `lefticon` template instead.\n */\n @Input() get leftIcon(): string {\n return this._leftIcon;\n }\n set leftIcon(leftIcon: string) {\n this._leftIcon = leftIcon;\n this.tabView.cd.markForCheck();\n }\n /**\n * Left icon of the tabPanel.\n * @group Props\n * @deprecated since v15.4.2, use `righticon` template instead.\n */\n @Input() get rightIcon(): string | undefined {\n return this._rightIcon;\n }\n set rightIcon(rightIcon: string | undefined) {\n this._rightIcon = rightIcon;\n this.tabView.cd.markForCheck();\n }\n\n closed: boolean = false;\n\n _headerStyle: { [klass: string]: any } | null | undefined;\n\n _headerStyleClass: string | undefined;\n\n _selected: boolean | undefined;\n\n _disabled: boolean | undefined;\n\n _header!: string;\n\n _leftIcon!: string;\n\n _rightIcon: string | undefined = undefined;\n\n loaded: boolean = false;\n\n public id: string | undefined = uuid('pn_id_');\n\n @ContentChild('content') contentTemplate: TemplateRef<any> | undefined;\n\n @ContentChild('header') headerTemplate: TemplateRef<any> | undefined;\n\n @ContentChild('lefticon') leftIconTemplate: TemplateRef<any> | undefined;\n\n @ContentChild('righticon') rightIconTemplate: TemplateRef<any> | undefined;\n\n @ContentChild('closeicon') closeIconTemplate: TemplateRef<any> | undefined;\n\n @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate> | undefined;\n\n tabView: TabView = inject(forwardRef(() => TabView)) as TabView;\n\n _componentStyle = inject(TabsStyle);\n\n _headerTemplate: TemplateRef<any> | undefined;\n\n _contentTemplate: TemplateRef<any> | undefined;\n\n _rightIconTemplate: TemplateRef<any> | undefined;\n\n _leftIconTemplate: TemplateRef<any> | undefined;\n\n _closeIconTemplate: TemplateRef<any> | undefined;\n\n ngAfterContentInit() {\n (this.templates as QueryList<PrimeTemplate>).forEach((item) => {\n switch (item.getType()) {\n case 'header':\n this._headerTemplate = item.template;\n break;\n\n case 'content':\n this._contentTemplate = item.template;\n break;\n\n case 'righticon':\n this._rightIconTemplate = item.template;\n break;\n\n case 'lefticon':\n this._leftIconTemplate = item.template;\n break;\n\n case 'closeicon':\n this._closeIconTemplate = item.template;\n break;\n\n default:\n this._contentTemplate = item.template;\n break;\n }\n });\n }\n}\n/**\n * TabView is a container component to group content with tabs.\n * @group Components\n */\n@Component({\n selector: 'p-tabView, p-tabview',\n standalone: true,\n imports: [CommonModule, SharedModule, TooltipModule, Ripple, TimesIcon, ChevronLeftIcon, ChevronRightIcon],\n template: `\n <div #elementToObserve class=\"p-tablist\">\n <button\n *ngIf=\"scrollable && !backwardIsDisabled && autoHideButtons\"\n #prevBtn\n class=\"p-tablist-prev-button p-tablist-nav-button\"\n (click)=\"navBackward()\"\n [attr.tabindex]=\"tabindex\"\n [attr.aria-label]=\"prevButtonAriaLabel\"\n type=\"button\"\n pRipple\n >\n <ChevronLeftIcon *ngIf=\"!previousIconTemplate && !_previousIconTemplate\" [attr.aria-hidden]=\"true\" />\n <ng-template *ngTemplateOutlet=\"previousIconTemplate && _previousIconTemplate\"></ng-template>\n </button>\n <div #content class=\"p-tablist-content\" [ngClass]=\"{ 'p-tablist-viewport': scrollable }\" (scroll)=\"onScroll($event)\" [attr.data-pc-section]=\"'navcontent'\">\n <div #navbar class=\"p-tablist-tab-list\" role=\"tablist\" [attr.data-pc-section]=\"'nav'\">\n @for (tab of tabs; track tab; let i = $index) {\n @if (!tab.closed) {\n <button\n [ngClass]=\"{\n 'p-tab': true,\n 'p-tab-active': tab.selected,\n 'p-disabled': tab.disabled\n }\"\n [attr.role]=\"'tab'\"\n [class]=\"tab.headerStyleClass\"\n [ngStyle]=\"tab.headerStyle\"\n [pTooltip]=\"tab.tooltip\"\n [tooltipPosition]=\"tab.tooltipPosition\"\n [positionStyle]=\"tab.tooltipPositionStyle\"\n [tooltipStyleClass]=\"tab.tooltipStyleClass\"\n [attr.id]=\"getTabHeaderActionId(tab.id)\"\n [attr.aria-controls]=\"getTabContentId(tab.id)\"\n [attr.aria-selected]=\"tab.selected\"\n [attr.tabindex]=\"tab.disabled || !tab.selected ? '-1' : tabindex\"\n [attr.aria-disabled]=\"tab.disabled\"\n [disabled]=\"tab.disabled\"\n [attr.data-pc-index]=\"i\"\n [attr.data-p-disabled]=\"tab.disabled\"\n [attr.data-pc-section]=\"'headeraction'\"\n [attr.data-p-active]=\"tab.selected\"\n (click)=\"open($event, tab)\"\n (keydown)=\"onTabKeyDown($event, tab)\"\n pRipple\n >\n @if (tab.headerTemplate || tab._headerTemplate) {\n <ng-container *ngTemplateOutlet=\"tab.headerTemplate || tab._headerTemplate\"></ng-container>\n } @else {\n @if (tab.leftIconTemplate || tab._leftIconTemplate) {\n <ng-template *ngTemplateOutlet=\"tab.leftIconTemplate || tab._leftIconTemplate\"></ng-template>\n } @else if (tab.leftIcon && !tab.leftIconTemplate && !tab._leftIconTemplate) {\n <span class=\"p-tabview-left-icon\" [ngClass]=\"tab.leftIcon\"></span>\n }\n {{ tab.header }}\n @if (tab.rightIconTemplate || tab._rightIconTemplate) {\n <ng-template *ngTemplateOutlet=\"tab.rightIconTemplate || tab._rightIconTemplate\"></ng-template>\n } @else if (tab.rightIcon && !tab.rightIconTemplate && !tab._rightIconTemplate) {\n <span class=\"p-tabview-right-icon\" [ngClass]=\"tab.rightIcon\"></span>\n }\n @if (tab.closable) {\n @if (tab.closeIconTemplate || tab._closeIconTemplate) {\n <ng-template *ngTemplateOutlet=\"tab.closeIconTemplate || tab._closeIconTemplate\"></ng-template>\n } @else {\n <TimesIcon (click)=\"close($event, tab)\" />\n }\n }\n }\n </button>\n <span #inkbar class=\"p-tablist-active-bar\" role=\"presentation\" [attr.aria-hidden]=\"true\" [attr.data-pc-section]=\"'inkbar'\"></span>\n }\n }\n </div>\n </div>\n <button *ngIf=\"scrollable && !forwardIsDisabled && buttonVisible\" #nextBtn [attr.tabindex]=\"tabindex\" [attr.aria-label]=\"nextButtonAriaLabel\" class=\"p-tablist-next-button p-tablist-nav-button\" (click)=\"navForward()\" type=\"button\" pRipple>\n @if (nextIconTemplate || _nextIconTemplate) {\n <ng-template *ngTemplateOutlet=\"nextIconTemplate || _nextIconTemplate\"></ng-template>\n } @else {\n <ChevronRightIcon [attr.aria-hidden]=\"true\" />\n }\n </button>\n </div>\n <div class=\"p-tabpanels\">\n <ng-content></ng-content>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class.p-tabs]': 'true',\n '[class.p-tabs-scrollable]': 'scrollable',\n '[class.p-component]': 'true',\n '[attr.data-pc-name]': '\"tabview\"'\n },\n providers: [TabsStyle]\n})\nexport class TabView extends BaseComponent implements AfterContentInit, AfterViewChecked, OnDestroy, BlockableUI {\n @HostBinding('class') get hostClass() {\n return this.styleClass;\n }\n\n @HostBinding('style') get hostStyle() {\n return this.style;\n }\n /**\n * Inline style of the component.\n * @group Props\n */\n @Input() style: { [klass: string]: any } | null | undefined;\n /**\n * Style class of the component.\n * @group Props\n */\n @Input() styleClass: string | undefined;\n /**\n * Whether tab close is controlled at onClose event or not.\n * @defaultValue false\n * @group Props\n */\n @Input({ transform: booleanAttribute }) controlClose: boolean | undefined;\n /**\n * When enabled displays buttons at each side of the tab headers to scroll the tab list.\n * @defaultValue false\n * @group Props\n */\n @Input({ transform: booleanAttribute }) scrollable: boolean | undefined;\n /**\n * Index of the active tab to change selected tab programmatically.\n * @group Props\n */\n @Input() get activeIndex(): number {\n return this._activeIndex;\n }\n set activeIndex(val: number) {\n this._activeIndex = val;\n if (this.preventActiveIndexPropagation) {\n this.preventActiveIndexPropagation = false;\n return;\n }\n\n if (this.tabs && this.tabs.length && this._activeIndex != null && this.tabs.length > this._activeIndex) {\n (this.findSelectedTab() as TabPanel).selected = false;\n this.tabs[this._activeIndex].selected = true;\n this.tabChanged = true;\n\n this.updateScrollBar(val);\n }\n }\n /**\n * When enabled, the focused tab is activated.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) selectOnFocus: boolean = false;\n /**\n * Used to define a string aria label attribute the forward navigation button.\n * @group Props\n */\n @Input() nextButtonAriaLabel: string | undefined;\n /**\n * Used to define a string aria label attribute the backward navigation button.\n * @group Props\n */\n @Input() prevButtonAriaLabel: string | undefined;\n /**\n * When activated, navigation buttons will automatically hide or show based on the available space within the container.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) autoHideButtons: boolean = true;\n /**\n * Index of the element in tabbing order.\n * @group Props\n */\n @Input({ transform: numberAttribute }) tabindex: number = 0;\n /**\n * Callback to invoke on tab change.\n * @param {TabViewChangeEvent} event - Custom tab change event\n * @group Emits\n */\n @Output() onChange: EventEmitter<TabViewChangeEvent> = new EventEmitter<TabViewChangeEvent>();\n /**\n * Callback to invoke on tab close.\n * @param {TabViewCloseEvent} event - Custom tab close event\n * @group Emits\n */\n @Output() onClose: EventEmitter<TabViewCloseEvent> = new EventEmitter<TabViewCloseEvent>();\n /**\n * Callback to invoke on the active tab change.\n * @param {number} index - New active index\n * @group Emits\n */\n @Output() activeIndexChange: EventEmitter<number> = new EventEmitter<number>();\n\n @ViewChild('content') content?: ElementRef<HTMLDivElement>;\n\n @ViewChild('navbar') navbar?: ElementRef<HTMLUListElement>;\n\n @ViewChild('prevBtn') prevBtn?: ElementRef;\n\n @ViewChild('nextBtn') nextBtn?: ElementRef;\n\n @ViewChild('inkbar') inkbar?: ElementRef;\n\n @ContentChildren(TabPanel) tabPanels: QueryList<TabPanel> | undefined;\n\n initialized: boolean | undefined;\n\n tabs!: TabPanel[];\n\n _activeIndex!: number;\n\n preventActiveIndexPropagation!: boolean;\n\n tabChanged: boolean | undefined;\n\n backwardIsDisabled: boolean = true;\n\n forwardIsDisabled: boolean = false;\n\n private tabChangesSubscription!: Subscription;\n\n resizeObserver: Nullable<ResizeObserver>;\n\n container: HTMLDivElement | undefined;\n\n list: HTMLUListElement | undefined;\n\n buttonVisible: boolean;\n\n @ViewChild('elementToObserve') elementToObserve: ElementRef;\n\n @ContentChild('previousicon') previousIconTemplate: TemplateRef<any> | undefined;\n\n @ContentChild('nexticon') nextIconTemplate: TemplateRef<any> | undefined;\n\n _previousIconTemplate: TemplateRef<any> | undefined;\n\n _nextIconTemplate: TemplateRef<any> | undefined;\n\n _componentStyle = inject(TabsStyle);\n\n @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate> | undefined;\n\n ngOnInit() {\n super.ngOnInit();\n console.log('TabView component is deprecated as of v18. Use Tabs component instead.');\n }\n\n ngAfterContentInit() {\n this.initTabs();\n this.tabChangesSubscription = (this.tabPanels as QueryList<TabPanel>).changes.subscribe((_) => {\n this.initTabs();\n this.refreshButtonState();\n });\n\n (this.templates as QueryList<PrimeTemplate>).forEach((item) => {\n switch (item.getType()) {\n case 'previousicon':\n this._previousIconTemplate = item.template;\n break;\n\n case 'nexticon':\n this._nextIconTemplate = item.template;\n break;\n }\n });\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n if (isPlatformBrowser(this.platformId)) {\n if (this.autoHideButtons) {\n this.bindResizeObserver();\n }\n }\n }\n\n bindResizeObserver() {\n this.container = <any>findSingle(this.el.nativeElement, '[data-pc-section=\"navcontent\"]');\n this.list = <any>findSingle(this.el.nativeElement, '[data-pc-section=\"nav\"]');\n\n this.resizeObserver = new ResizeObserver(() => {\n if (this.list.offsetWidth >= this.container.offsetWidth) {\n this.buttonVisible = true;\n } else {\n this.buttonVisible = false;\n }\n this.updateButtonState();\n this.cd.detectChanges();\n });\n this.resizeObserver.observe(this.container);\n }\n\n unbindResizeObserver() {\n this.resizeObserver.unobserve(this.elementToObserve.nativeElement);\n this.resizeObserver = null;\n }\n\n ngAfterViewChecked() {\n if (isPlatformBrowser(this.platformId)) {\n if (this.tabChanged) {\n this.updateInkBar();\n this.tabChanged = false;\n }\n }\n }\n\n ngOnDestroy(): void {\n if (this.tabChangesSubscription) {\n this.tabChangesSubscription.unsubscribe();\n }\n\n if (this.resizeObserver) {\n this.unbindResizeObserver();\n }\n\n super.ngOnDestroy();\n }\n\n getTabHeaderActionId(tabId) {\n return `${tabId}_header_action`;\n }\n\n getTabContentId(tabId) {\n return `${tabId}_content`;\n }\n\n initTabs(): void {\n this.tabs = (this.tabPanels as QueryList<TabPanel>).toArray();\n let selectedTab: TabPanel = this.findSelectedTab() as TabPanel;\n if (!selectedTab && this.tabs.length) {\n if (this.activeIndex != null && this.tabs.length > this.activeIndex) this.tabs[this.activeIndex].selected = true;\n else this.tabs[0].selected = true;\n\n this.tabChanged = true;\n }\n\n this.cd.markForCheck();\n }\n\n onTabKeyDown(event: KeyboardEvent, tab: TabPanel): void {\n switch (event.code) {\n case 'ArrowLeft':\n this.onTabArrowLeftKey(event);\n break;\n\n case 'ArrowRight':\n this.onTabArrowRightKey(event);\n break;\n\n case 'Home':\n this.onTabHomeKey(event);\n break;\n\n case 'End':\n this.onTabEndKey(event);\n break;\n\n case 'PageDown':\n this.onTabEndKey(event);\n break;\n\n case 'PageUp':\n this.onTabHomeKey(event);\n break;\n\n case 'Enter':\n case 'Space':\n this.open(event, tab);\n break;\n\n default:\n break;\n }\n }\n\n onTabArrowLeftKey(event: KeyboardEvent) {\n const prevHeaderAction = this.findPrevHeaderAction(<HTMLElement>event.currentTarget);\n const index = getAttribute(prevHeaderAction, 'data-pc-index');\n\n prevHeaderAction ? this.changeFocusedTab(event, prevHeaderAction, index) : this.onTabEndKey(event);\n event.preventDefault();\n }\n\n onTabArrowRightKey(event: KeyboardEvent) {\n const nextHeaderAction = this.findNextHeaderAction(<HTMLElement>event.currentTarget);\n\n const index = getAttribute(nextHeaderAction, 'data-pc-index');\n nextHeaderAction ? this.changeFocusedTab(event, nextHeaderAction, index) : this.onTabHomeKey(event);\n event.preventDefault();\n }\n\n onTabHomeKey(event: KeyboardEvent) {\n const firstHeaderAction = this.findFirstHeaderAction();\n const index = getAttribute(firstHeaderAction, 'data-pc-index');\n\n this.changeFocusedTab(event, firstHeaderAction, index);\n event.preventDefault();\n }\n\n onTabEndKey(event: KeyboardEvent) {\n const lastHeaderAction = this.findLastHeaderAction();\n const index = getAttribute(lastHeaderAction, 'data-pc-index');\n\n this.changeFocusedTab(event, lastHeaderAction, index);\n event.preventDefault();\n }\n\n changeFocusedTab(event: KeyboardEvent, element: any, index: number) {\n if (element) {\n focus(element);\n element.scrollIntoView({ block: 'nearest' });\n\n if (this.selectOnFocus) {\n const tab = this.tabs[index];\n this.open(event, tab);\n }\n }\n }\n\n findNextHeaderAction(tabElement: any, selfCheck = false) {\n const headerElement = selfCheck ? tabElement : tabElement.nextElementSibling;\n\n return headerElement ? (getAttribute(headerElement, 'data-p-disabled') || getAttribute(headerElement, 'data-pc-section') === 'inkbar' ? this.findNextHeaderAction(headerElement) : headerElement) : null;\n }\n\n findPrevHeaderAction(tabElement: any, selfCheck = false) {\n const headerElement = selfCheck ? tabElement : tabElement.previousElementSibling;\n\n return headerElement ? (getAttribute(headerElement, 'data-p-disabled') || getAttribute(headerElement, 'data-pc-section') === 'inkbar' ? this.findPrevHeaderAction(headerElement) : headerElement) : null;\n }\n\n findFirstHeaderAction() {\n const firstEl = this.navbar.nativeElement.firstElementChild;\n return this.findNextHeaderAction(firstEl, true);\n }\n\n findLastHeaderAction() {\n const lastEl = this.navbar.nativeElement.lastElementChild;\n const lastHeaderAction = getAttribute(lastEl, 'data-pc-section') === 'inkbar' ? lastEl.previousElementSibling : lastEl;\n return this.findPrevHeaderAction(lastHeaderAction, true);\n }\n\n open(event: Event, tab: TabPanel) {\n if (tab.disabled) {\n if (event) {\n event.preventDefault();\n }\n return;\n }\n\n if (!tab.selected) {\n let selectedTab: TabPanel = this.findSelectedTab() as TabPanel;\n if (selectedTab) {\n selectedTab.selected = false;\n }\n\n this.tabChanged = true;\n tab.selected = true;\n let selectedTabIndex = this.findTabIndex(tab);\n this.preventActiveIndexPropagation = true;\n this.activeIndexChange.emit(selectedTabIndex);\n this.onChange.emit({ originalEvent: event, index: selectedTabIndex });\n\n this.updateScrollBar(selectedTabIndex);\n }\n\n if (event) {\n event.preventDefault();\n }\n }\n\n close(event: Event, tab: TabPanel) {\n if (this.controlClose) {\n this.onClose.emit({\n originalEvent: event,\n index: this.findTabIndex(tab),\n close: () => {\n this.closeTab(tab);\n }\n });\n } else {\n this.closeTab(tab);\n this.onClose.emit({\n originalEvent: event,\n index: this.findTabIndex(tab)\n });\n }\n event.stopPropagation();\n }\n\n closeTab(tab: TabPanel) {\n if (tab.disabled) {\n return;\n }\n if (tab.selected) {\n this.tabChanged = true;\n tab.selected = false;\n for (let i = 0; i < this.tabs.length; i++) {\n let tabPanel = this.tabs[i];\n if (!tabPanel.closed && !tab.disabled) {\n tabPanel.selected = true;\n break;\n }\n }\n }\n\n tab.closed = true;\n }\n\n findSelectedTab(): TabPanel | null {\n for (let i = 0; i < this.tabs.length; i++) {\n if (this.tabs[i].selected) {\n return this.tabs[i];\n }\n }\n return null;\n }\n\n findTabIndex(tab: TabPanel) {\n let index = -1;\n for (let i = 0; i < this.tabs.length; i++) {\n if (this.tabs[i] == tab) {\n index = i;\n break;\n }\n }\n return index;\n }\n\n getBlockableElement(): HTMLElement {\n return this.el.nativeElement.children[0];\n }\n\n updateInkBar() {\n if (isPlatformBrowser(this.platformId)) {\n if (this.navbar) {\n const tabHeader: HTMLElement | null = <any>findSingle(this.navbar.nativeElement, '[data-pc-section=\"headeraction\"][data-p-active=\"true\"]');\n\n if (!tabHeader) {\n return;\n }\n\n (this.inkbar as ElementRef).nativeElement.style.width = getOuterWidth(tabHeader) + 'px';\n (this.inkbar as ElementRef).nativeElement.style.left = <any>getOffset(tabHeader).left - <any>getOffset(this.navbar.nativeElement).left + 'px';\n }\n }\n }\n\n updateScrollBar(index: number) {\n let tabHeader = find(this.navbar.nativeElement, '[data-pc-section=\"headeraction\"]')[index];\n\n if (tabHeader) {\n tabHeader.scrollIntoView({ block: 'nearest' });\n }\n }\n\n updateButtonState() {\n const content = (this.content as ElementRef).nativeElement;\n const { scrollLeft, scrollWidth } = content;\n const width = getWidth(content);\n\n this.backwardIsDisabled = scrollLeft === 0;\n this.forwardIsDisabled = Math.round(scrollLeft) === scrollWidth - width;\n }\n\n refreshButtonState() {\n this.container = <any>findSingle(this.el.nativeElement, '[data-pc-section=\"navcontent\"]');\n this.list = <any>findSingle(this.el.nativeElement, '[data-pc-section=\"nav\"]');\n if (this.list.offsetWidth >= this.container.offsetWidth) {\n if (this.list.offsetWidth >= this.container.offsetWidth) {\n this.buttonVisible = true;\n } else {\n this.buttonVisible = false;\n }\n this.updateButtonState();\n this.cd.markForCheck();\n }\n }\n\n onScroll(event: Event) {\n this.scrollable && this.updateButtonState();\n\n event.preventDefault();\n }\n\n getVisibleButtonWidths() {\n return [this.prevBtn?.nativeElement, this.nextBtn?.nativeElement].reduce((acc, el) => (el ? acc + getWidth(el) : acc), 0);\n }\n\n navBackward() {\n const content = (this.content as ElementRef).nativeElement;\n const width = getWidth(content) - this.getVisibleButtonWidths();\n const pos = content.scrollLeft - width;\n content.scrollLeft = pos <= 0 ? 0 : pos;\n }\n\n navForward() {\n const content = (this.content as ElementRef).nativeElement;\n const width = getWidth(content) - this.getVisibleButtonWidths();\n const pos = content.scrollLeft + width;\n const lastPos = content.scrollWidth - width;\n\n content.scrollLeft = pos >= lastPos ? lastPos : pos;\n }\n}\n\n@NgModule({\n imports: [TabView, TabPanel, SharedModule],\n exports: [TabView, TabPanel, SharedModule]\n})\nexport class TabViewModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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