{"version":3,"file":"ngx-lottie.mjs","sources":["../../../../libs/ngx-lottie/src/lib/symbols.ts","../../../../libs/ngx-lottie/src/lib/animation-loader.ts","../../../../libs/ngx-lottie/src/lib/cacheable-animation-loader/cacheable-animation-loader.ts","../../../../libs/ngx-lottie/src/lib/providers.ts","../../../../libs/ngx-lottie/src/lib/base.directive.ts","../../../../libs/ngx-lottie/src/lib/lottie.directive.ts","../../../../libs/ngx-lottie/src/lib/lottie.component.ts","../../../../libs/ngx-lottie/src/lib/server.ts","../../../../libs/ngx-lottie/src/lib/transfer-state.ts","../../../../libs/ngx-lottie/src/ngx-lottie.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface BMEnterFrameEvent {\n  type: 'enterFrame';\n  currentTime: number;\n  totalTime: number;\n  duration: number;\n}\n\nexport interface BMCompleteLoopEvent {\n  type: 'loopComplete';\n  currentLoop: boolean | number;\n  totalLoops: number;\n  direction: number;\n}\n\nexport interface BMCompleteEvent {\n  type: 'complete';\n  direction: number;\n}\n\nexport interface BMSegmentStartEvent {\n  type: 'segmentStart';\n  firstFrame: number;\n  totalFrames: number;\n}\n\nexport interface BMDestroyEvent {\n  target: AnimationItem;\n  type: 'destroy';\n}\n\nexport interface BMRenderFrameErrorEvent {\n  type: 'renderFrameError';\n  nativeError: Error;\n  currentTime: number;\n}\n\nexport interface BMConfigErrorEvent {\n  type: 'configError';\n  nativeError: Error;\n}\n\nexport type LottieEvent =\n  | BMEnterFrameEvent\n  | BMCompleteLoopEvent\n  | BMCompleteEvent\n  | BMSegmentStartEvent\n  | BMDestroyEvent\n  | BMRenderFrameErrorEvent\n  | BMConfigErrorEvent\n  | void;\n\nexport type CamelizedAnimationEventName =\n  | 'complete'\n  | 'loopComplete'\n  | 'enterFrame'\n  | 'segmentStart'\n  | 'configReady'\n  | 'dataReady'\n  | 'domLoaded'\n  | 'destroy'\n  | 'error';\n\nexport type EventsMap = { [key in CamelizedAnimationEventName]: AnimationEventName };\n\nexport type AnimationFilename = string;\nexport type AnimationEventName = import('lottie-web').AnimationEventName;\nexport type AnimationItem = import('lottie-web').AnimationItem;\nexport type LottiePlayer = typeof import('lottie-web').default;\n\n/**\n * @example\n * import player from 'lottie-web';\n * const factory = () => player;\n */\ntype LottiePlayerFactory = () => LottiePlayer;\n\n/**\n * @example\n * const factory = () => import('lottie-web');\n */\ntype LottieLoader = () => Promise<typeof import('lottie-web')>;\n\nexport type LottiePlayerFactoryOrLoader = LottiePlayerFactory | LottieLoader;\n\nexport interface LottieOptions {\n  // Determines whether to load files on a separate worker. Note: workers cannot load\n  // animations from URLs (if `options.path` is defined).\n  useWebWorker?: boolean;\n  player: LottiePlayerFactoryOrLoader;\n}\n\nexport type RendererType = import('lottie-web').RendererType;\n\nexport type AnimationConfigWithData<R extends RendererType = 'svg'> =\n  import('lottie-web').AnimationConfigWithData<R>;\nexport type AnimationConfigWithPath<R extends RendererType = 'svg'> =\n  import('lottie-web').AnimationConfigWithPath<R>;\n\nexport type AnimationOptions<R extends RendererType = 'svg'> =\n  | Partial<AnimationConfigWithData<R>>\n  | Partial<AnimationConfigWithPath<R>>;\n\nexport const LOTTIE_OPTIONS = new InjectionToken<LottieOptions>('LottieOptions');\n","import { Injectable, NgZone, inject, ɵisPromise } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { map, mergeMap, shareReplay, tap } from 'rxjs/operators';\n\nimport {\n  LOTTIE_OPTIONS,\n  LottiePlayer,\n  AnimationItem,\n  AnimationOptions,\n  AnimationConfigWithData,\n  AnimationConfigWithPath,\n} from './symbols';\n\nfunction convertPlayerOrLoaderToObservable(): Observable<LottiePlayer> {\n  const ngZone = inject(NgZone);\n  const { player, useWebWorker } = inject(LOTTIE_OPTIONS);\n\n  const player$ = new Observable<LottiePlayer>(subscriber => {\n    // Call the `player` function lazily — only when a subscriber\n    // arrives — to avoid importing `lottie-web` on the server, as it will\n    // fail with a \"document is not defined\" error.\n    const playerOrLoader = ngZone.runOutsideAngular(() => player());\n\n    // We need to use `isPromise` instead of checking whether\n    // `result instanceof Promise`. In zone.js patched environments, `global.Promise`\n    // is the `ZoneAwarePromise`. Some APIs, which are likely not patched by zone.js\n    // for certain reasons, might not work with `instanceof`. For instance, the dynamic\n    // import `() => import('./chunk.js')` returns a native promise (not a `ZoneAwarePromise`),\n    // causing this check to be falsy.\n    if (ɵisPromise(playerOrLoader)) {\n      playerOrLoader\n        .then(module => {\n          subscriber.next(module.default || module);\n          subscriber.complete();\n        })\n        .catch(error => subscriber.error(error));\n    } else {\n      subscriber.next(playerOrLoader);\n      subscriber.complete();\n    }\n  });\n\n  return player$.pipe(\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    tap(player => (player as any).useWebWorker?.(useWebWorker)),\n    shareReplay({ bufferSize: 1, refCount: true }),\n  );\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AnimationLoader {\n  protected player$ = convertPlayerOrLoaderToObservable().pipe(\n    mergeMap(player => raf$(this.ngZone).pipe(map(() => player))),\n  );\n\n  private ngZone = inject(NgZone);\n\n  loadAnimation(\n    options: AnimationConfigWithData | AnimationConfigWithPath,\n  ): Observable<AnimationItem> {\n    return this.player$.pipe(map(player => this.createAnimationItem(player, options)));\n  }\n\n  resolveOptions(\n    options: AnimationOptions | null,\n    container: HTMLElement,\n  ): AnimationConfigWithData | AnimationConfigWithPath {\n    return Object.assign(\n      {\n        container,\n        renderer: 'svg',\n        loop: true,\n        autoplay: true,\n      },\n      options,\n    );\n  }\n\n  protected createAnimationItem(\n    player: LottiePlayer,\n    options: AnimationConfigWithData | AnimationConfigWithPath,\n  ): AnimationItem {\n    return this.ngZone.runOutsideAngular(() => player.loadAnimation(options));\n  }\n}\n\nfunction raf$(ngZone: NgZone) {\n  return new Observable<void>(subscriber => {\n    const requestId = ngZone.runOutsideAngular(() =>\n      requestAnimationFrame(() => {\n        subscriber.next();\n        subscriber.complete();\n      }),\n    );\n    return () => cancelAnimationFrame(requestId);\n  });\n}\n","import { DestroyRef, inject, Injectable } from '@angular/core';\nimport { map, switchMap } from 'rxjs';\n\nimport { AnimationLoader } from '../animation-loader';\nimport type { AnimationConfigWithData, AnimationConfigWithPath, AnimationItem } from '../symbols';\n\n@Injectable({ providedIn: 'root' })\nexport class CacheableAnimationLoader extends AnimationLoader {\n  /** Cache storing animation data as JSON strings, keyed by file path */\n  private cache = new Map<string, string>();\n\n  /** Tracks in-flight HTTP requests to prevent duplicate fetches for the same animation */\n  private pending = new Map<string, Promise<string>>();\n\n  constructor() {\n    super();\n\n    inject(DestroyRef).onDestroy(() => {\n      this.cache.clear();\n      this.pending.clear();\n    });\n  }\n\n  loadAnimation(options: AnimationConfigWithData | AnimationConfigWithPath) {\n    return this.player$.pipe(\n      map(async player => {\n        // Transform options to either use cached data or wait for pending requests.\n        // This prevents duplicate HTTP requests when multiple animations with the\n        // same path are loaded simultaneously before the first request completes.\n        const transformedOptions = await this.transformOptions(options);\n        const animationItem = this.createAnimationItem(player, transformedOptions);\n\n        // For path-based animations, listen for `config_ready` to cache the data.\n        this.awaitConfigAndCache(options, animationItem);\n\n        return animationItem;\n      }),\n      // Flatten Promise<AnimationItem> to AnimationItem for RxJS stream compatibility.\n      switchMap(promise => promise),\n    );\n  }\n\n  /**\n   * Sets up caching for path-based animations by listening to the `config_ready` event.\n   * Only the first request for a given path will register this listener - subsequent\n   * requests will be handled by transformOptions.\n   */\n  private awaitConfigAndCache(\n    options: AnimationConfigWithData | AnimationConfigWithPath,\n    animationItem: AnimationItem,\n  ): void {\n    if (!this.isAnimationConfigWithPath(options)) {\n      return;\n    }\n\n    const path = options.path!;\n\n    // Skip if already cached or another instance is already listening.\n    if (this.cache.has(path) || this.pending.has(path)) {\n      return;\n    }\n\n    // Create a promise that resolves when lottie-web fires `config_ready`.\n    const promise = new Promise<string>(resolve => {\n      animationItem.addEventListener('config_ready', () => {\n        // Serialize animation data to string to avoid object mutation issues.\n        // lottie-web cannot re-use animationData objects between animations.\n        const data = JSON.stringify(animationItem['animationData']);\n        this.cache.set(path, data);\n        this.pending.delete(path);\n        resolve(data);\n      });\n    });\n\n    this.pending.set(path, promise);\n  }\n\n  /**\n   * Transforms animation options to use cached data when available or wait for\n   * pending requests to complete. This prevents duplicate HTTP requests.\n   *\n   * Flow:\n   * 1. If cached: return immediately with `animationData`\n   * 2. If loading: await the pending promise, then return with `animationData`\n   * 3. If first request: return original options with path (triggers HTTP fetch)\n   */\n  private async transformOptions(\n    options: AnimationConfigWithData | AnimationConfigWithPath,\n  ): Promise<AnimationConfigWithData | AnimationConfigWithPath> {\n    if (!this.isAnimationConfigWithPath(options)) {\n      return options;\n    }\n\n    const path = options.path!;\n\n    // Cache hit: return parsed `animationData` immediately.\n    if (this.cache.has(path)) {\n      return {\n        ...options,\n        path: undefined,\n        // Parse JSON to create a new object - lottie-web requires fresh objects.\n        animationData: JSON.parse(this.cache.get(path)!),\n      };\n    }\n\n    // Pending request: wait for the first request to complete, then use its data.\n    if (this.pending.has(path)) {\n      const data = await this.pending.get(path)!;\n      return {\n        ...options,\n        path: undefined,\n        animationData: JSON.parse(data),\n      };\n    }\n\n    // First request: let lottie-web fetch the animation via the path option.\n    return options;\n  }\n\n  private isAnimationConfigWithPath(\n    options: Record<string, unknown>,\n  ): options is AnimationConfigWithPath {\n    return typeof options.path === 'string';\n  }\n}\n","import { Provider } from '@angular/core';\n\nimport { AnimationLoader } from './animation-loader';\nimport { LottieOptions, LOTTIE_OPTIONS } from './symbols';\nimport { CacheableAnimationLoader } from './cacheable-animation-loader/cacheable-animation-loader';\n\nexport function provideCacheableAnimationLoader(): Provider[] {\n  return [\n    {\n      provide: AnimationLoader,\n      useExisting: CacheableAnimationLoader,\n    },\n  ];\n}\n\nexport function provideLottieOptions(options: LottieOptions): Provider[] {\n  return [\n    {\n      provide: LOTTIE_OPTIONS,\n      useValue: options,\n    },\n  ];\n}\n","import {\n  Directive,\n  Output,\n  SimpleChanges,\n  NgZone,\n  inject,\n  input,\n  PLATFORM_ID,\n  OnDestroy,\n} from '@angular/core';\n\nimport { Subject, BehaviorSubject, Observable, defer } from 'rxjs';\nimport { filter, switchMap } from 'rxjs/operators';\n\nimport {\n  AnimationOptions,\n  BMCompleteEvent,\n  BMCompleteLoopEvent,\n  BMEnterFrameEvent,\n  BMSegmentStartEvent,\n  BMDestroyEvent,\n  BMRenderFrameErrorEvent,\n  BMConfigErrorEvent,\n  AnimationItem,\n  AnimationEventName,\n} from './symbols';\nimport { AnimationLoader } from './animation-loader';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Directive({ selector: '[lottie]' })\nexport class BaseDirective implements OnDestroy {\n  options = input<AnimationOptions | null>(null);\n\n  containerClass = input<string | null>(null);\n\n  styles = input<Partial<CSSStyleDeclaration> | null>(null);\n\n  /**\n   * `animationCreated` is dispatched after calling `loadAnimation`.\n   */\n  @Output() readonly animationCreated = this.getAnimationItem();\n\n  /**\n   * `complete` is dispatched after completing the last frame.\n   */\n  @Output() readonly complete =\n    this.awaitAnimationItemAndStartListening<BMCompleteEvent>('complete');\n\n  /**\n   * `loopComplete` is dispatched after completing the frame loop.\n   */\n  @Output() readonly loopComplete =\n    this.awaitAnimationItemAndStartListening<BMCompleteLoopEvent>('loopComplete');\n\n  /**\n   * `enterFrame` is dispatched after entering the new frame.\n   */\n  @Output() readonly enterFrame =\n    this.awaitAnimationItemAndStartListening<BMEnterFrameEvent>('enterFrame');\n\n  /**\n   * `segmentStart` is dispatched when the new segment is adjusted.\n   */\n  @Output() readonly segmentStart =\n    this.awaitAnimationItemAndStartListening<BMSegmentStartEvent>('segmentStart');\n\n  /**\n   * Original event name is `config_ready`. `config_ready` is dispatched\n   * after the needed renderer is configured.\n   */\n  @Output() readonly configReady = this.awaitAnimationItemAndStartListening<void>('config_ready');\n\n  /**\n   * Original event name is `data_ready`. `data_ready` is dispatched\n   * when all parts of the animation have been loaded.\n   */\n  @Output() readonly dataReady = this.awaitAnimationItemAndStartListening<void>('data_ready');\n\n  /**\n   * Original event name is `DOMLoaded`. `DOMLoaded` is dispatched\n   * when elements have been added to the DOM.\n   */\n  @Output() readonly domLoaded = this.awaitAnimationItemAndStartListening<void>('DOMLoaded');\n\n  /**\n   * `destroy` will be dispatched when the component gets destroyed,\n   * it's handy for releasing resources.\n   */\n  @Output() readonly destroy = this.awaitAnimationItemAndStartListening<BMDestroyEvent>('destroy');\n\n  /**\n   * `error` will be dispatched if the Lottie player could not render\n   * some frame or parse config.\n   */\n  @Output() readonly error = this.awaitAnimationItemAndStartListening<\n    BMRenderFrameErrorEvent | BMConfigErrorEvent\n  >('error');\n\n  private ngZone = inject(NgZone);\n  private isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n  private animationLoader = inject(AnimationLoader);\n\n  private loadAnimation$ = new Subject<[SimpleChanges, HTMLElement]>();\n  private animationItem$ = new BehaviorSubject<AnimationItem | null>(null);\n\n  constructor() {\n    this.setupLoadAnimationListener();\n  }\n\n  ngOnDestroy(): void {\n    this.destroyAnimation();\n    this.loadAnimation$.complete();\n    this.animationItem$.complete();\n  }\n\n  protected loadAnimation(changes: SimpleChanges, container: HTMLElement): void {\n    this.ngZone.runOutsideAngular(() => this.loadAnimation$.next([changes, container]));\n  }\n\n  private getAnimationItem(): Observable<AnimationItem> {\n    return defer(() => this.animationItem$).pipe(\n      filter(\n        (animationItem: AnimationItem | null): animationItem is AnimationItem =>\n          animationItem !== null,\n      ),\n    );\n  }\n\n  private awaitAnimationItemAndStartListening<T>(name: AnimationEventName): Observable<T> {\n    return this.getAnimationItem().pipe(\n      switchMap(\n        animationItem =>\n          // `fromEvent` will try to call `removeEventListener` when `unsubscribe()` is invoked.\n          // The problem is that `ngOnDestroy()` is called before Angular unsubscribes from\n          // `@Output()` properties, thus `animationItem` will be `null` already, also `lottie-web`\n          // removes event listeners when calling `destroy()`.\n          new Observable<T>(observer => {\n            this.ngZone.runOutsideAngular(() => {\n              animationItem.addEventListener(name, event => {\n                this.ngZone.runOutsideAngular(() => {\n                  observer.next(event as T);\n                });\n              });\n            });\n          }),\n      ),\n    );\n  }\n\n  private setupLoadAnimationListener(): void {\n    const loadAnimation$ = this.loadAnimation$.pipe(\n      filter(([changes]) => this.isBrowser && changes.options !== undefined),\n    );\n\n    loadAnimation$\n      .pipe(\n        switchMap(([changes, container]) => {\n          this.destroyAnimation();\n          return this.animationLoader.loadAnimation(\n            this.animationLoader.resolveOptions(changes.options.currentValue, container),\n          );\n        }),\n      )\n      .subscribe(animationItem => {\n        this.ngZone.run(() => this.animationItem$.next(animationItem));\n      });\n  }\n\n  private destroyAnimation(): void {\n    const animationItem = this.animationItem$.getValue();\n    // The `ng-lottie` component or the `lottie` directive can be destroyed\n    // before the `animationItem` is set, thus it will fail with\n    // `Cannot read property 'destroy' of null`.\n    // Potentially it can happen if the directive gets destroyed before change\n    // detection is run.\n    if (animationItem === null) {\n      return;\n    }\n\n    // `destroy()` will remove all events listeners.\n    animationItem.destroy();\n    this.animationItem$.next(null);\n  }\n}\n","import { Directive, ElementRef, OnChanges, SimpleChanges, inject } from '@angular/core';\n\nimport { BaseDirective } from './base.directive';\n\n@Directive({ selector: '[lottie]', standalone: true })\nexport class LottieDirective extends BaseDirective implements OnChanges {\n  private host = inject(ElementRef);\n\n  ngOnChanges(changes: SimpleChanges): void {\n    super.loadAnimation(changes, this.host.nativeElement);\n  }\n}\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  Input,\n  ElementRef,\n  ViewChild,\n  OnChanges,\n  SimpleChanges,\n  input,\n} from '@angular/core';\nimport { NgClass, NgStyle } from '@angular/common';\n\nimport { BaseDirective } from './base.directive';\n\n@Component({\n  selector: 'ng-lottie',\n  template: `\n    <div\n      #container\n      [style.width]=\"width() || '100%'\"\n      [style.height]=\"height() || '100%'\"\n      [ngStyle]=\"styles()\"\n      [ngClass]=\"containerClass()\"\n    ></div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgStyle, NgClass],\n})\nexport class LottieComponent extends BaseDirective implements OnChanges {\n  width = input<string | null>(null);\n  height = input<string | null>(null);\n\n  @ViewChild('container', { static: true }) container: ElementRef<HTMLElement> = null!;\n\n  ngOnChanges(changes: SimpleChanges): void {\n    super.loadAnimation(changes, this.container.nativeElement);\n  }\n}\n","import { AnimationFilename } from './symbols';\n\nexport function transformAnimationFilenameToKey(animation: AnimationFilename): string {\n  const [animationName] = animation.split('.json');\n  return `animation-${animationName}`;\n}\n","import { inject, Injectable, makeStateKey, TransferState } from '@angular/core';\n\nimport { AnimationFilename } from './symbols';\nimport { transformAnimationFilenameToKey } from './server';\n\n@Injectable({ providedIn: 'root' })\nexport class LottieTransferState {\n  private transferState = inject(TransferState);\n\n  get<T>(animation: AnimationFilename): T | null {\n    const animationKey = transformAnimationFilenameToKey(animation);\n    const stateKey = makeStateKey<T>(animationKey);\n    return this.transferState.get(stateKey, null);\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ɵisPromise","map","switchMap"],"mappings":"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"}