@taiga-ui/kit
Version:
Taiga UI Angular main components kit
86 lines • 13.1 kB
JavaScript
import { isPlatformBrowser } from '@angular/common';
import { inject, Injectable, PLATFORM_ID } from '@angular/core';
import { MutationObserverService } from '@ng-web-apis/mutation-observer';
import { ResizeObserverService } 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(ResizeObserverService).pipe(startWith(null)),
inject(MutationObserverService).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');
return;
}
const { style } = element;
const rect = element.getBoundingClientRect();
const host = this.el.getBoundingClientRect();
style.removeProperty('position');
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0L2NvbXBvbmVudHMvdGlsZXMvdGlsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRWxELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMscUJBQXFCLEVBQUUsS0FBSyxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFFL0UsT0FBTyxFQUNILGVBQWUsRUFDZixhQUFhLEVBQ2IsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsU0FBUyxFQUNULFlBQVksR0FDZixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDOztBQUVwRCxNQUNhLGNBQWM7SUFEM0I7UUFFcUIsY0FBUyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ25ELE9BQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLFVBQUssR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsQyxRQUFHLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN6QixZQUFPLEdBQUcsSUFBSSxlQUFlLENBQTRCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7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S0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxXQUFXLENBQUMsT0FBb0IsRUFBRSxDQUFDLElBQUksQ0FBNEI7UUFDdkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRS9DLE9BQU87U0FDVjtRQUVELE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxPQUFPLENBQUM7UUFDeEIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRTdDLEtBQUssQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkUsQ0FBQzsrR0E5RVEsY0FBYzttSEFBZCxjQUFjOztTQUFkLGNBQWM7NEZBQWQsY0FBYztrQkFEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aXNQbGF0Zm9ybUJyb3dzZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgdHlwZSB7T25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7aW5qZWN0LCBJbmplY3RhYmxlLCBQTEFURk9STV9JRH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge011dGF0aW9uT2JzZXJ2ZXJTZXJ2aWNlfSBmcm9tICdAbmctd2ViLWFwaXMvbXV0YXRpb24tb2JzZXJ2ZXInO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlclNlcnZpY2V9IGZyb20gJ0BuZy13ZWItYXBpcy9yZXNpemUtb2JzZXJ2ZXInO1xuaW1wb3J0IHt0dWlab25lZnJlZVNjaGVkdWxlcn0gZnJvbSAnQHRhaWdhLXVpL2Nkay9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge3R1aUluamVjdEVsZW1lbnR9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvZG9tJztcbmltcG9ydCB7dHVpQXJyYXlTaGFsbG93RXF1YWxzLCB0dWlQeH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9taXNjZWxsYW5lb3VzJztcbmltcG9ydCB0eXBlIHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgQmVoYXZpb3JTdWJqZWN0LFxuICAgIGNvbWJpbmVMYXRlc3QsXG4gICAgZGVib3VuY2VUaW1lLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIG1hcCxcbiAgICBzdGFydFdpdGgsXG4gICAgU3Vic2NyaXB0aW9uLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtUdWlUaWxlc0NvbXBvbmVudH0gZnJvbSAnLi90aWxlcy5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVHVpVGlsZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNCcm93c2VyID0gaXNQbGF0Zm9ybUJyb3dzZXIoaW5qZWN0KFBMQVRGT1JNX0lEKSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbCA9IHR1aUluamVjdEVsZW1lbnQoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRpbGVzID0gaW5qZWN0KFR1aVRpbGVzQ29tcG9uZW50KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN1YiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9mZnNldCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl0+KFtOYU4sIE5hTl0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9zaXRpb24kOiBPYnNlcnZhYmxlPHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl0+ID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMub2Zmc2V0JC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKHR1aUFycmF5U2hhbGxvd0VxdWFscykpLFxuICAgICAgICBpbmplY3QoUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlKS5waXBlKHN0YXJ0V2l0aChudWxsKSksXG4gICAgICAgIGluamVjdChNdXRhdGlvbk9ic2VydmVyU2VydmljZSkucGlwZShzdGFydFdpdGgobnVsbCkpLFxuICAgICAgICB0aGlzLnRpbGVzLm9yZGVyJC5waXBlKGRlYm91bmNlVGltZSgwLCB0dWlab25lZnJlZVNjaGVkdWxlcigpKSksXG4gICAgXSkucGlwZShtYXAoKFtvZmZzZXRdKSA9PiBvZmZzZXQpKTtcblxuICAgIHB1YmxpYyBpbml0KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzQnJvd3Nlcikge1xuICAgICAgICAgICAgdGhpcy5zdWIuYWRkKFxuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24kLnN1YnNjcmliZSgob2Zmc2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24oZWxlbWVudCwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSZWN0KGVsZW1lbnQsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbC5zdHlsZS5zZXRQcm9wZXJ0eSgncG9zaXRpb24nLCAncmVsYXRpdmUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRPZmZzZXQob2Zmc2V0OiByZWFkb25seSBbbnVtYmVyLCBudW1iZXJdKTogdm9pZCB7XG4gICAgICAgIHRoaXMub2Zmc2V0JC5uZXh0KG9mZnNldCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVjdChbbGVmdCwgdG9wXTogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXSk6IERPTVJlY3Qge1xuICAgICAgICBjb25zdCBlbFRvcCA9IE51bWJlci5pc05hTih0b3ApID8gdGhpcy5lbC5vZmZzZXRUb3AgOiB0b3A7XG4gICAgICAgIGNvbnN0IGVsTGVmdCA9IE51bWJlci5pc05hTihsZWZ0KSA/IHRoaXMuZWwub2Zmc2V0TGVmdCA6IGxlZnQ7XG5cbiAgICAgICAgY29uc3QgcmVjdCA9IHtcbiAgICAgICAgICAgIHRvcDogZWxUb3AsXG4gICAgICAgICAgICBsZWZ0OiBlbExlZnQsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5lbC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5lbC5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgICByaWdodDogTmFOLFxuICAgICAgICAgICAgYm90dG9tOiBOYU4sXG4gICAgICAgICAgICB5OiBlbFRvcCxcbiAgICAgICAgICAgIHg6IGVsTGVmdCxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ucmVjdCxcbiAgICAgICAgICAgIHRvSlNPTjogKCkgPT4gSlNPTi5zdHJpbmdpZnkocmVjdCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRSZWN0KHtzdHlsZX06IEhUTUxFbGVtZW50LCBvZmZzZXQ6IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl0pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3RvcCwgbGVmdCwgd2lkdGgsIGhlaWdodH0gPSB0aGlzLmdldFJlY3Qob2Zmc2V0KTtcblxuICAgICAgICBzdHlsZS50b3AgPSB0dWlQeCh0b3ApO1xuICAgICAgICBzdHlsZS5sZWZ0ID0gdHVpUHgobGVmdCk7XG4gICAgICAgIHN0eWxlLndpZHRoID0gdHVpUHgod2lkdGgpO1xuICAgICAgICBzdHlsZS5oZWlnaHQgPSB0dWlQeChoZWlnaHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UG9zaXRpb24oZWxlbWVudDogSFRNTEVsZW1lbnQsIFtsZWZ0XTogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXSk6IHZvaWQge1xuICAgICAgICBpZiAoIU51bWJlci5pc05hTihsZWZ0KSkge1xuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgncG9zaXRpb24nLCAnZml4ZWQnKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge3N0eWxlfSA9IGVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBob3N0ID0gdGhpcy5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0eSgncG9zaXRpb24nKTtcbiAgICAgICAgc3R5bGUudG9wID0gdHVpUHgocmVjdC50b3AgLSBob3N0LnRvcCArIHRoaXMuZWwub2Zmc2V0VG9wKTtcbiAgICAgICAgc3R5bGUubGVmdCA9IHR1aVB4KHJlY3QubGVmdCAtIGhvc3QubGVmdCArIHRoaXMuZWwub2Zmc2V0TGVmdCk7XG4gICAgfVxufVxuIl19