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 • 72.3 kB
Source Map (JSON)
{"version":3,"file":"primeng-accordion.mjs","sources":["../../src/accordion/style/accordionstyle.ts","../../src/accordion/accordion.ts","../../src/accordion/primeng-accordion.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BaseStyle } from 'primeng/base';\n\nconst theme = ({ dt }) => `\n.p-accordionpanel {\n display: flex;\n flex-direction: column;\n border-style: solid;\n border-width: ${dt('accordion.panel.border.width')};\n border-color: ${dt('accordion.panel.border.color')};\n}\n\n.p-accordionheader {\n all: unset;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: ${dt('accordion.header.padding')};\n color: ${dt('accordion.header.color')};\n background: ${dt('accordion.header.background')};\n border-style: solid;\n border-width: ${dt('accordion.header.border.width')};\n border-color: ${dt('accordion.header.border.color')};\n font-weight: ${dt('accordion.header.font.weight')};\n border-radius: ${dt('accordion.header.border.radius')};\n transition: background ${dt('accordion.transition.duration')}; color ${dt('accordion.transition.duration')}color ${dt('accordion.transition.duration')}, outline-color ${dt('accordion.transition.duration')}, box-shadow ${dt(\n 'accordion.transition.duration'\n )};\n outline-color: transparent;\n position: relative;\n overflow: hidden;\n}\n\n.p-accordionpanel:first-child > .p-accordionheader {\n border-width: ${dt('accordion.header.first.border.width')};\n border-start-start-radius: ${dt('accordion.header.first.top.border.radius')};\n border-start-end-radius: ${dt('accordion.header.first.top.border.radius')};\n}\n\n.p-accordionpanel:last-child > .p-accordionheader {\n border-end-start-radius: ${dt('accordion.header.last.bottom.border.radius')};\n border-end-end-radius: ${dt('accordion.header.last.bottom.border.radius')};\n}\n\n.p-accordionpanel:last-child.p-accordionpanel-active > .p-accordionheader {\n border-end-start-radius: ${dt('accordion.header.last.active.bottom.border.radius')};\n border-end-end-radius:${dt('accordion.header.last.active.bottom.border.radius')};\n}\n\n.p-accordionheader-toggle-icon {\n color: ${dt('accordion.header.toggle.icon.color')};\n}\n\n.p-accordionpanel:not(.p-disabled) .p-accordionheader:focus-visible {\n box-shadow: ${dt('accordion.header.focus.ring.shadow')};\n outline: ${dt('accordion.header.focus.ring.width')} ${dt('accordion.header.focus.ring.style')} ${dt('accordion.header.focus.ring.color')};\n outline-offset: ${dt('accordion.header.focus.ring.offset')};\n}\n\n.p-accordionpanel:not(.p-accordionpanel-active):not(.p-disabled) > .p-accordionheader:hover {\n background: ${dt('accordion.header.hover.background')};\n color: ${dt('accordion.header.hover.color')}\n}\n\n.p-accordionpanel:not(.p-accordionpanel-active):not(.p-disabled) .p-accordionheader:hover .p-accordionheader-toggle-icon {\n color: ${dt('accordion.header.toggle.icon.hover.color')};\n}\n\n.p-accordionpanel:not(.p-disabled).p-accordionpanel-active > .p-accordionheader {\n background: ${dt('accordion.header.active.background')};\n color: ${dt('accordion.header.active.color')}\n}\n\n.p-accordionpanel:not(.p-disabled).p-accordionpanel-active > .p-accordionheader .p-accordionheader-toggle-icon {\n color: ${dt('accordion.header.toggle.icon.active.color')};\n}\n\n.p-accordionpanel:not(.p-disabled).p-accordionpanel-active > .p-accordionheader:hover {\n background: ${dt('accordion.header.active.hover.background')};\n color: ${dt('accordion.header.active.hover.color')}\n}\n\n.p-accordionpanel:not(.p-disabled).p-accordionpanel-active > .p-accordionheader:hover .p-accordionheader-toggle-icon {\n color: ${dt('accordion.header.toggle.icon.active.hover.color')};\n}\n\n.p-accordioncontent-content {\n border-style: solid;\n border-width: ${dt('accordion.content.border.width')};\n border-color: ${dt('accordion.content.border.color')};\n background-color: ${dt('accordion.content.background')};\n color: ${dt('accordion.content.color')};\n padding: ${dt('accordion.content.padding')}\n}\n\n/*For PrimeNG*/\n\n.p-accordion .p-accordioncontent {\n overflow: hidden;\n}\n\n.p-accordionpanel.p-accordioncontent:not(.ng-animating) {\n overflow: inherit;\n}\n\n.p-accordionheader-toggle-icon.icon-start {\n order: -1;\n}\n\n.p-accordionheader:has(.p-accordionheader-toggle-icon.icon-start) {\n justify-content: flex-start;\n gap: ${dt('accordion.header.padding')};\n}\n`;\n\nconst classes = {\n root: 'p-accordion p-component'\n};\n\n@Injectable()\nexport class AccordionStyle extends BaseStyle {\n name = 'accordion';\n\n theme = theme;\n\n classes = classes;\n}\n\n/**\n *\n * Accordion groups a collection of contents in tabs.\n *\n * [Live Demo](https://www.primeng.org/accordion/)\n *\n * @module accordionstyle\n *\n */\nexport enum AccordionClasses {\n /**\n * Class name of the root element\n */\n root = 'p-accordion',\n /**\n * Class name of the content wrapper\n */\n contentwrapper = 'p-accordioncontent',\n /**\n * Class name of the content\n */\n content = 'p-accordioncontent-content',\n /**\n * Class name of the header\n */\n header = 'p-accordionheader',\n /**\n * Class name of the toggle icon\n */\n toggleicon = 'p-accordionheader-toggle-icon',\n /**\n * Class name of the panel\n */\n panel = 'p-accordionpanel'\n}\n\nexport interface AccordionStyle extends BaseStyle {}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChild,\n ContentChildren,\n EventEmitter,\n forwardRef,\n HostBinding,\n HostListener,\n inject,\n Input,\n input,\n InputSignalWithTransform,\n model,\n NgModule,\n numberAttribute,\n OnDestroy,\n Output,\n QueryList,\n signal,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { findSingle, focus, getAttribute, uuid } from '@primeuix/utils';\nimport { BlockableUI, Header, PrimeTemplate, SharedModule } from 'primeng/api';\nimport { BaseComponent } from 'primeng/basecomponent';\nimport { ChevronDownIcon, ChevronUpIcon } from 'primeng/icons';\nimport { Ripple } from 'primeng/ripple';\nimport { transformToBoolean } from 'primeng/utils';\nimport { Subscription } from 'rxjs';\nimport { AccordionStyle } from './style/accordionstyle';\n\n/**\n * Custom tab open event.\n * @see {@link onOpen}\n * @group Interface\n */\nexport interface AccordionTabOpenEvent {\n /**\n * Browser event.\n */\n originalEvent: Event;\n /**\n * Opened tab index.\n */\n index: number;\n}\n\n/**\n * Custom tab close event.\n * @see {@link onClose}\n * @extends {AccordionTabOpenEvent}\n * @group Interface\n */\nexport interface AccordionTabCloseEvent extends AccordionTabOpenEvent {}\n\n/**\n * Toggle icon template context.\n * @group Interface\n */\nexport interface AccordionToggleIconTemplateContext {\n /**\n * Represents the active status of the panel.\n */\n active: boolean;\n}\n\n/**\n * AccordionPanel is a helper component for Accordion component.\n * @group Components\n */\n@Component({\n selector: 'p-accordion-panel, p-accordionpanel',\n imports: [CommonModule],\n standalone: true,\n template: `<ng-content />`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class.p-accordionpanel]': 'true',\n '[class.p-accordionpanel-active]': 'active()',\n '[class.p-disabled]': 'disabled()',\n '[attr.data-pc-name]': '\"accordionpanel\"',\n '[attr.data-p-disabled]': 'disabled()',\n '[attr.data-p-active]': 'active()'\n }\n})\nexport class AccordionPanel extends BaseComponent {\n pcAccordion = inject(forwardRef(() => Accordion));\n /**\n * Value of the active tab.\n * @defaultValue undefined\n * @group Props\n */\n value = model<undefined | null | string | number | string[] | number[]>(undefined);\n /**\n * Disables the tab when enabled.\n * @defaultValue false\n * @group Props\n */\n disabled: InputSignalWithTransform<any, boolean> = input(false, { transform: (v: any) => transformToBoolean(v) });\n\n active = computed(() => (this.pcAccordion.multiple() ? this.valueEquals(this.pcAccordion.value(), this.value()) : this.pcAccordion.value() === this.value()));\n\n valueEquals(currentValue: any, value: any): boolean {\n if (Array.isArray(currentValue)) {\n return currentValue.includes(value);\n }\n return currentValue === value;\n }\n}\n/**\n * AccordionHeader is a helper component for Accordion component.\n * @group Components\n */\n@Component({\n selector: 'p-accordion-header, p-accordionheader',\n imports: [CommonModule, ChevronDownIcon, ChevronUpIcon],\n standalone: true,\n template: `\n <ng-content />\n @if (toggleicon) {\n <ng-template *ngTemplateOutlet=\"toggleicon; context: { active: active() }\"></ng-template>\n } @else {\n <ng-container *ngIf=\"active()\">\n <span *ngIf=\"pcAccordion.collapseIcon\" [class]=\"pcAccordion.collapseIcon\" [ngClass]=\"pcAccordion.iconClass\" [attr.aria-hidden]=\"true\"></span>\n <ChevronDownIcon *ngIf=\"!pcAccordion.collapseIcon\" [ngClass]=\"pcAccordion.iconClass\" [attr.aria-hidden]=\"true\" />\n </ng-container>\n <ng-container *ngIf=\"!active()\">\n <span *ngIf=\"pcAccordion.expandIcon\" [class]=\"pcAccordion.expandIcon\" [ngClass]=\"pcAccordion.iconClass\" [attr.aria-hidden]=\"true\"></span>\n <ChevronUpIcon *ngIf=\"!pcAccordion.expandIcon\" [ngClass]=\"pcAccordion.iconClass\" [attr.aria-hidden]=\"true\" />\n </ng-container>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class.p-accordionheader]': 'true',\n '[attr.id]': 'id()',\n '[attr.aria-expanded]': 'active()',\n '[attr.aria-controls]': 'ariaControls()',\n '[attr.role]': '\"button\"',\n '[attr.tabindex]': '\"0\"',\n '[attr.data-p-active]': 'active()',\n '[attr.data-p-disabled]': 'disabled()',\n '[attr.data-pc-name]': '\"accordionheader\"',\n '[style.user-select]': '\"none\"'\n },\n hostDirectives: [Ripple]\n})\nexport class AccordionHeader extends BaseComponent {\n pcAccordion = inject(forwardRef(() => Accordion));\n\n pcAccordionPanel = inject(forwardRef(() => AccordionPanel));\n\n id = computed(() => `${this.pcAccordion.id()}_accordionheader_${this.pcAccordionPanel.value()}`);\n\n active = computed(() => this.pcAccordionPanel.active());\n\n disabled = computed(() => this.pcAccordionPanel.disabled());\n\n ariaControls = computed(() => `${this.pcAccordion.id()}_accordioncontent_${this.pcAccordionPanel.value()}`);\n /**\n * Toggle icon template.\n * @type {TemplateRef<AccordionToggleIconTemplateContext>} context - Context of the template\n * @example\n * ```html\n * <ng-template #toggleicon let-active=\"active\"> </ng-template>\n * ```\n * @see {@link AccordionToggleIconTemplateContext}\n * @group Templates\n */\n @ContentChild('toggleicon') toggleicon: TemplateRef<AccordionToggleIconTemplateContext> | undefined;\n\n @HostListener('click', ['$event']) onClick(event?: MouseEvent | KeyboardEvent) {\n const wasActive = this.active();\n\n this.changeActiveValue();\n\n const isActive = this.active();\n const index = this.pcAccordionPanel.value();\n\n if (!wasActive && isActive) {\n this.pcAccordion.onOpen.emit({ originalEvent: event, index });\n } else if (wasActive && !isActive) {\n this.pcAccordion.onClose.emit({ originalEvent: event, index });\n }\n }\n\n @HostListener('focus', ['$event']) onFocus() {\n this.pcAccordion.selectOnFocus() && this.changeActiveValue();\n }\n\n @HostListener('keydown', ['$event']) onKeydown(event: KeyboardEvent) {\n switch (event.code) {\n case 'ArrowDown':\n this.arrowDownKey(event);\n break;\n case 'ArrowUp':\n this.arrowUpKey(event);\n break;\n case 'Home':\n this.onHomeKey(event);\n break;\n case 'End':\n this.onEndKey(event);\n break;\n case 'Enter':\n case 'Space':\n case 'NumpadEnter':\n this.onEnterKey(event);\n break;\n default:\n break;\n }\n }\n\n changeActiveValue() {\n this.pcAccordion.updateValue(this.pcAccordionPanel.value());\n }\n\n private findPanel(headerElement) {\n return headerElement?.closest('[data-pc-name=\"accordionpanel\"]');\n }\n\n private findHeader(panelElement) {\n return findSingle(panelElement, '[data-pc-name=\"accordionheader\"]');\n }\n\n private findNextPanel(panelElement, selfCheck = false) {\n const element = selfCheck ? panelElement : panelElement.nextElementSibling;\n\n return element ? (getAttribute(element, 'data-p-disabled') ? this.findNextPanel(element) : this.findHeader(element)) : null;\n }\n\n private findPrevPanel(panelElement, selfCheck = false) {\n const element = selfCheck ? panelElement : panelElement.previousElementSibling;\n\n return element ? (getAttribute(element, 'data-p-disabled') ? this.findPrevPanel(element) : this.findHeader(element)) : null;\n }\n\n private findFirstPanel() {\n return this.findNextPanel(this.pcAccordion.el.nativeElement.firstElementChild, true);\n }\n\n private findLastPanel() {\n return this.findPrevPanel(this.pcAccordion.el.nativeElement.lastElementChild, true);\n }\n\n private changeFocusedPanel(event, element) {\n focus(element);\n }\n\n private arrowDownKey(event: KeyboardEvent) {\n const nextPanel = this.findNextPanel(this.findPanel(event.currentTarget));\n nextPanel ? this.changeFocusedPanel(event, nextPanel) : this.onHomeKey(event);\n event.preventDefault();\n }\n\n private arrowUpKey(event: KeyboardEvent) {\n const prevPanel = this.findPrevPanel(this.findPanel(event.currentTarget));\n\n prevPanel ? this.changeFocusedPanel(event, prevPanel) : this.onEndKey(event);\n event.preventDefault();\n }\n\n private onHomeKey(event: KeyboardEvent) {\n const firstPanel = this.findFirstPanel();\n\n this.changeFocusedPanel(event, firstPanel);\n event.preventDefault();\n }\n\n private onEndKey(event: KeyboardEvent) {\n const lastPanel = this.findLastPanel();\n\n this.changeFocusedPanel(event, lastPanel);\n event.preventDefault();\n }\n\n private onEnterKey(event: KeyboardEvent) {\n this.changeActiveValue();\n event.preventDefault();\n }\n}\n\n@Component({\n selector: 'p-accordion-content, p-accordioncontent',\n imports: [CommonModule],\n standalone: true,\n template: ` <div class=\"p-accordioncontent-content\">\n <ng-content />\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class.p-accordioncontent]': 'true',\n '[attr.id]': 'id()',\n '[attr.role]': '\"region\"',\n '[attr.data-pc-name]': '\"accordioncontent\"',\n '[attr.data-p-active]': 'active()',\n '[attr.aria-labelledby]': 'ariaLabelledby()',\n '[@content]': `active()\n ? { value: 'visible', params: { transitionParams: pcAccordion.transitionOptions } }\n : { value: 'hidden', params: { transitionParams: pcAccordion.transitionOptions } }`\n },\n animations: [\n trigger('content', [\n state(\n 'hidden',\n style({\n height: '0',\n visibility: 'hidden'\n })\n ),\n state(\n 'visible',\n style({\n height: '*',\n visibility: 'visible'\n })\n ),\n transition('visible <=> hidden', [animate('{{transitionParams}}')]),\n transition('void => *', animate(0))\n ])\n ]\n})\nexport class AccordionContent extends BaseComponent {\n pcAccordion = inject(forwardRef(() => Accordion));\n\n pcAccordionPanel = inject(forwardRef(() => AccordionPanel));\n\n active = computed(() => this.pcAccordionPanel.active());\n\n ariaLabelledby = computed(() => `${this.pcAccordion.id()}_accordionheader_${this.pcAccordionPanel.value()}`);\n\n id = computed(() => `${this.pcAccordion.id()}_accordioncontent_${this.pcAccordionPanel.value()}`);\n}\n\n/**\n * AccordionTab is a helper component for Accordion.\n * @deprecated Use AccordionPanel, AccordionHeader, AccordionContent instead.\n * @group Components\n */\n@Component({\n selector: 'p-accordionTab, p-accordion-tab, p-accordiontab',\n standalone: true,\n imports: [CommonModule, ChevronDownIcon, ChevronUpIcon],\n template: `\n <button\n class=\"p-accordionheader\"\n type=\"button\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"selected\"\n [attr.aria-level]=\"headerAriaLevel\"\n [class.p-disabled]=\"disabled\"\n [attr.data-p-disabled]=\"disabled\"\n [attr.data-pc-section]=\"'accordionheader'\"\n (click)=\"toggle($event)\"\n (keydown)=\"onKeydown($event)\"\n [ngClass]=\"headerStyleClass\"\n [ngStyle]=\"headerStyle\"\n [attr.tabindex]=\"disabled ? null : 0\"\n [attr.id]=\"getTabHeaderActionId(id)\"\n [attr.aria-controls]=\"getTabContentId(id)\"\n >\n @if (!headerTemplate && !_headerTemplate) {\n {{ header }}\n } @else {\n @if (headerTemplate || _headerTemplate) {\n <ng-container *ngTemplateOutlet=\"headerTemplate || _headerTemplate\"></ng-container>\n }\n @if (headerFacet) {\n <ng-content select=\"p-header\" />\n }\n }\n @if (iconTemplate || _iconTemplate) {\n <ng-template *ngTemplateOutlet=\"iconTemplate || _iconTemplate; context: { $implicit: selected }\"></ng-template>\n } @else {\n <ng-container *ngIf=\"selected\">\n <span *ngIf=\"accordion.collapseIcon\" [class]=\"accordion.collapseIcon\" [ngClass]=\"iconClass\" [attr.aria-hidden]=\"true\"></span>\n <ChevronDownIcon *ngIf=\"!accordion.collapseIcon\" [ngClass]=\"iconClass\" [attr.aria-hidden]=\"true\" />\n </ng-container>\n <ng-container *ngIf=\"!selected\">\n <span *ngIf=\"accordion.expandIcon\" [class]=\"accordion.expandIcon\" [ngClass]=\"iconClass\" [attr.aria-hidden]=\"true\"></span>\n <ChevronUpIcon *ngIf=\"!accordion.expandIcon\" [ngClass]=\"iconClass\" [attr.aria-hidden]=\"true\" />\n </ng-container>\n }\n </button>\n <div\n [attr.id]=\"getTabContentId(id)\"\n class=\"p-accordioncontent\"\n [@tabContent]=\"selected ? { value: 'visible', params: { transitionParams: transitionOptions } } : { value: 'hidden', params: { transitionParams: transitionOptions } }\"\n role=\"region\"\n [attr.aria-hidden]=\"!selected\"\n [attr.aria-labelledby]=\"getTabHeaderActionId(id)\"\n [attr.data-pc-section]=\"'toggleablecontent'\"\n >\n <div class=\"p-accordioncontent-content\" [ngClass]=\"contentStyleClass\" [ngStyle]=\"contentStyle\">\n <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 </div>\n `,\n animations: [\n trigger('tabContent', [\n state(\n 'hidden',\n style({\n height: '0',\n visibility: 'hidden'\n })\n ),\n state(\n 'visible',\n style({\n height: '*',\n visibility: 'visible'\n })\n ),\n transition('visible <=> hidden', [animate('{{transitionParams}}')]),\n transition('void => *', animate(0))\n ])\n ],\n host: {\n '[class.p-accordionpanel]': 'true',\n '[class.p-accordionpanel-active]': 'selected',\n '[attr.data-pc-name]': '\"accordiontab\"'\n },\n providers: [AccordionStyle],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class AccordionTab extends BaseComponent implements AfterContentInit, OnDestroy {\n @HostBinding('class') get hostClass() {\n return this.tabStyleClass;\n }\n @HostBinding('style') get hostStyle() {\n return this.tabStyle;\n }\n /**\n * Current id state as a string.\n * @group Props\n */\n @Input() id: string | undefined = uuid('pn_id_');\n /**\n * Used to define the header of the tab.\n * @group Props\n */\n @Input() header: string | undefined;\n /**\n * Inline style of the tab header.\n * @group Props\n */\n @Input() headerStyle: { [klass: string]: any } | null | undefined;\n /**\n * Inline style of the tab.\n * @group Props\n */\n @Input() tabStyle: { [klass: string]: any } | null | undefined;\n /**\n * Inline style of the tab content.\n * @group Props\n */\n @Input() contentStyle: { [klass: string]: any } | null | undefined;\n /**\n * Style class of the tab.\n * @group Props\n */\n @Input() tabStyleClass: string | undefined;\n /**\n * Style class of the tab header.\n * @group Props\n */\n @Input() headerStyleClass: string | undefined;\n /**\n * Style class of the tab content.\n * @group Props\n */\n @Input() contentStyleClass: string | undefined;\n /**\n * Whether the tab is disabled.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) disabled: boolean | undefined;\n /**\n * Whether a lazy loaded panel should avoid getting loaded again on reselection.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) cache: boolean = true;\n /**\n * Transition options of the animation.\n * @group Props\n */\n @Input() transitionOptions: string = '400ms cubic-bezier(0.86, 0, 0.07, 1)';\n /**\n * Position of the icon.\n * @group Props\n */\n @Input() iconPos: 'end' | 'start' = 'start';\n /**\n * The value that returns the selection.\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 if (this._selected && this.cache) {\n this.loaded = true;\n }\n\n this.cd.detectChanges();\n }\n }\n /**\n * The aria-level that each accordion header will have. The default value is 2 as per W3C specifications\n * @group Props\n */\n @Input({ transform: numberAttribute }) headerAriaLevel: number = 2;\n /**\n * Event triggered by changing the choice.\n * @param {boolean} value - Boolean value indicates that the option is changed.\n * @group Emits\n */\n @Output() selectedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @ContentChildren(Header) headerFacet!: QueryList<Header>;\n\n private _selected: boolean = false;\n\n get iconClass() {\n if (this.iconPos === 'end') {\n return 'p-accordionheader-toggle-icon icon-end';\n } else {\n return 'p-accordionheader-toggle-icon icon-start';\n }\n }\n /**\n * Content template for the content of the drawer.\n * @group Templates\n */\n @ContentChild('header', { descendants: false }) headerTemplate: TemplateRef<any> | undefined;\n /**\n * Template for the header icon.\n * @group Templates\n */\n @ContentChild('icon', { descendants: false }) iconTemplate: TemplateRef<any> | undefined;\n /**\n * Content template for the footer of the drawer.\n * @group Templates\n */\n @ContentChild('content', { descendants: false }) contentTemplate: TemplateRef<any> | undefined;\n\n @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate> | undefined;\n\n _headerTemplate: TemplateRef<any>;\n\n _iconTemplate: TemplateRef<any>;\n\n _contentTemplate: TemplateRef<any>;\n\n loaded: boolean = false;\n\n accordion = inject(forwardRef(() => Accordion)) as Accordion;\n\n _componentStyle = inject(AccordionStyle);\n\n ngOnInit() {\n super.ngOnInit();\n console.log('AccordionTab is deprecated as of v18, please use the new structure instead.');\n }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch (item.getType()) {\n case 'content':\n this._contentTemplate = item.template;\n break;\n\n case 'header':\n this._headerTemplate = item.template;\n break;\n\n case 'icon':\n this._iconTemplate = item.template;\n break;\n\n default:\n this._contentTemplate = item.template;\n break;\n }\n });\n }\n\n toggle(event?: MouseEvent | KeyboardEvent) {\n if (this.disabled) {\n return false;\n }\n\n let index = this.findTabIndex();\n\n if (this.selected) {\n this.selected = false;\n this.accordion.onClose.emit({ originalEvent: event, index: index });\n } else {\n if (!this.accordion.multiple()) {\n for (var i = 0; i < this.accordion.tabs.length; i++) {\n if (this.accordion.tabs[i].selected) {\n this.accordion.tabs[i].selected = false;\n this.accordion.tabs[i].selectedChange.emit(false);\n this.accordion.tabs[i].cd.markForCheck();\n }\n }\n }\n\n this.selected = true;\n this.loaded = true;\n this.accordion.onOpen.emit({ originalEvent: event, index: index });\n }\n\n this.selectedChange.emit(this.selected);\n this.accordion.updateActiveIndex();\n this.cd.markForCheck();\n\n event?.preventDefault();\n }\n\n findTabIndex() {\n let index = -1;\n for (var i = 0; i < this.accordion.tabs.length; i++) {\n if (this.accordion.tabs[i] == this) {\n index = i;\n break;\n }\n }\n return index;\n }\n\n onKeydown(event: KeyboardEvent) {\n switch (event.code) {\n case 'Enter':\n case 'Space':\n this.toggle(event);\n event.preventDefault();\n break;\n default:\n break;\n }\n }\n\n getTabHeaderActionId(tabId) {\n return `${tabId}_header_action`;\n }\n\n getTabContentId(tabId) {\n return `${tabId}_content`;\n }\n\n ngOnDestroy() {\n this.accordion.tabs.splice(this.findTabIndex(), 1);\n\n super.ngOnDestroy();\n }\n}\n\n/**\n * Accordion groups a collection of contents in tabs.\n * @group Components\n */\n@Component({\n selector: 'p-accordion',\n standalone: true,\n imports: [CommonModule, SharedModule],\n template: ` <ng-content /> `,\n host: {\n '[class.p-accordion]': 'true',\n '[class.p-component]': 'true'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [AccordionStyle]\n})\nexport class Accordion extends BaseComponent implements BlockableUI, AfterContentInit, OnDestroy {\n @HostBinding('class') get hostClass() {\n return this.styleClass;\n }\n\n @HostBinding('style') get hostStyle() {\n return this.style;\n }\n /**\n * Value of the active tab.\n * @defaultValue undefined\n * @group Props\n */\n value = model<undefined | null | string | number | string[] | number[]>(undefined);\n /**\n * When enabled, multiple tabs can be activated at the same time.\n * @defaultValue false\n * @group Props\n */\n multiple = input(false, { transform: (v: any) => transformToBoolean(v) });\n /**\n * Inline style of the tab header and content.\n * @group Props\n */\n @Input() style: { [klass: string]: any } | null | undefined;\n /**\n * Class of the element.\n * @group Props\n */\n @Input() styleClass: string | undefined;\n /**\n * Icon of a collapsed tab.\n * @group Props\n */\n @Input() expandIcon: string | undefined;\n /**\n * Icon of an expanded tab.\n * @group Props\n */\n @Input() collapseIcon: string | undefined;\n /**\n * When enabled, the focused tab is activated.\n * @defaultValue false\n * @group Props\n */\n selectOnFocus = input(false, { transform: (v: any) => transformToBoolean(v) });\n set activeIndex(val: number | number[] | null | undefined) {\n this._activeIndex = val;\n if (this.preventActiveIndexPropagation) {\n this.preventActiveIndexPropagation = false;\n return;\n }\n\n this.updateSelectionState();\n }\n /**\n * Transition options of the animation.\n * @group Props\n */\n @Input() transitionOptions: string = '400ms cubic-bezier(0.86, 0, 0.07, 1)';\n /**\n * Returns the active index.\n * @param {number | number[]} value - New index.\n * @deprecated use native valueChange emitter of the value model.\n * @group Emits\n */\n @Output() activeIndexChange: EventEmitter<number | number[]> = new EventEmitter<number | number[]>();\n\n set headerAriaLevel(val: number) {\n if (typeof val === 'number' && val > 0) {\n this._headerAriaLevel = val;\n } else if (this._headerAriaLevel !== 2) {\n this._headerAriaLevel = 2;\n }\n }\n /**\n * Callback to invoke when an active tab is collapsed by clicking on the header.\n * @param {AccordionTabCloseEvent} event - Custom tab close event.\n * @group Emits\n */\n @Output() onClose: EventEmitter<AccordionTabCloseEvent> = new EventEmitter();\n /**\n * Callback to invoke when a tab gets expanded.\n * @param {AccordionTabOpenEvent} event - Custom tab open event.\n * @group Emits\n */\n @Output() onOpen: EventEmitter<AccordionTabOpenEvent> = new EventEmitter();\n\n id = signal(uuid('pn_id_'));\n\n @ContentChildren(AccordionTab, { descendants: true }) tabList: QueryList<AccordionTab> | undefined;\n\n tabListSubscription: Subscription | null = null;\n\n private _activeIndex: any;\n\n private _headerAriaLevel: number = 2;\n\n preventActiveIndexPropagation: boolean = false;\n\n public tabs: AccordionTab[] = [];\n\n _componentStyle = inject(AccordionStyle);\n\n /**\n * Index of the active tab or an array of indexes in multiple mode.\n * @deprecated use value property with new architecture instead.\n * @group Props\n */\n @Input() get activeIndex(): number | number[] | null | undefined {\n return this._activeIndex;\n }\n\n /**\n * The aria-level that each accordion header will have. The default value is 2 as per W3C specifications\n * @deprecated use AccoridonHeader component and bind attribute to the host.\n * @group Props\n */\n @Input() get headerAriaLevel(): number {\n return this._headerAriaLevel;\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(event) {\n switch (event.code) {\n case 'ArrowDown':\n this.onTabArrowDownKey(event);\n break;\n\n case 'ArrowUp':\n this.onTabArrowUpKey(event);\n break;\n\n case 'Home':\n if (!event.shiftKey) {\n this.onTabHomeKey(event);\n }\n break;\n\n case 'End':\n if (!event.shiftKey) {\n this.onTabEndKey(event);\n }\n break;\n }\n }\n\n onTabArrowDownKey(event) {\n const nextHeaderAction = this.findNextHeaderAction(event.target.parentElement);\n nextHeaderAction ? this.changeFocusedTab(nextHeaderAction) : this.onTabHomeKey(event);\n\n event.preventDefault();\n }\n\n onTabArrowUpKey(event) {\n const prevHeaderAction = this.findPrevHeaderAction(event.target.parentElement);\n prevHeaderAction ? this.changeFocusedTab(prevHeaderAction) : this.onTabEndKey(event);\n\n event.preventDefault();\n }\n\n onTabHomeKey(event) {\n const firstHeaderAction = this.findFirstHeaderAction();\n this.changeFocusedTab(firstHeaderAction);\n event.preventDefault();\n }\n\n changeFocusedTab(element) {\n if (element) {\n focus(element);\n\n if (this.selectOnFocus()) {\n this.tabs.forEach((tab, i) => {\n let selected = this.multiple() ? this._activeIndex.includes(i) : i === this._activeIndex;\n\n if (this.multiple()) {\n if (!this._activeIndex) {\n this._activeIndex = [];\n }\n if (tab.id == element.id) {\n tab.selected = !tab.selected;\n if (!this._activeIndex.includes(i)) {\n this._activeIndex.push(i);\n } else {\n this._activeIndex = this._activeIndex.filter((ind) => ind !== i);\n }\n }\n } else {\n if (tab.id == element.id) {\n tab.selected = !tab.selected;\n this._activeIndex = i;\n } else {\n tab.selected = false;\n }\n }\n\n tab.selectedChange.emit(selected);\n this.activeIndexChange.emit(this._activeIndex);\n tab.cd.markForCheck();\n });\n }\n }\n }\n\n findNextHeaderAction(tabElement, selfCheck = false) {\n const nextTabElement = selfCheck ? tabElement : tabElement.nextElementSibling;\n const headerElement = findSingle(nextTabElement, '[data-pc-section=\"accordionheader\"]');\n\n return headerElement ? (getAttribute(headerElement, 'data-p-disabled') ? this.findNextHeaderAction(headerElement.parentElement) : findSingle(headerElement.parentElement, '[data-pc-section=\"accordionheader\"]')) : null;\n }\n\n findPrevHeaderAction(tabElement, selfCheck = false) {\n const prevTabElement = selfCheck ? tabElement : tabElement.previousElementSibling;\n const headerElement = findSingle(prevTabElement, '[data-pc-section=\"accordionheader\"]');\n\n return headerElement ? (getAttribute(headerElement, 'data-p-disabled') ? this.findPrevHeaderAction(headerElement.parentElement) : findSingle(headerElement.parentElement, '[data-pc-section=\"accordionheader\"]')) : null;\n }\n\n findFirstHeaderAction() {\n const firstEl = this.el.nativeElement.firstElementChild;\n return this.findNextHeaderAction(firstEl, true);\n }\n\n findLastHeaderAction() {\n const lastEl = this.el.nativeElement.lastElementChild;\n return this.findPrevHeaderAction(lastEl, true);\n }\n\n onTabEndKey(event) {\n const lastHeaderAction = this.findLastHeaderAction();\n this.changeFocusedTab(lastHeaderAction);\n event.preventDefault();\n }\n\n ngAfterContentInit() {\n this.initTabs();\n\n this.tabListSubscription = (this.tabList as QueryList<AccordionTab>).changes.subscribe((_) => {\n this.initTabs();\n });\n }\n\n initTabs() {\n this.tabs = (this.tabList as QueryList<AccordionTab>).toArray();\n\n this.tabs.forEach((tab) => {\n tab.headerAriaLevel = this._headerAriaLevel;\n });\n\n this.updateSelectionState();\n this.cd.markForCheck();\n }\n\n getBlockableElement(): HTMLElement {\n return this.el.nativeElement.children[0];\n }\n\n updateSelectionState() {\n if (this.tabs && this.tabs.length && this._activeIndex != null) {\n for (let i = 0; i < this.tabs.length; i++) {\n let selected = this.multiple() ? this._activeIndex.includes(i) : i === this._activeIndex;\n let changed = selected !== this.tabs[i].selected;\n\n if (changed) {\n this.tabs[i].selected = selected;\n this.tabs[i].selectedChange.emit(selected);\n this.tabs[i].cd.markForCheck();\n }\n }\n }\n }\n\n isTabActive(index) {\n return this.multiple() ? this._activeIndex && (<number[]>this._activeIndex).includes(index) : this._activeIndex === index;\n }\n\n getTabProp(tab, name) {\n return tab.props ? tab.props[name] : undefined;\n }\n\n updateActiveIndex() {\n let index: number | number[] | null = this.multiple() ? [] : null;\n this.tabs.forEach((tab, i) => {\n if (tab.selected) {\n if (this.multiple()) {\n (index as number[]).push(i);\n } else {\n index = i;\n return;\n }\n }\n });\n this.preventActiveIndexPropagation = true;\n this._activeIndex = index;\n this.activeIndexChange.emit(index as number[] | number);\n }\n\n updateValue(value: string | number) {\n const currentValue = this.value();\n if (this.multiple()) {\n const newValue = Array.isArray(currentValue) ? [...currentValue] : [];\n const index = newValue.indexOf(value);\n\n if (index !== -1) {\n newValue.splice(index, 1);\n } else {\n newValue.push(value);\n }\n\n this.value.set(newValue as typeof this.value extends (...args: any) => infer R ? R : never);\n } else {\n if (currentValue === value) {\n this.value.set(undefined);\n } else {\n this.value.set(value);\n }\n }\n }\n\n ngOnDestroy() {\n if (this.tabListSubscription) {\n this.tabListSubscription.unsubscribe();\n }\n\n super.ngOnDestroy();\n }\n}\n\n@NgModule({\n imports: [Accordion, AccordionTab, SharedModule, AccordionPanel, AccordionHeader, AccordionContent],\n exports: [Accordion, AccordionTab, SharedModule, AccordionPanel, AccordionHeader, AccordionContent]\n})\nexport class AccordionModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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