UNPKG

@doku-dev/doku-fragment

Version:

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

101 lines 13.7 kB
import { DOCUMENT } from '@angular/common'; import { ContentChild, Directive, Inject, Input, } from '@angular/core'; import { ReplaySubject, fromEvent, takeUntil } from 'rxjs'; import { getClickType } from '../../utils/get-click-type'; import { DOKU_DROPDOWN, DOKU_DROPDOWN_MENU, DOKU_DROPDOWN_TOGGLE } from './dropdown.token'; import * as i0 from "@angular/core"; export class DokuDropdown { constructor(elementRef, renderer, ngZone, document) { this.elementRef = elementRef; this.renderer = renderer; this.ngZone = ngZone; this.document = document; /** * The position of the dropdown menu while opened based on the toggler/anchor element. * @default 'bottom-start' */ this.placement = 'bottom-start'; this.destroy$ = new ReplaySubject(); } get dropdownToggleElement() { return this.dropdownToggle?.['elementRef']?.nativeElement; } get dropdownMenuElement() { return this.dropdownMenu?.['elementRef']?.nativeElement; } ngAfterViewInit() { this.closeDropdownMenuEventHandler(); } ngOnDestroy() { this.destroy$.next(true); this.destroy$.complete(); } toggleDropdownMenu() { this.dropdownMenu?.toggle(); } showDropdownMenu() { this.dropdownMenu?.show(); } hideDropdownMenu() { this.dropdownMenu?.hide(); } /** * It will create a container for dropdown and append it to the body element. */ applyContainer() { this.resetContainer(); const bodyContainer = (this.bodyContainer = this.renderer.createElement('div')); bodyContainer.id = 'd-dropdown-portal'; this.originalDropdownMenu = this.dropdownMenuElement; this.renderer.appendChild(bodyContainer, this.originalDropdownMenu); this.renderer.appendChild(this.document.body, bodyContainer); } /** * Remove body container when dropdown closed and add back the dropdown menu to its original element position. */ resetContainer() { if (this.originalDropdownMenu) { this.renderer.appendChild(this.elementRef.nativeElement, this.originalDropdownMenu); } if (this.bodyContainer) { this.renderer.removeChild(this.document.body, this.bodyContainer); this.bodyContainer = undefined; } } closeDropdownMenuEventHandler() { this.ngZone.runOutsideAngular(() => { if (!this.dropdownToggleElement || !this.dropdownMenuElement) return; fromEvent(window, 'click', { capture: true }) .pipe(takeUntil(this.destroy$)) .subscribe((event) => { const { clickTrigger, clickOutside } = getClickType(event, [this.dropdownToggleElement], [this.dropdownMenuElement]); if (clickOutside && !clickTrigger) this.dropdownMenu?.hide(); }); }); } } DokuDropdown.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuDropdown, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive }); DokuDropdown.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: DokuDropdown, isStandalone: true, selector: "[doku-dropdown]", inputs: { placement: "placement" }, providers: [{ provide: DOKU_DROPDOWN, useExisting: DokuDropdown }], queries: [{ propertyName: "dropdownToggle", first: true, predicate: DOKU_DROPDOWN_TOGGLE, descendants: true }, { propertyName: "dropdownMenu", first: true, predicate: DOKU_DROPDOWN_MENU, descendants: true }], exportAs: ["dokuDropdown"], ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuDropdown, decorators: [{ type: Directive, args: [{ selector: '[doku-dropdown]', exportAs: 'dokuDropdown', standalone: true, providers: [{ provide: DOKU_DROPDOWN, useExisting: DokuDropdown }], }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: Document, decorators: [{ type: Inject, args: [DOCUMENT] }] }]; }, propDecorators: { placement: [{ type: Input }], dropdownToggle: [{ type: ContentChild, args: [DOKU_DROPDOWN_TOGGLE] }], dropdownMenu: [{ type: ContentChild, args: [DOKU_DROPDOWN_MENU] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9rdS1mcmFnbWVudC9zcmMvbGliL2Ryb3Bkb3duL2Ryb3Bkb3duLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUVMLFlBQVksRUFDWixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssR0FJTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSTFELE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFRM0YsTUFBTSxPQUFPLFlBQVk7SUFldkIsWUFDWSxVQUFzQixFQUN4QixRQUFtQixFQUNuQixNQUFjLEVBQ0ksUUFBa0I7UUFIbEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN4QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDSSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBbEI5Qzs7O1dBR0c7UUFDTSxjQUFTLEdBQTBCLGNBQWMsQ0FBQztRQVFuRCxhQUFRLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQU9wQyxDQUFDO0lBRUosSUFBWSxxQkFBcUI7UUFDL0IsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsYUFBYSxDQUFDO0lBQzVELENBQUM7SUFFRCxJQUFZLG1CQUFtQjtRQUM3QixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxhQUFhLENBQUM7SUFDMUQsQ0FB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aUJBQWlCO29CQUMzQixRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLGNBQWMsRUFBRSxDQUFDO2lCQUNuRTs7MEJBb0JJLE1BQU07MkJBQUMsUUFBUTs0Q0FkVCxTQUFTO3NCQUFqQixLQUFLO2dCQUVzQyxjQUFjO3NCQUF6RCxZQUFZO3VCQUFDLG9CQUFvQjtnQkFDUSxZQUFZO3NCQUFyRCxZQUFZO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgUmVuZGVyZXIyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlcGxheVN1YmplY3QsIGZyb21FdmVudCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBnZXRDbGlja1R5cGUgfSBmcm9tICcuLi8uLi91dGlscy9nZXQtY2xpY2stdHlwZSc7XG5pbXBvcnQgeyBEb2t1RHJvcGRvd25NZW51IH0gZnJvbSAnLi9kcm9wZG93bi1tZW51LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEb2t1RHJvcGRvd25Ub2dnbGUgfSBmcm9tICcuL2Ryb3Bkb3duLXRvZ2dsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRG9rdURyb3Bkb3duUGxhY2VtZW50IH0gZnJvbSAnLi9kcm9wZG93bi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRE9LVV9EUk9QRE9XTiwgRE9LVV9EUk9QRE9XTl9NRU5VLCBET0tVX0RST1BET1dOX1RPR0dMRSB9IGZyb20gJy4vZHJvcGRvd24udG9rZW4nO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZG9rdS1kcm9wZG93bl0nLFxuICBleHBvcnRBczogJ2Rva3VEcm9wZG93bicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogRE9LVV9EUk9QRE9XTiwgdXNlRXhpc3Rpbmc6IERva3VEcm9wZG93biB9XSxcbn0pXG5leHBvcnQgY2xhc3MgRG9rdURyb3Bkb3duIGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgLyoqXG4gICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZHJvcGRvd24gbWVudSB3aGlsZSBvcGVuZWQgYmFzZWQgb24gdGhlIHRvZ2dsZXIvYW5jaG9yIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdib3R0b20tc3RhcnQnXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZW1lbnQ6IERva3VEcm9wZG93blBsYWNlbWVudCA9ICdib3R0b20tc3RhcnQnO1xuXG4gIEBDb250ZW50Q2hpbGQoRE9LVV9EUk9QRE9XTl9UT0dHTEUpIHByaXZhdGUgZHJvcGRvd25Ub2dnbGU/OiBEb2t1RHJvcGRvd25Ub2dnbGU7XG4gIEBDb250ZW50Q2hpbGQoRE9LVV9EUk9QRE9XTl9NRU5VKSBwcml2YXRlIGRyb3Bkb3duTWVudT86IERva3VEcm9wZG93bk1lbnU7XG5cbiAgcHJpdmF0ZSBib2R5Q29udGFpbmVyPzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgb3JpZ2luYWxEcm9wZG93bk1lbnU/OiBIVE1MRWxlbWVudDtcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFJlcGxheVN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudFxuICApIHt9XG5cbiAgcHJpdmF0ZSBnZXQgZHJvcGRvd25Ub2dnbGVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93blRvZ2dsZT8uWydlbGVtZW50UmVmJ10/Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBkcm9wZG93bk1lbnVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93bk1lbnU/LlsnZWxlbWVudFJlZiddPy5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VEcm9wZG93bk1lbnVFdmVudEhhbmRsZXIoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICB0b2dnbGVEcm9wZG93bk1lbnUoKSB7XG4gICAgdGhpcy5kcm9wZG93bk1lbnU/LnRvZ2dsZSgpO1xuICB9XG5cbiAgc2hvd0Ryb3Bkb3duTWVudSgpIHtcbiAgICB0aGlzLmRyb3Bkb3duTWVudT8uc2hvdygpO1xuICB9XG5cbiAgaGlkZURyb3Bkb3duTWVudSgpIHtcbiAgICB0aGlzLmRyb3Bkb3duTWVudT8uaGlkZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHdpbGwgY3JlYXRlIGEgY29udGFpbmVyIGZvciBkcm9wZG93biBhbmQgYXBwZW5kIGl0IHRvIHRoZSBib2R5IGVsZW1lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXBwbHlDb250YWluZXIoKSB7XG4gICAgdGhpcy5yZXNldENvbnRhaW5lcigpO1xuICAgIGNvbnN0IGJvZHlDb250YWluZXI6IEhUTUxFbGVtZW50ID0gKHRoaXMuYm9keUNvbnRhaW5lciA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgIGJvZHlDb250YWluZXIuaWQgPSAnZC1kcm9wZG93bi1wb3J0YWwnO1xuICAgIHRoaXMub3JpZ2luYWxEcm9wZG93bk1lbnUgPSB0aGlzLmRyb3Bkb3duTWVudUVsZW1lbnQ7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChib2R5Q29udGFpbmVyLCB0aGlzLm9yaWdpbmFsRHJvcGRvd25NZW51KTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSwgYm9keUNvbnRhaW5lcik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGJvZHkgY29udGFpbmVyIHdoZW4gZHJvcGRvd24gY2xvc2VkIGFuZCBhZGQgYmFjayB0aGUgZHJvcGRvd24gbWVudSB0byBpdHMgb3JpZ2luYWwgZWxlbWVudCBwb3NpdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCByZXNldENvbnRhaW5lcigpIHtcbiAgICBpZiAodGhpcy5vcmlnaW5hbERyb3Bkb3duTWVudSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5vcmlnaW5hbERyb3Bkb3duTWVudSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmJvZHlDb250YWluZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LCB0aGlzLmJvZHlDb250YWluZXIpO1xuICAgICAgdGhpcy5ib2R5Q29udGFpbmVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VEcm9wZG93bk1lbnVFdmVudEhhbmRsZXIoKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmRyb3Bkb3duVG9nZ2xlRWxlbWVudCB8fCAhdGhpcy5kcm9wZG93bk1lbnVFbGVtZW50KSByZXR1cm47XG4gICAgICBmcm9tRXZlbnQod2luZG93LCAnY2xpY2snLCB7IGNhcHR1cmU6IHRydWUgfSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgY2xpY2tUcmlnZ2VyLCBjbGlja091dHNpZGUgfSA9IGdldENsaWNrVHlwZShcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgW3RoaXMuZHJvcGRvd25Ub2dnbGVFbGVtZW50XSxcbiAgICAgICAgICAgIFt0aGlzLmRyb3Bkb3duTWVudUVsZW1lbnRdXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChjbGlja091dHNpZGUgJiYgIWNsaWNrVHJpZ2dlcikgdGhpcy5kcm9wZG93bk1lbnU/LmhpZGUoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==