@favian/headwind-ui
Version:
Headless UI for Angular - Styleless Angular components to integrate with Tailwind CSS
44 lines • 5.33 kB
JavaScript
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
export class HeadwindAnimator {
constructor() {
this._animating = false;
this._registeredListeners = [];
}
get hasListeners() {
return this._registeredListeners.length > 0;
}
addListener(listener) {
this.removeListener(listener); // remove duplicated one
this._registeredListeners.push(listener);
if (this.hasListeners && !this._animating) {
this._animating = true;
this._runAnimation();
}
}
removeListener(listener) {
this._registeredListeners = this._registeredListeners.filter((item) => item !== listener);
if (!this.hasListeners) {
this._stopAnimation();
}
}
_runAnimation() {
this._registeredListeners.forEach((listener) => listener());
if (this._animating) {
this._frame = requestAnimationFrame(() => this._runAnimation());
}
}
_stopAnimation() {
cancelAnimationFrame(this._frame);
this._animating = false;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeadwindAnimator, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeadwindAnimator, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeadwindAnimator, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZHdpbmQtYW5pbWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9oZWFkd2luZC11aS9zcmMvc2VydmljZXMvaGVhZHdpbmQtYW5pbWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFPM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUg3QjtRQUtVLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIseUJBQW9CLEdBQStCLEVBQUUsQ0FBQztLQW9DL0Q7SUFsQ0MsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWtDO1FBQzVDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7UUFDdkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV6QyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQWtDO1FBQy9DLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7UUFFMUYsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFNUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLGNBQWM7UUFDcEIsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7K0dBdENVLGdCQUFnQjttSEFBaEIsZ0JBQWdCLGNBRmYsTUFBTTs7NEZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCB0eXBlIEhlYWR3aW5kQW5pbWF0b3JMaXN0ZW5lciA9ICgpID0+IHZvaWQ7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSGVhZHdpbmRBbmltYXRvciB7XHJcbiAgcHJpdmF0ZSBfZnJhbWU6IGFueTtcclxuICBwcml2YXRlIF9hbmltYXRpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIF9yZWdpc3RlcmVkTGlzdGVuZXJzOiBIZWFkd2luZEFuaW1hdG9yTGlzdGVuZXJbXSA9IFtdO1xyXG5cclxuICBnZXQgaGFzTGlzdGVuZXJzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRMaXN0ZW5lcnMubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIGFkZExpc3RlbmVyKGxpc3RlbmVyOiBIZWFkd2luZEFuaW1hdG9yTGlzdGVuZXIpOiB2b2lkIHtcclxuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpOyAvLyByZW1vdmUgZHVwbGljYXRlZCBvbmVcclxuICAgIHRoaXMuX3JlZ2lzdGVyZWRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XHJcblxyXG4gICAgaWYgKHRoaXMuaGFzTGlzdGVuZXJzICYmICF0aGlzLl9hbmltYXRpbmcpIHtcclxuICAgICAgdGhpcy5fYW5pbWF0aW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5fcnVuQW5pbWF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcjogSGVhZHdpbmRBbmltYXRvckxpc3RlbmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZWdpc3RlcmVkTGlzdGVuZXJzID0gdGhpcy5fcmVnaXN0ZXJlZExpc3RlbmVycy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IGxpc3RlbmVyKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKSB7XHJcbiAgICAgIHRoaXMuX3N0b3BBbmltYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3J1bkFuaW1hdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuX3JlZ2lzdGVyZWRMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyKCkpO1xyXG5cclxuICAgIGlmICh0aGlzLl9hbmltYXRpbmcpIHtcclxuICAgICAgdGhpcy5fZnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5fcnVuQW5pbWF0aW9uKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc3RvcEFuaW1hdGlvbigpOiB2b2lkIHtcclxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ZyYW1lKTtcclxuICAgIHRoaXMuX2FuaW1hdGluZyA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXX0=