UNPKG

@visa/nova-angular

Version:

Visa Product Design System Nova Angular library

168 lines 18.7 kB
/** * Copyright (c) 2025 Visa, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **/ import { coerceBooleanProperty } from '@angular/cdk/coercion'; import { ContentChild, Directive, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core'; import { AccordionHeadingDirective } from '../accordion-heading/accordion-heading.directive'; import { AccordionPanelDirective } from '../accordion-panel/accordion-panel.directive'; import { IconToggleComponent } from '../icon-toggle/icon-toggle.component'; import { IconToggleDirective } from '../icon-toggle/icon-toggle.directive'; import * as i0 from "@angular/core"; export class AccordionDetailsDirective { /** * Provides custom class(es) for custom styling. * @default .v-accordion */ get class() { return [this._class, 'v-accordion'].join(' '); } set class(value) { this._class = value; } get hostClass() { return this.class; } /** @ignore native details/summary prop */ get expanded() { return this._expanded; } set expanded(value) { this._expanded = coerceBooleanProperty(value); if (this.expanded !== null) this.toggled.emit(this.expanded); } get hostOpen() { if (this.expanded !== null) return this.expanded; } get hostId() { return this.id; } /** @ignore */ get name() { return this._name; } set name(value) { this._name = value; } get hostName() { return this.name; } get hostTabIndex() { if (this.heading?.hostButton?.disabled) { return '-1'; } } constructor() { this._class = ''; this._expanded = false; this._name = ''; /** * Emits expanded state of item when toggled. */ this.toggled = new EventEmitter(); } toggle(event) { // should be of type ToggleEvent but Angular 16 doesn't recognize ToggleEvent this.expanded = event.newState === 'open'; if (this.toggleIconComponent) this.toggleIconComponent.rotated = this.expanded; if (this.toggleIcon) this.toggleIcon.icon.icon = this.expanded ? this.toggleIcon.expandedIcon : this.toggleIcon.collapsedIcon; this.toggled.emit(this.expanded); } ngAfterContentInit() { if (this.panel) this.panel._native = true; if (this.heading) { if (this.heading.expanded && !this.expanded) this.expanded = true; this.heading.toggled.subscribe(() => { this.expanded = this.heading.expanded; }); } if (this.toggleIcon) { this.toggleIcon.class = [this.toggleIcon.class, 'v-accordion-toggle-icon'].join(' '); if (!this.toggleIcon._iconSet) { if (!this.toggleIcon._expandedSet) this.toggleIcon.expandedIcon = 'chevron-down'; if (!this.toggleIcon._collapsedSet) this.toggleIcon.collapsedIcon = 'chevron-right'; } } else if (this.toggleIconComponent) { this.toggleIconComponent._accordionToggle = true; if (this.toggleIconComponent.rotatedTemplate) { this.toggleIconComponent.rotatedTemplate.class = 'v-accordion-toggle-icon'; } if (this.toggleIconComponent.defaultTemplate) { this.toggleIconComponent.defaultTemplate.class = 'v-accordion-toggle-icon'; } } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AccordionDetailsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AccordionDetailsDirective, isStandalone: true, selector: "details[v-accordion-item]", inputs: { class: "class", expanded: ["open", "expanded"], id: "id", name: "name" }, outputs: { toggled: "toggled" }, host: { listeners: { "toggle": "toggle($event)" }, properties: { "class": "this.hostClass", "open": "this.hostOpen", "attr.id": "this.hostId", "attr.name": "this.hostName", "attr.tabindex": "this.hostTabIndex" } }, queries: [{ propertyName: "panel", first: true, predicate: AccordionPanelDirective, descendants: true }, { propertyName: "heading", first: true, predicate: AccordionHeadingDirective, descendants: true }, { propertyName: "toggleIcon", first: true, predicate: IconToggleDirective, descendants: true }, { propertyName: "toggleIconComponent", first: true, predicate: IconToggleComponent, descendants: true }], ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AccordionDetailsDirective, decorators: [{ type: Directive, args: [{ standalone: true, // tslint:disable-next-line:directive-selector selector: 'details[v-accordion-item]' }] }], ctorParameters: () => [], propDecorators: { panel: [{ type: ContentChild, args: [AccordionPanelDirective] }], heading: [{ type: ContentChild, args: [AccordionHeadingDirective] }], toggleIcon: [{ type: ContentChild, args: [IconToggleDirective] }], toggleIconComponent: [{ type: ContentChild, args: [IconToggleComponent] }], class: [{ type: Input }], hostClass: [{ type: HostBinding, args: ['class'] }], expanded: [{ type: Input, args: ['open'] }], hostOpen: [{ type: HostBinding, args: ['open'] }], id: [{ type: Input }], hostId: [{ type: HostBinding, args: ['attr.id'] }], name: [{ type: Input }], hostName: [{ type: HostBinding, args: ['attr.name'] }], hostTabIndex: [{ type: HostBinding, args: ['attr.tabindex'] }], toggled: [{ type: Output }], toggle: [{ type: HostListener, args: ['toggle', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLWl0ZW0uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ub3ZhLWxpYi9zcmMvbGliL2FjY29yZGlvbi1pdGVtL2FjY29yZGlvbi1pdGVtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0lBZUk7QUFDSixPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUVMLFlBQVksRUFDWixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFPM0UsTUFBTSxPQUFPLHlCQUF5QjtJQU1wQzs7O09BR0c7SUFDSCxJQUNJLEtBQUs7UUFDUCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQ0ksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsMENBQTBDO0lBQzFDLElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsS0FBMEI7UUFD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UUFBUTtzQkFEWCxXQUFXO3VCQUFDLE1BQU07Z0JBVW5CLEVBQUU7c0JBREQsS0FBSztnQkFHRixNQUFNO3NCQURULFdBQVc7dUJBQUMsU0FBUztnQkFPbEIsSUFBSTtzQkFEUCxLQUFLO2dCQVNGLFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxXQUFXO2dCQU1wQixZQUFZO3NCQURmLFdBQVc7dUJBQUMsZUFBZTtnQkFZbEIsT0FBTztzQkFBaEIsTUFBTTtnQkFHUCxNQUFNO3NCQURMLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDI1IFZpc2EsIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqKi9cbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY2NvcmRpb25IZWFkaW5nRGlyZWN0aXZlIH0gZnJvbSAnLi4vYWNjb3JkaW9uLWhlYWRpbmcvYWNjb3JkaW9uLWhlYWRpbmcuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFjY29yZGlvblBhbmVsRGlyZWN0aXZlIH0gZnJvbSAnLi4vYWNjb3JkaW9uLXBhbmVsL2FjY29yZGlvbi1wYW5lbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWNvblRvZ2dsZUNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24tdG9nZ2xlL2ljb24tdG9nZ2xlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJY29uVG9nZ2xlRGlyZWN0aXZlIH0gZnJvbSAnLi4vaWNvbi10b2dnbGUvaWNvbi10b2dnbGUuZGlyZWN0aXZlJztcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdkZXRhaWxzW3YtYWNjb3JkaW9uLWl0ZW1dJ1xufSlcbmV4cG9ydCBjbGFzcyBBY2NvcmRpb25EZXRhaWxzRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIEBDb250ZW50Q2hpbGQoQWNjb3JkaW9uUGFuZWxEaXJlY3RpdmUpIHBhbmVsOiBBY2NvcmRpb25QYW5lbERpcmVjdGl2ZTtcbiAgQENvbnRlbnRDaGlsZChBY2NvcmRpb25IZWFkaW5nRGlyZWN0aXZlKSBoZWFkaW5nOiBBY2NvcmRpb25IZWFkaW5nRGlyZWN0aXZlO1xuICBAQ29udGVudENoaWxkKEljb25Ub2dnbGVEaXJlY3RpdmUpIHRvZ2dsZUljb246IEljb25Ub2dnbGVEaXJlY3RpdmU7XG4gIEBDb250ZW50Q2hpbGQoSWNvblRvZ2dsZUNvbXBvbmVudCkgdG9nZ2xlSWNvbkNvbXBvbmVudDogSWNvblRvZ2dsZUNvbXBvbmVudDtcblxuICAvKipcbiAgICogUHJvdmlkZXMgY3VzdG9tIGNsYXNzJiM0MDtlcyYjNDE7IGZvciBjdXN0b20gc3R5bGluZy5cbiAgICogQGRlZmF1bHQgLnYtYWNjb3JkaW9uXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgY2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW3RoaXMuX2NsYXNzLCAndi1hY2NvcmRpb24nXS5qb2luKCcgJyk7XG4gIH1cbiAgc2V0IGNsYXNzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jbGFzcyA9IHZhbHVlO1xuICB9XG4gIF9jbGFzczogc3RyaW5nID0gJyc7XG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgaG9zdENsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3M7XG4gIH1cblxuICAvKiogQGlnbm9yZSBuYXRpdmUgZGV0YWlscy9zdW1tYXJ5IHByb3AgKi9cbiAgQElucHV0KCdvcGVuJylcbiAgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWQ7XG4gIH1cbiAgc2V0IGV4cGFuZGVkKHZhbHVlOiBCb29sZWFuSW5wdXQgfCBudWxsKSB7XG4gICAgdGhpcy5fZXhwYW5kZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIGlmICh0aGlzLmV4cGFuZGVkICE9PSBudWxsKSB0aGlzLnRvZ2dsZWQuZW1pdCh0aGlzLmV4cGFuZGVkKTtcbiAgfVxuICBfZXhwYW5kZWQ6IGJvb2xlYW4gfCBudWxsID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnb3BlbicpXG4gIGdldCBob3N0T3BlbigpOiBib29sZWFuIHwgdm9pZCB7XG4gICAgaWYgKHRoaXMuZXhwYW5kZWQgIT09IG51bGwpIHJldHVybiB0aGlzLmV4cGFuZGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgY3VzdG9tIGlkLlxuICAgKiBAYnVpbHRpbiB0cnVlXG4gICAqL1xuICBASW5wdXQoKVxuICBpZDogc3RyaW5nO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICBnZXQgaG9zdElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQ7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBASW5wdXQoKVxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gdmFsdWU7XG4gIH1cbiAgX25hbWU6IHN0cmluZyA9ICcnO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIubmFtZScpXG4gIGdldCBob3N0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICBnZXQgaG9zdFRhYkluZGV4KCk6IHN0cmluZyB8IHZvaWQge1xuICAgIGlmICh0aGlzLmhlYWRpbmc/Lmhvc3RCdXR0b24/LmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gJy0xJztcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV4cGFuZGVkIHN0YXRlIG9mIGl0ZW0gd2hlbiB0b2dnbGVkLlxuICAgKi9cbiAgQE91dHB1dCgpIHRvZ2dsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQEhvc3RMaXN0ZW5lcigndG9nZ2xlJywgWyckZXZlbnQnXSlcbiAgdG9nZ2xlKGV2ZW50OiB7IG5ld1N0YXRlOiBzdHJpbmcgfSkge1xuICAgIC8vIHNob3VsZCBiZSBvZiB0eXBlIFRvZ2dsZUV2ZW50IGJ1dCBBbmd1bGFyIDE2IGRvZXNuJ3QgcmVjb2duaXplIFRvZ2dsZUV2ZW50XG4gICAgdGhpcy5leHBhbmRlZCA9IGV2ZW50Lm5ld1N0YXRlID09PSAnb3Blbic7XG4gICAgaWYgKHRoaXMudG9nZ2xlSWNvbkNvbXBvbmVudCkgdGhpcy50b2dnbGVJY29uQ29tcG9uZW50LnJvdGF0ZWQgPSB0aGlzLmV4cGFuZGVkO1xuICAgIGlmICh0aGlzLnRvZ2dsZUljb24pXG4gICAgICB0aGlzLnRvZ2dsZUljb24uaWNvbi5pY29uID0gdGhpcy5leHBhbmRlZCA/IHRoaXMudG9nZ2xlSWNvbi5leHBhbmRlZEljb24gOiB0aGlzLnRvZ2dsZUljb24uY29sbGFwc2VkSWNvbjtcbiAgICB0aGlzLnRvZ2dsZWQuZW1pdCh0aGlzLmV4cGFuZGVkKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYW5lbCkgdGhpcy5wYW5lbC5fbmF0aXZlID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmhlYWRpbmcpIHtcbiAgICAgIGlmICh0aGlzLmhlYWRpbmcuZXhwYW5kZWQgJiYgIXRoaXMuZXhwYW5kZWQpIHRoaXMuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgdGhpcy5oZWFkaW5nLnRvZ2dsZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5leHBhbmRlZCA9IHRoaXMuaGVhZGluZy5leHBhbmRlZDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRvZ2dsZUljb24pIHtcbiAgICAgIHRoaXMudG9nZ2xlSWNvbi5jbGFzcyA9IFt0aGlzLnRvZ2dsZUljb24uY2xhc3MsICd2LWFjY29yZGlvbi10b2dnbGUtaWNvbiddLmpvaW4oJyAnKTtcbiAgICAgIGlmICghdGhpcy50b2dnbGVJY29uLl9pY29uU2V0KSB7XG4gICAgICAgIGlmICghdGhpcy50b2dnbGVJY29uLl9leHBhbmRlZFNldCkgdGhpcy50b2dnbGVJY29uLmV4cGFuZGVkSWNvbiA9ICdjaGV2cm9uLWRvd24nO1xuICAgICAgICBpZiAoIXRoaXMudG9nZ2xlSWNvbi5fY29sbGFwc2VkU2V0KSB0aGlzLnRvZ2dsZUljb24uY29sbGFwc2VkSWNvbiA9ICdjaGV2cm9uLXJpZ2h0JztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudG9nZ2xlSWNvbkNvbXBvbmVudCkge1xuICAgICAgdGhpcy50b2dnbGVJY29uQ29tcG9uZW50Ll9hY2NvcmRpb25Ub2dnbGUgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMudG9nZ2xlSWNvbkNvbXBvbmVudC5yb3RhdGVkVGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy50b2dnbGVJY29uQ29tcG9uZW50LnJvdGF0ZWRUZW1wbGF0ZS5jbGFzcyA9ICd2LWFjY29yZGlvbi10b2dnbGUtaWNvbic7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50b2dnbGVJY29uQ29tcG9uZW50LmRlZmF1bHRUZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLnRvZ2dsZUljb25Db21wb25lbnQuZGVmYXVsdFRlbXBsYXRlLmNsYXNzID0gJ3YtYWNjb3JkaW9uLXRvZ2dsZS1pY29uJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==