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>

238 lines 17.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'; var AccordionItem = /** @class */ (function () { function AccordionItem(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. */ /** * Toggles the accordion opened state. * @return {?} */ AccordionItem.prototype.toggle = /** * Toggles the accordion opened state. * @return {?} */ function () { if (!this.skeleton) { if (!this.expanded) { if (!this.accordion.multi) { this.accordion.openCloseItems.next(true); } this.open(); } else { this.close(); } } }; /** * @protected * @return {?} */ AccordionItem.prototype.open = /** * @protected * @return {?} */ function () { if (!this.expanded) { this.opened.emit({ id: this.id }); } this.expanded = true; }; /** * @protected * @return {?} */ AccordionItem.prototype.close = /** * @protected * @return {?} */ function () { if (this.expanded) { this.closed.emit({ id: this.id }); } this.expanded = false; }; /** * @return {?} */ AccordionItem.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; this.openSubscription = this.accordion.openCloseItems .pipe(takeWhile((/** * @return {?} */ function () { return _this.alive; }))) .subscribe((/** * @param {?} collapsed * @return {?} */ function (collapsed) { if (!_this.skeleton) { collapsed ? _this.close() : _this.open(); } })); this.skeletonSubscription = this.accordion.skeletons .pipe(takeWhile((/** * @return {?} */ function () { return _this.alive; }))) .subscribe((/** * @param {?} skeletonValue * @return {?} */ function (skeletonValue) { return _this.skeleton = skeletonValue; })); this.skeleton = this.accordion.skeleton; }; /** * @return {?} */ AccordionItem.prototype.ngOnDestroy = /** * @return {?} */ function () { this.alive = false; this.openSubscription.unsubscribe(); this.skeletonSubscription.unsubscribe(); }; /** * @param {?} value * @return {?} */ AccordionItem.prototype.isTemplate = /** * @param {?} value * @return {?} */ function (value) { return value instanceof TemplateRef; }; AccordionItem.accordionItemCount = 0; AccordionItem.decorators = [ { type: Component, args: [{ selector: 'suka-accordion-item', template: "\n <button\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-controls]=\"id\"\n (click)=\"toggle()\"\n class=\"accordion__heading\">\n <suka-icon icon=\"chevron-down\" class=\"accordion__arrow\"></suka-icon>\n\n <div *ngIf=\"isTemplate(title) && !skeleton\" class=\"accordion__title-content\">\n <ng-template [ngTemplateOutlet]=\"title\"></ng-template>\n </div>\n\n <p\n *ngIf=\"!isTemplate(title)\"\n class=\"accordion__title\"\n [ngClass]=\"{\n 'skeleton__text': skeleton\n }\">\n {{!skeleton ? title : null}}\n </p>\n </button>\n <div [id]=\"id\" class=\"accordion__content\">\n <ng-content *ngIf=\"!skeleton; else skeletonTemplate\"></ng-content>\n <ng-template #skeletonTemplate>\n <p class=\"skeleton__text\" style=\"width: 90%\"></p>\n <p class=\"skeleton__text\" style=\"width: 80%\"></p>\n <p class=\"skeleton__text\" style=\"width: 95%\"></p>\n </ng-template>\n </div>\n " }] } ]; /** @nocollapse */ AccordionItem.ctorParameters = function () { return [ { 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 }] }; return AccordionItem; }()); export { AccordionItem }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGt1c2hraS9uZy1zdWthLyIsInNvdXJjZXMiOlsibGliL2FjY29yZGlvbi9hY2NvcmRpb24taXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFdBQVcsRUFDWCxNQUFNLEVBQ04sWUFBWSxFQUNaLElBQUksRUFHSixXQUFXLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczQztJQTJFRSx1QkFBNEIsU0FBb0I7UUFBcEIsY0FBUyxHQUFULFNBQVMsQ0FBVzs7OztRQXBDdkMsVUFBSyxHQUE4QixXQUFTLGFBQWEsQ0FBQyxrQkFBb0IsQ0FBQzs7OztRQUsvRSxPQUFFLEdBQUcsb0JBQWtCLGFBQWEsQ0FBQyxrQkFBb0IsQ0FBQzs7OztRQUsxRCxhQUFRLEdBQUcsS0FBSyxDQUFDOzs7O1FBS2hCLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDOzs7O1FBSzVCLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRUEsY0FBUyxHQUFHLElBQUksQ0FBQzs7OztRQUtBLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDMUMsYUFBUSxHQUFHLFdBQVcsQ0FBQztRQUMzQixTQUFJLEdBQUcsU0FBUyxDQUFDO1FBQ0YsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUUvQyxVQUFLLEdBQUcsSUFBSSxDQUFDO1FBS25CLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFHRDs7T0FFRzs7Ozs7SUFDSSw4QkFBTTs7OztJQUFiO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxDQUFDLElBQUks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R1ksYUFBYTs7O0lBQ3hCLGlDQUE4Qjs7Ozs7SUFLOUIsOEJBQXdGOzs7OztJQUt4RiwyQkFBbUU7Ozs7O0lBS25FLGlDQUEwQjs7Ozs7SUFLMUIsK0JBQXNDOzs7OztJQUt0QywrQkFBc0M7O0lBRXRDLGtDQUF1RDs7Ozs7SUFLdkQsaUNBQXdFOztJQUN4RSxpQ0FBcUQ7O0lBQ3JELDZCQUEyQzs7SUFDM0Msa0NBQXVEOzs7OztJQUV2RCw4QkFBcUI7Ozs7O0lBQ3JCLDZDQUEyQzs7Ozs7SUFDM0MseUNBQXVDOzs7OztJQUUzQixrQ0FBb0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBIb3N0QmluZGluZyxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3QsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjY29yZGlvbiB9IGZyb20gJy4vYWNjb3JkaW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyB0YWtlV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3VrYS1hY2NvcmRpb24taXRlbScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGJ1dHRvblxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJleHBhbmRlZFwiXG4gICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImlkXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGUoKVwiXG4gICAgICBjbGFzcz1cImFjY29yZGlvbl9faGVhZGluZ1wiPlxuICAgICAgPHN1a2EtaWNvbiBpY29uPVwiY2hldnJvbi1kb3duXCIgY2xhc3M9XCJhY2NvcmRpb25fX2Fycm93XCI+PC9zdWthLWljb24+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJpc1RlbXBsYXRlKHRpdGxlKSAmJiAhc2tlbGV0b25cIiBjbGFzcz1cImFjY29yZGlvbl9fdGl0bGUtY29udGVudFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGl0bGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxwXG4gICAgICAgICpuZ0lmPVwiIWlzVGVtcGxhdGUodGl0bGUpXCJcbiAgICAgICAgY2xhc3M9XCJhY2NvcmRpb25fX3RpdGxlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdza2VsZXRvbl9fdGV4dCc6IHNrZWxldG9uXG4gICAgICAgIH1cIj5cbiAgICAgICAge3shc2tlbGV0b24gPyB0aXRsZSA6IG51bGx9fVxuICAgICAgPC9wPlxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgW2lkXT1cImlkXCIgY2xhc3M9XCJhY2NvcmRpb25fX2NvbnRlbnRcIj5cbiAgICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiIXNrZWxldG9uOyBlbHNlIHNrZWxldG9uVGVtcGxhdGVcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8bmctdGVtcGxhdGUgI3NrZWxldG9uVGVtcGxhdGU+XG4gICAgICAgIDxwIGNsYXNzPVwic2tlbGV0b25fX3RleHRcIiBzdHlsZT1cIndpZHRoOiA5MCVcIj48L3A+XG4gICAgICAgIDxwIGNsYXNzPVwic2tlbGV0b25fX3RleHRcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj48L3A+XG4gICAgICAgIDxwIGNsYXNzPVwic2tlbGV0b25fX3RleHRcIiBzdHlsZT1cIndpZHRoOiA5NSVcIj48L3A+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBBY2NvcmRpb25JdGVtIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBzdGF0aWMgYWNjb3JkaW9uSXRlbUNvdW50ID0gMDtcblxuICAvKipcbiAgICogU2V0cyB0aGUgYWNjb3JkaW9uIHRpdGxlLiBDYW4gYmUgYSBgc3RyaW5nYCBvciBhIGBUZW1wbGF0ZVJlZmAuIERlZmF1bHRzIHRvIFRpdGxlIHBsdXMgdGhlIGN1cnJlbnQgYWNjb3JkaW9uIGl0ZW0gY291bnQuXG4gICAqL1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9IGBUaXRsZSAke0FjY29yZGlvbkl0ZW0uYWNjb3JkaW9uSXRlbUNvdW50fWA7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc2V0IGEgY3VzdG9tIGlkIHRvIHRoZSBlbGVtZW50LiBEZWZhdWx0cyB0byBhIGNvdW50ZXJcbiAgICovXG4gIEBJbnB1dCgpIGlkID0gYGFjY29yZGlvbi1pdGVtLSR7QWNjb3JkaW9uSXRlbS5hY2NvcmRpb25JdGVtQ291bnR9YDtcblxuICAvKipcbiAgICogU2tlbGV0b24gc3RhdGUuIFNldCB0byBgdHJ1ZWAgdG8gZGlzcGxheSBhIHNrZWxldG9uIGFjY29yZGlvbi5cbiAgICovXG4gIEBJbnB1dCgpIHNrZWxldG9uID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIGFjY29yZGlvbiBpdGVtIGlzIG9wZW5lZC5cbiAgICovXG4gIEBPdXRwdXQoKSBvcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIGFjY29yZGlvbiBpdGVtIGlzIGNsb3NlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY2NvcmRpb25fX2l0ZW0nKSBpdGVtQ2xhc3MgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTZXRzIGlmIHRoZSBpdGVtIGlzIGV4cGFuZGVkLlxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY2NvcmRpb25fX2l0ZW0tLWFjdGl2ZScpIEBJbnB1dCgpIGV4cGFuZGVkID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnc3R5bGUuZGlzcGxheScpIGl0ZW1UeXBlID0gJ2xpc3QtaXRlbSc7XG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZSA9ICdoZWFkaW5nJztcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGV2ZWwnKSBASW5wdXQoKSBhcmlhTGV2ZWwgPSAzO1xuXG4gIHByaXZhdGUgYWxpdmUgPSB0cnVlO1xuICBwcml2YXRlIHNrZWxldG9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgb3BlblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKEBIb3N0KCkgcHJpdmF0ZSBhY2NvcmRpb246IEFjY29yZGlvbikge1xuICAgIEFjY29yZGlvbkl0ZW0uYWNjb3JkaW9uSXRlbUNvdW50Kys7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBhY2NvcmRpb24gb3BlbmVkIHN0YXRlLlxuICAgKi9cbiAgcHVibGljIHRvZ2dsZSgpIHtcbiAgICBpZiAoIXRoaXMuc2tlbGV0b24pIHtcbiAgICAgIGlmICghdGhpcy5leHBhbmRlZCkge1xuICAgICAgICBpZiAoIXRoaXMuYWNjb3JkaW9uLm11bHRpKSB7XG4gICAgICAgICAgdGhpcy5hY2NvcmRpb24ub3BlbkNsb3NlSXRlbXMubmV4dCh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvcGVuKCkge1xuICAgIGlmICghdGhpcy5leHBhbmRlZCkge1xuICAgICAgdGhpcy5vcGVuZWQuZW1pdCh7IGlkOiB0aGlzLmlkIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZXhwYW5kZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7XG4gICAgICB0aGlzLmNsb3NlZC5lbWl0KHsgaWQ6IHRoaXMuaWQgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vcGVuU3Vic2NyaXB0aW9uID0gdGhpcy5hY2NvcmRpb24ub3BlbkNsb3NlSXRlbXNcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLmFsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoY29sbGFwc2VkID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnNrZWxldG9uKSB7XG4gICAgICAgICAgY29sbGFwc2VkID8gdGhpcy5jbG9zZSgpIDogdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5za2VsZXRvblN1YnNjcmlwdGlvbiA9IHRoaXMuYWNjb3JkaW9uLnNrZWxldG9uc1xuICAgICAgLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZShza2VsZXRvblZhbHVlID0+IHRoaXMuc2tlbGV0b24gPSBza2VsZXRvblZhbHVlKTtcblxuICAgIHRoaXMuc2tlbGV0b24gPSB0aGlzLmFjY29yZGlvbi5za2VsZXRvbjtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuYWxpdmUgPSBmYWxzZTtcbiAgICB0aGlzLm9wZW5TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnNrZWxldG9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgaXNUZW1wbGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICB9XG59XG4iXX0=