@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
82 lines • 11.1 kB
JavaScript
import { isPlatformServer } from '@angular/common';
import { afterNextRender, Directive, inject, PLATFORM_ID, ViewContainerRef, } from '@angular/core';
import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
import * as i0 from "@angular/core";
export const TUI_ENTER = 'tui-enter';
export const TUI_LEAVE = 'tui-leave';
class TuiAnimated {
constructor() {
// @ts-ignore https://github.com/angular/angular/blob/main/packages/core/src/render3/interfaces/view.ts#L56
this.renderer = inject(ViewContainerRef)._hostLView?.[11];
this.el = tuiInjectElement();
afterNextRender(() => this.remove());
if (!this.renderer || isPlatformServer(inject(PLATFORM_ID))) {
return;
}
// delegate is used in Angular Animations renderer
const renderer = this.renderer.delegate || this.renderer;
if (renderer.data[TUI_LEAVE]) {
renderer.data[TUI_LEAVE].push(this.el);
}
else {
renderer.data[TUI_LEAVE] = [this.el];
renderer.removeChild = wrap(renderer);
}
}
ngOnDestroy() {
const data = this.renderer?.data || { [TUI_LEAVE]: [] };
setTimeout(() => {
data[TUI_LEAVE] = data[TUI_LEAVE]?.filter((e) => e !== this.el);
});
}
remove() {
if (this.el.isConnected && !this.el.getAnimations?.().length) {
this.el.classList.remove(TUI_ENTER);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiAnimated, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiAnimated, isStandalone: true, selector: "[tuiAnimated]", host: { listeners: { "animationend.self": "remove()", "animationcancel.self": "remove()" }, classAttribute: "tui-enter" }, ngImport: i0 }); }
}
export { TuiAnimated };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiAnimated, decorators: [{
type: Directive,
args: [{
standalone: true,
selector: '[tuiAnimated]',
host: {
class: TUI_ENTER,
'(animationend.self)': 'remove()',
'(animationcancel.self)': 'remove()',
},
}]
}], ctorParameters: function () { return []; } });
function wrap(renderer) {
const { removeChild } = renderer;
return (parent, el, host) => {
const remove = () => removeChild.call(renderer, parent, el, host);
const elements = renderer.data[TUI_LEAVE];
const element = elements.find((leave) => el.contains(leave));
if (!element) {
remove();
return;
}
element.classList.remove(TUI_ENTER);
const { length } = element.getAnimations?.() || [];
element.classList.add(TUI_LEAVE);
const animations = element.getAnimations?.() ?? [];
const last = animations[animations.length - 1];
const finish = () => {
if (!parent || parent.contains(el)) {
remove();
}
};
if (animations.length > length && last) {
last.onfinish = finish;
last.oncancel = finish;
}
else {
remove();
}
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0ZWQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL2RpcmVjdGl2ZXMvYW5pbWF0ZWQvYW5pbWF0ZWQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFDSCxlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFFTixXQUFXLEVBRVgsZ0JBQWdCLEdBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDOztBQUV6RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUM7QUFFckMsTUFTYSxXQUFXO0lBS3BCO1FBSkEsMkdBQTJHO1FBQzFGLGFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxPQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUdyQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFckMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7WUFDekQsT0FBTztTQUNWO1FBRUQsa0RBQWtEO1FBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFekQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzFCLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLElB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QUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7U0FDMUI7YUFBTTtZQUNILE1BQU0sRUFBRSxDQUFDO1NBQ1o7SUFDTCxDQUFDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpc1BsYXRmb3JtU2VydmVyfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBhZnRlck5leHRSZW5kZXIsXG4gICAgRGlyZWN0aXZlLFxuICAgIGluamVjdCxcbiAgICB0eXBlIE9uRGVzdHJveSxcbiAgICBQTEFURk9STV9JRCxcbiAgICB0eXBlIFJlbmRlcmVyMixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dHVpSW5qZWN0RWxlbWVudH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9kb20nO1xuXG5leHBvcnQgY29uc3QgVFVJX0VOVEVSID0gJ3R1aS1lbnRlcic7XG5leHBvcnQgY29uc3QgVFVJX0xFQVZFID0gJ3R1aS1sZWF2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdbdHVpQW5pbWF0ZWRdJyxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiBUVUlfRU5URVIsXG4gICAgICAgICcoYW5pbWF0aW9uZW5kLnNlbGYpJzogJ3JlbW92ZSgpJyxcbiAgICAgICAgJyhhbmltYXRpb25jYW5jZWwuc2VsZiknOiAncmVtb3ZlKCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aUFuaW1hdGVkIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi9tYWluL3BhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvaW50ZXJmYWNlcy92aWV3LnRzI0w1NlxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZikuX2hvc3RMVmlldz8uWzExXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsID0gdHVpSW5qZWN0RWxlbWVudCgpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB0aGlzLnJlbW92ZSgpKTtcblxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyZXIgfHwgaXNQbGF0Zm9ybVNlcnZlcihpbmplY3QoUExBVEZPUk1fSUQpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVsZWdhdGUgaXMgdXNlZCBpbiBBbmd1bGFyIEFuaW1hdGlvbnMgcmVuZGVyZXJcbiAgICAgICAgY29uc3QgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyLmRlbGVnYXRlIHx8IHRoaXMucmVuZGVyZXI7XG5cbiAgICAgICAgaWYgKHJlbmRlcmVyLmRhdGFbVFVJX0xFQVZFXSkge1xuICAgICAgICAgICAgcmVuZGVyZXIuZGF0YVtUVUlfTEVBVkVdLnB1c2godGhpcy5lbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW5kZXJlci5kYXRhW1RVSV9MRUFWRV0gPSBbdGhpcy5lbF07XG4gICAgICAgICAgICByZW5kZXJlci5yZW1vdmVDaGlsZCA9IHdyYXAocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5yZW5kZXJlcj8uZGF0YSB8fCB7W1RVSV9MRUFWRV06IFtdfTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGRhdGFbVFVJX0xFQVZFXSA9IGRhdGFbVFVJX0xFQVZFXT8uZmlsdGVyKChlOiBFbGVtZW50KSA9PiBlICE9PSB0aGlzLmVsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbW92ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZWwuaXNDb25uZWN0ZWQgJiYgIXRoaXMuZWwuZ2V0QW5pbWF0aW9ucz8uKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoVFVJX0VOVEVSKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gd3JhcChyZW5kZXJlcjogUmVuZGVyZXIyKTogYW55IHtcbiAgICBjb25zdCB7cmVtb3ZlQ2hpbGR9ID0gcmVuZGVyZXI7XG5cbiAgICByZXR1cm4gKHBhcmVudDogTm9kZSwgZWw6IE5vZGUsIGhvc3Q/OiBib29sZWFuKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbW92ZSA9ICgpOiB2b2lkID0+IHJlbW92ZUNoaWxkLmNhbGwocmVuZGVyZXIsIHBhcmVudCwgZWwsIGhvc3QpO1xuICAgICAgICBjb25zdCBlbGVtZW50czogRWxlbWVudFtdID0gcmVuZGVyZXIuZGF0YVtUVUlfTEVBVkVdO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHMuZmluZCgobGVhdmUpID0+IGVsLmNvbnRhaW5zKGxlYXZlKSk7XG5cbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgICAgICByZW1vdmUoKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFRVSV9FTlRFUik7XG5cbiAgICAgICAgY29uc3Qge2xlbmd0aH0gPSBlbGVtZW50LmdldEFuaW1hdGlvbnM/LigpIHx8IFtdO1xuXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChUVUlfTEVBVkUpO1xuXG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbnMgPSBlbGVtZW50LmdldEFuaW1hdGlvbnM/LigpID8/IFtdO1xuICAgICAgICBjb25zdCBsYXN0ID0gYW5pbWF0aW9uc1thbmltYXRpb25zLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBmaW5pc2ggPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBpZiAoIXBhcmVudCB8fCBwYXJlbnQuY29udGFpbnMoZWwpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGFuaW1hdGlvbnMubGVuZ3RoID4gbGVuZ3RoICYmIGxhc3QpIHtcbiAgICAgICAgICAgIGxhc3Qub25maW5pc2ggPSBmaW5pc2g7XG4gICAgICAgICAgICBsYXN0Lm9uY2FuY2VsID0gZmluaXNoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIl19