@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
81 lines • 11.4 kB
JavaScript
import { afterNextRender, ApplicationRef, Directive, inject, 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();
this.app = inject(ApplicationRef);
afterNextRender(() => this.remove());
if (!this.renderer) {
return;
}
// delegate is used in Angular Animations renderer
const renderer = this.renderer.delegate || this.renderer;
const { removeChild, data } = renderer;
if (data[TUI_LEAVE]) {
data[TUI_LEAVE].push(this.el);
return;
}
data[TUI_LEAVE] = [this.el];
afterNextRender(() => {
renderer.removeChild = (parent, el, host) => {
const remove = () => removeChild.call(renderer, parent, el, host);
const elements = 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();
this.app.tick();
}
};
if (animations.length > length && last) {
last.onfinish = finish;
last.oncancel = finish;
}
else {
remove();
}
};
});
}
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 []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0ZWQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL2RpcmVjdGl2ZXMvYW5pbWF0ZWQvYW5pbWF0ZWQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxlQUFlLEVBQ2YsY0FBYyxFQUNkLFNBQVMsRUFDVCxNQUFNLEVBRU4sZ0JBQWdCLEdBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDOztBQUV6RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUM7QUFFckMsTUFTYSxXQUFXO0lBTXBCO1FBTEEsMkdBQTJHO1FBQzFGLGFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxPQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixRQUFHLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRzFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUVyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixPQUFPO1NBQ1Y7UUFFRCxrREFBa0Q7UUFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6RCxNQUFNLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQyxHQUFHLFFBQVEsQ0FBQztRQUVyQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENB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QkFDaEIscUJBQXFCLEVBQUUsVUFBVTt3QkFDakMsd0JBQXdCLEVBQUUsVUFBVTtxQkFDdkM7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGFmdGVyTmV4dFJlbmRlcixcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICBEaXJlY3RpdmUsXG4gICAgaW5qZWN0LFxuICAgIHR5cGUgT25EZXN0cm95LFxuICAgIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0dWlJbmplY3RFbGVtZW50fSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL2RvbSc7XG5cbmV4cG9ydCBjb25zdCBUVUlfRU5URVIgPSAndHVpLWVudGVyJztcbmV4cG9ydCBjb25zdCBUVUlfTEVBVkUgPSAndHVpLWxlYXZlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1t0dWlBbmltYXRlZF0nLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6IFRVSV9FTlRFUixcbiAgICAgICAgJyhhbmltYXRpb25lbmQuc2VsZiknOiAncmVtb3ZlKCknLFxuICAgICAgICAnKGFuaW1hdGlvbmNhbmNlbC5zZWxmKSc6ICdyZW1vdmUoKScsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpQW5pbWF0ZWQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL21haW4vcGFja2FnZXMvY29yZS9zcmMvcmVuZGVyMy9pbnRlcmZhY2VzL3ZpZXcudHMjTDU2XG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKS5faG9zdExWaWV3Py5bMTFdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWwgPSB0dWlJbmplY3RFbGVtZW50KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHAgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB0aGlzLnJlbW92ZSgpKTtcblxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlbGVnYXRlIGlzIHVzZWQgaW4gQW5ndWxhciBBbmltYXRpb25zIHJlbmRlcmVyXG4gICAgICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlci5kZWxlZ2F0ZSB8fCB0aGlzLnJlbmRlcmVyO1xuICAgICAgICBjb25zdCB7cmVtb3ZlQ2hpbGQsIGRhdGF9ID0gcmVuZGVyZXI7XG5cbiAgICAgICAgaWYgKGRhdGFbVFVJX0xFQVZFXSkge1xuICAgICAgICAgICAgZGF0YVtUVUlfTEVBVkVdLnB1c2godGhpcy5lbCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbVFVJX0xFQVZFXSA9IFt0aGlzLmVsXTtcblxuICAgICAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgICAgICAgcmVuZGVyZXIucmVtb3ZlQ2hpbGQgPSAocGFyZW50OiBOb2RlLCBlbDogTm9kZSwgaG9zdD86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1vdmUgPSAoKTogdm9pZCA9PiByZW1vdmVDaGlsZC5jYWxsKHJlbmRlcmVyLCBwYXJlbnQsIGVsLCBob3N0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50czogRWxlbWVudFtdID0gZGF0YVtUVUlfTEVBVkVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50cy5maW5kKChsZWF2ZSkgPT4gZWwuY29udGFpbnMobGVhdmUpKTtcblxuICAgICAgICAgICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmUoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFRVSV9FTlRFUik7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB7bGVuZ3RofSA9IGVsZW1lbnQuZ2V0QW5pbWF0aW9ucz8uKCkgfHwgW107XG5cbiAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoVFVJX0xFQVZFKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGFuaW1hdGlvbnMgPSBlbGVtZW50LmdldEFuaW1hdGlvbnM/LigpID8/IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBhbmltYXRpb25zW2FuaW1hdGlvbnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgY29uc3QgZmluaXNoID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudCB8fCBwYXJlbnQuY29udGFpbnMoZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwLnRpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoYW5pbWF0aW9ucy5sZW5ndGggPiBsZW5ndGggJiYgbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0Lm9uZmluaXNoID0gZmluaXNoO1xuICAgICAgICAgICAgICAgICAgICBsYXN0Lm9uY2FuY2VsID0gZmluaXNoO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMucmVuZGVyZXI/LmRhdGEgfHwge1tUVUlfTEVBVkVdOiBbXX07XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBkYXRhW1RVSV9MRUFWRV0gPSBkYXRhW1RVSV9MRUFWRV0uZmlsdGVyKChlOiBFbGVtZW50KSA9PiBlICE9PSB0aGlzLmVsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbW92ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZWwuaXNDb25uZWN0ZWQgJiYgIXRoaXMuZWwuZ2V0QW5pbWF0aW9ucz8uKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoVFVJX0VOVEVSKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==