UNPKG

@kushki/ng-suka

Version:

<p align="center"> <h1 align="center">Suka Components Angular</h1> <p align="center"> An Angular implementation of the Suka Design System </p> </p>

242 lines (240 loc) 16.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, HostBinding, Output, EventEmitter, Host, TemplateRef } from '@angular/core'; import { Accordion } from './accordion.component'; import { takeWhile } from 'rxjs/operators'; export class AccordionItem { /** * @param {?} accordion */ constructor(accordion) { this.accordion = accordion; /** * Sets the accordion title. Can be a `string` or a `TemplateRef`. Defaults to Title plus the current accordion item count. */ this.title = `Title ${AccordionItem.accordionItemCount}`; /** * Used to set a custom id to the element. Defaults to a counter */ this.id = `accordion-item-${AccordionItem.accordionItemCount}`; /** * Skeleton state. Set to `true` to display a skeleton accordion. */ this.skeleton = false; /** * Emits an event when the accordion item is opened. */ this.opened = new EventEmitter(); /** * Emits an event when the accordion item is closed. */ this.closed = new EventEmitter(); this.itemClass = true; /** * Sets if the item is expanded. */ this.expanded = false; this.itemType = 'list-item'; this.role = 'heading'; this.ariaLevel = 3; this.alive = true; AccordionItem.accordionItemCount++; } /** * Toggles the accordion opened state. * @return {?} */ toggle() { if (!this.skeleton) { if (!this.expanded) { if (!this.accordion.multi) { this.accordion.openCloseItems.next(true); } this.open(); } else { this.close(); } } } /** * @protected * @return {?} */ open() { if (!this.expanded) { this.opened.emit({ id: this.id }); } this.expanded = true; } /** * @protected * @return {?} */ close() { if (this.expanded) { this.closed.emit({ id: this.id }); } this.expanded = false; } /** * @return {?} */ ngOnInit() { this.openSubscription = this.accordion.openCloseItems .pipe(takeWhile((/** * @return {?} */ () => this.alive))) .subscribe((/** * @param {?} collapsed * @return {?} */ collapsed => { if (!this.skeleton) { collapsed ? this.close() : this.open(); } })); this.skeletonSubscription = this.accordion.skeletons .pipe(takeWhile((/** * @return {?} */ () => this.alive))) .subscribe((/** * @param {?} skeletonValue * @return {?} */ skeletonValue => this.skeleton = skeletonValue)); this.skeleton = this.accordion.skeleton; } /** * @return {?} */ ngOnDestroy() { this.alive = false; this.openSubscription.unsubscribe(); this.skeletonSubscription.unsubscribe(); } /** * @param {?} value * @return {?} */ isTemplate(value) { return value instanceof TemplateRef; } } AccordionItem.accordionItemCount = 0; AccordionItem.decorators = [ { type: Component, args: [{ selector: 'suka-accordion-item', template: ` <button [attr.aria-expanded]="expanded" [attr.aria-controls]="id" (click)="toggle()" class="accordion__heading"> <suka-icon icon="chevron-down" class="accordion__arrow"></suka-icon> <div *ngIf="isTemplate(title) && !skeleton" class="accordion__title-content"> <ng-template [ngTemplateOutlet]="title"></ng-template> </div> <p *ngIf="!isTemplate(title)" class="accordion__title" [ngClass]="{ 'skeleton__text': skeleton }"> {{!skeleton ? title : null}} </p> </button> <div [id]="id" class="accordion__content"> <ng-content *ngIf="!skeleton; else skeletonTemplate"></ng-content> <ng-template #skeletonTemplate> <p class="skeleton__text" style="width: 90%"></p> <p class="skeleton__text" style="width: 80%"></p> <p class="skeleton__text" style="width: 95%"></p> </ng-template> </div> ` }] } ]; /** @nocollapse */ AccordionItem.ctorParameters = () => [ { type: Accordion, decorators: [{ type: Host }] } ]; AccordionItem.propDecorators = { title: [{ type: Input }], id: [{ type: Input }], skeleton: [{ type: Input }], opened: [{ type: Output }], closed: [{ type: Output }], itemClass: [{ type: HostBinding, args: ['class.accordion__item',] }], expanded: [{ type: HostBinding, args: ['class.accordion__item--active',] }, { type: Input }], itemType: [{ type: HostBinding, args: ['style.display',] }], role: [{ type: HostBinding, args: ['attr.role',] }], ariaLevel: [{ type: HostBinding, args: ['attr.aria-level',] }, { type: Input }] }; if (false) { /** @type {?} */ AccordionItem.accordionItemCount; /** * Sets the accordion title. Can be a `string` or a `TemplateRef`. Defaults to Title plus the current accordion item count. * @type {?} */ AccordionItem.prototype.title; /** * Used to set a custom id to the element. Defaults to a counter * @type {?} */ AccordionItem.prototype.id; /** * Skeleton state. Set to `true` to display a skeleton accordion. * @type {?} */ AccordionItem.prototype.skeleton; /** * Emits an event when the accordion item is opened. * @type {?} */ AccordionItem.prototype.opened; /** * Emits an event when the accordion item is closed. * @type {?} */ AccordionItem.prototype.closed; /** @type {?} */ AccordionItem.prototype.itemClass; /** * Sets if the item is expanded. * @type {?} */ AccordionItem.prototype.expanded; /** @type {?} */ AccordionItem.prototype.itemType; /** @type {?} */ AccordionItem.prototype.role; /** @type {?} */ AccordionItem.prototype.ariaLevel; /** * @type {?} * @private */ AccordionItem.prototype.alive; /** * @type {?} * @private */ AccordionItem.prototype.skeletonSubscription; /** * @type {?} * @private */ AccordionItem.prototype.openSubscription; /** * @type {?} * @private */ AccordionItem.prototype.accordion; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGt1c2hraS9uZy1zdWthLyIsInNvdXJjZXMiOlsibGliL2FjY29yZGlvbi9hY2NvcmRpb24taXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFdBQVcsRUFDWCxNQUFNLEVBQ04sWUFBWSxFQUNaLElBQUksRUFHSixXQUFXLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQW9DM0MsTUFBTSxPQUFPLGFBQWE7Ozs7SUEwQ3hCLFlBQTRCLFNBQW9CO1FBQXBCLGNBQVMsR0FBVCxTQUFTLENBQVc7Ozs7UUFwQ3ZDLFVBQUssR0FBOEIsU0FBUyxhQUFhLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzs7OztRQUsvRSxPQUFFLEdBQUcsa0JBQWtCLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDOzs7O1FBSzFELGFBQVEsR0FBRyxLQUFLLENBQUM7Ozs7UUFLaEIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7Ozs7UUFLNUIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFQSxjQUFTLEdBQUcsSUFBSSxDQUFDOzs7O1FBS0EsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUMxQyxhQUFRLEdBQUcsV0FBVyxDQUFDO1FBQzNCLFNBQUksR0FBRyxTQUFTLENBQUM7UUFDRixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRS9DLFVBQUssR0FBRyxJQUFJLENBQUM7UUFLbkIsYUFBYSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDckMsQ0FBQzs7Ozs7SUFNTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxD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SzFCLCtCQUFzQzs7Ozs7SUFLdEMsK0JBQXNDOztJQUV0QyxrQ0FBdUQ7Ozs7O0lBS3ZELGlDQUF3RTs7SUFDeEUsaUNBQXFEOztJQUNyRCw2QkFBMkM7O0lBQzNDLGtDQUF1RDs7Ozs7SUFFdkQsOEJBQXFCOzs7OztJQUNyQiw2Q0FBMkM7Ozs7O0lBQzNDLHlDQUF1Qzs7Ozs7SUFFM0Isa0NBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgSG9zdEJpbmRpbmcsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY2NvcmRpb24gfSBmcm9tICcuL2FjY29yZGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N1a2EtYWNjb3JkaW9uLWl0ZW0nLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxidXR0b25cbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiZXhwYW5kZWRcIlxuICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJpZFwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgICAgY2xhc3M9XCJhY2NvcmRpb25fX2hlYWRpbmdcIj5cbiAgICAgIDxzdWthLWljb24gaWNvbj1cImNoZXZyb24tZG93blwiIGNsYXNzPVwiYWNjb3JkaW9uX19hcnJvd1wiPjwvc3VrYS1pY29uPlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNUZW1wbGF0ZSh0aXRsZSkgJiYgIXNrZWxldG9uXCIgY2xhc3M9XCJhY2NvcmRpb25fX3RpdGxlLWNvbnRlbnRcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRpdGxlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8cFxuICAgICAgICAqbmdJZj1cIiFpc1RlbXBsYXRlKHRpdGxlKVwiXG4gICAgICAgIGNsYXNzPVwiYWNjb3JkaW9uX190aXRsZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnc2tlbGV0b25fX3RleHQnOiBza2VsZXRvblxuICAgICAgICB9XCI+XG4gICAgICAgIHt7IXNrZWxldG9uID8gdGl0bGUgOiBudWxsfX1cbiAgICAgIDwvcD5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IFtpZF09XCJpZFwiIGNsYXNzPVwiYWNjb3JkaW9uX19jb250ZW50XCI+XG4gICAgICA8bmctY29udGVudCAqbmdJZj1cIiFza2VsZXRvbjsgZWxzZSBza2VsZXRvblRlbXBsYXRlXCI+PC9uZy1jb250ZW50PlxuICAgICAgPG5nLXRlbXBsYXRlICNza2VsZXRvblRlbXBsYXRlPlxuICAgICAgICA8cCBjbGFzcz1cInNrZWxldG9uX190ZXh0XCIgc3R5bGU9XCJ3aWR0aDogOTAlXCI+PC9wPlxuICAgICAgICA8cCBjbGFzcz1cInNrZWxldG9uX190ZXh0XCIgc3R5bGU9XCJ3aWR0aDogODAlXCI+PC9wPlxuICAgICAgICA8cCBjbGFzcz1cInNrZWxldG9uX190ZXh0XCIgc3R5bGU9XCJ3aWR0aDogOTUlXCI+PC9wPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uSXRlbSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgc3RhdGljIGFjY29yZGlvbkl0ZW1Db3VudCA9IDA7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFjY29yZGlvbiB0aXRsZS4gQ2FuIGJlIGEgYHN0cmluZ2Agb3IgYSBgVGVtcGxhdGVSZWZgLiBEZWZhdWx0cyB0byBUaXRsZSBwbHVzIHRoZSBjdXJyZW50IGFjY29yZGlvbiBpdGVtIGNvdW50LlxuICAgKi9cbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4gPSBgVGl0bGUgJHtBY2NvcmRpb25JdGVtLmFjY29yZGlvbkl0ZW1Db3VudH1gO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHNldCBhIGN1c3RvbSBpZCB0byB0aGUgZWxlbWVudC4gRGVmYXVsdHMgdG8gYSBjb3VudGVyXG4gICAqL1xuICBASW5wdXQoKSBpZCA9IGBhY2NvcmRpb24taXRlbS0ke0FjY29yZGlvbkl0ZW0uYWNjb3JkaW9uSXRlbUNvdW50fWA7XG5cbiAgLyoqXG4gICAqIFNrZWxldG9uIHN0YXRlLiBTZXQgdG8gYHRydWVgIHRvIGRpc3BsYXkgYSBza2VsZXRvbiBhY2NvcmRpb24uXG4gICAqL1xuICBASW5wdXQoKSBza2VsZXRvbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBhY2NvcmRpb24gaXRlbSBpcyBvcGVuZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgb3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBhY2NvcmRpb24gaXRlbSBpcyBjbG9zZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYWNjb3JkaW9uX19pdGVtJykgaXRlbUNsYXNzID0gdHJ1ZTtcblxuICAvKipcbiAgICogU2V0cyBpZiB0aGUgaXRlbSBpcyBleHBhbmRlZC5cbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYWNjb3JkaW9uX19pdGVtLS1hY3RpdmUnKSBASW5wdXQoKSBleHBhbmRlZCA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmRpc3BsYXknKSBpdGVtVHlwZSA9ICdsaXN0LWl0ZW0nO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpIHJvbGUgPSAnaGVhZGluZyc7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxldmVsJykgQElucHV0KCkgYXJpYUxldmVsID0gMztcblxuICBwcml2YXRlIGFsaXZlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBza2VsZXRvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIG9wZW5TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihASG9zdCgpIHByaXZhdGUgYWNjb3JkaW9uOiBBY2NvcmRpb24pIHtcbiAgICBBY2NvcmRpb25JdGVtLmFjY29yZGlvbkl0ZW1Db3VudCsrO1xuICB9XG5cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgYWNjb3JkaW9uIG9wZW5lZCBzdGF0ZS5cbiAgICovXG4gIHB1YmxpYyB0b2dnbGUoKSB7XG4gICAgaWYgKCF0aGlzLnNrZWxldG9uKSB7XG4gICAgICBpZiAoIXRoaXMuZXhwYW5kZWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjY29yZGlvbi5tdWx0aSkge1xuICAgICAgICAgIHRoaXMuYWNjb3JkaW9uLm9wZW5DbG9zZUl0ZW1zLm5leHQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3BlbigpIHtcbiAgICBpZiAoIXRoaXMuZXhwYW5kZWQpIHtcbiAgICAgIHRoaXMub3BlbmVkLmVtaXQoeyBpZDogdGhpcy5pZCB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmV4cGFuZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbG9zZSgpIHtcbiAgICBpZiAodGhpcy5leHBhbmRlZCkge1xuICAgICAgdGhpcy5jbG9zZWQuZW1pdCh7IGlkOiB0aGlzLmlkIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3BlblN1YnNjcmlwdGlvbiA9IHRoaXMuYWNjb3JkaW9uLm9wZW5DbG9zZUl0ZW1zXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKGNvbGxhcHNlZCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5za2VsZXRvbikge1xuICAgICAgICAgIGNvbGxhcHNlZCA/IHRoaXMuY2xvc2UoKSA6IHRoaXMub3BlbigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuc2tlbGV0b25TdWJzY3JpcHRpb24gPSB0aGlzLmFjY29yZGlvbi5za2VsZXRvbnNcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLmFsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoc2tlbGV0b25WYWx1ZSA9PiB0aGlzLnNrZWxldG9uID0gc2tlbGV0b25WYWx1ZSk7XG5cbiAgICB0aGlzLnNrZWxldG9uID0gdGhpcy5hY2NvcmRpb24uc2tlbGV0b247XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmFsaXZlID0gZmFsc2U7XG4gICAgdGhpcy5vcGVuU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5za2VsZXRvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGlzVGVtcGxhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgfVxufVxuIl19