ngx-lottie
Version:
<h1 align="center"> <img src="https://raw.githubusercontent.com/ngx-lottie/ngx-lottie/refs/heads/master/docs/assets/logo.png"> </h1>
1 lines • 39.1 kB
Source Map (JSON)
{"version":3,"file":"ngx-lottie-dotlottie-web.mjs","sources":["../../../../libs/ngx-lottie/dotlottie-web/src/types.ts","../../../../libs/ngx-lottie/dotlottie-web/src/symbols.ts","../../../../libs/ngx-lottie/dotlottie-web/src/base.directive.ts","../../../../libs/ngx-lottie/dotlottie-web/src/dotlottie.component.ts","../../../../libs/ngx-lottie/dotlottie-web/src/dotlottie-worker.component.ts","../../../../libs/ngx-lottie/dotlottie-web/src/providers.ts","../../../../libs/ngx-lottie/dotlottie-web/src/ngx-lottie-dotlottie-web.ts"],"sourcesContent":["import { booleanAttribute as originalBooleanAttribute } from '@angular/core';\n\nexport type BooleanInput = boolean | `${boolean}` | '' | null | undefined;\n\n/**\n * Transforms a value (typically a string) to a boolean.\n * Intended to be used as a transform function of an input.\n *\n * @see https://material.angular.io/cdk/coercion/overview\n */\nexport const coerceBooleanAttribute: (value: BooleanInput) => boolean = originalBooleanAttribute;\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Factory function that returns the `DotLottie` player class synchronously.\n * Use this when bundling package directly in your application bundle.\n *\n * @example\n * import { DotLottieWorker } from '@lottiefiles/dotlottie-web';\n * const player = () => DotLottieWorker;\n */\ntype DotLottiePlayerFactory = () =>\n | typeof import('@lottiefiles/dotlottie-web').DotLottie\n | typeof import('@lottiefiles/dotlottie-web').DotLottieWorker;\n\n/**\n * Loader function that returns a Promise resolving to the `DotLottie` player class.\n * Use this for lazy-loading package to reduce initial bundle size.\n * The library will only be loaded when the first animation is created.\n *\n * @example\n * const player = () => import('@lottiefiles/dotlottie-web').then(({ DotLottie }) => DotLottie);\n */\ntype DotLottiePlayerLoader = () => Promise<\n | typeof import('@lottiefiles/dotlottie-web').DotLottie\n | typeof import('@lottiefiles/dotlottie-web').DotLottieWorker\n>;\n\n/**\n * Union type allowing either synchronous or asynchronous `DotLottie` player class loading.\n */\nexport type DotLottiePlayerFactoryOrLoader = DotLottiePlayerFactory | DotLottiePlayerLoader;\n\nexport interface DotLottieOptions {\n player: DotLottiePlayerFactoryOrLoader;\n}\n\nexport const DOT_LOTTIE_OPTIONS = new InjectionToken<DotLottieOptions>(\n typeof ngDevMode !== 'undefined' && ngDevMode ? 'DOT_LOTTIE_OPTIONS' : '',\n);\n\n/**\n * Optional injection token for custom WASM URL.\n * If provided, the base directive will configure it before creating DotLottie instances.\n */\nexport const DOT_LOTTIE_WASM_URL = new InjectionToken<string>(\n typeof ngDevMode !== 'undefined' && ngDevMode ? 'DOT_LOTTIE_WASM_URL' : '',\n);\n","import { isPlatformServer } from '@angular/common';\nimport {\n afterNextRender,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n NgZone,\n OutputEmitterRef,\n PLATFORM_ID,\n runInInjectionContext,\n signal,\n untracked,\n viewChild,\n ɵisPromise,\n} from '@angular/core';\nimport { outputFromObservable, toObservable } from '@angular/core/rxjs-interop';\nimport { Observable, switchMap, EMPTY } from 'rxjs';\n\nimport { coerceBooleanAttribute } from './types';\nimport { DOT_LOTTIE_OPTIONS, DOT_LOTTIE_WASM_URL } from './symbols';\nimport type {\n Event,\n Data,\n DotLottie,\n DotLottieWorker,\n EventType,\n Layout,\n Mode,\n RenderConfig,\n StateMachineConfig,\n} from '@lottiefiles/dotlottie-web';\n\ntype EventByType<T extends EventType> = Extract<\n Event,\n {\n type: T;\n }\n>;\n\n@Directive()\nexport abstract class ɵɵBaseDotLottieDirective {\n /**\n * Static flag to track if WASM URL has been configured globally.\n */\n private static wasmUrlConfigured = false;\n\n protected readonly instance = signal<DotLottie | DotLottieWorker | undefined>(undefined);\n\n private readonly isLoaded = signal(false);\n private readonly canvas = viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n\n private readonly ngZone = inject(NgZone);\n\n readonly className = input<string>();\n readonly containerStyles = input<Record<string, string>>();\n readonly animationId = input<string>();\n readonly autoplay = input(false, { transform: coerceBooleanAttribute });\n readonly backgroundColor = input<string>();\n readonly data = input<Data>();\n readonly layout = input<Layout>();\n readonly loop = input(false, { transform: coerceBooleanAttribute });\n readonly marker = input<string>();\n readonly mode = input<Mode>();\n readonly renderConfig = input<RenderConfig>();\n readonly segment = input<[number, number]>();\n readonly speed = input<number>();\n readonly src = input<string>();\n readonly themeId = input<string>();\n readonly useFrameInterpolation = input(true, { transform: coerceBooleanAttribute });\n readonly stateMachineId = input<string>();\n readonly stateMachineConfig = input<StateMachineConfig>();\n\n abstract readonly dotLottieCreated: OutputEmitterRef<DotLottie | DotLottieWorker>;\n\n /**\n * Emitted when the animation completes playback.\n */\n readonly complete = outputFromObservable(this.awaitInstanceAndStartListening('complete'));\n\n /**\n * Emitted when the animation has successfully loaded.\n */\n readonly load = outputFromObservable(this.awaitInstanceAndStartListening('load'));\n\n /**\n * Emitted when an error occurs during animation loading.\n */\n readonly loadError = outputFromObservable(this.awaitInstanceAndStartListening('loadError'));\n\n /**\n * Emitted when an error occurs during animation rendering.\n */\n readonly renderError = outputFromObservable(this.awaitInstanceAndStartListening('renderError'));\n\n /**\n * Emitted when the animation is paused.\n */\n readonly pause = outputFromObservable(this.awaitInstanceAndStartListening('pause'));\n\n /**\n * Emitted when the animation starts playing.\n */\n readonly play = outputFromObservable(this.awaitInstanceAndStartListening('play'));\n\n /**\n * Emitted when the animation is stopped.\n */\n readonly stop = outputFromObservable(this.awaitInstanceAndStartListening('stop'));\n\n /**\n * Emitted when the animation instance is destroyed.\n */\n readonly destroy = outputFromObservable(this.awaitInstanceAndStartListening('destroy'));\n\n /**\n * Emitted when the WASM module is initialized and ready.\n */\n readonly ready = outputFromObservable(this.awaitInstanceAndStartListening('ready'));\n\n /**\n * Emitted on each frame change. Useful for tracking the current frame.\n */\n readonly frame = outputFromObservable(this.awaitInstanceAndStartListening('frame'));\n\n /**\n * Emitted when the animation is frozen (rendering paused).\n */\n readonly freeze = outputFromObservable(this.awaitInstanceAndStartListening('freeze'));\n\n /**\n * Emitted when the animation is unfrozen (rendering resumed).\n */\n readonly unfreeze = outputFromObservable(this.awaitInstanceAndStartListening('unfreeze'));\n\n protected readonly mergedContainerStyles = computed(() => ({\n width: '100%',\n height: '100%',\n lineHeight: '0',\n ...this.containerStyles(),\n }));\n\n protected canvasStyles = { width: '100%', height: '100%' };\n\n constructor() {\n if (\n (typeof ngServerMode !== 'undefined' && ngServerMode) ||\n isPlatformServer(inject(PLATFORM_ID))\n ) {\n return;\n }\n\n const injector = inject(Injector);\n const destroyRef = inject(DestroyRef);\n const options = inject(DOT_LOTTIE_OPTIONS);\n const wasmUrl = inject(DOT_LOTTIE_WASM_URL, { optional: true });\n\n afterNextRender(async () => {\n const DotLottie = await this.ngZone.runOutsideAngular(() => {\n const player = options.player();\n return ɵisPromise(player) ? player : Promise.resolve(player);\n });\n\n if (wasmUrl !== null && ɵɵBaseDotLottieDirective.wasmUrlConfigured === false) {\n ɵɵBaseDotLottieDirective.wasmUrlConfigured = true;\n DotLottie.setWasmUrl(wasmUrl);\n }\n\n // Guard against component destruction during async import.\n if (destroyRef.destroyed) {\n return;\n }\n\n runInInjectionContext(injector, () => this.render(destroyRef, DotLottie));\n });\n }\n\n private render(\n destroyRef: DestroyRef,\n DotLottieConstructor: typeof DotLottie | typeof DotLottieWorker,\n ): void {\n const canvas = this.canvas().nativeElement;\n\n const instance = this.ngZone.runOutsideAngular(() => {\n return new DotLottieConstructor({\n canvas,\n ...this.buildConfig(),\n });\n });\n\n this.instance.set(instance);\n this.dotLottieCreated.emit(instance);\n\n // Track when the DotLottie animation is fully loaded.\n // This is necessary for state machine initialization, which requires\n // the animation to be loaded before a state machine can be started.\n this.ngZone.runOutsideAngular(() => {\n const onLoad = () => this.isLoaded.set(true);\n instance.addEventListener('load', onLoad);\n destroyRef.onDestroy(() => instance.removeEventListener('load', onLoad));\n });\n\n // Each effect tracks a single input signal and updates the corresponding\n // DotLottie instance property when that input changes. This provides\n // fine-grained reactivity similar to React's `useEffect` with dependency arrays.\n effect(() => {\n this.ngZone.runOutsideAngular(() => instance.loadAnimation(this.animationId() ?? ''));\n });\n effect(() => {\n this.ngZone.runOutsideAngular(() =>\n instance.setBackgroundColor(this.backgroundColor() ?? ''),\n );\n });\n effect(() => {\n const data = this.data();\n if (typeof data !== 'string' && typeof data !== 'object') return;\n this.ngZone.runOutsideAngular(() => instance.load({ ...this.buildConfig(), data }));\n });\n effect(() => {\n this.ngZone.runOutsideAngular(() => instance.setLayout(this.layout() ?? {}));\n });\n effect(() => {\n this.ngZone.runOutsideAngular(() => instance.setLoop(this.loop() ?? false));\n });\n effect(() => {\n this.ngZone.runOutsideAngular(() => instance.setMarker(this.marker() ?? ''));\n });\n effect(() => {\n this.ngZone.runOutsideAngular(() => instance.setMode(this.mode() ?? 'forward'));\n });\n effect(() => {\n this.ngZone.runOutsideAngular(() => instance.setRenderConfig(this.renderConfig() ?? {}));\n });\n effect(() => {\n const segment = this.segment();\n if (typeof segment?.[0] === 'number' && typeof segment?.[1] === 'number') {\n this.ngZone.runOutsideAngular(() => instance.setSegment(segment[0], segment[1]));\n }\n });\n effect(() => {\n this.ngZone.runOutsideAngular(() => instance.setSpeed(this.speed() ?? 1));\n });\n effect(() => {\n const src = this.src();\n if (typeof src !== 'string') return;\n this.ngZone.runOutsideAngular(() => instance.load({ ...this.buildConfig(), src }));\n });\n effect(() => {\n const themeId = this.themeId();\n if (typeof themeId !== 'string') return;\n this.ngZone.runOutsideAngular(() => instance.setTheme(themeId));\n });\n effect(() => {\n this.ngZone.runOutsideAngular(() =>\n instance.setUseFrameInterpolation(this.useFrameInterpolation() ?? true),\n );\n });\n effect(() => {\n const isLoaded = this.isLoaded();\n const stateMachineId = this.stateMachineId();\n\n // Wait for instance to be ready and loaded.\n if (!isLoaded) return;\n\n if (typeof stateMachineId === 'string' && stateMachineId) {\n this.ngZone.runOutsideAngular(() => {\n const smLoaded = instance.stateMachineLoad(stateMachineId);\n if (smLoaded) {\n instance.stateMachineStart();\n }\n });\n } else {\n this.ngZone.runOutsideAngular(() => instance.stateMachineStop());\n }\n });\n effect(() => {\n this.ngZone.runOutsideAngular(() =>\n instance.stateMachineSetConfig(this.stateMachineConfig() ?? null),\n );\n });\n\n destroyRef.onDestroy(() => {\n // Since `destroy()` calls `eventManager.dispatch` with `destroy`,\n // we're unaware of any upcoming asynchronous jobs scheduled in the\n // Angular context that might redundantly trigger change detection.\n this.ngZone.runOutsideAngular(() => {\n instance.destroy();\n });\n });\n }\n\n private buildConfig() {\n return untracked(() => ({\n animationId: this.animationId(),\n autoplay: this.autoplay(),\n backgroundColor: this.backgroundColor(),\n data: this.data(),\n layout: this.layout(),\n loop: this.loop(),\n marker: this.marker(),\n mode: this.mode(),\n renderConfig: this.renderConfig(),\n segment: this.segment(),\n speed: this.speed(),\n src: this.src(),\n themeId: this.themeId(),\n useFrameInterpolation: this.useFrameInterpolation(),\n }));\n }\n\n private awaitInstanceAndStartListening<T extends EventType>(name: T): Observable<EventByType<T>> {\n return toObservable(this.instance).pipe(\n switchMap(instance => {\n if (instance === undefined) return EMPTY;\n\n return new Observable<EventByType<T>>(subscriber => {\n const onEvent = (event: EventByType<T>) => {\n subscriber.next(event);\n };\n\n this.ngZone.runOutsideAngular(() => {\n instance.addEventListener(name, onEvent as any);\n });\n\n return () => {\n instance.removeEventListener(name, onEvent as any);\n };\n });\n }),\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, output, ViewEncapsulation } from '@angular/core';\n\nimport { ɵɵBaseDotLottieDirective } from './base.directive';\n\n/**\n * Separate DotLottie and DotLottieWorker components architecture\n *\n * WHY TWO COMPONENTS INSTEAD OF ONE WITH CONFIGURATION:\n *\n * 1. **Type Safety**: Each component has a precise output type (DotLottie vs DotLottieWorker).\n * Users get compile-time guarantees about which instance type they're working with.\n * A single configurable component would require runtime type checking and type assertions.\n *\n * 2. **Clear Intent**: The component selector itself (`ng-dotlottie` vs `ng-dotlottie-worker`)\n * explicitly communicates which rendering strategy is being used. No need to inspect\n * configuration to understand the behavior.\n *\n * 3. **Bundle Optimization**: Tree-shaking works better with separate components. If an app\n * only uses `ng-dotlottie`, the DotLottieWorker code can be completely eliminated from\n * the bundle. A single component would bundle both implementations.\n *\n * 4. **Simpler API**: No configuration prop needed (e.g., `useWorker` boolean). Less surface\n * area for bugs - users can't accidentally misconfigure or change modes at runtime.\n *\n * 5. **Performance Predictability**: DotLottie and DotLottieWorker have different performance\n * characteristics and browser support. Separate components make this distinction explicit\n * and prevent unintended mode switching during the component lifecycle.\n *\n * 6. **Maintainability**: If DotLottie and DotLottieWorker diverge in their APIs or\n * initialization logic in future library versions, handling them separately is cleaner\n * than conditional logic scattered throughout a single component.\n *\n * 7. **Testing**: Each component can be tested independently with focused test suites.\n * No need for parameterized tests or complex setup to cover both modes.\n *\n * TRADE-OFF:\n * - Slight code duplication (two component classes), but shared implementation in\n * ɵɵBaseDotLottieDirective minimizes this. The duplication is purely declarative\n * (selector, output type override) which is acceptable for the benefits gained.\n */\n@Component({\n selector: 'ng-dotlottie',\n template: `\n <div [class]=\"className()\" [style]=\"mergedContainerStyles()\">\n <canvas #canvas class=\"ng-dotlottie-canvas\" [style]=\"canvasStyles\"></canvas>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class DotLottieComponent extends ɵɵBaseDotLottieDirective {\n override readonly dotLottieCreated = output<import('@lottiefiles/dotlottie-web').DotLottie>();\n}\n","import { ChangeDetectionStrategy, Component, output, ViewEncapsulation } from '@angular/core';\n\nimport { ɵɵBaseDotLottieDirective } from './base.directive';\n\n/**\n * Separate DotLottie and DotLottieWorker components architecture\n *\n * WHY TWO COMPONENTS INSTEAD OF ONE WITH CONFIGURATION:\n *\n * 1. **Type Safety**: Each component has a precise output type (DotLottie vs DotLottieWorker).\n * Users get compile-time guarantees about which instance type they're working with.\n * A single configurable component would require runtime type checking and type assertions.\n *\n * 2. **Clear Intent**: The component selector itself (`ng-dotlottie` vs `ng-dotlottie-worker`)\n * explicitly communicates which rendering strategy is being used. No need to inspect\n * configuration to understand the behavior.\n *\n * 3. **Bundle Optimization**: Tree-shaking works better with separate components. If an app\n * only uses `ng-dotlottie`, the DotLottieWorker code can be completely eliminated from\n * the bundle. A single component would bundle both implementations.\n *\n * 4. **Simpler API**: No configuration prop needed (e.g., `useWorker` boolean). Less surface\n * area for bugs - users can't accidentally misconfigure or change modes at runtime.\n *\n * 5. **Performance Predictability**: DotLottie and DotLottieWorker have different performance\n * characteristics and browser support. Separate components make this distinction explicit\n * and prevent unintended mode switching during the component lifecycle.\n *\n * 6. **Maintainability**: If DotLottie and DotLottieWorker diverge in their APIs or\n * initialization logic in future library versions, handling them separately is cleaner\n * than conditional logic scattered throughout a single component.\n *\n * 7. **Testing**: Each component can be tested independently with focused test suites.\n * No need for parameterized tests or complex setup to cover both modes.\n *\n * TRADE-OFF:\n * - Slight code duplication (two component classes), but shared implementation in\n * ɵɵBaseDotLottieDirective minimizes this. The duplication is purely declarative\n * (selector, output type override) which is acceptable for the benefits gained.\n */\n@Component({\n selector: 'ng-dotlottie-worker',\n template: `\n <div [class]=\"className()\" [style]=\"mergedContainerStyles()\">\n <canvas #canvas class=\"ng-dotlottie-worker-canvas\" [style]=\"canvasStyles\"></canvas>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class DotLottieWorkerComponent extends ɵɵBaseDotLottieDirective {\n override readonly dotLottieCreated =\n output<import('@lottiefiles/dotlottie-web').DotLottieWorker>();\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { DOT_LOTTIE_OPTIONS, DOT_LOTTIE_WASM_URL, type DotLottieOptions } from './symbols';\n\n/**\n * Provides DotLottie configuration and optional features for the application.\n *\n * @param options - Configuration specifying how to load the `DotLottie` player class\n * @param features - Additional feature providers (e.g., `withDotLottieWasmUrl`)\n * @returns Environment providers for dependency injection\n *\n * @example\n * // Synchronous loading\n * import { DotLottie } from '@lottiefiles/dotlottie-web';\n *\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideDotLottie({\n * player: () => DotLottie,\n * }),\n * ],\n * };\n *\n * @example\n * // Lazy loading with custom WASM URL\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideDotLottie(\n * {\n * player: () => import('@lottiefiles/dotlottie-web').then(m => m.DotLottie),\n * },\n * withDotLottieWasmUrl('/assets/dotlottie-player.wasm'),\n * ),\n * ],\n * };\n */\nexport function provideDotLottie(options: DotLottieOptions, ...features: EnvironmentProviders[]) {\n return makeEnvironmentProviders([\n {\n provide: DOT_LOTTIE_OPTIONS,\n useValue: options,\n },\n features,\n ]);\n}\n\n/**\n * Feature provider that configures a custom URL for the DotLottie WASM file.\n * The WASM URL is set lazily when the first DotLottie component renders,\n * rather than during app initialization.\n *\n * @param wasmUrl - Path or URL to the dotlottie-player WASM file.\n * Relative URLs will be resolved to absolute URLs automatically.\n *\n * @example\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideDotLottie(\n * { player: () => import('@lottiefiles/dotlottie-web').then(m => m.DotLottieWorker) },\n * withDotLottieWasmUrl(() => 'http://localhost:4200/assets/dotlottie-player.wasm'),\n * ),\n * ],\n * };\n */\nexport function withDotLottieWasmUrl(wasmUrl: () => string) {\n return makeEnvironmentProviders([\n {\n provide: DOT_LOTTIE_WASM_URL,\n useFactory: wasmUrl,\n },\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["originalBooleanAttribute","ɵisPromise"],"mappings":"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"}