@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));
const { length } = element?.getAnimations?.() || [];
if (!element) {
remove();
return;
}
elements.splice(elements.indexOf(element), 1);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0ZWQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL2RpcmVjdGl2ZXMvYW5pbWF0ZWQvYW5pbWF0ZWQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDSCxlQUFlLEVBQ2YsY0FBYyxFQUNkLFNBQVMsRUFDVCxNQUFNLEVBQ04sZ0JBQWdCLEdBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDOztBQUV6RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUM7QUFFckMsTUFTYSxXQUFXO0lBTXBCO1FBTEEsMkdBQTJHO1FBQzFGLGFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxPQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixRQUFHLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRzFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUVyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixPQUFPO1NBQ1Y7UUFFRCxrREFBa0Q7UUFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6RCxNQUFNLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQyxHQUFHLFFBQVEsQ0FBQztRQUVyQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENB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QUU7d0JBQ0YsS0FBSyxFQUFFLFNBQVM7d0JBQ2hCLHFCQUFxQixFQUFFLFVBQVU7d0JBQ2pDLHdCQUF3QixFQUFFLFVBQVU7cUJBQ3ZDO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge09uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIGFmdGVyTmV4dFJlbmRlcixcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICBEaXJlY3RpdmUsXG4gICAgaW5qZWN0LFxuICAgIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0dWlJbmplY3RFbGVtZW50fSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL2RvbSc7XG5cbmV4cG9ydCBjb25zdCBUVUlfRU5URVIgPSAndHVpLWVudGVyJztcbmV4cG9ydCBjb25zdCBUVUlfTEVBVkUgPSAndHVpLWxlYXZlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1t0dWlBbmltYXRlZF0nLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6IFRVSV9FTlRFUixcbiAgICAgICAgJyhhbmltYXRpb25lbmQuc2VsZiknOiAncmVtb3ZlKCknLFxuICAgICAgICAnKGFuaW1hdGlvbmNhbmNlbC5zZWxmKSc6ICdyZW1vdmUoKScsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpQW5pbWF0ZWQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL21haW4vcGFja2FnZXMvY29yZS9zcmMvcmVuZGVyMy9pbnRlcmZhY2VzL3ZpZXcudHMjTDU2XG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKS5faG9zdExWaWV3Py5bMTFdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWwgPSB0dWlJbmplY3RFbGVtZW50KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHAgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB0aGlzLnJlbW92ZSgpKTtcblxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlbGVnYXRlIGlzIHVzZWQgaW4gQW5ndWxhciBBbmltYXRpb25zIHJlbmRlcmVyXG4gICAgICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlci5kZWxlZ2F0ZSB8fCB0aGlzLnJlbmRlcmVyO1xuICAgICAgICBjb25zdCB7cmVtb3ZlQ2hpbGQsIGRhdGF9ID0gcmVuZGVyZXI7XG5cbiAgICAgICAgaWYgKGRhdGFbVFVJX0xFQVZFXSkge1xuICAgICAgICAgICAgZGF0YVtUVUlfTEVBVkVdLnB1c2godGhpcy5lbCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbVFVJX0xFQVZFXSA9IFt0aGlzLmVsXTtcblxuICAgICAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgICAgICAgcmVuZGVyZXIucmVtb3ZlQ2hpbGQgPSAocGFyZW50OiBOb2RlLCBlbDogTm9kZSwgaG9zdD86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1vdmUgPSAoKTogdm9pZCA9PiByZW1vdmVDaGlsZC5jYWxsKHJlbmRlcmVyLCBwYXJlbnQsIGVsLCBob3N0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50czogRWxlbWVudFtdID0gZGF0YVtUVUlfTEVBVkVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50cy5maW5kKChsZWF2ZSkgPT4gZWwuY29udGFpbnMobGVhdmUpKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7bGVuZ3RofSA9IGVsZW1lbnQ/LmdldEFuaW1hdGlvbnM/LigpIHx8IFtdO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBlbGVtZW50cy5zcGxpY2UoZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KSwgMSk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKFRVSV9MRUFWRSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBhbmltYXRpb25zID0gZWxlbWVudC5nZXRBbmltYXRpb25zPy4oKSA/PyBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0ID0gYW5pbWF0aW9uc1thbmltYXRpb25zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmlzaCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnQgfHwgcGFyZW50LmNvbnRhaW5zKGVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcC50aWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKGFuaW1hdGlvbnMubGVuZ3RoID4gbGVuZ3RoICYmIGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdC5vbmZpbmlzaCA9IGZpbmlzaDtcbiAgICAgICAgICAgICAgICAgICAgbGFzdC5vbmNhbmNlbCA9IGZpbmlzaDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlbmRlcmVyPy5kYXRhIHx8IHtbVFVJX0xFQVZFXTogW119O1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZGF0YVtUVUlfTEVBVkVdID0gZGF0YVtUVUlfTEVBVkVdLmZpbHRlcigoZTogRWxlbWVudCkgPT4gZSAhPT0gdGhpcy5lbCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZW1vdmUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVsLmlzQ29ubmVjdGVkICYmICF0aGlzLmVsLmdldEFuaW1hdGlvbnM/LigpLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5lbC5jbGFzc0xpc3QucmVtb3ZlKFRVSV9FTlRFUik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=