@alauda-fe/common
Version:
Alauda frontend team common codes.
92 lines • 10.8 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { ThemeService } from '@alauda/ui';
import { Directive, ElementRef, EventEmitter, Input, Output, } from '@angular/core';
import lottie from 'lottie-web';
import { Observable, combineLatest, Subject, takeUntil } from 'rxjs';
import { ObservableInput, ValueHook } from '../../../core/public-api';
import ANIM_DATA from './animation-data';
import { replaceLottieColorsByTheme } from './replace-lottie-colors';
import * as i0 from "@angular/core";
import * as i1 from "@alauda/ui";
export class NavLottieIconDirective {
constructor(hostEl, theme) {
this.hostEl = hostEl;
this.theme = theme;
this.aniInit = new EventEmitter();
this.destroy$$ = new Subject();
}
ngOnInit() {
combineLatest([this.animDataKey$, this.animData$, this.theme.currentTheme$])
.pipe(takeUntil(this.destroy$$))
.subscribe(([key, _data, theme]) => {
const data = _data || ANIM_DATA[key];
if (!data) {
return;
}
const animationData = replaceLottieColorsByTheme(theme, data);
this.aniIns?.destroy();
this.aniIns = lottie.loadAnimation({
container: this.hostEl.nativeElement,
renderer: 'svg',
loop: false,
autoplay: false,
...this.aniConfig,
animationData,
});
this.aniInit.emit(this.aniIns);
this.jumpFrame();
});
}
jumpFrame(frame = this.frame) {
if (!this.aniIns || (!frame && frame !== 0)) {
return;
}
if (frame === -1 || frame >= this.aniIns.totalFrames) {
this.aniIns.goToAndStop(this.aniIns.totalFrames - 1, true);
}
else {
this.aniIns.goToAndStop(frame);
}
}
ngOnDestroy() {
this.aniIns?.destroy();
this.destroy$$.next();
this.destroy$$.complete();
}
static { this.ɵfac = function NavLottieIconDirective_Factory(t) { return new (t || NavLottieIconDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.ThemeService)); }; }
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: NavLottieIconDirective, selectors: [["", "aclNavLottieIcon", ""], ["acl-nav-lottie-icon"]], inputs: { animData: "animData", animDataKey: "animDataKey", aniConfig: "aniConfig", frame: "frame" }, outputs: { aniInit: "aniInit" }, standalone: true }); }
}
__decorate([
ObservableInput(),
__metadata("design:type", Observable)
], NavLottieIconDirective.prototype, "animData$", void 0);
__decorate([
ObservableInput(),
__metadata("design:type", Observable)
], NavLottieIconDirective.prototype, "animDataKey$", void 0);
__decorate([
ValueHook(function (frame) {
this.jumpFrame(frame);
}),
__metadata("design:type", Number)
], NavLottieIconDirective.prototype, "frame", void 0);
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NavLottieIconDirective, [{
type: Directive,
args: [{
selector: '[aclNavLottieIcon],acl-nav-lottie-icon',
standalone: true,
}]
}], () => [{ type: i0.ElementRef }, { type: i1.ThemeService }], { animData: [{
type: Input
}], animData$: [], animDataKey: [{
type: Input
}], animDataKey$: [], aniConfig: [{
type: Input
}],
// 设定Lottie当前帧,一旦设定或改变该值将立即跳转至该指定帧并停止动效。如果是-1则为最后一帧。
frame: [{
type: Input
}], aniInit: [{
type: Output
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG90dGllLWljb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL3BhZ2Utc2NhZmZvbGQvbmF2aWdhdGlvbi9sb3R0aWUtaWNvbnMvbG90dGllLWljb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzFDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sTUFBa0QsTUFBTSxZQUFZLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRFLE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7QUFNckUsTUFBTSxPQUFPLHNCQUFzQjtJQWdDakMsWUFDUyxNQUFrQixFQUNsQixLQUFtQjtRQURuQixXQUFNLEdBQU4sTUFBTSxDQUFZO1FBQ2xCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFONUIsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRTNCLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBSzlDLENBQUM7SUFFSixRQUFRO1FBQ04sYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDekUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDL0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDakMsTUFBTSxJQUFJLEdBQUcsS0FBSyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ1YsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLGFBQWEsR0FBRywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7Z0JBQ2pDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWE7Z0JBQ3BDLFFBQVEsRUFBRSxLQUFLO2dCQUNmLElBQUksRUFBRSxLQUFLO2dCQUNYLFFBQVEsRUFBRSxLQUFLO2dCQUNmLEdBQUcsSUFBSSxDQUFDLFNBQVM7Z0JBQ2pCLGFBQWE7YUFDZCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFNBQVMsQ0FBQyxRQUFnQixJQUFJLENBQUMsS0FBSztRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt1RkEzRVUsc0JBQXNCO29FQUF0QixzQkFBc0I7O0FBUWpDO0lBREMsZUFBZSxFQUFFOzhCQUNOLFVBQVU7eURBQVU7QUFPaEM7SUFEQyxlQUFlLEVBQUU7OEJBQ0gsVUFBVTs0REFBUztBQVVsQztJQUxDLFNBQVMsQ0FBQyxVQUF3QyxLQUFjO1FBQy9ELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDOztxREFHYTtpRkF6Qkosc0JBQXNCO2NBSmxDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsd0NBQXdDO2dCQUNsRCxVQUFVLEVBQUUsSUFBSTthQUNqQjtzRUFNQyxRQUFRO2tCQURQLEtBQUs7WUFJTixTQUFTLE1BSVQsV0FBVztrQkFEVixLQUFLO1lBSU4sWUFBWSxNQUdaLFNBQVM7a0JBRFIsS0FBSzs7SUFPTixvREFBb0Q7SUFDcEQsS0FBSztrQkFGSixLQUFLO1lBS04sT0FBTztrQkFETixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IGxvdHRpZSwgeyBBbmltYXRpb25Db25maWdXaXRoRGF0YSwgQW5pbWF0aW9uSXRlbSB9IGZyb20gJ2xvdHRpZS13ZWInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE9ic2VydmFibGVJbnB1dCwgVmFsdWVIb29rIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9wdWJsaWMtYXBpJztcblxuaW1wb3J0IEFOSU1fREFUQSBmcm9tICcuL2FuaW1hdGlvbi1kYXRhJztcbmltcG9ydCB7IHJlcGxhY2VMb3R0aWVDb2xvcnNCeVRoZW1lIH0gZnJvbSAnLi9yZXBsYWNlLWxvdHRpZS1jb2xvcnMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYWNsTmF2TG90dGllSWNvbl0sYWNsLW5hdi1sb3R0aWUtaWNvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIE5hdkxvdHRpZUljb25EaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGFuaUluczogQW5pbWF0aW9uSXRlbTtcblxuICAvLyBhbmltRGF0YSDlkowgYW5pbURhdGFLZXkg5LqM6YCJ5LiA5Y2z5Y+v77yM5ZCM5pe25a2Y5Zyo5pe2IGFuaW1EYXRhIOS8mOWFiOe6p+abtOmrmFxuICBASW5wdXQoKVxuICBhbmltRGF0YTogdW5rbm93bjtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgYW5pbURhdGEkITogT2JzZXJ2YWJsZTx1bmtub3duPjtcblxuICAvLyDlj6/ku6XlnKggLi9hbmltYXRpb24tZGF0YSDkuK3mib7liLDlrprkuYlcbiAgQElucHV0KClcbiAgYW5pbURhdGFLZXk6IHN0cmluZztcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgYW5pbURhdGFLZXkkITogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIEBJbnB1dCgpXG4gIGFuaUNvbmZpZzogQW5pbWF0aW9uQ29uZmlnV2l0aERhdGE7XG5cbiAgQFZhbHVlSG9vayhmdW5jdGlvbiAodGhpczogTmF2TG90dGllSWNvbkRpcmVjdGl2ZSwgZnJhbWU/OiBudW1iZXIpIHtcbiAgICB0aGlzLmp1bXBGcmFtZShmcmFtZSk7XG4gIH0pXG4gIEBJbnB1dCgpXG4gIC8vIOiuvuWumkxvdHRpZeW9k+WJjeW4p++8jOS4gOaXpuiuvuWumuaIluaUueWPmOivpeWAvOWwhueri+WNs+i3s+i9rOiHs+ivpeaMh+WumuW4p+W5tuWBnOatouWKqOaViOOAguWmguaenOaYry0x5YiZ5Li65pyA5ZCO5LiA5bin44CCXG4gIGZyYW1lPzogbnVtYmVyO1xuXG4gIEBPdXRwdXQoKVxuICBhbmlJbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxBbmltYXRpb25JdGVtPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaG9zdEVsOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyB0aGVtZTogVGhlbWVTZXJ2aWNlLFxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5hbmltRGF0YUtleSQsIHRoaXMuYW5pbURhdGEkLCB0aGlzLnRoZW1lLmN1cnJlbnRUaGVtZSRdKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQkKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtrZXksIF9kYXRhLCB0aGVtZV0pID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IF9kYXRhIHx8IEFOSU1fREFUQVtrZXldO1xuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW5pbWF0aW9uRGF0YSA9IHJlcGxhY2VMb3R0aWVDb2xvcnNCeVRoZW1lKHRoZW1lLCBkYXRhKTtcbiAgICAgICAgdGhpcy5hbmlJbnM/LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5hbmlJbnMgPSBsb3R0aWUubG9hZEFuaW1hdGlvbih7XG4gICAgICAgICAgY29udGFpbmVyOiB0aGlzLmhvc3RFbC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgIHJlbmRlcmVyOiAnc3ZnJyxcbiAgICAgICAgICBsb29wOiBmYWxzZSxcbiAgICAgICAgICBhdXRvcGxheTogZmFsc2UsXG4gICAgICAgICAgLi4udGhpcy5hbmlDb25maWcsXG4gICAgICAgICAgYW5pbWF0aW9uRGF0YSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYW5pSW5pdC5lbWl0KHRoaXMuYW5pSW5zKTtcbiAgICAgICAgdGhpcy5qdW1wRnJhbWUoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAganVtcEZyYW1lKGZyYW1lOiBudW1iZXIgPSB0aGlzLmZyYW1lKSB7XG4gICAgaWYgKCF0aGlzLmFuaUlucyB8fCAoIWZyYW1lICYmIGZyYW1lICE9PSAwKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZnJhbWUgPT09IC0xIHx8IGZyYW1lID49IHRoaXMuYW5pSW5zLnRvdGFsRnJhbWVzKSB7XG4gICAgICB0aGlzLmFuaUlucy5nb1RvQW5kU3RvcCh0aGlzLmFuaUlucy50b3RhbEZyYW1lcyAtIDEsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFuaUlucy5nb1RvQW5kU3RvcChmcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5hbmlJbnM/LmRlc3Ryb3koKTtcbiAgICB0aGlzLmRlc3Ryb3kkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JCQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19