{"version":3,"file":"angular-three-soba-misc.mjs","sources":["../../../../libs/soba/misc/src/lib/fbo/fbo.ts","../../../../libs/soba/misc/src/lib/depth-buffer/depth-buffer.ts","../../../../libs/soba/misc/src/lib/html/html.ts","../../../../libs/soba/misc/src/angular-three-soba-misc.ts"],"sourcesContent":["import { NgtComponentStore, NgtStore, Ref, tapEffect } from '@angular-three/core';\nimport { Injectable } from '@angular/core';\nimport { filter, isObservable, Observable, of, tap } from 'rxjs';\nimport * as THREE from 'three';\n\ninterface FBOSettings<T extends boolean = false> extends THREE.WebGLRenderTargetOptions {\n  multisample?: T;\n  samples?: number;\n}\n\ninterface NgtSobaFBOState {\n  target: Ref<THREE.WebGLRenderTarget>;\n  width: number;\n  height: number;\n  settings: FBOSettings<boolean>;\n}\n\nexport interface NgtSobaFBOParams<T extends boolean = false> {\n  width?: number | FBOSettings<T>;\n  height?: number;\n  settings?: FBOSettings<T>;\n}\n\n@Injectable()\nexport class NgtSobaFBO extends NgtComponentStore<NgtSobaFBOState> {\n  constructor(private store: NgtStore) {\n    super();\n    this.set({ target: new Ref() });\n  }\n\n  use<T extends boolean = false>(\n    paramsFactory: (defaultParams: Partial<NgtSobaFBOParams>) => NgtSobaFBOParams | Observable<NgtSobaFBOParams>\n  ): Ref<THREE.WebGLRenderTarget> {\n    const targetRef = this.get((s) => s.target);\n    const params = paramsFactory({});\n    const params$ = isObservable(params) ? params : of(params);\n\n    this.store.onReady(() => {\n      this.setTarget(params$);\n      this.setup(\n        this.select(\n          targetRef.pipe(filter((target) => !!target)),\n          this.select((s) => s.width),\n          this.select((s) => s.height),\n          this.select((s) => s.settings)\n        )\n      );\n    });\n\n    return targetRef;\n  }\n\n  private readonly setTarget = this.effect<{\n    width?: number | FBOSettings<any>;\n    height?: number;\n    settings?: FBOSettings<any>;\n  }>(\n    tap(({ width, height, settings }) => {\n      const targetRef = this.get((s) => s.target);\n      const { gl, size, viewport } = this.store.get();\n\n      const _width = typeof width === 'number' ? width : size.width * viewport.dpr;\n      const _height = typeof height === 'number' ? height : size.height * viewport.dpr;\n      const _settings = (typeof width === 'number' ? settings : (width as FBOSettings)) || {};\n\n      const { samples, ...targetSettings } = _settings;\n\n      targetRef.set(() => {\n        const target = new THREE.WebGLRenderTarget(_width, _height, {\n          minFilter: THREE.LinearFilter,\n          magFilter: THREE.LinearFilter,\n          type: THREE.HalfFloatType,\n          encoding: gl.outputEncoding,\n          ...(targetSettings || {}),\n        });\n        if (samples) {\n          target.samples = samples;\n        }\n        return target;\n      });\n\n      this.set({\n        width: _width,\n        height: _height,\n        settings: _settings,\n      });\n    })\n  );\n\n  private readonly setup = this.effect(\n    tapEffect(() => {\n      const {\n        target,\n        width,\n        height,\n        settings: { samples },\n      } = this.get();\n\n      target.value.setSize(width, height);\n      if (samples) target.value.samples = samples;\n\n      return ({ complete }) => {\n        if (complete) {\n          target.value.dispose();\n        }\n      };\n    })\n  );\n}\n","import { NgtComponentStore, NgtStore, Ref, tapEffect } from '@angular-three/core';\nimport { Injectable, Provider } from '@angular/core';\nimport { filter, isObservable, map, Observable, of, Subscription, tap } from 'rxjs';\nimport * as THREE from 'three';\nimport { NgtSobaFBO } from '../fbo/fbo';\n\nexport interface NgtSobaDepthBufferState {\n  depthTexture: Ref<THREE.WebGLRenderTarget['depthTexture']>;\n  depthFBO: THREE.WebGLRenderTarget;\n  depthConfig: { depthTexture: THREE.WebGLRenderTarget['depthTexture'] };\n  frames: number;\n  size: number;\n  width: number;\n  height: number;\n}\n\nexport interface NgtSobaDepthBufferParams {\n  size?: number;\n  frames?: number;\n}\n\n@Injectable()\nexport class NgtSobaDepthBuffer extends NgtComponentStore<NgtSobaDepthBufferState> {\n  constructor(private store: NgtStore, private fbo: NgtSobaFBO) {\n    super();\n    this.set({ depthTexture: new Ref() });\n  }\n\n  private count = 0;\n  private useSubscription?: Subscription;\n\n  use(\n    paramsFactory: (\n      defaultParams: Partial<NgtSobaDepthBufferParams>\n    ) => NgtSobaDepthBufferParams | Observable<NgtSobaDepthBufferParams>\n  ): Ref<THREE.WebGLRenderTarget['depthTexture']> {\n    if (this.useSubscription) {\n      this.useSubscription.unsubscribe();\n    }\n    const params = paramsFactory({ size: 256, frames: Infinity });\n\n    const params$ = isObservable(params) ? params : of(params);\n\n    this.set(params$);\n\n    const depthTextureRef = this.get((s) => s.depthTexture);\n\n    this.useSubscription = this.store.onReady(() => {\n      this.setDepthConfig(this.select((s) => s.size));\n      this.setDepthFBO(this.select((s) => s.depthConfig));\n\n      return () => {\n        if (this.useSubscription) {\n          this.useSubscription.unsubscribe();\n        }\n      };\n    });\n\n    return depthTextureRef;\n  }\n\n  private readonly setDepthConfig = this.effect(\n    tap(() => {\n      const size = this.get((s) => s.size);\n      const dpr = this.store.get((s) => s.viewport.dpr);\n      const { width, height } = this.store.get((s) => s.size);\n      const w = size || width * dpr;\n      const h = size || height * dpr;\n\n      this.set({ width: w, height: h });\n      this.set(\n        this.select(\n          this.select((s) => s.width),\n          this.select((s) => s.height)\n        ).pipe(\n          map(() => {\n            const { width, height } = this.get();\n            const depthTexture = new THREE.DepthTexture(width, height);\n            depthTexture.format = THREE.DepthFormat;\n            depthTexture.type = THREE.UnsignedShortType;\n            return { depthConfig: { depthTexture } };\n          })\n        )\n      );\n    })\n  );\n\n  private readonly setDepthFBO = this.effect(\n    tapEffect(() => {\n      const sub = this.fbo\n        .use(() =>\n          this.select(\n            this.select((s) => s.depthConfig),\n            this.select((s) => s.width),\n            this.select((s) => s.height),\n            (depthConfig, width, height) => ({\n              width,\n              height,\n              settings: depthConfig,\n            })\n          )\n        )\n        .pipe(filter((fbo) => !!fbo))\n        .subscribe((depthFBO) => {\n          this.set({ depthFBO });\n        });\n\n      sub.add(this.setFboBeforeRender(this.select((s) => s.depthFBO)));\n\n      return () => {\n        sub.unsubscribe();\n      };\n    })\n  );\n\n  private readonly setFboBeforeRender = this.effect(\n    tapEffect(() => {\n      const { depthFBO, frames } = this.get();\n\n      return this.store.registerBeforeRender({\n        callback: ({ gl, scene, camera }) => {\n          if (depthFBO && (frames === Infinity || this.count < frames)) {\n            gl.setRenderTarget(depthFBO);\n            gl.render(scene, camera);\n            gl.setRenderTarget(null);\n            this.count++;\n          }\n        },\n      });\n    })\n  );\n}\n\nexport function provideSobaDepthBuffer(): Provider {\n  return [NgtSobaFBO, NgtSobaDepthBuffer];\n}\n","import {\n  BooleanInput,\n  coerceBooleanProperty,\n  coerceNumberProperty,\n  is,\n  NgtObjectPassThrough,\n  NgtObjectProps,\n  NgtObjectPropsState,\n  NumberInput,\n  provideNgtObject,\n  provideObjectHostRef,\n  provideObjectRef,\n  Ref,\n  startWithUndefined,\n  tapEffect,\n} from '@angular-three/core';\nimport { NgtGroup } from '@angular-three/core/group';\nimport { AsyncPipe, NgIf, NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  Input,\n  NgModule,\n  Output,\n  TemplateRef,\n  ViewChild,\n  ViewContainerRef,\n} from '@angular/core';\nimport type { Properties } from 'csstype';\nimport { Observable, tap } from 'rxjs';\nimport * as THREE from 'three';\n\nconst v1 = new THREE.Vector3();\nconst v2 = new THREE.Vector3();\nconst v3 = new THREE.Vector3();\n\nfunction defaultCalculatePosition(el: THREE.Object3D, camera: THREE.Camera, size: { width: number; height: number }) {\n  const objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n  objectPos.project(camera);\n  const widthHalf = size.width / 2;\n  const heightHalf = size.height / 2;\n  return [objectPos.x * widthHalf + widthHalf, -(objectPos.y * heightHalf) + heightHalf];\n}\n\nexport type CalculatePosition = typeof defaultCalculatePosition;\n\nfunction isObjectBehindCamera(el: THREE.Object3D, camera: THREE.Camera) {\n  const objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n  const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n  const deltaCamObj = objectPos.sub(cameraPos);\n  const camDir = camera.getWorldDirection(v3);\n  return deltaCamObj.angleTo(camDir) > Math.PI / 2;\n}\n\nfunction isObjectVisible(\n  el: THREE.Object3D,\n  camera: THREE.Camera,\n  raycaster: THREE.Raycaster,\n  occlude: THREE.Object3D[]\n) {\n  const elPos = v1.setFromMatrixPosition(el.matrixWorld);\n  const screenPos = elPos.clone();\n  screenPos.project(camera);\n  raycaster.setFromCamera(screenPos, camera);\n  const intersects = raycaster.intersectObjects(occlude, true);\n  if (intersects.length) {\n    const intersectionDistance = intersects[0].distance;\n    const pointDistance = elPos.distanceTo(raycaster.ray.origin);\n    return pointDistance < intersectionDistance;\n  }\n  return true;\n}\n\nfunction objectScale(el: THREE.Object3D, camera: THREE.Camera) {\n  if (is.orthographic(camera)) {\n    return camera.zoom;\n  }\n\n  if (is.perspective(camera)) {\n    const objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n    const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n    const vFOV = (camera.fov * Math.PI) / 180;\n    const dist = objectPos.distanceTo(cameraPos);\n    const scaleFOV = 2 * Math.tan(vFOV / 2) * dist;\n    return 1 / scaleFOV;\n  }\n\n  return 1;\n}\n\nfunction objectZIndex(el: THREE.Object3D, camera: THREE.Camera, zIndexRange: Array<number>) {\n  if (is.orthographic(camera) || is.perspective(camera)) {\n    const objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n    const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n    const dist = objectPos.distanceTo(cameraPos);\n    const A = (zIndexRange[1] - zIndexRange[0]) / (camera.far - camera.near);\n    const B = zIndexRange[1] - A * camera.far;\n    return Math.round(A * dist + B);\n  }\n  return undefined;\n}\n\nconst epsilon = (value: number) => (Math.abs(value) < 1e-10 ? 0 : value);\n\nfunction getCSSMatrix(matrix: THREE.Matrix4, multipliers: number[], prepend = '') {\n  let matrix3d = 'matrix3d(';\n  for (let i = 0; i !== 16; i++) {\n    matrix3d += epsilon(multipliers[i] * matrix.elements[i]) + (i !== 15 ? ',' : ')');\n  }\n  return prepend + matrix3d;\n}\n\nconst getCameraCSSMatrix = ((multipliers: number[]) => {\n  return (matrix: THREE.Matrix4) => getCSSMatrix(matrix, multipliers);\n})([1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1]);\n\nconst getObjectCSSMatrix = ((scaleMultipliers: (n: number) => number[]) => {\n  return (matrix: THREE.Matrix4, factor: number) =>\n    getCSSMatrix(matrix, scaleMultipliers(factor), 'translate(-50%,-50%)');\n})((f: number) => [1 / f, 1 / f, 1 / f, 1, -1 / f, -1 / f, -1 / f, -1, 1 / f, 1 / f, 1 / f, 1, 1, 1, 1, 1]);\ntype PointerEventsProperties =\n  | 'auto'\n  | 'none'\n  | 'visiblePainted'\n  | 'visibleFill'\n  | 'visibleStroke'\n  | 'visible'\n  | 'painted'\n  | 'fill'\n  | 'stroke'\n  | 'all'\n  | 'inherit';\n\nexport interface NgtSobaHtmlState extends NgtObjectPropsState<THREE.Group> {\n  prepend?: boolean;\n  center?: boolean;\n  fullscreen?: boolean;\n  eps: number;\n  portal?: HTMLElement;\n  distanceFactor?: number;\n  sprite: boolean;\n  transform: boolean;\n  zIndexRange: Array<number>;\n  occlude?: Ref<THREE.Object3D>[] | boolean;\n  calculatePosition: CalculatePosition;\n  wrapperClass?: string;\n  pointerEvents: PointerEventsProperties;\n  style?: Properties;\n  htmlClass: string;\n}\n\n@Directive({\n  selector: '[ngtSobaHtmlElement]',\n  standalone: true,\n})\nexport class NgtSobaHtmlElement {\n  constructor(public elementRef: ElementRef<HTMLElement>, public viewContainerRef: ViewContainerRef) {}\n}\n\n@Directive({\n  selector: 'ng-template[ngt-soba-html-content]',\n  standalone: true,\n})\nexport class NgtSobaHtmlContent {\n  constructor(public templateRef: TemplateRef<unknown>) {}\n}\n\n@Component({\n  selector: 'ngt-soba-html',\n  standalone: true,\n  template: `\n    <ngt-group [ngtObjectPassThrough]=\"this\"></ngt-group>\n\n    <ng-template #transformTemplate>\n      <div #transformedOuterDiv [style]=\"styles$ | async\">\n        <div #transformedInnerDiv [style]=\"transformInnerStyles$ | async\">\n          <ng-container [ngTemplateOutlet]=\"renderTemplate\" [ngTemplateOutletContext]=\"{ style$ }\"></ng-container>\n        </div>\n      </div>\n    </ng-template>\n\n    <ng-template #renderTemplate let-style$=\"style$\">\n      <div #renderedDiv [class]=\"htmlClass\" [style]=\"style$ | async\">\n        <ng-container *ngIf=\"content\" [ngTemplateOutlet]=\"content.templateRef\"></ng-container>\n      </div>\n    </ng-template>\n\n    <div ngtSobaHtmlElement></div>\n\n    <ng-content></ng-content>\n  `,\n  imports: [NgtGroup, NgtObjectPassThrough, NgtSobaHtmlElement, NgIf, AsyncPipe, NgTemplateOutlet],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [provideNgtObject(NgtSobaHtml), provideObjectRef(NgtSobaHtml), provideObjectHostRef(NgtSobaHtml)],\n})\nexport class NgtSobaHtml extends NgtObjectProps<THREE.Group, NgtSobaHtmlState> {\n  @Input() set prepend(prepend: BooleanInput) {\n    this.set({ prepend: coerceBooleanProperty(prepend) });\n  }\n\n  @Input() set center(center: BooleanInput) {\n    this.set({ center: coerceBooleanProperty(center) });\n  }\n\n  @Input() set fullscreen(fullscreen: BooleanInput) {\n    this.set({ fullscreen: coerceBooleanProperty(fullscreen) });\n  }\n\n  @Input() set eps(eps: NumberInput) {\n    this.set({ eps: coerceNumberProperty(eps) });\n  }\n\n  @Input() set portal(portal: HTMLElement) {\n    this.set({ portal });\n  }\n\n  @Input() set distanceFactor(distanceFactor: NumberInput) {\n    this.set({ distanceFactor: coerceNumberProperty(distanceFactor) });\n  }\n\n  @Input() set sprite(sprite: BooleanInput) {\n    this.set({ sprite: coerceBooleanProperty(sprite) });\n  }\n\n  @Input() set transform(transform: BooleanInput) {\n    this.set({ transform: coerceBooleanProperty(transform) });\n  }\n\n  @Input() set zIndexRange(zIndexRange: Array<number>) {\n    this.set({ zIndexRange });\n  }\n\n  @Input() set occlude(occlude: Ref<THREE.Object3D>[] | BooleanInput) {\n    this.set({\n      occlude: is.arr(occlude) ? occlude : coerceBooleanProperty(occlude),\n    });\n  }\n\n  @Output() occludeChange = new EventEmitter<boolean>();\n\n  @Input() set calculatePosition(calculatePosition: CalculatePosition) {\n    this.set({ calculatePosition });\n  }\n\n  @Input() set as(as: keyof HTMLElementTagNameMap) {\n    this.set({ as });\n  }\n\n  @Input() set wrapperClass(wrapperClass: string) {\n    this.set({ wrapperClass });\n  }\n\n  @Input() set pointerEvents(pointerEvents: PointerEventsProperties) {\n    this.set({ pointerEvents });\n  }\n\n  @Input() set style(style: Properties) {\n    this.set({ style });\n  }\n  get style$() {\n    return this.select((s) => s.style);\n  }\n\n  @Input() set htmlClass(htmlClass: string) {\n    this.set({ htmlClass });\n  }\n  get htmlClass() {\n    return this.get((s) => s.htmlClass);\n  }\n\n  @ViewChild('renderTemplate', { static: true })\n  renderTemplate!: TemplateRef<unknown>;\n\n  @ViewChild('transformTemplate', { static: true })\n  transformTemplate!: TemplateRef<unknown>;\n\n  @ViewChild(NgtSobaHtmlElement, { static: true })\n  defaultElement!: NgtSobaHtmlElement;\n\n  @ContentChild(NgtSobaHtmlElement)\n  customElement?: NgtSobaHtmlElement;\n\n  @ContentChild(NgtSobaHtmlContent) content?: NgtSobaHtmlContent;\n\n  @ViewChild('transformedOuterDiv')\n  transformedOuterDiv?: ElementRef<HTMLDivElement>;\n  @ViewChild('transformedInnerDiv')\n  transformedInnerDiv?: ElementRef<HTMLDivElement>;\n\n  private oldZoom = 0;\n  private oldPosition = [0, 0];\n  private isVisible = true;\n\n  readonly styles$ = this.select(\n    this.select((s) => s.style).pipe(startWithUndefined()),\n    this.select((s) => s.center).pipe(startWithUndefined()),\n    this.select((s) => s.fullscreen).pipe(startWithUndefined()),\n    this.store.select((s) => s.size),\n    this.select((s) => s.transform),\n    () => {\n      const { style, center, fullscreen, transform } = this.get();\n      const size = this.store.get((s) => s.size);\n\n      if (transform) {\n        return {\n          position: 'absolute',\n          top: 0,\n          left: 0,\n          width: size.width,\n          height: size.height,\n          transformStyle: 'preserve-3d',\n          pointerEvents: 'none',\n        };\n      }\n\n      return {\n        position: 'absolute',\n        transform: center ? 'translate3d(-50%,-50%,0)' : 'none',\n        ...(fullscreen && {\n          top: -size.height / 2,\n          left: -size.width / 2,\n          width: size.width,\n          height: size.height,\n        }),\n        ...(style || {}),\n      };\n    }\n  ) as Observable<Properties>;\n\n  readonly transformInnerStyles$ = this.select(\n    this.select((s) => s.pointerEvents),\n    () => {\n      const pointerEvents = this.get((s) => s.pointerEvents);\n      return { position: 'absolute', pointerEvents };\n    }\n  ) as Observable<Properties>;\n\n  get element(): NgtSobaHtmlElement {\n    return this.customElement ?? this.defaultElement;\n  }\n\n  get htmlElement() {\n    return this.element.elementRef.nativeElement;\n  }\n\n  get htmlViewContainerRef() {\n    return this.element.viewContainerRef;\n  }\n\n  protected override preInit() {\n    super.preInit();\n    this.set((state) => {\n      return {\n        htmlClass: state.htmlClass ?? '',\n        eps: state.eps ?? 0.001,\n        sprite: state.sprite ?? false,\n        transform: state.transform ?? false,\n        zIndexRange: state.zIndexRange ?? [16777271, 0],\n        calculatePosition: state.calculatePosition ?? defaultCalculatePosition,\n        pointerEvents: state.pointerEvents ?? 'auto',\n      };\n    });\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n    this.zone.runOutsideAngular(() => {\n      this.store.onReady(() => {\n        this.setTarget(\n          this.select(\n            this.select((s) => s.portal).pipe(startWithUndefined()),\n            this.store.select((s) => s.gl)\n          )\n        );\n\n        this.appendElement(\n          this.select(\n            this.select((s) => s['target']),\n            this.select((s) => s.transform),\n            this.instance$\n          )\n        );\n\n        this.setWrapperClass(this.select((s) => s.wrapperClass).pipe(startWithUndefined()));\n\n        this.render(this.select());\n        this.setBeforeRender(this.instance$);\n      });\n    });\n  }\n\n  private readonly setTarget = this.effect(\n    tap(() => {\n      const portal = this.get((s) => s.portal);\n      const gl = this.store.get((s) => s.gl);\n      this.set({ target: portal ?? gl.domElement.parentNode });\n    })\n  );\n\n  private readonly appendElement = this.effect(\n    tapEffect(() => {\n      const { scene, camera, size } = this.store.get();\n      const { transform, target, calculatePosition, prepend } = this.get();\n\n      if (this.instance.value) {\n        scene.updateMatrixWorld();\n        if (transform) {\n          this.htmlElement.style.cssText = `position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;`;\n        } else {\n          const vec = calculatePosition(this.instance.value, camera, size);\n          this.htmlElement.style.cssText = `position:absolute;top:0;left:0;transform:translate3d(${vec[0]}px,${vec[1]}px,0);transform-origin:0 0;`;\n        }\n        if (target) {\n          if (prepend) target.prepend(this.htmlElement);\n          else target.appendChild(this.htmlElement);\n        }\n\n        return () => {\n          if (target) target.removeChild(this.htmlElement);\n          this.htmlViewContainerRef.clear();\n        };\n      }\n      return;\n    })\n  );\n\n  private readonly setWrapperClass = this.effect(\n    tap(() => {\n      const wrapperClass = this.get((s) => s.wrapperClass);\n      if (wrapperClass) {\n        this.htmlElement.className = wrapperClass;\n      }\n    })\n  );\n\n  private readonly render = this.effect(\n    tap(() => {\n      const { transform, target } = this.get();\n\n      const params: Parameters<ViewContainerRef['createEmbeddedView']> = transform\n        ? [this.transformTemplate, {}]\n        : [this.renderTemplate, { style$: this.styles$ }];\n\n      if (target) {\n        this.htmlViewContainerRef.clear();\n        const viewRef = this.htmlViewContainerRef.createEmbeddedView(...params);\n        if (viewRef.rootNodes[0]) {\n          this.htmlElement.append(...viewRef.rootNodes);\n        }\n      }\n    })\n  );\n\n  private readonly setBeforeRender = this.effect(\n    tapEffect(() =>\n      this.store.registerBeforeRender({\n        callback: () => {\n          if (this.instance.value) {\n            const { transform, calculatePosition, eps, occlude, zIndexRange, sprite, distanceFactor } = this.get();\n            const { camera, size, scene, raycaster } = this.store.get();\n\n            camera.updateMatrixWorld();\n            this.instance.value.updateWorldMatrix(true, false);\n            const vec = transform ? this.oldPosition : calculatePosition(this.instance.value, camera, size);\n\n            if (\n              transform ||\n              Math.abs(this.oldZoom - camera.zoom) > eps ||\n              Math.abs(this.oldPosition[0] - vec[0]) > eps ||\n              Math.abs(this.oldPosition[1] - vec[1]) > eps\n            ) {\n              const isBehindCamera = isObjectBehindCamera(this.instance.value, camera);\n              let raytraceTarget: null | undefined | boolean | THREE.Object3D[] = false;\n              if (typeof occlude === 'boolean') {\n                if (occlude) {\n                  raytraceTarget = [scene];\n                }\n              } else if (Array.isArray(occlude)) {\n                raytraceTarget = occlude.map((item) => item.value) as THREE.Object3D[];\n              }\n\n              const previouslyVisible = this.isVisible;\n              if (raytraceTarget) {\n                this.isVisible =\n                  isObjectVisible(this.instance.value, camera, raycaster, raytraceTarget) && !isBehindCamera;\n              } else {\n                this.isVisible = !isBehindCamera;\n              }\n\n              if (previouslyVisible !== this.isVisible) {\n                if (this.occludeChange.observed) {\n                  this.occludeChange.emit(!this.isVisible);\n                } else {\n                  this.htmlElement.style.display = this.isVisible ? 'block' : 'none';\n                }\n              }\n\n              this.htmlElement.style.zIndex = `${objectZIndex(this.instance.value, camera, zIndexRange)}`;\n\n              if (transform) {\n                const [widthHalf, heightHalf] = [size.width / 2, size.height / 2];\n                const fov = camera.projectionMatrix.elements[5] * heightHalf;\n                const { isOrthographicCamera, top, left, bottom, right } = camera as THREE.OrthographicCamera;\n                const cameraMatrix = getCameraCSSMatrix(camera.matrixWorldInverse);\n                const cameraTransform = isOrthographicCamera\n                  ? `scale(${fov})translate(${epsilon(-(right + left) / 2)}px,${epsilon((top + bottom) / 2)}px)`\n                  : `translateZ(${fov}px)`;\n                let matrix = this.instance.value.matrixWorld;\n                if (sprite) {\n                  matrix = camera.matrixWorldInverse\n                    .clone()\n                    .transpose()\n                    .copyPosition(matrix)\n                    .scale(this.instance.value.scale);\n                  matrix.elements[3] = matrix.elements[7] = matrix.elements[11] = 0;\n                  matrix.elements[15] = 1;\n                }\n                this.htmlElement.style.width = size.width + 'px';\n                this.htmlElement.style.height = size.height + 'px';\n                this.htmlElement.style.perspective = isOrthographicCamera ? '' : `${fov}px`;\n                if (this.transformedOuterDiv?.nativeElement && this.transformedInnerDiv?.nativeElement) {\n                  this.transformedOuterDiv.nativeElement.style.width = size.width + 'px';\n                  this.transformedOuterDiv.nativeElement.style.height = size.height + 'px';\n                  this.transformedOuterDiv!.nativeElement.style.transform = `${cameraTransform}${cameraMatrix}translate(${widthHalf}px,${heightHalf}px)`;\n                  this.transformedInnerDiv!.nativeElement.style.transform = getObjectCSSMatrix(\n                    matrix,\n                    1 / ((distanceFactor || 10) / 400)\n                  );\n                }\n              } else {\n                const scale =\n                  distanceFactor === undefined ? 1 : objectScale(this.instance.value, camera) * distanceFactor;\n                this.htmlElement.style.transform = `translate3d(${vec[0]}px,${vec[1]}px,0) scale(${scale})`;\n              }\n\n              this.oldPosition = vec;\n              this.oldZoom = camera.zoom;\n            }\n          }\n        },\n      })\n    )\n  );\n}\n\n@NgModule({\n  imports: [NgtSobaHtml, NgtSobaHtmlElement, NgtSobaHtmlContent],\n  exports: [NgtSobaHtml, NgtSobaHtmlElement, NgtSobaHtmlContent],\n})\nexport class NgtSobaHtmlModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.NgtSobaFBO"],"mappings":"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"}