@visa/nova-angular
Version:
Visa Product Design System Nova Angular library
168 lines • 18.7 kB
JavaScript
/**
* © 2025 Visa
*
* 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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UUFBUTtzQkFEWCxXQUFXO3VCQUFDLE1BQU07Z0JBVW5CLEVBQUU7c0JBREQsS0FBSztnQkFHRixNQUFNO3NCQURULFdBQVc7dUJBQUMsU0FBUztnQkFPbEIsSUFBSTtzQkFEUCxLQUFLO2dCQVNGLFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxXQUFXO2dCQU1wQixZQUFZO3NCQURmLFdBQVc7dUJBQUMsZUFBZTtnQkFZbEIsT0FBTztzQkFBaEIsTUFBTTtnQkFHUCxNQUFNO3NCQURMLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgICAgICAgICAgICAgwqkgMjAyNSBWaXNhXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKiovXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb250ZW50Q2hpbGQsXG4gIERpcmVjdGl2ZSxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWNjb3JkaW9uSGVhZGluZ0RpcmVjdGl2ZSB9IGZyb20gJy4uL2FjY29yZGlvbi1oZWFkaW5nL2FjY29yZGlvbi1oZWFkaW5nLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBY2NvcmRpb25QYW5lbERpcmVjdGl2ZSB9IGZyb20gJy4uL2FjY29yZGlvbi1wYW5lbC9hY2NvcmRpb24tcGFuZWwuZGlyZWN0aXZlJztcbmltcG9ydCB7IEljb25Ub2dnbGVDb21wb25lbnQgfSBmcm9tICcuLi9pY29uLXRvZ2dsZS9pY29uLXRvZ2dsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvblRvZ2dsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2ljb24tdG9nZ2xlL2ljb24tdG9nZ2xlLmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnZGV0YWlsc1t2LWFjY29yZGlvbi1pdGVtXSdcbn0pXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uRGV0YWlsc0RpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICBAQ29udGVudENoaWxkKEFjY29yZGlvblBhbmVsRGlyZWN0aXZlKSBwYW5lbDogQWNjb3JkaW9uUGFuZWxEaXJlY3RpdmU7XG4gIEBDb250ZW50Q2hpbGQoQWNjb3JkaW9uSGVhZGluZ0RpcmVjdGl2ZSkgaGVhZGluZzogQWNjb3JkaW9uSGVhZGluZ0RpcmVjdGl2ZTtcbiAgQENvbnRlbnRDaGlsZChJY29uVG9nZ2xlRGlyZWN0aXZlKSB0b2dnbGVJY29uOiBJY29uVG9nZ2xlRGlyZWN0aXZlO1xuICBAQ29udGVudENoaWxkKEljb25Ub2dnbGVDb21wb25lbnQpIHRvZ2dsZUljb25Db21wb25lbnQ6IEljb25Ub2dnbGVDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGN1c3RvbSBjbGFzcyYjNDA7ZXMmIzQxOyBmb3IgY3VzdG9tIHN0eWxpbmcuXG4gICAqIEBkZWZhdWx0IC52LWFjY29yZGlvblxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGNsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFt0aGlzLl9jbGFzcywgJ3YtYWNjb3JkaW9uJ10uam9pbignICcpO1xuICB9XG4gIHNldCBjbGFzcyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fY2xhc3MgPSB2YWx1ZTtcbiAgfVxuICBfY2xhc3M6IHN0cmluZyA9ICcnO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGhvc3RDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNsYXNzO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgbmF0aXZlIGRldGFpbHMvc3VtbWFyeSBwcm9wICovXG4gIEBJbnB1dCgnb3BlbicpXG4gIGdldCBleHBhbmRlZCgpOiBib29sZWFuIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkO1xuICB9XG4gIHNldCBleHBhbmRlZCh2YWx1ZTogQm9vbGVhbklucHV0IHwgbnVsbCkge1xuICAgIHRoaXMuX2V4cGFuZGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICBpZiAodGhpcy5leHBhbmRlZCAhPT0gbnVsbCkgdGhpcy50b2dnbGVkLmVtaXQodGhpcy5leHBhbmRlZCk7XG4gIH1cbiAgX2V4cGFuZGVkOiBib29sZWFuIHwgbnVsbCA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ29wZW4nKVxuICBnZXQgaG9zdE9wZW4oKTogYm9vbGVhbiB8IHZvaWQge1xuICAgIGlmICh0aGlzLmV4cGFuZGVkICE9PSBudWxsKSByZXR1cm4gdGhpcy5leHBhbmRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGN1c3RvbSBpZC5cbiAgICogQGJ1aWx0aW4gdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgaWQ6IHN0cmluZztcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgZ2V0IGhvc3RJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQElucHV0KClcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuICBzZXQgbmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbmFtZSA9IHZhbHVlO1xuICB9XG4gIF9uYW1lOiBzdHJpbmcgPSAnJztcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLm5hbWUnKVxuICBnZXQgaG9zdE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcbiAgZ2V0IGhvc3RUYWJJbmRleCgpOiBzdHJpbmcgfCB2b2lkIHtcbiAgICBpZiAodGhpcy5oZWFkaW5nPy5ob3N0QnV0dG9uPy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuICctMSc7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBFbWl0cyBleHBhbmRlZCBzdGF0ZSBvZiBpdGVtIHdoZW4gdG9nZ2xlZC5cbiAgICovXG4gIEBPdXRwdXQoKSB0b2dnbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ3RvZ2dsZScsIFsnJGV2ZW50J10pXG4gIHRvZ2dsZShldmVudDogeyBuZXdTdGF0ZTogc3RyaW5nIH0pIHtcbiAgICAvLyBzaG91bGQgYmUgb2YgdHlwZSBUb2dnbGVFdmVudCBidXQgQW5ndWxhciAxNiBkb2Vzbid0IHJlY29nbml6ZSBUb2dnbGVFdmVudFxuICAgIHRoaXMuZXhwYW5kZWQgPSBldmVudC5uZXdTdGF0ZSA9PT0gJ29wZW4nO1xuICAgIGlmICh0aGlzLnRvZ2dsZUljb25Db21wb25lbnQpIHRoaXMudG9nZ2xlSWNvbkNvbXBvbmVudC5yb3RhdGVkID0gdGhpcy5leHBhbmRlZDtcbiAgICBpZiAodGhpcy50b2dnbGVJY29uKVxuICAgICAgdGhpcy50b2dnbGVJY29uLmljb24uaWNvbiA9IHRoaXMuZXhwYW5kZWQgPyB0aGlzLnRvZ2dsZUljb24uZXhwYW5kZWRJY29uIDogdGhpcy50b2dnbGVJY29uLmNvbGxhcHNlZEljb247XG4gICAgdGhpcy50b2dnbGVkLmVtaXQodGhpcy5leHBhbmRlZCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFuZWwpIHRoaXMucGFuZWwuX25hdGl2ZSA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5oZWFkaW5nKSB7XG4gICAgICBpZiAodGhpcy5oZWFkaW5nLmV4cGFuZGVkICYmICF0aGlzLmV4cGFuZGVkKSB0aGlzLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuaGVhZGluZy50b2dnbGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZXhwYW5kZWQgPSB0aGlzLmhlYWRpbmcuZXhwYW5kZWQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2dnbGVJY29uKSB7XG4gICAgICB0aGlzLnRvZ2dsZUljb24uY2xhc3MgPSBbdGhpcy50b2dnbGVJY29uLmNsYXNzLCAndi1hY2NvcmRpb24tdG9nZ2xlLWljb24nXS5qb2luKCcgJyk7XG4gICAgICBpZiAoIXRoaXMudG9nZ2xlSWNvbi5faWNvblNldCkge1xuICAgICAgICBpZiAoIXRoaXMudG9nZ2xlSWNvbi5fZXhwYW5kZWRTZXQpIHRoaXMudG9nZ2xlSWNvbi5leHBhbmRlZEljb24gPSAnY2hldnJvbi1kb3duJztcbiAgICAgICAgaWYgKCF0aGlzLnRvZ2dsZUljb24uX2NvbGxhcHNlZFNldCkgdGhpcy50b2dnbGVJY29uLmNvbGxhcHNlZEljb24gPSAnY2hldnJvbi1yaWdodCc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnRvZ2dsZUljb25Db21wb25lbnQpIHtcbiAgICAgIHRoaXMudG9nZ2xlSWNvbkNvbXBvbmVudC5fYWNjb3JkaW9uVG9nZ2xlID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLnRvZ2dsZUljb25Db21wb25lbnQucm90YXRlZFRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlSWNvbkNvbXBvbmVudC5yb3RhdGVkVGVtcGxhdGUuY2xhc3MgPSAndi1hY2NvcmRpb24tdG9nZ2xlLWljb24nO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudG9nZ2xlSWNvbkNvbXBvbmVudC5kZWZhdWx0VGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy50b2dnbGVJY29uQ29tcG9uZW50LmRlZmF1bHRUZW1wbGF0ZS5jbGFzcyA9ICd2LWFjY29yZGlvbi10b2dnbGUtaWNvbic7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=