screen-size.service.mjs 5.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { DestroyRef, Injectable, inject } from '@angular/core';
  2. import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
  3. import { BehaviorSubject, fromEvent } from 'rxjs';
  4. import { debounceTime, map, startWith } from 'rxjs/operators';
  5. import * as i0 from "@angular/core";
  6. export class ScreenSizeService {
  7. constructor() {
  8. this.destroyRef = inject(DestroyRef);
  9. this.screenSizeSubject = new BehaviorSubject(this.getScreenSize());
  10. this.screenSize$ = this.screenSizeSubject.asObservable();
  11. fromEvent(window, 'resize')
  12. .pipe(debounceTime(100), map(() => this.getScreenSize()), startWith(this.getScreenSize()), takeUntilDestroyed(this.destroyRef))
  13. .subscribe(this.screenSizeSubject);
  14. }
  15. getScreenSize() {
  16. const width = window.innerWidth;
  17. if (width < 640)
  18. return 'xs';
  19. if (width >= 640 && width < 768)
  20. return 'sm';
  21. if (width >= 768 && width < 1024)
  22. return 'md';
  23. if (width >= 1024 && width < 1280)
  24. return 'lg';
  25. if (width >= 1280 && width < 1536)
  26. return 'xl';
  27. return '2xl';
  28. }
  29. static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ScreenSizeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
  30. static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ScreenSizeService, providedIn: 'root' }); }
  31. }
  32. i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ScreenSizeService, decorators: [{
  33. type: Injectable,
  34. args: [{
  35. providedIn: 'root',
  36. }]
  37. }], ctorParameters: () => [] });
  38. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyZWVuLXNpemUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NpcmNsZXRvbmUvc3JjL2xpYi9zZXJ2aWNlcy9zY3JlZW4tc2l6ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLOUQsTUFBTSxPQUFPLGlCQUFpQjtJQUs1QjtRQUpRLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDOUUsZ0JBQVcsR0FBdUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBR3RFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO2FBQ3hCLElBQUksQ0FDSCxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsRUFDL0IsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUMvQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQ3BDO2FBQ0EsU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxhQUFhO1FBQ25CLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDaEMsSUFBSSxLQUFLLEdBQUcsR0FBRztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzdCLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLEdBQUcsR0FBRztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzdDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLEdBQUcsSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzlDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQy9DLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQy9DLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs4R0F4QlUsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7MkZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnQsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY3JlZW5TaXplU2VydmljZSB7XG4gIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcHJpdmF0ZSBzY3JlZW5TaXplU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih0aGlzLmdldFNjcmVlblNpemUoKSk7XG4gIHNjcmVlblNpemUkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnNjcmVlblNpemVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5nZXRTY3JlZW5TaXplKCkpLFxuICAgICAgICBzdGFydFdpdGgodGhpcy5nZXRTY3JlZW5TaXplKCkpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh0aGlzLnNjcmVlblNpemVTdWJqZWN0KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2NyZWVuU2l6ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgaWYgKHdpZHRoIDwgNjQwKSByZXR1cm4gJ3hzJztcbiAgICBpZiAod2lkdGggPj0gNjQwICYmIHdpZHRoIDwgNzY4KSByZXR1cm4gJ3NtJztcbiAgICBpZiAod2lkdGggPj0gNzY4ICYmIHdpZHRoIDwgMTAyNCkgcmV0dXJuICdtZCc7XG4gICAgaWYgKHdpZHRoID49IDEwMjQgJiYgd2lkdGggPCAxMjgwKSByZXR1cm4gJ2xnJztcbiAgICBpZiAod2lkdGggPj0gMTI4MCAmJiB3aWR0aCA8IDE1MzYpIHJldHVybiAneGwnO1xuICAgIHJldHVybiAnMnhsJztcbiAgfVxufVxuIl19