@bimeister/pupakit.kit
Version:
PupaKit is an open source collection of Angular components based on an atomic approach to building interfaces, which guarantees better performance and greater development flexibility.
53 lines • 8.63 kB
JavaScript
import { animate, state, style, transition, trigger } from '@angular/animations';
import { DOCUMENT } from '@angular/common';
import { Directive, Inject } from '@angular/core';
import { VOID } from '@bimeister/utilities';
import { asapScheduler, BehaviorSubject, fromEvent, merge, of, scheduled } from 'rxjs';
import { take } from 'rxjs/operators';
import { DropdownRef } from '../dropdown-ref.class';
import * as i0 from "@angular/core";
import * as i1 from "../dropdown-ref.class";
export class DropdownComponentBase {
constructor(dropdownRef, document) {
this.dropdownRef = dropdownRef;
this.document = document;
this.data = this.dropdownRef.config.data;
this.animationStateSubject$ = new BehaviorSubject(false);
this.animationState$ = this.animationStateSubject$.asObservable();
this.listenOutsideEventsForClose();
}
ngAfterViewInit() {
scheduled(of(VOID), asapScheduler)
.pipe(take(1))
.subscribe(() => this.setAnimationState(true));
this.dropdownRef.closed$.pipe(take(1)).subscribe(() => this.setAnimationState(false));
}
setAnimationState(animationState) {
this.animationStateSubject$.next(animationState);
}
listenOutsideEventsForClose() {
const touchMove$ = fromEvent(this.document, 'touchmove');
const wheel$ = fromEvent(this.document, 'wheel');
const resize$ = fromEvent(window, 'resize');
merge(touchMove$, wheel$, resize$)
.pipe(take(1))
.subscribe(() => this.dropdownRef.close());
}
}
DropdownComponentBase.animations = [
trigger('show', [
state('false', style({ transform: 'translateY(10px)', opacity: 0 })),
state('true', style({ transform: 'translateY(0)', opacity: 1 })),
transition('false => true', [animate(`150ms ease-in`)]),
transition('true => false', [animate(`150ms ease-out`)]),
]),
];
DropdownComponentBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DropdownComponentBase, deps: [{ token: i1.DropdownRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });
DropdownComponentBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: DropdownComponentBase, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DropdownComponentBase, decorators: [{
type: Directive
}], ctorParameters: function () { return [{ type: i1.DropdownRef }, { type: Document, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tY29tcG9uZW50LWJhc2UuYWJzdHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGVjbGFyYXRpb25zL2NsYXNzZXMvYWJzdHJhY3QvZHJvcGRvd24tY29tcG9uZW50LWJhc2UuYWJzdHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBNEIsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0csT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBaUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQUdwRCxNQUFNLE9BQWdCLHFCQUFxQjtJQWV6QyxZQUNxQixXQUErQixFQUNmLFFBQWtCO1FBRGxDLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUNmLGFBQVEsR0FBUixRQUFRLENBQVU7UUFoQnZDLFNBQUksR0FBVSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFMUMsMkJBQXNCLEdBQTZCLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3hGLG9CQUFlLEdBQXdCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQWVoRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU0sZUFBZTtRQUNwQixTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLGFBQWEsQ0FBQzthQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWpELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVPLGlCQUFpQixDQUFDLGNBQXVCO1FBQy9DLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLDJCQUEyQjtRQUNqQyxNQUFNLFVBQVUsR0FBMkIsU0FBUyxDQUFhLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDN0YsTUFBTSxNQUFNLEdBQTJCLFNBQVMsQ0FBYSxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sT0FBTyxHQUEyQixTQUFTLENBQWEsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRWhGLEtBQUssQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQzthQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDOztBQXBDc0IsZ0NBQVUsR0FBK0I7SUFDOUQsT0FBTyxDQUFDLE1BQU0sRUFBRTtRQUNkLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoRSxVQUFVLENBQUMsZUFBZSxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDdkQsVUFBVSxDQUFDLGVBQWUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7S0FDekQsQ0FBQztDQUNGLENBQUE7bUhBYmtCLHFCQUFxQiw2Q0FpQi9CLFFBQVE7dUdBakJFLHFCQUFxQjs0RkFBckIscUJBQXFCO2tCQUQxQyxTQUFTOzswQkFrQkwsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgQW5pbWF0aW9uVHJpZ2dlck1ldGFkYXRhLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWT0lEIH0gZnJvbSAnQGJpbWVpc3Rlci91dGlsaXRpZXMnO1xuaW1wb3J0IHsgYXNhcFNjaGVkdWxlciwgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnQsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgc2NoZWR1bGVkIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRHJvcGRvd25SZWYgfSBmcm9tICcuLi9kcm9wZG93bi1yZWYuY2xhc3MnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEcm9wZG93bkNvbXBvbmVudEJhc2U8VERhdGE+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHB1YmxpYyByZWFkb25seSBkYXRhOiBURGF0YSA9IHRoaXMuZHJvcGRvd25SZWYuY29uZmlnLmRhdGE7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhbmltYXRpb25TdGF0ZVN1YmplY3QkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IGFuaW1hdGlvblN0YXRlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuYW5pbWF0aW9uU3RhdGVTdWJqZWN0JC5hc09ic2VydmFibGUoKTtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGFuaW1hdGlvbnM6IEFuaW1hdGlvblRyaWdnZXJNZXRhZGF0YVtdID0gW1xuICAgIHRyaWdnZXIoJ3Nob3cnLCBbXG4gICAgICBzdGF0ZSgnZmFsc2UnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMTBweCknLCBvcGFjaXR5OiAwIH0pKSxcbiAgICAgIHN0YXRlKCd0cnVlJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJywgb3BhY2l0eTogMSB9KSksXG4gICAgICB0cmFuc2l0aW9uKCdmYWxzZSA9PiB0cnVlJywgW2FuaW1hdGUoYDE1MG1zIGVhc2UtaW5gKV0pLFxuICAgICAgdHJhbnNpdGlvbigndHJ1ZSA9PiBmYWxzZScsIFthbmltYXRlKGAxNTBtcyBlYXNlLW91dGApXSksXG4gICAgXSksXG4gIF07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRyb3Bkb3duUmVmOiBEcm9wZG93blJlZjxURGF0YT4sXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudDogRG9jdW1lbnRcbiAgKSB7XG4gICAgdGhpcy5saXN0ZW5PdXRzaWRlRXZlbnRzRm9yQ2xvc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2NoZWR1bGVkKG9mKFZPSUQpLCBhc2FwU2NoZWR1bGVyKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZXRBbmltYXRpb25TdGF0ZSh0cnVlKSk7XG5cbiAgICB0aGlzLmRyb3Bkb3duUmVmLmNsb3NlZCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZXRBbmltYXRpb25TdGF0ZShmYWxzZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBbmltYXRpb25TdGF0ZShhbmltYXRpb25TdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuYW5pbWF0aW9uU3RhdGVTdWJqZWN0JC5uZXh0KGFuaW1hdGlvblN0YXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuT3V0c2lkZUV2ZW50c0ZvckNsb3NlKCk6IHZvaWQge1xuICAgIGNvbnN0IHRvdWNoTW92ZSQ6IE9ic2VydmFibGU8TW91c2VFdmVudD4gPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5kb2N1bWVudCwgJ3RvdWNobW92ZScpO1xuICAgIGNvbnN0IHdoZWVsJDogT2JzZXJ2YWJsZTxNb3VzZUV2ZW50PiA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmRvY3VtZW50LCAnd2hlZWwnKTtcbiAgICBjb25zdCByZXNpemUkOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+ID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHdpbmRvdywgJ3Jlc2l6ZScpO1xuXG4gICAgbWVyZ2UodG91Y2hNb3ZlJCwgd2hlZWwkLCByZXNpemUkKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kcm9wZG93blJlZi5jbG9zZSgpKTtcbiAgfVxufVxuIl19