{"version":3,"file":"angular-three-soba-loaders.mjs","sources":["../../../../libs/soba/loaders/src/lib/texture-loader/texture-loader.ts","../../../../libs/soba/loaders/src/lib/gltf-loader/gltf-loader.ts","../../../../libs/soba/loaders/src/lib/progress/progress.ts","../../../../libs/soba/loaders/src/lib/loader/loader.ts","../../../../libs/soba/loaders/src/angular-three-soba-loaders.ts"],"sourcesContent":["import { is, NgtLoader, NgtStore } from '@angular-three/core';\nimport { Injectable } from '@angular/core';\nimport { defer, map, Observable, tap } from 'rxjs';\nimport * as THREE from 'three';\n\nexport const IsObject = (url: any): url is Record<string, string> =>\n  url === Object(url) && !is.arr(url) && typeof url !== 'function';\n\n@Injectable()\nexport class NgtTextureLoader {\n  constructor(private store: NgtStore, private loader: NgtLoader) {}\n\n  load<TInput extends string | string[] | Record<string, string>>(\n    input: TInput\n  ): Observable<\n    TInput extends any[] ? THREE.Texture[] : TInput extends object ? Record<keyof TInput, THREE.Texture> : THREE.Texture\n  > {\n    return defer(() => this.loader.use(THREE.TextureLoader, IsObject(input) ? Object.values(input) : input)).pipe(\n      tap((textures: THREE.Texture | THREE.Texture[]) => {\n        const gl = this.store.get((s) => s.gl);\n        if (gl) {\n          (is.arr(textures) ? textures : [textures]).forEach(gl.initTexture.bind(gl));\n        }\n      }),\n      map((textures: THREE.Texture | THREE.Texture[]) => {\n        if (IsObject(input)) {\n          return Object.keys(input).reduce((record, key, index) => {\n            record[key as keyof TInput] = (textures as THREE.Texture[])[index];\n            return record;\n          }, {} as Record<keyof TInput, THREE.Texture>);\n        }\n\n        return textures;\n      })\n    ) as Observable<\n      TInput extends any[]\n        ? THREE.Texture[]\n        : TInput extends object\n        ? Record<keyof TInput, THREE.Texture>\n        : THREE.Texture\n    >;\n  }\n}\n","import { NgtLoader, NgtObjectMap } from '@angular-three/core';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport * as THREE from 'three';\n// @ts-ignore\nimport { MeshoptDecoder } from 'three-stdlib';\nimport { DRACOLoader } from 'three-stdlib/loaders/DRACOLoader';\nimport { GLTF, GLTFLoader } from 'three-stdlib/loaders/GLTFLoader';\n\nlet dracoLoader: DRACOLoader | null = null;\n\nfunction _extensions(useDraco: boolean | string, useMeshOpt: boolean, extensions?: (loader: GLTFLoader) => void) {\n  return (loader: THREE.Loader) => {\n    if (extensions) {\n      extensions(loader as GLTFLoader);\n    }\n\n    if (useDraco) {\n      if (!dracoLoader) {\n        dracoLoader = new DRACOLoader();\n      }\n\n      dracoLoader.setDecoderPath(\n        typeof useDraco === 'string' ? useDraco : 'https://www.gstatic.com/draco/versioned/decoders/1.4.3/'\n      );\n      (loader as GLTFLoader).setDRACOLoader(dracoLoader);\n    }\n\n    if (useMeshOpt) {\n      (loader as GLTFLoader).setMeshoptDecoder(\n        typeof MeshoptDecoder === 'function' ? MeshoptDecoder() : MeshoptDecoder\n      );\n    }\n  };\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NgtGLTFLoader {\n  constructor(private loader: NgtLoader) {}\n\n  load<TInput extends string | string[]>(\n    path: TInput,\n    useDraco: boolean | string = true,\n    useMeshOpt = true,\n    extensions?: (loader: GLTFLoader) => void\n  ): Observable<TInput extends string[] ? (GLTF & NgtObjectMap)[] : GLTF & NgtObjectMap> {\n    return this.loader.use(GLTFLoader, path, _extensions(useDraco, useMeshOpt, extensions)) as Observable<\n      TInput extends string[] ? (GLTF & NgtObjectMap)[] : GLTF & NgtObjectMap\n    >;\n  }\n}\n","import { NgtComponentStore } from '@angular-three/core';\nimport { Injectable } from '@angular/core';\nimport * as THREE from 'three';\n\ninterface NgtSobaProgressResult {\n  errors: string[];\n  active: boolean;\n  progress: number;\n  item: string;\n  loaded: number;\n  total: number;\n}\n\n@Injectable()\nexport class NgtSobaProgress extends NgtComponentStore<NgtSobaProgressResult> {\n  constructor() {\n    super();\n    let saveLastTotalLoaded = 0;\n    this.set({ active: false, errors: [] });\n    THREE.DefaultLoadingManager.onStart = (item, loaded, total) => {\n      this.set({\n        active: true,\n        item,\n        loaded,\n        total,\n        progress: ((loaded - saveLastTotalLoaded) / (total - saveLastTotalLoaded)) * 100,\n      });\n    };\n\n    THREE.DefaultLoadingManager.onLoad = () => {\n      this.set({ active: false });\n    };\n\n    THREE.DefaultLoadingManager.onError = (url: string) => {\n      this.set((state) => ({ errors: [...state.errors, url] }));\n    };\n\n    THREE.DefaultLoadingManager.onProgress = (item, loaded, total) => {\n      if (loaded === total) {\n        saveLastTotalLoaded = total;\n      }\n      this.set({\n        active: true,\n        item,\n        loaded,\n        total,\n        progress: ((loaded - saveLastTotalLoaded) / (total - saveLastTotalLoaded)) * 100 || 100,\n      });\n    };\n  }\n}\n","import { NgtComponentStore, tapEffect } from '@angular-three/core';\nimport { AsyncPipe, NgIf } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  NgModule,\n  NgZone,\n  ViewChild,\n} from '@angular/core';\nimport { Observable, timer } from 'rxjs';\nimport { NgtSobaProgress } from '../progress/progress';\n\ninterface NgtSobaLoaderState {\n  shown: boolean;\n  loaderConfig: {\n    containerClass?: string;\n    innerContainerClass?: string;\n    barClass?: string;\n    dataClass?: string;\n    dataInterpolation?: (value: number) => string;\n  };\n}\n\n@Component({\n  selector: 'ngt-soba-loader',\n  standalone: true,\n  template: `\n    <ng-container *ngIf=\"vm$ | async as vm\">\n      <div *ngIf=\"vm.shown\" class=\"loader-container\" [style.opacity]=\"vm.active ? 1 : 0\" [class]=\"vm.containerClass\">\n        <div>\n          <div class=\"inner-loader\" [class]=\"vm.innerContainerClass\">\n            <div\n              class=\"inner-loader-bar\"\n              [class]=\"vm.barClass\"\n              [style.transform]=\"'scaleX(' + vm.progress / 100 + ')'\"\n            ></div>\n            <span #progressSpan class=\"inner-loader-data\" [class]=\"vm.dataClass\"></span>\n          </div>\n        </div>\n      </div>\n    </ng-container>\n  `,\n  imports: [NgIf, AsyncPipe],\n  styles: [\n    // language=SCSS\n    `\n      .loader-container {\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n        background: #171717;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        transition: opacity 300ms ease;\n        z-index: 1000;\n      }\n\n      .inner-loader {\n        width: 100px;\n        height: 3px;\n        background: #272727;\n        text-align: center;\n      }\n\n      .inner-loader-bar {\n        height: 3px;\n        width: 100%;\n        background: white;\n        transition: transform 200ms;\n        transform-origin: left center;\n      }\n\n      .inner-loader-data {\n        display: inline-block;\n        position: relative;\n        font-variant-numeric: tabular-nums;\n        margin-top: 0.8em;\n        color: #f0f0f0;\n        font-size: 0.6em;\n        font-family: -apple-system, BlinkMacSystemFont, 'Inter', 'Segoe UI', 'Helvetica Neue', Helvetica, Arial, Roboto,\n          Ubuntu, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n        white-space: nowrap;\n      }\n    `,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [NgtSobaProgress],\n})\nexport class NgtSobaLoader extends NgtComponentStore<NgtSobaLoaderState> implements AfterViewInit {\n  readonly vm$: Observable<{\n    shown: boolean;\n    containerClass: string | undefined;\n    innerContainerClass: string | undefined;\n    dataClass: string | undefined;\n    barClass: string | undefined;\n    active: boolean;\n    progress: number;\n  }> = this.select(\n    this.select((s) => s.shown),\n    this.select((s) => s.loaderConfig),\n    this.sobaProgress.select((s) => s.active),\n    this.sobaProgress.select((s) => s.progress),\n    (shown, { dataClass, barClass, containerClass, innerContainerClass }, active, progress) => ({\n      shown,\n      containerClass,\n      innerContainerClass,\n      dataClass,\n      barClass,\n      active,\n      progress,\n    })\n  );\n\n  private initShown$ = this.select(\n    this.select((s) => s.shown),\n    this.sobaProgress.select((s) => s.active),\n    (shown, active) => ({ shown, active })\n  );\n\n  private progress$ = this.select(\n    this.select((s) => s.loaderConfig.dataInterpolation),\n    this.sobaProgress.select((s) => s.progress),\n    (dataInterpolation, progress) => ({ dataInterpolation, progress })\n  );\n\n  @ViewChild('progressSpan') progressSpan?: ElementRef<HTMLSpanElement>;\n\n  private _progress = 0;\n\n  constructor(private sobaProgress: NgtSobaProgress, private zone: NgZone) {\n    super();\n    this.set({\n      shown: sobaProgress.get((s) => s.active),\n      loaderConfig: {\n        dataInterpolation: (value: number) => `Loading ${value.toFixed(2)}%`,\n      },\n    });\n  }\n\n  ngAfterViewInit() {\n    this.zone.runOutsideAngular(() => {\n      this.setShown(this.initShown$);\n      this.setProgress(this.progress$);\n    });\n  }\n\n  private readonly setShown = this.effect<{\n    shown: boolean;\n    active: boolean;\n  }>(\n    tapEffect(({ shown, active }) => {\n      if (shown !== active) {\n        const sub = timer(300).subscribe(() => {\n          this.set({ shown: active });\n        });\n\n        return sub.unsubscribe.bind(sub);\n      }\n      return;\n    })\n  );\n\n  private readonly setProgress = this.effect<{\n    progress: number;\n    dataInterpolation: NgtSobaLoaderState['loaderConfig']['dataInterpolation'];\n  }>(\n    tapEffect(({ progress, dataInterpolation }) => {\n      let rafId: ReturnType<typeof requestAnimationFrame>;\n\n      const updateProgress = () => {\n        if (this.progressSpan) {\n          this._progress += (progress - this._progress) / 2;\n          if (this._progress > 0.95 * progress || progress === 100) this._progress = progress;\n          this.progressSpan.nativeElement.innerText = dataInterpolation?.(this._progress) || '';\n\n          if (this._progress < progress) rafId = requestAnimationFrame(updateProgress);\n        }\n      };\n\n      updateProgress();\n\n      return () => {\n        if (rafId) {\n          cancelAnimationFrame(rafId);\n        }\n      };\n    })\n  );\n}\n\n@NgModule({\n  imports: [NgtSobaLoader],\n  exports: [NgtSobaLoader],\n})\nexport class NgtSobaLoaderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.NgtSobaProgress"],"mappings":"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"}