UNPKG

@doku-dev/doku-fragment

Version:

A new Angular UI library that moving away from Bootstrap and built from scratch.

155 lines 16.7 kB
import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, Host, HostBinding, Input, ViewEncapsulation, } from '@angular/core'; import { SelectionDispatcher } from './accordion.enum'; import * as i0 from "@angular/core"; import * as i1 from "./accordion.component"; let uniqueId = 0; export class DokuAccordionItem { /** * Whether the accordion item should be expanded. * * By default, the accordion `multi` is false, * it will collapse other expanded items. * * Disabled accordion item will not expanded. * * @default false */ get expanded() { return this._expanded; } set expanded(value) { if (this.disabled) return; this._expanded = value; this.accordion['selectionDispatcher$'].next(this.accordionId); this.cdRef.markForCheck(); } constructor(accordion, cdRef, elementRef) { this.accordion = accordion; this.cdRef = cdRef; this.elementRef = elementRef; this.classes = 'd-accordion-item'; /** * Autogenerate unique id of the accordion item. */ this.accordionId = `d-accordion-id-${uniqueId++}`; this._expanded = false; /** * Whether the accordion item is disabled. * @default false */ this.disabled = false; this.accordion['selectionListener$'].subscribe((selectionAccordion) => { this.handleExpandAtATime(selectionAccordion); this.handleExpandAll(selectionAccordion); this.handleCollapseAll(selectionAccordion); }); } /** * Toggle (expand/collapse) the accordion item. * Do nothing if `disabled` is true. */ toggle() { this.expanded = !this.expanded; } /** * Collapse the accordion item. * Do nothing if `disabled` is true. */ collapse() { this.expanded = false; } /** * Expand the accordion item. * Do nothing if `disabled` is true. */ expand() { this.expanded = true; } handleExpandAtATime(activeAccordionId) { if (!activeAccordionId) return; if (Object.values(SelectionDispatcher).includes(activeAccordionId)) { return; } if (!this.accordion.multi && activeAccordionId !== this.accordionId) { this._expanded = false; this.cdRef.markForCheck(); } } /** * See detail on {@link DokuAccordion.expandAll} */ handleExpandAll(selectionAccordion) { if (selectionAccordion !== SelectionDispatcher.ExpandAll) return; if (this.disabled) return; if (this.accordion.multi) { this._expanded = true; this.cdRef.markForCheck(); } // When multi expanded is not allowed, expand the first item if no one item expanded. if (!this.accordion.multi) { const accordionItemElement = this.elementRef.nativeElement; // Check if has expanded item by siblings class name. const hasExpandedItem = !!accordionItemElement.parentElement?.querySelector('doku-accordion-item.d-accordion-expanded'); if (hasExpandedItem) return; // Check if this accordion item is the first item by checking previous element. const isFirstChild = accordionItemElement.previousSibling?.nodeName?.toLowerCase() !== 'doku-accordion-item'; if (isFirstChild) { this._expanded = true; this.cdRef.markForCheck(); } } } /** * See detail on {@link DokuAccordion.collapseAll} */ handleCollapseAll(selectionAccordion) { if (selectionAccordion !== SelectionDispatcher.CollapseAll) return; if (this.disabled) return; if (this._expanded) { this._expanded = false; this.cdRef.markForCheck(); } } } DokuAccordionItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuAccordionItem, deps: [{ token: i1.DokuAccordion, host: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); DokuAccordionItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DokuAccordionItem, isStandalone: true, selector: "doku-accordion-item", inputs: { accordionId: "accordionId", expanded: "expanded", disabled: "disabled" }, host: { properties: { "class": "this.classes", "class.d-accordion-expanded": "this.expanded", "class.d-accordion-disabled": "this.disabled" } }, exportAs: ["dokuAccordionItem"], ngImport: i0, template: `<ng-content select="doku-accordion-header"></ng-content> <ng-content select="doku-accordion-body"></ng-content>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuAccordionItem, decorators: [{ type: Component, args: [{ selector: 'doku-accordion-item', exportAs: 'dokuAccordionItem', standalone: true, imports: [CommonModule], template: `<ng-content select="doku-accordion-header"></ng-content> <ng-content select="doku-accordion-body"></ng-content>`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, }] }], ctorParameters: function () { return [{ type: i1.DokuAccordion, decorators: [{ type: Host }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { classes: [{ type: HostBinding, args: ['class'] }], accordionId: [{ type: Input }], expanded: [{ type: HostBinding, args: ['class.d-accordion-expanded'] }, { type: Input }], disabled: [{ type: HostBinding, args: ['class.d-accordion-disabled'] }, { type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9rdS1mcmFnbWVudC9zcmMvbGliL2FjY29yZGlvbi9hY2NvcmRpb24taXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULElBQUksRUFDSixXQUFXLEVBQ1gsS0FBSyxFQUNMLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBRXZELElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQVlqQixNQUFNLE9BQU8saUJBQWlCO0lBUzVCOzs7Ozs7Ozs7T0FTRztJQUNILElBRUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsS0FBYztRQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFXRCxZQUNrQixTQUF3QixFQUNoQyxLQUF3QixFQUN4QixVQUFzQjtRQUZkLGNBQVMsR0FBVCxTQUFTLENBQWU7UUFDaEMsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQXpDdkIsWUFBTyxHQUFHLGtCQUFrQixDQUFDO1FBRXRDOztXQUVHO1FBQ00sZ0JB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O0lBQ0gsQ0FBQzs7OEdBcElVLGlCQUFpQjtrR0FBakIsaUJBQWlCLHFWQUxsQjsyREFDK0MsMkRBRi9DLFlBQVk7MkZBTVgsaUJBQWlCO2tCQVY3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFFBQVEsRUFBRTsyREFDK0M7b0JBQ3pELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OzBCQTBDSSxJQUFJO3FHQXZDRSxPQUFPO3NCQURmLFdBQVc7dUJBQUMsT0FBTztnQkFNWCxXQUFXO3NCQUFuQixLQUFLO2dCQWNGLFFBQVE7c0JBRlgsV0FBVzt1QkFBQyw0QkFBNEI7O3NCQUN4QyxLQUFLO2dCQWtCTixRQUFRO3NCQUZQLFdBQVc7dUJBQUMsNEJBQTRCOztzQkFDeEMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdCxcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb2t1QWNjb3JkaW9uIH0gZnJvbSAnLi9hY2NvcmRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdGlvbkRpc3BhdGNoZXIgfSBmcm9tICcuL2FjY29yZGlvbi5lbnVtJztcblxubGV0IHVuaXF1ZUlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZG9rdS1hY2NvcmRpb24taXRlbScsXG4gIGV4cG9ydEFzOiAnZG9rdUFjY29yZGlvbkl0ZW0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGA8bmctY29udGVudCBzZWxlY3Q9XCJkb2t1LWFjY29yZGlvbi1oZWFkZXJcIj48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZG9rdS1hY2NvcmRpb24tYm9keVwiPjwvbmctY29udGVudD5gLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRG9rdUFjY29yZGlvbkl0ZW0ge1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgcmVhZG9ubHkgY2xhc3NlcyA9ICdkLWFjY29yZGlvbi1pdGVtJztcblxuICAvKipcbiAgICogQXV0b2dlbmVyYXRlIHVuaXF1ZSBpZCBvZiB0aGUgYWNjb3JkaW9uIGl0ZW0uXG4gICAqL1xuICBASW5wdXQoKSBhY2NvcmRpb25JZCA9IGBkLWFjY29yZGlvbi1pZC0ke3VuaXF1ZUlkKyt9YDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYWNjb3JkaW9uIGl0ZW0gc2hvdWxkIGJlIGV4cGFuZGVkLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgYWNjb3JkaW9uIGBtdWx0aWAgaXMgZmFsc2UsXG4gICAqIGl0IHdpbGwgY29sbGFwc2Ugb3RoZXIgZXhwYW5kZWQgaXRlbXMuXG4gICAqXG4gICAqIERpc2FibGVkIGFjY29yZGlvbiBpdGVtIHdpbGwgbm90IGV4cGFuZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kLWFjY29yZGlvbi1leHBhbmRlZCcpXG4gIEBJbnB1dCgpXG4gIGdldCBleHBhbmRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWQ7XG4gIH1cbiAgc2V0IGV4cGFuZGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLl9leHBhbmRlZCA9IHZhbHVlO1xuICAgIHRoaXMuYWNjb3JkaW9uWydzZWxlY3Rpb25EaXNwYXRjaGVyJCddLm5leHQodGhpcy5hY2NvcmRpb25JZCk7XG4gICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBwcml2YXRlIF9leHBhbmRlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhY2NvcmRpb24gaXRlbSBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZC1hY2NvcmRpb24tZGlzYWJsZWQnKVxuICBASW5wdXQoKVxuICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBIb3N0KCkgcHJpdmF0ZSBhY2NvcmRpb246IERva3VBY2NvcmRpb24sXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICkge1xuICAgIHRoaXMuYWNjb3JkaW9uWydzZWxlY3Rpb25MaXN0ZW5lciQnXS5zdWJzY3JpYmUoKHNlbGVjdGlvbkFjY29yZGlvbikgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVFeHBhbmRBdEFUaW1lKHNlbGVjdGlvbkFjY29yZGlvbik7XG4gICAgICB0aGlzLmhhbmRsZUV4cGFuZEFsbChzZWxlY3Rpb25BY2NvcmRpb24gYXMgU2VsZWN0aW9uRGlzcGF0Y2hlcik7XG4gICAgICB0aGlzLmhhbmRsZUNvbGxhcHNlQWxsKHNlbGVjdGlvbkFjY29yZGlvbiBhcyBTZWxlY3Rpb25EaXNwYXRjaGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgKGV4cGFuZC9jb2xsYXBzZSkgdGhlIGFjY29yZGlvbiBpdGVtLlxuICAgKiBEbyBub3RoaW5nIGlmIGBkaXNhYmxlZGAgaXMgdHJ1ZS5cbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICB0aGlzLmV4cGFuZGVkID0gIXRoaXMuZXhwYW5kZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGFwc2UgdGhlIGFjY29yZGlvbiBpdGVtLlxuICAgKiBEbyBub3RoaW5nIGlmIGBkaXNhYmxlZGAgaXMgdHJ1ZS5cbiAgICovXG4gIGNvbGxhcHNlKCkge1xuICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIGFjY29yZGlvbiBpdGVtLlxuICAgKiBEbyBub3RoaW5nIGlmIGBkaXNhYmxlZGAgaXMgdHJ1ZS5cbiAgICovXG4gIGV4cGFuZCgpIHtcbiAgICB0aGlzLmV4cGFuZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXhwYW5kQXRBVGltZShhY3RpdmVBY2NvcmRpb25JZDogc3RyaW5nIHwgbnVsbCkge1xuICAgIGlmICghYWN0aXZlQWNjb3JkaW9uSWQpIHJldHVybjtcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyhTZWxlY3Rpb25EaXNwYXRjaGVyKS5pbmNsdWRlcyhhY3RpdmVBY2NvcmRpb25JZCBhcyBTZWxlY3Rpb25EaXNwYXRjaGVyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hY2NvcmRpb24ubXVsdGkgJiYgYWN0aXZlQWNjb3JkaW9uSWQgIT09IHRoaXMuYWNjb3JkaW9uSWQpIHtcbiAgICAgIHRoaXMuX2V4cGFuZGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWUgZGV0YWlsIG9uIHtAbGluayBEb2t1QWNjb3JkaW9uLmV4cGFuZEFsbH1cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlRXhwYW5kQWxsKHNlbGVjdGlvbkFjY29yZGlvbjogU2VsZWN0aW9uRGlzcGF0Y2hlcikge1xuICAgIGlmIChzZWxlY3Rpb25BY2NvcmRpb24gIT09IFNlbGVjdGlvbkRpc3BhdGNoZXIuRXhwYW5kQWxsKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmFjY29yZGlvbi5tdWx0aSkge1xuICAgICAgdGhpcy5fZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBXaGVuIG11bHRpIGV4cGFuZGVkIGlzIG5vdCBhbGxvd2VkLCBleHBhbmQgdGhlIGZpcnN0IGl0ZW0gaWYgbm8gb25lIGl0ZW0gZXhwYW5kZWQuXG4gICAgaWYgKCF0aGlzLmFjY29yZGlvbi5tdWx0aSkge1xuICAgICAgY29uc3QgYWNjb3JkaW9uSXRlbUVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgLy8gQ2hlY2sgaWYgaGFzIGV4cGFuZGVkIGl0ZW0gYnkgc2libGluZ3MgY2xhc3MgbmFtZS5cbiAgICAgIGNvbnN0IGhhc0V4cGFuZGVkSXRlbSA9ICEhYWNjb3JkaW9uSXRlbUVsZW1lbnQucGFyZW50RWxlbWVudD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJ2Rva3UtYWNjb3JkaW9uLWl0ZW0uZC1hY2NvcmRpb24tZXhwYW5kZWQnXG4gICAgICApO1xuICAgICAgaWYgKGhhc0V4cGFuZGVkSXRlbSkgcmV0dXJuO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGFjY29yZGlvbiBpdGVtIGlzIHRoZSBmaXJzdCBpdGVtIGJ5IGNoZWNraW5nIHByZXZpb3VzIGVsZW1lbnQuXG4gICAgICBjb25zdCBpc0ZpcnN0Q2hpbGQgPVxuICAgICAgICBhY2NvcmRpb25JdGVtRWxlbWVudC5wcmV2aW91c1NpYmxpbmc/Lm5vZGVOYW1lPy50b0xvd2VyQ2FzZSgpICE9PSAnZG9rdS1hY2NvcmRpb24taXRlbSc7XG5cbiAgICAgIGlmIChpc0ZpcnN0Q2hpbGQpIHtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWUgZGV0YWlsIG9uIHtAbGluayBEb2t1QWNjb3JkaW9uLmNvbGxhcHNlQWxsfVxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVDb2xsYXBzZUFsbChzZWxlY3Rpb25BY2NvcmRpb246IFNlbGVjdGlvbkRpc3BhdGNoZXIpIHtcbiAgICBpZiAoc2VsZWN0aW9uQWNjb3JkaW9uICE9PSBTZWxlY3Rpb25EaXNwYXRjaGVyLkNvbGxhcHNlQWxsKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIGlmICh0aGlzLl9leHBhbmRlZCkge1xuICAgICAgdGhpcy5fZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG59XG4iXX0=