UNPKG

@taiga-ui/kit

Version:

Taiga UI Angular main components kit

90 lines 13.7 kB
import { isPlatformBrowser } from '@angular/common'; import { inject, Injectable, PLATFORM_ID } from '@angular/core'; import { WaMutationObserverService } from '@ng-web-apis/mutation-observer'; import { WaResizeObserverService } from '@ng-web-apis/resize-observer'; import { tuiZonefreeScheduler } from '@taiga-ui/cdk/observables'; import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom'; import { tuiArrayShallowEquals, tuiPx } from '@taiga-ui/cdk/utils/miscellaneous'; import { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, map, startWith, Subscription, } from 'rxjs'; import { TuiTilesComponent } from './tiles.component'; import * as i0 from "@angular/core"; class TuiTileService { constructor() { this.isBrowser = isPlatformBrowser(inject(PLATFORM_ID)); this.el = tuiInjectElement(); this.tiles = inject(TuiTilesComponent); this.sub = new Subscription(); this.offset$ = new BehaviorSubject([NaN, NaN]); this.position$ = combineLatest([ this.offset$.pipe(distinctUntilChanged(tuiArrayShallowEquals)), inject(WaResizeObserverService).pipe(startWith(null)), inject(WaMutationObserverService).pipe(startWith(null)), this.tiles.order$.pipe(debounceTime(0, tuiZonefreeScheduler())), ]).pipe(map(([offset]) => offset)); } init(element) { if (this.isBrowser) { this.sub.add(this.position$.subscribe((offset) => { this.setPosition(element, offset); this.setRect(element, offset); })); } else { this.el.style.setProperty('position', 'relative'); } } setOffset(offset) { this.offset$.next(offset); } ngOnDestroy() { this.sub.unsubscribe(); } getRect([left, top]) { const elTop = Number.isNaN(top) ? this.el.offsetTop : top; const elLeft = Number.isNaN(left) ? this.el.offsetLeft : left; const rect = { top: elTop, left: elLeft, width: this.el.clientWidth, height: this.el.clientHeight, right: NaN, bottom: NaN, y: elTop, x: elLeft, }; return { ...rect, toJSON: () => JSON.stringify(rect), }; } setRect({ style }, offset) { const { top, left, width, height } = this.getRect(offset); style.top = tuiPx(top); style.left = tuiPx(left); style.width = tuiPx(width); style.height = tuiPx(height); } setPosition(element, [left]) { if (!Number.isNaN(left)) { element.style.setProperty('position', 'fixed'); element.style.setProperty('transition', 'none'); return; } const { style } = element; const rect = element.getBoundingClientRect(); const host = this.el.getBoundingClientRect(); style.removeProperty('position'); style.removeProperty('transition'); style.removeProperty('top'); style.removeProperty('left'); style.top = tuiPx(rect.top - host.top + this.el.offsetTop); style.left = tuiPx(rect.left - host.left + this.el.offsetLeft); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTileService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTileService }); } } export { TuiTileService }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTileService, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0L2NvbXBvbmVudHMvdGlsZXMvdGlsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFrQixXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFDLHFCQUFxQixFQUFFLEtBQUssRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQy9FLE9BQU8sRUFDSCxlQUFlLEVBQ2YsYUFBYSxFQUNiLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUVILFNBQVMsRUFDVCxZQUFZLEdBQ2YsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFcEQsTUFDYSxjQUFjO0lBRDNCO1FBRXFCLGNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNuRCxPQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixVQUFLLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbEMsUUFBRyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDekIsWUFBTyxHQUFHLElBQUksZUFBZSxDQUE0QixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFD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ZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpc1BsYXRmb3JtQnJvd3Nlcn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7aW5qZWN0LCBJbmplY3RhYmxlLCB0eXBlIE9uRGVzdHJveSwgUExBVEZPUk1fSUR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtXYU11dGF0aW9uT2JzZXJ2ZXJTZXJ2aWNlfSBmcm9tICdAbmctd2ViLWFwaXMvbXV0YXRpb24tb2JzZXJ2ZXInO1xuaW1wb3J0IHtXYVJlc2l6ZU9ic2VydmVyU2VydmljZX0gZnJvbSAnQG5nLXdlYi1hcGlzL3Jlc2l6ZS1vYnNlcnZlcic7XG5pbXBvcnQge3R1aVpvbmVmcmVlU2NoZWR1bGVyfSBmcm9tICdAdGFpZ2EtdWkvY2RrL29ic2VydmFibGVzJztcbmltcG9ydCB7dHVpSW5qZWN0RWxlbWVudH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9kb20nO1xuaW1wb3J0IHt0dWlBcnJheVNoYWxsb3dFcXVhbHMsIHR1aVB4fSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL21pc2NlbGxhbmVvdXMnO1xuaW1wb3J0IHtcbiAgICBCZWhhdmlvclN1YmplY3QsXG4gICAgY29tYmluZUxhdGVzdCxcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgbWFwLFxuICAgIHR5cGUgT2JzZXJ2YWJsZSxcbiAgICBzdGFydFdpdGgsXG4gICAgU3Vic2NyaXB0aW9uLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtUdWlUaWxlc0NvbXBvbmVudH0gZnJvbSAnLi90aWxlcy5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVHVpVGlsZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNCcm93c2VyID0gaXNQbGF0Zm9ybUJyb3dzZXIoaW5qZWN0KFBMQVRGT1JNX0lEKSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbCA9IHR1aUluamVjdEVsZW1lbnQoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRpbGVzID0gaW5qZWN0KFR1aVRpbGVzQ29tcG9uZW50KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN1YiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9mZnNldCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl0+KFtOYU4sIE5hTl0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9zaXRpb24kOiBPYnNlcnZhYmxlPHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl0+ID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMub2Zmc2V0JC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKHR1aUFycmF5U2hhbGxvd0VxdWFscykpLFxuICAgICAgICBpbmplY3QoV2FSZXNpemVPYnNlcnZlclNlcnZpY2UpLnBpcGUoc3RhcnRXaXRoKG51bGwpKSxcbiAgICAgICAgaW5qZWN0KFdhTXV0YXRpb25PYnNlcnZlclNlcnZpY2UpLnBpcGUoc3RhcnRXaXRoKG51bGwpKSxcbiAgICAgICAgdGhpcy50aWxlcy5vcmRlciQucGlwZShkZWJvdW5jZVRpbWUoMCwgdHVpWm9uZWZyZWVTY2hlZHVsZXIoKSkpLFxuICAgIF0pLnBpcGUobWFwKChbb2Zmc2V0XSkgPT4gb2Zmc2V0KSk7XG5cbiAgICBwdWJsaWMgaW5pdChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3ViLmFkZChcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uJC5zdWJzY3JpYmUoKG9mZnNldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uKGVsZW1lbnQsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVjdChlbGVtZW50LCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUuc2V0UHJvcGVydHkoJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0T2Zmc2V0KG9mZnNldDogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9mZnNldCQubmV4dChvZmZzZXQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlY3QoW2xlZnQsIHRvcF06IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl0pOiBET01SZWN0IHtcbiAgICAgICAgY29uc3QgZWxUb3AgPSBOdW1iZXIuaXNOYU4odG9wKSA/IHRoaXMuZWwub2Zmc2V0VG9wIDogdG9wO1xuICAgICAgICBjb25zdCBlbExlZnQgPSBOdW1iZXIuaXNOYU4obGVmdCkgPyB0aGlzLmVsLm9mZnNldExlZnQgOiBsZWZ0O1xuXG4gICAgICAgIGNvbnN0IHJlY3QgPSB7XG4gICAgICAgICAgICB0b3A6IGVsVG9wLFxuICAgICAgICAgICAgbGVmdDogZWxMZWZ0LFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuZWwuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuZWwuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgICAgcmlnaHQ6IE5hTixcbiAgICAgICAgICAgIGJvdHRvbTogTmFOLFxuICAgICAgICAgICAgeTogZWxUb3AsXG4gICAgICAgICAgICB4OiBlbExlZnQsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnJlY3QsXG4gICAgICAgICAgICB0b0pTT046ICgpID0+IEpTT04uc3RyaW5naWZ5KHJlY3QpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UmVjdCh7c3R5bGV9OiBIVE1MRWxlbWVudCwgb2Zmc2V0OiByZWFkb25seSBbbnVtYmVyLCBudW1iZXJdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHt0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHR9ID0gdGhpcy5nZXRSZWN0KG9mZnNldCk7XG5cbiAgICAgICAgc3R5bGUudG9wID0gdHVpUHgodG9wKTtcbiAgICAgICAgc3R5bGUubGVmdCA9IHR1aVB4KGxlZnQpO1xuICAgICAgICBzdHlsZS53aWR0aCA9IHR1aVB4KHdpZHRoKTtcbiAgICAgICAgc3R5bGUuaGVpZ2h0ID0gdHVpUHgoaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFBvc2l0aW9uKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBbbGVmdF06IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl0pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obGVmdCkpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ3Bvc2l0aW9uJywgJ2ZpeGVkJyk7XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCd0cmFuc2l0aW9uJywgJ25vbmUnKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge3N0eWxlfSA9IGVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBob3N0ID0gdGhpcy5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0eSgncG9zaXRpb24nKTtcbiAgICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkoJ3RyYW5zaXRpb24nKTtcbiAgICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkoJ3RvcCcpO1xuICAgICAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0eSgnbGVmdCcpO1xuXG4gICAgICAgIHN0eWxlLnRvcCA9IHR1aVB4KHJlY3QudG9wIC0gaG9zdC50b3AgKyB0aGlzLmVsLm9mZnNldFRvcCk7XG4gICAgICAgIHN0eWxlLmxlZnQgPSB0dWlQeChyZWN0LmxlZnQgLSBob3N0LmxlZnQgKyB0aGlzLmVsLm9mZnNldExlZnQpO1xuICAgIH1cbn1cbiJdfQ==