@doku-dev/doku-fragment
Version:
A new Angular UI library that moving away from Bootstrap and built from scratch.
155 lines • 16.7 kB
JavaScript
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=