UNPKG

@favian/headwind-ui

Version:

Headless UI for Angular - Styleless Angular components to integrate with Tailwind CSS

83 lines 14 kB
import { Component, ContentChild } from '@angular/core'; import { HeadwindPopoverService } from './services/headwind-popover.service'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { HeadwindPopoverOverlayComponent } from './headwind-popover-overlay/headwind-popover-overlay.component'; import { HeadwindPopoverOverlayDirective } from './headwind-popover-overlay/headwind-popover-overlay.directive'; import { HeadwindErrors } from '../../constants/headwind-errors'; import { HeadwindPopoverButtonDirective } from './headwind-popover-button/headwind-popover-button.directive'; import * as i0 from "@angular/core"; import * as i1 from "../../services/headwind-overlay.service"; import * as i2 from "./services/headwind-popover.service"; import * as i3 from "../../services/headwind-animator"; export class HeadwindPopoverComponent { constructor(_headwindOverlayService, _headwindPopoverService, _headwindAnimator) { this._headwindOverlayService = _headwindOverlayService; this._headwindPopoverService = _headwindPopoverService; this._headwindAnimator = _headwindAnimator; this._popoverPositionListener = () => { if (this.popoverButton) { this.popoverOverlay?.updatePosition(this.popoverButton.nativeElement); } }; this._headwindPopoverService.openPopover.pipe(takeUntilDestroyed()).subscribe(() => { this.open(); }); this._headwindPopoverService.closePopover.pipe(takeUntilDestroyed()).subscribe(() => { this.close(); }); } ngOnDestroy() { clearTimeout(this._openTimeoutId); clearTimeout(this._closeTimeoutId); } open() { if (!this.popoverOverlayTemplate) { console.error(HeadwindErrors.headwindError0003); return; } if (this._popoverEmbeddedViewRef) { return; } this._popoverEmbeddedViewRef = this._headwindOverlayService.open(this.popoverOverlayTemplate.templateRef, () => this._afterClosed()); this._headwindPopoverService.popoverOpened = true; this._headwindAnimator.addListener(this._popoverPositionListener); clearTimeout(this._openTimeoutId); this._openTimeoutId = setTimeout(() => { if (!this.popoverOverlay) { console.error(HeadwindErrors.headwindError0004); return; } }); } close() { this._popoverEmbeddedViewRef?.destroy(); this._afterClosed(); } _afterClosed() { clearTimeout(this._closeTimeoutId); // to prevent instant re-opening after closing, set a delay this._closeTimeoutId = setTimeout(() => { this._headwindAnimator.removeListener(this._popoverPositionListener); this._headwindPopoverService.popoverOpened = false; delete this._popoverEmbeddedViewRef; }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeadwindPopoverComponent, deps: [{ token: i1.HeadwindOverlayService }, { token: i2.HeadwindPopoverService }, { token: i3.HeadwindAnimator }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: HeadwindPopoverComponent, isStandalone: true, selector: "headwind-popover", host: { classAttribute: "headwind-popover" }, providers: [HeadwindPopoverService], queries: [{ propertyName: "popoverOverlayTemplate", first: true, predicate: HeadwindPopoverOverlayDirective, descendants: true }, { propertyName: "popoverOverlay", first: true, predicate: HeadwindPopoverOverlayComponent, descendants: true }, { propertyName: "popoverButton", first: true, predicate: HeadwindPopoverButtonDirective, descendants: true }], ngImport: i0, template: "<ng-content></ng-content>\r\n", styles: [""] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeadwindPopoverComponent, decorators: [{ type: Component, args: [{ selector: 'headwind-popover', standalone: true, imports: [], host: { class: 'headwind-popover', }, providers: [HeadwindPopoverService], template: "<ng-content></ng-content>\r\n" }] }], ctorParameters: () => [{ type: i1.HeadwindOverlayService }, { type: i2.HeadwindPopoverService }, { type: i3.HeadwindAnimator }], propDecorators: { popoverOverlayTemplate: [{ type: ContentChild, args: [HeadwindPopoverOverlayDirective, { descendants: true }] }], popoverOverlay: [{ type: ContentChild, args: [HeadwindPopoverOverlayComponent, { descendants: true }] }], popoverButton: [{ type: ContentChild, args: [HeadwindPopoverButtonDirective, { descendants: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZHdpbmQtcG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9oZWFkd2luZC11aS9zcmMvY29tcG9uZW50cy9oZWFkd2luZC1wb3BvdmVyL2hlYWR3aW5kLXBvcG92ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaGVhZHdpbmQtdWkvc3JjL2NvbXBvbmVudHMvaGVhZHdpbmQtcG9wb3Zlci9oZWFkd2luZC1wb3BvdmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUE4QixNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUVoSCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUNoSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkRBQTZELENBQUM7Ozs7O0FBYTdHLE1BQU0sT0FBTyx3QkFBd0I7SUFjbkMsWUFDbUIsdUJBQStDLEVBQy9DLHVCQUErQyxFQUMvQyxpQkFBbUM7UUFGbkMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF3QjtRQUMvQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXdCO1FBQy9DLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUE4RDlDLDZCQUF3QixHQUFHLEdBQUcsRUFBRTtZQUN0QyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsSUFBSSxD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QUFjO3NCQURiLFlBQVk7dUJBQUMsK0JBQStCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUlwRSxhQUFhO3NCQURaLFlBQVk7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEVtYmVkZGVkVmlld1JlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEhlYWR3aW5kUG9wb3ZlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2hlYWR3aW5kLXBvcG92ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEhlYWR3aW5kT3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9oZWFkd2luZC1vdmVybGF5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IEhlYWR3aW5kUG9wb3Zlck92ZXJsYXlDb21wb25lbnQgfSBmcm9tICcuL2hlYWR3aW5kLXBvcG92ZXItb3ZlcmxheS9oZWFkd2luZC1wb3BvdmVyLW92ZXJsYXkuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSGVhZHdpbmRBbmltYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2hlYWR3aW5kLWFuaW1hdG9yJztcclxuaW1wb3J0IHsgSGVhZHdpbmRQb3BvdmVyT3ZlcmxheURpcmVjdGl2ZSB9IGZyb20gJy4vaGVhZHdpbmQtcG9wb3Zlci1vdmVybGF5L2hlYWR3aW5kLXBvcG92ZXItb3ZlcmxheS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBIZWFkd2luZEVycm9ycyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9oZWFkd2luZC1lcnJvcnMnO1xyXG5pbXBvcnQgeyBIZWFkd2luZFBvcG92ZXJCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuL2hlYWR3aW5kLXBvcG92ZXItYnV0dG9uL2hlYWR3aW5kLXBvcG92ZXItYnV0dG9uLmRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2hlYWR3aW5kLXBvcG92ZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW10sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hlYWR3aW5kLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9oZWFkd2luZC1wb3BvdmVyLmNvbXBvbmVudC5zY3NzJyxcclxuICBob3N0OiB7XHJcbiAgICBjbGFzczogJ2hlYWR3aW5kLXBvcG92ZXInLFxyXG4gIH0sXHJcbiAgcHJvdmlkZXJzOiBbSGVhZHdpbmRQb3BvdmVyU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIZWFkd2luZFBvcG92ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIEBDb250ZW50Q2hpbGQoSGVhZHdpbmRQb3BvdmVyT3ZlcmxheURpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxyXG4gIHBvcG92ZXJPdmVybGF5VGVtcGxhdGU/OiBIZWFkd2luZFBvcG92ZXJPdmVybGF5RGlyZWN0aXZlO1xyXG5cclxuICBAQ29udGVudENoaWxkKEhlYWR3aW5kUG9wb3Zlck92ZXJsYXlDb21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcclxuICBwb3BvdmVyT3ZlcmxheT86IEhlYWR3aW5kUG9wb3Zlck92ZXJsYXlDb21wb25lbnQ7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoSGVhZHdpbmRQb3BvdmVyQnV0dG9uRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXHJcbiAgcG9wb3ZlckJ1dHRvbj86IEhlYWR3aW5kUG9wb3ZlckJ1dHRvbkRpcmVjdGl2ZTtcclxuXHJcbiAgcHJpdmF0ZSBfcG9wb3ZlckVtYmVkZGVkVmlld1JlZj86IEVtYmVkZGVkVmlld1JlZjxhbnk+O1xyXG4gIHByaXZhdGUgX29wZW5UaW1lb3V0SWQ/OiBhbnk7XHJcbiAgcHJpdmF0ZSBfY2xvc2VUaW1lb3V0SWQ/OiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaGVhZHdpbmRPdmVybGF5U2VydmljZTogSGVhZHdpbmRPdmVybGF5U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2hlYWR3aW5kUG9wb3ZlclNlcnZpY2U6IEhlYWR3aW5kUG9wb3ZlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9oZWFkd2luZEFuaW1hdG9yOiBIZWFkd2luZEFuaW1hdG9yLFxyXG4gICkge1xyXG4gICAgdGhpcy5faGVhZHdpbmRQb3BvdmVyU2VydmljZS5vcGVuUG9wb3Zlci5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLm9wZW4oKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2hlYWR3aW5kUG9wb3ZlclNlcnZpY2UuY2xvc2VQb3BvdmVyLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fb3BlblRpbWVvdXRJZCk7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VUaW1lb3V0SWQpO1xyXG4gIH1cclxuXHJcbiAgb3BlbigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5wb3BvdmVyT3ZlcmxheVRlbXBsYXRlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoSGVhZHdpbmRFcnJvcnMuaGVhZHdpbmRFcnJvcjAwMDMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3BvcG92ZXJFbWJlZGRlZFZpZXdSZWYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BvcG92ZXJFbWJlZGRlZFZpZXdSZWYgPSB0aGlzLl9oZWFkd2luZE92ZXJsYXlTZXJ2aWNlLm9wZW4odGhpcy5wb3BvdmVyT3ZlcmxheVRlbXBsYXRlLnRlbXBsYXRlUmVmLCAoKSA9PlxyXG4gICAgICB0aGlzLl9hZnRlckNsb3NlZCgpLFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLl9oZWFkd2luZFBvcG92ZXJTZXJ2aWNlLnBvcG92ZXJPcGVuZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuX2hlYWR3aW5kQW5pbWF0b3IuYWRkTGlzdGVuZXIodGhpcy5fcG9wb3ZlclBvc2l0aW9uTGlzdGVuZXIpO1xyXG5cclxuICAgIGNsZWFyVGltZW91dCh0aGlzLl9vcGVuVGltZW91dElkKTtcclxuXHJcbiAgICB0aGlzLl9vcGVuVGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5wb3BvdmVyT3ZlcmxheSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoSGVhZHdpbmRFcnJvcnMuaGVhZHdpbmRFcnJvcjAwMDQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3BvcG92ZXJFbWJlZGRlZFZpZXdSZWY/LmRlc3Ryb3koKTtcclxuXHJcbiAgICB0aGlzLl9hZnRlckNsb3NlZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWZ0ZXJDbG9zZWQoKTogdm9pZCB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VUaW1lb3V0SWQpO1xyXG5cclxuICAgIC8vIHRvIHByZXZlbnQgaW5zdGFudCByZS1vcGVuaW5nIGFmdGVyIGNsb3NpbmcsIHNldCBhIGRlbGF5XHJcbiAgICB0aGlzLl9jbG9zZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9oZWFkd2luZEFuaW1hdG9yLnJlbW92ZUxpc3RlbmVyKHRoaXMuX3BvcG92ZXJQb3NpdGlvbkxpc3RlbmVyKTtcclxuICAgICAgdGhpcy5faGVhZHdpbmRQb3BvdmVyU2VydmljZS5wb3BvdmVyT3BlbmVkID0gZmFsc2U7XHJcblxyXG4gICAgICBkZWxldGUgdGhpcy5fcG9wb3ZlckVtYmVkZGVkVmlld1JlZjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcG9wb3ZlclBvc2l0aW9uTGlzdGVuZXIgPSAoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5wb3BvdmVyQnV0dG9uKSB7XHJcbiAgICAgIHRoaXMucG9wb3Zlck92ZXJsYXk/LnVwZGF0ZVBvc2l0aW9uKHRoaXMucG9wb3ZlckJ1dHRvbi5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuICB9O1xyXG59XHJcbiIsIjxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuIl19