angular-three-soba 4.0.0-next.9 → 4.0.0-next.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/abstractions/README.md +1 -1
- package/abstractions/lib/catmull-rom-line.d.ts +16 -15
- package/abstractions/lib/edges.d.ts +17 -15
- package/abstractions/lib/text-3d.d.ts +1 -1
- package/abstractions/lib/text.d.ts +5 -1
- package/cameras/lib/camera-content.d.ts +1 -2
- package/cameras/lib/cube-camera.d.ts +2 -2
- package/cameras/lib/orthographic-camera.d.ts +6 -5
- package/cameras/lib/perspective-camera.d.ts +2 -5
- package/controls/README.md +28 -28
- package/controls/index.d.ts +1 -0
- package/controls/lib/camera-controls.d.ts +1 -1
- package/controls/lib/orbit-controls.d.ts +11 -6
- package/controls/lib/trackball-controls.d.ts +27 -0
- package/fesm2022/angular-three-soba-abstractions.mjs +87 -47
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +61 -37
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +128 -36
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-gizmos.mjs +124 -86
- package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -1
- package/fesm2022/angular-three-soba-loaders.mjs +3 -3
- package/fesm2022/angular-three-soba-materials.mjs +82 -86
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +55 -48
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-performances.mjs +152 -35
- package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +183 -144
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2022/angular-three-soba-stats.mjs +3 -3
- package/gizmos/lib/gizmo-helper/gizmo-helper.d.ts +4 -3
- package/loaders/README.md +39 -39
- package/materials/lib/mesh-transmission-material.d.ts +4 -4
- package/misc/README.md +16 -16
- package/misc/lib/deprecated.d.ts +0 -6
- package/misc/lib/depth-buffer.d.ts +1 -1
- package/misc/lib/fbo.d.ts +1 -3
- package/misc/lib/html/html-content.d.ts +2 -2
- package/misc/lib/html/html.d.ts +4 -4
- package/package.json +6 -6
- package/performances/index.d.ts +1 -0
- package/performances/lib/adaptive-dpr.d.ts +1 -1
- package/performances/lib/bvh.d.ts +49 -0
- package/shaders/lib/mesh-refraction-material.d.ts +2 -2
- package/staging/lib/caustics.d.ts +3 -3
- package/staging/lib/environment/inject-environment.d.ts +1 -2
- package/staging/lib/render-texture.d.ts +5 -4
- package/staging/lib/stage.d.ts +12 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-three-soba-misc.mjs","sources":["../../../../libs/soba/misc/src/lib/animations.ts","../../../../libs/soba/misc/src/lib/bake-shadows.ts","../../../../libs/soba/misc/src/lib/computed-attribute.ts","../../../../libs/soba/misc/src/lib/constants.ts","../../../../libs/soba/misc/src/lib/decal.ts","../../../../libs/soba/misc/src/lib/deprecated.ts","../../../../libs/soba/misc/src/lib/fbo.ts","../../../../libs/soba/misc/src/lib/depth-buffer.ts","../../../../libs/soba/misc/src/lib/html/utils.ts","../../../../libs/soba/misc/src/lib/html/html-content.ts","../../../../libs/soba/misc/src/lib/html/html.ts","../../../../libs/soba/misc/src/lib/intersect.ts","../../../../libs/soba/misc/src/lib/preload.ts","../../../../libs/soba/misc/src/lib/sampler.ts","../../../../libs/soba/misc/src/lib/scale-factor.ts","../../../../libs/soba/misc/src/angular-three-soba-misc.ts"],"sourcesContent":["import { computed, effect, ElementRef, Injector, isSignal, signal, untracked } from '@angular/core';\nimport { injectBeforeRender, resolveRef } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\n/**\n * name: any to allow consumers to pass in type-safe animation clips\n */\ntype NgtsAnimationClipWithoutName = Omit<THREE.AnimationClip, 'name'> & { name: any };\nexport type NgtsAnimationClip = Omit<NgtsAnimationClipWithoutName, 'clone'> & { clone: () => NgtsAnimationClip };\nexport type NgtsAnimationClips<TAnimationNames extends string> = {\n\t[Name in TAnimationNames]: Omit<NgtsAnimationClip, 'name'> & { name: Name };\n}[TAnimationNames];\nexport type NgtsAnimationApi<T extends NgtsAnimationClip> = {\n\tclips: T[];\n\tmixer: THREE.AnimationMixer;\n\tnames: T['name'][];\n} & (\n\t| {\n\t\t\t/**\n\t\t\t * Whether or not the animations finishes initialized\n\t\t\t */\n\t\t\tget isReady(): true;\n\t\t\tactions: { [key in T['name']]: THREE.AnimationAction };\n\t }\n\t| {\n\t\t\t/**\n\t\t\t * Whether or not the animations finishes initialized\n\t\t\t */\n\t\t\tget isReady(): false;\n\t }\n);\n\nexport type NgtsAnimation<TAnimation extends NgtsAnimationClip = NgtsAnimationClip> =\n\t| TAnimation[]\n\t| { animations: TAnimation[] };\n\n/**\n * Use afterNextRender\n */\nexport function injectAnimations<TAnimation extends NgtsAnimationClip>(\n\tanimations: () => NgtsAnimation<TAnimation> | undefined | null,\n\tobject:\n\t\t| ElementRef<THREE.Object3D>\n\t\t| THREE.Object3D\n\t\t| (() => ElementRef<THREE.Object3D> | THREE.Object3D | undefined | null),\n\t{ injector }: { injector?: Injector } = {},\n): NgtsAnimationApi<TAnimation> {\n\treturn assertInjector(injectAnimations, injector, () => {\n\t\tconst mixer = new THREE.AnimationMixer(null!);\n\t\tinjectBeforeRender(({ delta }) => {\n\t\t\tif (!mixer.getRoot()) return;\n\t\t\tmixer.update(delta);\n\t\t});\n\n\t\tlet cached = {} as Record<string, THREE.AnimationAction>;\n\t\tconst actions = {} as { [key in TAnimation['name']]: THREE.AnimationAction };\n\t\tconst clips = [] as NgtsAnimationApi<TAnimation>['clips'];\n\t\tconst names = [] as NgtsAnimationApi<TAnimation>['names'];\n\n\t\tconst actualObject = computed(() => {\n\t\t\tif (isSignal(object) || typeof object === 'function') {\n\t\t\t\treturn resolveRef(object());\n\t\t\t}\n\n\t\t\treturn resolveRef(object);\n\t\t});\n\n\t\tconst ready = signal(false);\n\n\t\teffect((onCleanup) => {\n\t\t\tconst obj = actualObject() as THREE.Object3D | undefined;\n\t\t\tif (!obj) return;\n\n\t\t\tObject.assign(mixer, { _root: obj });\n\n\t\t\tconst maybeAnimationClips = animations();\n\t\t\tif (!maybeAnimationClips) return;\n\n\t\t\tconst animationClips = Array.isArray(maybeAnimationClips) ? maybeAnimationClips : maybeAnimationClips.animations;\n\n\t\t\tfor (let i = 0; i < animationClips.length; i++) {\n\t\t\t\tconst clip = animationClips[i];\n\n\t\t\t\tnames.push(clip.name);\n\t\t\t\tclips.push(clip);\n\n\t\t\t\tif (!actions[clip.name as TAnimation['name']]) {\n\t\t\t\t\tObject.defineProperty(actions, clip.name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tget: () => {\n\t\t\t\t\t\t\tif (!cached[clip.name]) {\n\t\t\t\t\t\t\t\tcached[clip.name] = mixer.clipAction(clip, obj);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn cached[clip.name];\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!untracked(ready)) {\n\t\t\t\tready.set(true);\n\t\t\t}\n\n\t\t\tonCleanup(() => {\n\t\t\t\t// clear cached\n\t\t\t\tcached = {};\n\t\t\t\t// stop all actions\n\t\t\t\tmixer.stopAllAction();\n\t\t\t\t// uncache actions\n\t\t\t\tObject.values(actions).forEach((action) => {\n\t\t\t\t\tmixer.uncacheAction(action as THREE.AnimationClip, obj);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tconst result = { ready, clips, mixer, actions, names } as unknown as NgtsAnimationApi<TAnimation>;\n\n\t\tObject.defineProperty(result, 'isReady', { get: ready });\n\n\t\treturn result;\n\t});\n}\n","import { Directive, effect } from '@angular/core';\nimport { injectStore } from 'angular-three';\n\n@Directive({ selector: 'ngts-bake-shadows' })\nexport class NgtsBakeShadows {\n\tconstructor() {\n\t\tconst store = injectStore();\n\t\teffect((onCleanup) => {\n\t\t\tconst gl = store.gl();\n\t\t\tgl.shadowMap.autoUpdate = false;\n\t\t\tgl.shadowMap.needsUpdate = true;\n\t\t\tonCleanup(() => {\n\t\t\t\tgl.shadowMap.autoUpdate = gl.shadowMap.needsUpdate = true;\n\t\t\t});\n\t\t});\n\t}\n}\n","import {\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\teffect,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { NgtArgs, NgtThreeElements, getInstanceState } from 'angular-three';\nimport * as THREE from 'three';\n\n@Component({\n\tselector: 'ngts-computed-attribute',\n\ttemplate: `\n\t\t<ngt-primitive #attribute *args=\"[bufferAttribute]\" [attach]=\"['attributes', name()]\" [parameters]=\"options()\">\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\n/**\n * Used exclusively as a child of a BufferGeometry.\n * Computes the BufferAttribute by calling the `compute` function\n * and attaches the attribute to the geometry.\n */\nexport class NgtsComputedAttribute {\n\tcompute = input.required<(geometry: THREE.BufferGeometry) => THREE.BufferAttribute>();\n\tname = input.required<string>();\n\toptions = input({} as Partial<NgtThreeElements['ngt-buffer-geometry']>);\n\n\tprotected bufferAttribute = new THREE.BufferAttribute(new Float32Array(0), 1);\n\tattributeRef = viewChild<ElementRef<THREE.BufferAttribute>>('attribute');\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst bufferAttribute = this.attributeRef()?.nativeElement;\n\t\t\tif (!bufferAttribute) return;\n\n\t\t\tconst instanceState = getInstanceState(bufferAttribute);\n\t\t\tif (!instanceState) return;\n\n\t\t\tconst geometry = ((bufferAttribute as any).parent as THREE.BufferGeometry) ?? instanceState.parent();\n\n\t\t\tconst attribute = this.compute()(geometry);\n\t\t\tbufferAttribute.copy(attribute);\n\t\t});\n\t}\n}\n","import { REVISION } from 'three';\n\nexport function getVersion() {\n\treturn parseInt(REVISION.replace(/\\D+/g, ''));\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { applyProps, extend, getInstanceState, is, NgtThreeElements, omit, pick, resolveRef } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { AxesHelper, BoxGeometry, Mesh, MeshNormalMaterial } from 'three';\nimport { DecalGeometry } from 'three-stdlib';\n\nexport interface NgtsDecalOptions extends Partial<NgtThreeElements['ngt-mesh']> {\n\tpolygonOffsetFactor: number;\n\tdepthTest: boolean;\n\tdebug: boolean;\n\tmap?: THREE.Texture | null;\n}\n\nconst defaultOptions: NgtsDecalOptions = {\n\tpolygonOffsetFactor: -10,\n\tdebug: false,\n\tdepthTest: false,\n};\n\n@Component({\n\tselector: 'ngts-decal',\n\ttemplate: `\n\t\t<ngt-mesh #mesh [parameters]=\"parameters()\">\n\t\t\t<ngt-value [rawValue]=\"true\" attach=\"material.transparent\" />\n\t\t\t<ngt-value [rawValue]=\"true\" attach=\"material.polygonOffset\" />\n\t\t\t<ngt-value [rawValue]=\"map()\" attach=\"material.map\" />\n\n\t\t\t<ng-content>\n\t\t\t\t<!-- we only want to pass through these material properties if they don't use a custom material -->\n\t\t\t\t<ngt-value [rawValue]=\"polygonOffsetFactor()\" attach=\"material.polygonOffsetFactor\" />\n\t\t\t\t<ngt-value [rawValue]=\"depthTest()\" attach=\"material.depthTest\" />\n\t\t\t</ng-content>\n\n\t\t\t@if (debug()) {\n\t\t\t\t<ngt-mesh #helper>\n\t\t\t\t\t<ngt-box-geometry />\n\t\t\t\t\t<ngt-mesh-normal-material wireframe />\n\t\t\t\t\t<ngt-axes-helper />\n\t\t\t\t</ngt-mesh>\n\t\t\t}\n\t\t</ngt-mesh>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsDecal {\n\tmesh = input<ElementRef<THREE.Mesh> | THREE.Mesh | null>();\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, [\n\t\t'debug',\n\t\t'map',\n\t\t'depthTest',\n\t\t'polygonOffsetFactor',\n\t\t'position',\n\t\t'scale',\n\t\t'rotation',\n\t]);\n\n\tmeshRef = viewChild.required<ElementRef<THREE.Mesh>>('mesh');\n\tprivate helperRef = viewChild<ElementRef<THREE.Mesh>>('helper');\n\n\tprotected map = pick(this.options, 'map');\n\tprotected depthTest = pick(this.options, 'depthTest');\n\tprotected polygonOffsetFactor = pick(this.options, 'polygonOffsetFactor');\n\tprotected debug = pick(this.options, 'debug');\n\tprivate position = pick(this.options, 'position');\n\tprivate rotation = pick(this.options, 'rotation');\n\tprivate scale = pick(this.options, 'scale');\n\n\tconstructor() {\n\t\textend({ Mesh, BoxGeometry, MeshNormalMaterial, AxesHelper });\n\n\t\teffect((onCleanup) => {\n\t\t\tconst thisMesh = this.meshRef().nativeElement;\n\t\t\tconst instanceState = getInstanceState(thisMesh);\n\t\t\tif (!instanceState) return;\n\n\t\t\tconst parent = resolveRef(this.mesh()) || instanceState.parent();\n\n\t\t\tif (parent && !is.three<THREE.Mesh>(parent, 'isMesh')) {\n\t\t\t\tthrow new Error('<ngts-decal> must have a Mesh as parent or specify its \"mesh\" input');\n\t\t\t}\n\n\t\t\tif (!parent) return;\n\n\t\t\tconst parentInstanceState = getInstanceState(parent);\n\t\t\tif (!parentInstanceState) return;\n\n\t\t\t// track parent's children\n\t\t\tconst parentNonObjects = parentInstanceState.nonObjects();\n\t\t\tif (!parentNonObjects || !parentNonObjects.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// if parent geometry doesn't have its attributes populated properly, we skip\n\t\t\tif (!parent.geometry?.attributes?.['position']) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst [position, rotation, scale] = [this.position(), this.rotation(), this.scale()];\n\t\t\tconst state = { position: new THREE.Vector3(), rotation: new THREE.Euler(), scale: new THREE.Vector3(1, 1, 1) };\n\n\t\t\tapplyProps(state, { position, scale });\n\n\t\t\t// zero out the parents matrix world for this operation\n\t\t\tconst matrixWorld = parent.matrixWorld.clone();\n\t\t\tparent.matrixWorld.identity();\n\n\t\t\tif (!rotation || typeof rotation === 'number') {\n\t\t\t\tconst obj = new THREE.Object3D();\n\t\t\t\tobj.position.copy(state.position);\n\t\t\t\tobj.lookAt(parent.position);\n\t\t\t\tif (typeof rotation === 'number') obj.rotateZ(rotation);\n\t\t\t\tapplyProps(state, { rotation: obj.rotation });\n\t\t\t} else {\n\t\t\t\tapplyProps(state, { rotation });\n\t\t\t}\n\n\t\t\tthisMesh.geometry = new DecalGeometry(parent, state.position, state.rotation, state.scale);\n\t\t\tconst helper = this.helperRef()?.nativeElement;\n\t\t\tif (helper) {\n\t\t\t\tapplyProps(helper, state);\n\t\t\t\t// Prevent the helpers from blocking rays\n\t\t\t\thelper.traverse((child) => (child.raycast = () => null));\n\t\t\t}\n\n\t\t\t// Reset parents matrix-world\n\t\t\tparent.matrixWorld = matrixWorld;\n\n\t\t\tonCleanup(() => {\n\t\t\t\tthisMesh.geometry.dispose();\n\t\t\t});\n\t\t});\n\t}\n}\n","import type * as THREE from 'three';\n\n/**\n * NOTE: Sets `BufferAttribute.updateRange` since r159.\n */\nexport const setUpdateRange = (\n\tattribute: THREE.BufferAttribute,\n\tupdateRange: { offset: number; count: number },\n): void => {\n\tif ('updateRanges' in attribute) {\n\t\t// attribute.updateRanges[0] = updateRange;\n\t\tattribute.addUpdateRange(updateRange.offset, updateRange.count);\n\t} else {\n\t\tObject.assign(attribute, { updateRange });\n\t}\n};\n\nexport const LinearEncoding = 3000;\nexport const sRGBEncoding = 3001;\n\n/**\n * NOTE: TextureEncoding was deprecated in r152, and removed in r162.\n */\nexport type TextureEncoding = typeof LinearEncoding | typeof sRGBEncoding;\n","import {\n\tDestroyRef,\n\tDirective,\n\tEmbeddedViewRef,\n\tInjector,\n\tTemplateRef,\n\tViewContainerRef,\n\tcomputed,\n\teffect,\n\tinject,\n\tinput,\n\tuntracked,\n} from '@angular/core';\nimport { injectStore } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { TextureEncoding } from './deprecated';\n\ninterface FBOSettings {\n\t/** Defines the count of MSAA samples. Can only be used with WebGL 2. Default: 0 */\n\tsamples?: number;\n\t/** If set, the scene depth will be rendered into buffer.depthTexture. Default: false */\n\tdepth?: boolean;\n\n\t// WebGLRenderTargetOptions => RenderTargetOptions\n\twrapS?: THREE.Wrapping | undefined;\n\twrapT?: THREE.Wrapping | undefined;\n\tmagFilter?: THREE.MagnificationTextureFilter | undefined;\n\tminFilter?: THREE.MinificationTextureFilter | undefined;\n\tformat?: number | undefined; // RGBAFormat;\n\ttype?: THREE.TextureDataType | undefined; // UnsignedByteType;\n\tanisotropy?: number | undefined; // 1;\n\tdepthBuffer?: boolean | undefined; // true;\n\tstencilBuffer?: boolean | undefined; // false;\n\tgenerateMipmaps?: boolean | undefined; // true;\n\tdepthTexture?: THREE.DepthTexture | undefined;\n\tencoding?: TextureEncoding | undefined;\n\tcolorSpace?: THREE.ColorSpace | undefined;\n}\n\nexport interface NgtsFBOParams {\n\twidth?: number | FBOSettings;\n\theight?: number;\n\tsettings?: FBOSettings;\n}\n\nexport function injectFBO(params: () => NgtsFBOParams = () => ({}), { injector }: { injector?: Injector } = {}) {\n\treturn assertInjector(injectFBO, injector, () => {\n\t\tconst store = injectStore();\n\n\t\tconst width = computed(() => {\n\t\t\tconst { width } = params();\n\t\t\treturn typeof width === 'number' ? width : store.size.width() * store.viewport.dpr();\n\t\t});\n\n\t\tconst height = computed(() => {\n\t\t\tconst { height } = params();\n\t\t\treturn typeof height === 'number' ? height : store.size.height() * store.viewport.dpr();\n\t\t});\n\n\t\tconst settings = computed(() => {\n\t\t\tconst { width, settings } = params();\n\t\t\tconst _settings = (typeof width === 'number' ? settings : (width as FBOSettings)) || {};\n\t\t\tif (_settings.samples === undefined) {\n\t\t\t\t_settings.samples = 0;\n\t\t\t}\n\t\t\treturn _settings;\n\t\t});\n\n\t\tconst target = computed(() => {\n\t\t\tconst [{ samples = 0, depth, ...targetSettings }, _width, _height] = [\n\t\t\t\tuntracked(settings),\n\t\t\t\tuntracked(width),\n\t\t\t\tuntracked(height),\n\t\t\t];\n\n\t\t\tconst target = new THREE.WebGLRenderTarget(_width, _height, {\n\t\t\t\tminFilter: THREE.LinearFilter,\n\t\t\t\tmagFilter: THREE.LinearFilter,\n\t\t\t\ttype: THREE.HalfFloatType,\n\t\t\t\t...targetSettings,\n\t\t\t});\n\n\t\t\tif (depth) {\n\t\t\t\ttarget.depthTexture = new THREE.DepthTexture(_width, _height, THREE.FloatType);\n\t\t\t}\n\n\t\t\ttarget.samples = samples;\n\t\t\treturn target;\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst [{ samples = 0 }, _width, _height, _target] = [settings(), width(), height(), target()];\n\t\t\t_target.setSize(_width, _height);\n\t\t\tif (samples) _target.samples = samples;\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => target().dispose());\n\n\t\treturn target;\n\t});\n}\n\n@Directive({ selector: 'ng-template[fbo]' })\nexport class NgtsFBO {\n\tfbo = input({} as { width: NgtsFBOParams['width']; height: NgtsFBOParams['height'] } & FBOSettings);\n\n\tprivate template = inject(TemplateRef);\n\tprivate viewContainerRef = inject(ViewContainerRef);\n\n\tconstructor() {\n\t\tlet ref: EmbeddedViewRef<{ $implicit: ReturnType<typeof injectFBO> }>;\n\n\t\tconst fboTarget = injectFBO(() => {\n\t\t\tconst { width, height, ...settings } = this.fbo();\n\t\t\treturn { width, height, settings };\n\t\t});\n\n\t\teffect(() => {\n\t\t\tref = this.viewContainerRef.createEmbeddedView(this.template, { $implicit: fboTarget });\n\t\t\tref.detectChanges();\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tref?.destroy();\n\t\t});\n\t}\n\n\tstatic ngTemplateContextGuard(_: NgtsFBO, ctx: unknown): ctx is { $implicit: ReturnType<typeof injectFBO> } {\n\t\treturn true;\n\t}\n}\n","import { computed, Injector } from '@angular/core';\nimport { injectBeforeRender, injectStore, pick } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { injectFBO } from './fbo';\n\nexport function injectDepthBuffer(\n\tparams: () => { size?: number; frames?: number } = () => ({}),\n\t{ injector }: { injector?: Injector } = {},\n) {\n\treturn assertInjector(injectDepthBuffer, injector, () => {\n\t\tconst size = computed(() => params().size || 256);\n\t\tconst frames = computed(() => params().frames || Infinity);\n\n\t\tconst store = injectStore();\n\t\t// const width = store.select('size', 'width');\n\t\t// const height = store.select('size', 'height');\n\t\t// const dpr = store.select('viewport', 'dpr');\n\n\t\tconst w = computed(() => size() || store.size.width() * store.viewport.dpr());\n\t\tconst h = computed(() => size() || store.size.height() * store.viewport.dpr());\n\n\t\tconst depthConfig = computed(() => {\n\t\t\tconst depthTexture = new THREE.DepthTexture(w(), h());\n\t\t\tdepthTexture.format = THREE.DepthFormat;\n\t\t\tdepthTexture.type = THREE.UnsignedShortType;\n\t\t\treturn { depthTexture };\n\t\t});\n\n\t\tconst depthFBO = injectFBO(() => ({ width: w(), height: h(), settings: depthConfig() }));\n\n\t\tlet count = 0;\n\t\tinjectBeforeRender(({ gl, scene, camera }) => {\n\t\t\tif (frames() === Infinity || count < frames()) {\n\t\t\t\tgl.setRenderTarget(depthFBO());\n\t\t\t\tgl.render(scene, camera);\n\t\t\t\tgl.setRenderTarget(null);\n\t\t\t\tcount++;\n\t\t\t}\n\t\t});\n\n\t\treturn pick(depthFBO, 'depthTexture');\n\t});\n}\n","import { is } from 'angular-three';\nimport * as THREE from 'three';\n\nconst v1 = new THREE.Vector3();\nconst v2 = new THREE.Vector3();\nconst v3 = new THREE.Vector3();\nconst v4 = new THREE.Vector2();\n\nexport function defaultCalculatePosition(\n\tel: THREE.Object3D,\n\tcamera: THREE.Camera,\n\tsize: { width: number; height: number },\n) {\n\tconst objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n\tobjectPos.project(camera);\n\tconst widthHalf = size.width / 2;\n\tconst heightHalf = size.height / 2;\n\treturn [objectPos.x * widthHalf + widthHalf, -(objectPos.y * heightHalf) + heightHalf];\n}\n\nexport type CalculatePosition = typeof defaultCalculatePosition;\n\nexport function isObjectBehindCamera(el: THREE.Object3D, camera: THREE.Camera) {\n\tconst objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n\tconst cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n\tconst deltaCamObj = objectPos.sub(cameraPos);\n\tconst camDir = camera.getWorldDirection(v3);\n\treturn deltaCamObj.angleTo(camDir) > Math.PI / 2;\n}\n\nexport function isObjectVisible(\n\tel: THREE.Object3D,\n\tcamera: THREE.Camera,\n\traycaster: THREE.Raycaster,\n\tocclude: THREE.Object3D[],\n) {\n\tconst elPos = v1.setFromMatrixPosition(el.matrixWorld);\n\tconst screenPos = elPos.clone();\n\tscreenPos.project(camera);\n\tv4.set(screenPos.x, screenPos.y);\n\traycaster.setFromCamera(v4, camera);\n\tconst intersects = raycaster.intersectObjects(occlude, true);\n\tif (intersects.length) {\n\t\tconst intersectionDistance = intersects[0].distance;\n\t\tconst pointDistance = elPos.distanceTo(raycaster.ray.origin);\n\t\treturn pointDistance < intersectionDistance;\n\t}\n\treturn true;\n}\n\nexport function objectScale(el: THREE.Object3D, camera: THREE.Camera) {\n\tif (is.three<THREE.OrthographicCamera>(camera, 'isOrthographicCamera')) return camera.zoom;\n\tif (is.three<THREE.PerspectiveCamera>(camera, 'isPerspectiveCamera')) {\n\t\tconst objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n\t\tconst cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n\t\tconst vFOV = (camera.fov * Math.PI) / 180;\n\t\tconst dist = objectPos.distanceTo(cameraPos);\n\t\tconst scaleFOV = 2 * Math.tan(vFOV / 2) * dist;\n\t\treturn 1 / scaleFOV;\n\t}\n\treturn 1;\n}\n\nexport function objectZIndex(el: THREE.Object3D, camera: THREE.Camera, zIndexRange: Array<number>) {\n\tif (\n\t\tis.three<THREE.PerspectiveCamera>(camera, 'isPerspectiveCamera') ||\n\t\tis.three<THREE.OrthographicCamera>(camera, 'isOrthographicCamera')\n\t) {\n\t\tconst objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n\t\tconst cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n\t\tconst dist = objectPos.distanceTo(cameraPos);\n\t\tconst A = (zIndexRange[1] - zIndexRange[0]) / (camera.far - camera.near);\n\t\tconst B = zIndexRange[1] - A * camera.far;\n\t\treturn Math.round(A * dist + B);\n\t}\n\treturn undefined;\n}\n\nexport function epsilon(value: number) {\n\treturn Math.abs(value) < 1e-10 ? 0 : value;\n}\n\nexport function getCSSMatrix(matrix: THREE.Matrix4, multipliers: number[], prepend = '') {\n\tlet matrix3d = 'matrix3d(';\n\tfor (let i = 0; i !== 16; i++) {\n\t\tmatrix3d += epsilon(multipliers[i] * matrix.elements[i]) + (i !== 15 ? ',' : ')');\n\t}\n\treturn prepend + matrix3d;\n}\n\nexport const getCameraCSSMatrix = ((multipliers: number[]) => {\n\treturn (matrix: THREE.Matrix4) => getCSSMatrix(matrix, multipliers);\n})([1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1]);\n\nexport const getObjectCSSMatrix = ((scaleMultipliers: (n: number) => number[]) => {\n\treturn (matrix: THREE.Matrix4, factor: number) =>\n\t\tgetCSSMatrix(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]);\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\toutput,\n\tRenderer2,\n\tuntracked,\n\tviewChild,\n} from '@angular/core';\nimport { injectBeforeRender, injectStore, is, NgtHTML, pick, resolveRef } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { NgtsHTML } from './html';\nimport {\n\tCalculatePosition,\n\tdefaultCalculatePosition,\n\tepsilon,\n\tgetCameraCSSMatrix,\n\tgetObjectCSSMatrix,\n\tisObjectBehindCamera,\n\tisObjectVisible,\n\tobjectScale,\n\tobjectZIndex,\n} from './utils';\n\ntype PointerEventsProperties =\n\t| 'auto'\n\t| 'none'\n\t| 'visiblePainted'\n\t| 'visibleFill'\n\t| 'visibleStroke'\n\t| 'visible'\n\t| 'painted'\n\t| 'fill'\n\t| 'stroke'\n\t| 'all'\n\t| 'inherit';\n\nexport interface NgtsHTMLContentOptions {\n\teps: number;\n\tzIndexRange: [number, number];\n\tcenter: boolean;\n\tprepend: boolean;\n\tfullscreen: boolean;\n\tcontainerClass: string;\n\tcontainerStyle: Partial<CSSStyleDeclaration>;\n\tpointerEvents: PointerEventsProperties;\n\tcalculatePosition: CalculatePosition;\n\tsprite: boolean;\n\tdistanceFactor?: number;\n\tparent?: HTMLElement | ElementRef<HTMLElement>;\n}\n\nconst defaultHtmlContentOptions: NgtsHTMLContentOptions = {\n\teps: 0.001,\n\tzIndexRange: [16777271, 0],\n\tpointerEvents: 'auto',\n\tcalculatePosition: defaultCalculatePosition,\n\tcontainerClass: '',\n\tcontainerStyle: {},\n\tcenter: false,\n\tprepend: false,\n\tfullscreen: false,\n\tsprite: false,\n};\n\n@Component({\n\tselector: 'div[htmlContent]',\n\ttemplate: `\n\t\t@if (html.transform()) {\n\t\t\t<div\n\t\t\t\t#transformOuter\n\t\t\t\tstyle=\"position: absolute; top: 0; left: 0; transform-style: preserve-3d; pointer-events: none;\"\n\t\t\t\t[style.width.px]=\"size().width\"\n\t\t\t\t[style.height.px]=\"size().height\"\n\t\t\t>\n\t\t\t\t<div #transformInner style=\"position: absolute\" [style.pointer-events]=\"pointerEvents()\">\n\t\t\t\t\t<div #container [class]=\"containerClass()\" [style]=\"containerStyle()\">\n\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"content\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t} @else {\n\t\t\t<div\n\t\t\t\t#container\n\t\t\t\tstyle=\"position:absolute\"\n\t\t\t\t[style.transform]=\"center() ? 'translate3d(-50%,-50%,0)' : 'none'\"\n\t\t\t\t[style.top]=\"fullscreen() ? -size.height() / 2 + 'px' : 'unset'\"\n\t\t\t\t[style.left]=\"fullscreen() ? -size.width() / 2 + 'px' : 'unset'\"\n\t\t\t\t[style.width]=\"fullscreen() ? size.width() : 'unset'\"\n\t\t\t\t[style.height]=\"fullscreen() ? size.height() : 'unset'\"\n\t\t\t\t[class]=\"containerClass()\"\n\t\t\t\t[style]=\"containerStyle()\"\n\t\t\t>\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"content\" />\n\t\t\t</div>\n\t\t}\n\n\t\t<ng-template #content>\n\t\t\t<ng-content />\n\t\t</ng-template>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgTemplateOutlet],\n\thost: { 'data-ngts-html-content': '' },\n})\nexport class NgtsHTMLContent extends NgtHTML {\n\toptions = input(defaultHtmlContentOptions, {\n\t\ttransform: mergeInputs(defaultHtmlContentOptions),\n\t\talias: 'htmlContent',\n\t});\n\toccluded = output<boolean>();\n\n\ttransformOuterRef = viewChild<ElementRef<HTMLDivElement>>('transformOuter');\n\ttransformInnerRef = viewChild<ElementRef<HTMLDivElement>>('transformInner');\n\tcontainerRef = viewChild<ElementRef<HTMLDivElement>>('container');\n\n\tprotected html = inject(NgtsHTML);\n\tprivate host = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprivate store = injectStore();\n\tprotected size = this.store.size;\n\n\tprivate parent = pick(this.options, 'parent');\n\tprivate zIndexRange = pick(this.options, 'zIndexRange');\n\tprivate calculatePosition = pick(this.options, 'calculatePosition');\n\tprivate prepend = pick(this.options, 'prepend');\n\tprotected center = pick(this.options, 'center');\n\tprotected fullscreen = pick(this.options, 'fullscreen');\n\tprotected pointerEvents = pick(this.options, 'pointerEvents');\n\tprotected containerClass = pick(this.options, 'containerClass');\n\tprotected containerStyle = pick(this.options, 'containerStyle');\n\n\tprivate target = computed(() => {\n\t\tconst parent = resolveRef(this.parent());\n\t\tif (parent) return parent;\n\t\treturn (this.store.events.connected?.() || this.store.gl.domElement.parentNode()) as HTMLElement;\n\t});\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tconst renderer = inject(Renderer2);\n\n\t\tlet isMeshSizeSet = false;\n\n\t\teffect(() => {\n\t\t\tconst [occlude, canvasEl, zIndexRange] = [\n\t\t\t\tthis.html.occlude(),\n\t\t\t\tthis.store.snapshot.gl.domElement,\n\t\t\t\tuntracked(this.zIndexRange),\n\t\t\t];\n\n\t\t\tif (occlude && occlude === 'blending') {\n\t\t\t\trenderer.setStyle(canvasEl, 'z-index', `${Math.floor(zIndexRange[0] / 2)}`);\n\t\t\t\trenderer.setStyle(canvasEl, 'position', 'absolute');\n\t\t\t\trenderer.setStyle(canvasEl, 'pointer-events', 'none');\n\t\t\t} else {\n\t\t\t\trenderer.removeStyle(canvasEl, 'z-index');\n\t\t\t\trenderer.removeStyle(canvasEl, 'position');\n\t\t\t\trenderer.removeStyle(canvasEl, 'pointer-events');\n\t\t\t}\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst [transform, target, hostEl, prepend, scene, calculatePosition, group, size, camera] = [\n\t\t\t\tthis.html.transform(),\n\t\t\t\tthis.target(),\n\t\t\t\tthis.host.nativeElement,\n\t\t\t\tuntracked(this.prepend),\n\t\t\t\tthis.store.snapshot.scene,\n\t\t\t\tuntracked(this.calculatePosition),\n\t\t\t\tuntracked(this.html.groupRef).nativeElement,\n\t\t\t\tthis.store.snapshot.size,\n\t\t\t\tthis.store.snapshot.camera,\n\t\t\t];\n\n\t\t\tscene.updateMatrixWorld();\n\t\t\trenderer.setStyle(hostEl, 'position', 'absolute');\n\t\t\trenderer.setStyle(hostEl, 'top', '0');\n\t\t\trenderer.setStyle(hostEl, 'left', '0');\n\n\t\t\tif (transform) {\n\t\t\t\trenderer.setStyle(hostEl, 'pointer-events', 'none');\n\t\t\t\trenderer.setStyle(hostEl, 'overflow', 'hidden');\n\t\t\t\trenderer.removeStyle(hostEl, 'transform');\n\t\t\t\trenderer.removeStyle(hostEl, 'transform-origin');\n\t\t\t} else {\n\t\t\t\tconst vec = calculatePosition(group, camera, size);\n\t\t\t\trenderer.setStyle(hostEl, 'transform', `translate3d(${vec[0]}px,${vec[1]}px,0)`);\n\t\t\t\trenderer.setStyle(hostEl, 'transform-origin', '0 0');\n\t\t\t\trenderer.removeStyle(hostEl, 'pointer-events');\n\t\t\t\trenderer.removeStyle(hostEl, 'overflow');\n\t\t\t}\n\n\t\t\tif (prepend) target.prepend(hostEl);\n\t\t\telse target.appendChild(hostEl);\n\n\t\t\tonCleanup(() => {\n\t\t\t\tif (target) target.removeChild(hostEl);\n\t\t\t});\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst _ = [this.options(), this.html.options()];\n\t\t\tisMeshSizeSet = false;\n\t\t});\n\n\t\tlet visible = true;\n\t\tlet oldZoom = 0;\n\t\tlet oldPosition = [0, 0];\n\n\t\tinjectBeforeRender(({ camera: rootCamera }) => {\n\t\t\tconst [\n\t\t\t\thostEl,\n\t\t\t\ttransformOuterEl,\n\t\t\t\ttransformInnerEl,\n\t\t\t\tgroup,\n\t\t\t\tocclusionMesh,\n\t\t\t\tocclusionGeometry,\n\t\t\t\tisRaycastOcclusion,\n\t\t\t\t{ camera, size, viewport, raycaster, scene },\n\t\t\t\t{ calculatePosition, eps, zIndexRange, sprite, distanceFactor },\n\t\t\t\t{ transform, occlude, scale },\n\t\t\t] = [\n\t\t\t\tthis.host.nativeElement,\n\t\t\t\tthis.transformOuterRef()?.nativeElement,\n\t\t\t\tthis.transformInnerRef()?.nativeElement,\n\t\t\t\tthis.html.groupRef().nativeElement,\n\t\t\t\tthis.html.occlusionMeshRef()?.nativeElement,\n\t\t\t\tthis.html.occlusionGeometryRef()?.nativeElement,\n\t\t\t\tthis.html.isRaycastOcclusion(),\n\t\t\t\tthis.store.snapshot,\n\t\t\t\tthis.options(),\n\t\t\t\tthis.html.options(),\n\t\t\t];\n\n\t\t\tif (group) {\n\t\t\t\tcamera.updateMatrixWorld();\n\t\t\t\tgroup.updateWorldMatrix(true, false);\n\t\t\t\tconst vec = transform ? oldPosition : calculatePosition(group, camera, size);\n\n\t\t\t\tif (\n\t\t\t\t\ttransform ||\n\t\t\t\t\tMath.abs(oldZoom - camera.zoom) > eps ||\n\t\t\t\t\tMath.abs(oldPosition[0] - vec[0]) > eps ||\n\t\t\t\t\tMath.abs(oldPosition[1] - vec[1]) > eps\n\t\t\t\t) {\n\t\t\t\t\tconst isBehindCamera = isObjectBehindCamera(group, camera);\n\t\t\t\t\tlet raytraceTarget: null | undefined | boolean | THREE.Object3D[] = false;\n\n\t\t\t\t\tif (isRaycastOcclusion) {\n\t\t\t\t\t\tif (Array.isArray(occlude)) {\n\t\t\t\t\t\t\traytraceTarget = occlude.map((item) => resolveRef(item)) as THREE.Object3D[];\n\t\t\t\t\t\t} else if (occlude !== 'blending') {\n\t\t\t\t\t\t\traytraceTarget = [scene];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst previouslyVisible = visible;\n\t\t\t\t\tif (raytraceTarget) {\n\t\t\t\t\t\tconst isVisible = isObjectVisible(group, camera, raycaster, raytraceTarget);\n\t\t\t\t\t\tvisible = isVisible && !isBehindCamera;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvisible = !isBehindCamera;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (previouslyVisible !== visible) {\n\t\t\t\t\t\tif (this.occluded['listeners']) this.occluded.emit(!visible);\n\t\t\t\t\t\telse renderer.setStyle(hostEl, 'display', visible ? 'block' : 'none');\n\t\t\t\t\t}\n\n\t\t\t\t\tconst halfRange = Math.floor(zIndexRange[0] / 2);\n\t\t\t\t\tconst zRange = occlude\n\t\t\t\t\t\t? isRaycastOcclusion //\n\t\t\t\t\t\t\t? [zIndexRange[0], halfRange]\n\t\t\t\t\t\t\t: [halfRange - 1, 0]\n\t\t\t\t\t\t: zIndexRange;\n\n\t\t\t\t\trenderer.setStyle(hostEl, 'z-index', `${objectZIndex(group, camera, zRange)}`);\n\n\t\t\t\t\tif (transform) {\n\t\t\t\t\t\tconst [widthHalf, heightHalf] = [size.width / 2, size.height / 2];\n\t\t\t\t\t\tconst fov = camera.projectionMatrix.elements[5] * heightHalf;\n\t\t\t\t\t\tconst { isOrthographicCamera, top, left, bottom, right } = camera as THREE.OrthographicCamera;\n\t\t\t\t\t\tconst cameraMatrix = getCameraCSSMatrix(camera.matrixWorldInverse);\n\t\t\t\t\t\tconst cameraTransform = isOrthographicCamera\n\t\t\t\t\t\t\t? `scale(${fov})translate(${epsilon(-(right + left) / 2)}px,${epsilon((top + bottom) / 2)}px)`\n\t\t\t\t\t\t\t: `translateZ(${fov}px)`;\n\t\t\t\t\t\tlet matrix = group.matrixWorld;\n\t\t\t\t\t\tif (sprite) {\n\t\t\t\t\t\t\tmatrix = camera.matrixWorldInverse.clone().transpose().copyPosition(matrix).scale(group.scale);\n\t\t\t\t\t\t\tmatrix.elements[3] = matrix.elements[7] = matrix.elements[11] = 0;\n\t\t\t\t\t\t\tmatrix.elements[15] = 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trenderer.setStyle(hostEl, 'width', size.width + 'px');\n\t\t\t\t\t\trenderer.setStyle(hostEl, 'height', size.height + 'px');\n\t\t\t\t\t\trenderer.setStyle(hostEl, 'perspective', isOrthographicCamera ? '' : `${fov}px`);\n\n\t\t\t\t\t\tif (transformOuterEl && transformInnerEl) {\n\t\t\t\t\t\t\trenderer.setStyle(\n\t\t\t\t\t\t\t\ttransformOuterEl,\n\t\t\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t\t\t`${cameraTransform}${cameraMatrix}translate(${widthHalf}px,${heightHalf}px)`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\trenderer.setStyle(\n\t\t\t\t\t\t\t\ttransformInnerEl,\n\t\t\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t\t\tgetObjectCSSMatrix(matrix, 1 / ((distanceFactor || 10) / 400)),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst scale = distanceFactor === undefined ? 1 : objectScale(group, camera) * distanceFactor;\n\t\t\t\t\t\trenderer.setStyle(hostEl, 'transform', `translate3d(${vec[0]}px,${vec[1]}px,0) scale(${scale})`);\n\t\t\t\t\t}\n\t\t\t\t\toldPosition = vec;\n\t\t\t\t\toldZoom = camera.zoom;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!isRaycastOcclusion && occlusionMesh && !isMeshSizeSet) {\n\t\t\t\tif (transform) {\n\t\t\t\t\tif (transformOuterEl) {\n\t\t\t\t\t\tconst el = transformOuterEl.children[0];\n\n\t\t\t\t\t\tif (el?.clientWidth && el?.clientHeight) {\n\t\t\t\t\t\t\tconst { isOrthographicCamera } = camera as THREE.OrthographicCamera;\n\n\t\t\t\t\t\t\tif (isOrthographicCamera || occlusionGeometry) {\n\t\t\t\t\t\t\t\tif (scale) {\n\t\t\t\t\t\t\t\t\tif (!Array.isArray(scale)) {\n\t\t\t\t\t\t\t\t\t\tocclusionMesh.scale.setScalar(1 / (scale as number));\n\t\t\t\t\t\t\t\t\t} else if (is.three<THREE.Vector3>(scale, 'isVector3')) {\n\t\t\t\t\t\t\t\t\t\tocclusionMesh.scale.copy(scale.clone().divideScalar(1));\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tocclusionMesh.scale.set(1 / scale[0], 1 / scale[1], 1 / scale[2]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst ratio = (distanceFactor || 10) / 400;\n\t\t\t\t\t\t\t\tconst w = el.clientWidth * ratio;\n\t\t\t\t\t\t\t\tconst h = el.clientHeight * ratio;\n\n\t\t\t\t\t\t\t\tocclusionMesh.scale.set(w, h, 1);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tisMeshSizeSet = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst ele = hostEl.children[0];\n\n\t\t\t\t\tif (ele?.clientWidth && ele?.clientHeight) {\n\t\t\t\t\t\tconst ratio = 1 / viewport.factor;\n\t\t\t\t\t\tconst w = ele.clientWidth * ratio;\n\t\t\t\t\t\tconst h = ele.clientHeight * ratio;\n\n\t\t\t\t\t\tocclusionMesh.scale.set(w, h, 1);\n\n\t\t\t\t\t\tisMeshSizeSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tocclusionMesh.lookAt(rootCamera.position);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { extend, is, NgtThreeElements, omit, pick } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Group, Mesh, PlaneGeometry, ShaderMaterial } from 'three';\nimport { NgtsHTMLContent } from './html-content';\n\nexport interface NgtsHTMLOptions extends Partial<NgtThreeElements['ngt-group']> {\n\tocclude: ElementRef<THREE.Object3D>[] | THREE.Object3D[] | boolean | 'raycast' | 'blending';\n\ttransform: boolean;\n\tcastShadow: boolean;\n\treceiveShadow: boolean;\n}\n\nconst defaultHtmlOptions: NgtsHTMLOptions = {\n\tocclude: false,\n\ttransform: false,\n\tcastShadow: false,\n\treceiveShadow: false,\n};\n\n@Component({\n\tselector: 'ngts-html',\n\ttemplate: `\n\t\t<ngt-group #group [parameters]=\"parameters()\">\n\t\t\t@if (occlude() && !isRaycastOcclusion()) {\n\t\t\t\t<ngt-mesh #occlusionMesh [castShadow]=\"castShadow()\" [receiveShadow]=\"receiveShadow()\">\n\t\t\t\t\t<ng-content select=\"[data-occlusion-geometry]\">\n\t\t\t\t\t\t<ngt-plane-geometry #occlusionGeometry />\n\t\t\t\t\t</ng-content>\n\t\t\t\t\t<ng-content select=\"[data-occlusion-material]\">\n\t\t\t\t\t\t<ngt-shader-material\n\t\t\t\t\t\t\t[side]=\"DoubleSide\"\n\t\t\t\t\t\t\t[vertexShader]=\"vertexShader()\"\n\t\t\t\t\t\t\t[fragmentShader]=\"fragmentShader()\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ng-content>\n\t\t\t\t</ngt-mesh>\n\t\t\t}\n\t\t</ngt-group>\n\n\t\t<ng-content />\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsHTML {\n\toptions = input(defaultHtmlOptions, { transform: mergeInputs(defaultHtmlOptions) });\n\tprotected parameters = omit(this.options, ['occlude', 'castShadow', 'receiveShadow', 'transform']);\n\n\tgroupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\tocclusionMeshRef = viewChild<ElementRef<THREE.Mesh>>('occlusionMesh');\n\tocclusionGeometryRef = viewChild<ElementRef<THREE.PlaneGeometry>>('occlusionGeometry');\n\n\tprotected castShadow = pick(this.options, 'castShadow');\n\tprotected receiveShadow = pick(this.options, 'receiveShadow');\n\tocclude = pick(this.options, 'occlude');\n\ttransform = pick(this.options, 'transform');\n\n\tisRaycastOcclusion = computed(() => {\n\t\tconst occlude = this.occlude();\n\t\treturn (occlude && occlude !== 'blending') || (Array.isArray(occlude) && occlude.length && is.ref(occlude[0]));\n\t});\n\n\tprivate shaders = computed(() => {\n\t\tconst transform = this.transform();\n\t\tconst vertexShader = !transform\n\t\t\t? /* language=glsl glsl */ `\n /*\n This shader is from the THREE's SpriteMaterial.\n We need to turn the backing plane into a Sprite\n (make it always face the camera) if \"transfrom\"\n is false.\n */\n #include <common>\n\n void main() {\n vec2 center = vec2(0., 1.);\n float rotation = 0.0;\n\n // This is somewhat arbitrary, but it seems to work well\n // Need to figure out how to derive this dynamically if it even matters\n float size = 0.03;\n\n vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n vec2 scale;\n scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) scale *= - mvPosition.z;\n\n vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale * size;\n vec2 rotatedPosition;\n rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n mvPosition.xy += rotatedPosition;\n\n gl_Position = projectionMatrix * mvPosition;\n }\n `\n\t\t\t: undefined;\n\n\t\tconst fragmentShader = /* language=glsl glsl */ `\n void main() {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n `;\n\n\t\treturn { vertexShader, fragmentShader };\n\t});\n\n\tprotected vertexShader = pick(this.shaders, 'vertexShader');\n\tprotected fragmentShader = pick(this.shaders, 'fragmentShader');\n\n\tconstructor() {\n\t\textend({ Group, Mesh, PlaneGeometry, ShaderMaterial });\n\t}\n\n\tprotected readonly DoubleSide = THREE.DoubleSide;\n}\n\nexport const NgtsHTMLDeclarations = [NgtsHTML, NgtsHTMLContent] as const;\n","import { Directive, effect, ElementRef, inject, Injector, model, signal, WritableSignal } from '@angular/core';\nimport { addAfterEffect, addEffect, resolveRef } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\nexport function injectIntersect<TObject extends THREE.Object3D>(\n\tobject: () => ElementRef<TObject> | TObject | undefined | null,\n\t{ injector, source = signal(false) }: { injector?: Injector; source?: WritableSignal<boolean> } = {},\n) {\n\treturn assertInjector(injectIntersect, injector, () => {\n\t\tlet check = false;\n\t\tlet temp = false;\n\n\t\teffect((onCleanup) => {\n\t\t\tconst obj = resolveRef(object());\n\t\t\tif (!obj) return;\n\n\t\t\t// Stamp out frustum check pre-emptively\n\t\t\tconst unsub1 = addEffect(() => {\n\t\t\t\tcheck = false;\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\t// If the object is inside the frustum three will call onRender\n\t\t\tconst oldOnRender = obj.onBeforeRender?.bind(obj);\n\t\t\tobj.onBeforeRender = () => (check = true);\n\n\t\t\t// Compare the check value against the temp value, if it differs set state\n\t\t\tconst unsub2 = addAfterEffect(() => {\n\t\t\t\tif (check !== temp) source.set((temp = check));\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\tonCleanup(() => {\n\t\t\t\tobj.onBeforeRender = oldOnRender;\n\t\t\t\tunsub1();\n\t\t\t\tunsub2();\n\t\t\t});\n\t\t});\n\n\t\treturn source.asReadonly();\n\t});\n}\n\n@Directive({ selector: '[intersect]' })\nexport class NgtsIntersect {\n\tintersect = model(false);\n\n\tconstructor() {\n\t\tconst host = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\t\tinjectIntersect(() => host, { source: this.intersect });\n\t}\n}\n","import { computed, Directive, effect, ElementRef, model } from '@angular/core';\nimport { injectStore, resolveRef } from 'angular-three';\nimport * as THREE from 'three';\n\n@Directive({ selector: 'ngts-preload' })\nexport class NgtsPreload {\n\tall = model<boolean>();\n\tscene = model<THREE.Object3D | ElementRef<THREE.Object3D>>();\n\tcamera = model<THREE.Camera | ElementRef<THREE.Camera>>();\n\n\tprivate store = injectStore();\n\n\tprivate trueScene = computed(() => {\n\t\tconst scene = this.scene();\n\t\tif (scene) return resolveRef(scene);\n\t\treturn this.store.scene();\n\t});\n\n\tprivate trueCamera = computed(() => {\n\t\tconst camera = this.camera();\n\t\tif (camera) return resolveRef(camera);\n\t\treturn this.store.camera();\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst invisible: THREE.Object3D[] = [];\n\n\t\t\tconst [all, scene, camera, gl] = [this.all(), this.trueScene(), this.trueCamera(), this.store.gl()];\n\n\t\t\tif (!scene || !camera) return;\n\n\t\t\tif (all) {\n\t\t\t\t// Find all invisible objects, store and then flip them\n\t\t\t\tscene.traverse((object) => {\n\t\t\t\t\tif (!object.visible) {\n\t\t\t\t\t\tinvisible.push(object);\n\t\t\t\t\t\tobject.visible = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Now compile the scene\n\t\t\tgl.compile(scene, camera);\n\n\t\t\t// And for good measure, hit it with a cube camera\n\t\t\tconst cubeRenderTarget = new THREE.WebGLCubeRenderTarget(128);\n\t\t\tconst cubeCamera = new THREE.CubeCamera(0.01, 100000, cubeRenderTarget);\n\t\t\tcubeCamera.update(gl, scene);\n\t\t\tcubeRenderTarget.dispose();\n\n\t\t\t// Flips these objects back\n\t\t\tinvisible.forEach((object) => (object.visible = false));\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { checkUpdate, extend, getInstanceState, is, NgtThreeElements, omit, pick, resolveRef } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Group } from 'three';\nimport { MeshSurfaceSampler } from 'three-stdlib';\n\ninterface SamplePayload {\n\t/**\n\t * The position of the sample.\n\t */\n\tposition: THREE.Vector3;\n\t/**\n\t * The normal of the mesh at the sampled position.\n\t */\n\tnormal: THREE.Vector3;\n\t/**\n\t * The vertex color of the mesh at the sampled position.\n\t */\n\tcolor: THREE.Color;\n}\n\nexport type TransformFn = (payload: TransformPayload, i: number) => void;\n\ninterface TransformPayload extends SamplePayload {\n\t/**\n\t * The dummy object used to transform each instance.\n\t * This object's matrix will be updated after transforming & it will be used\n\t * to set the instance's matrix.\n\t */\n\tdummy: THREE.Object3D;\n\t/**\n\t * The mesh that's initially passed to the sampler.\n\t * Use this if you need to apply transforms from your mesh to your instances\n\t * or if you need to grab attributes from the geometry.\n\t */\n\tsampledMesh: THREE.Mesh;\n}\n\nexport function surfaceSampler(\n\tmesh: () => ElementRef<THREE.Mesh> | THREE.Mesh | null | undefined,\n\t{\n\t\tcount,\n\t\ttransform,\n\t\tweight,\n\t\tinstancedMesh,\n\t}: {\n\t\tcount?: () => number;\n\t\ttransform?: () => TransformFn | undefined;\n\t\tweight?: () => string | undefined;\n\t\tinstancedMesh?: () => ElementRef<THREE.InstancedMesh> | THREE.InstancedMesh | null | undefined;\n\t} = {},\n) {\n\tconst initialBufferAttribute = (() => {\n\t\tconst arr = Array.from({ length: count?.() ?? 16 }, () => [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]).flat();\n\t\treturn new THREE.InstancedBufferAttribute(Float32Array.from(arr), 16);\n\t})();\n\n\treturn computed(() => {\n\t\tconst currentMesh = resolveRef(mesh());\n\t\tif (!currentMesh) return initialBufferAttribute;\n\n\t\tconst instanceState = getInstanceState(currentMesh);\n\t\tif (!instanceState) return initialBufferAttribute;\n\n\t\tconst nonObjects = instanceState.nonObjects();\n\t\tif (\n\t\t\t!nonObjects ||\n\t\t\t!nonObjects.length ||\n\t\t\tnonObjects.every((nonObject) => !is.three<THREE.BufferGeometry>(nonObject, 'isBufferGeometry'))\n\t\t) {\n\t\t\treturn initialBufferAttribute;\n\t\t}\n\n\t\tconst sampler = new MeshSurfaceSampler(currentMesh);\n\t\tconst _count = count?.() ?? 16;\n\t\tconst _transform = transform?.();\n\t\tconst _weight = weight?.();\n\n\t\tif (_weight) {\n\t\t\tsampler.setWeightAttribute(_weight);\n\t\t}\n\n\t\tsampler.build();\n\n\t\tconst position = new THREE.Vector3();\n\t\tconst normal = new THREE.Vector3();\n\t\tconst color = new THREE.Color();\n\t\tconst dummy = new THREE.Object3D();\n\t\tconst instance = resolveRef(instancedMesh?.());\n\n\t\tcurrentMesh.updateMatrixWorld(true);\n\n\t\tfor (let i = 0; i < _count; i++) {\n\t\t\tsampler.sample(position, normal, color);\n\n\t\t\tif (typeof _transform === 'function') {\n\t\t\t\t_transform({ dummy, sampledMesh: currentMesh, position, normal, color }, i);\n\t\t\t} else {\n\t\t\t\tdummy.position.copy(position);\n\t\t\t}\n\n\t\t\tdummy.updateMatrix();\n\n\t\t\tif (instance) {\n\t\t\t\tinstance.setMatrixAt(i, dummy.matrix);\n\t\t\t}\n\n\t\t\tdummy.matrix.toArray(initialBufferAttribute.array, i * 16);\n\t\t}\n\n\t\tif (instance) {\n\t\t\tcheckUpdate(instance.instanceMatrix);\n\t\t}\n\n\t\tcheckUpdate(initialBufferAttribute);\n\n\t\treturn new THREE.InstancedBufferAttribute(initialBufferAttribute.array, initialBufferAttribute.itemSize).copy(\n\t\t\tinitialBufferAttribute,\n\t\t);\n\t});\n}\n\nexport interface NgtsSamplerOptions extends Partial<NgtThreeElements['ngt-group']> {\n\t/**\n\t * The NAME of the weight attribute to use when sampling.\n\t *\n\t * @see https://threejs.org/docs/#examples/en/math/MeshSurfaceSampler.setWeightAttribute\n\t */\n\tweight?: string;\n\t/**\n\t * Transformation to be applied to each instance.\n\t * Receives a dummy object3D with all the sampled data ( @see TransformPayload ).\n\t * It should mutate `transformPayload.dummy`.\n\t *\n\t * @see ( @todo add link to example )\n\t *\n\t * There is no need to update the dummy's matrix\n\t */\n\ttransform?: TransformFn;\n\tcount: number;\n}\n\nconst defaultOptions: NgtsSamplerOptions = {\n\tcount: 16,\n};\n\n@Component({\n\tselector: 'ngts-sampler',\n\ttemplate: `\n\t\t<ngt-group #group [parameters]=\"parameters()\">\n\t\t\t<ng-content />\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsSampler {\n\tmesh = input<ElementRef<THREE.Mesh> | THREE.Mesh | null>(null);\n\tinstances = input<ElementRef<THREE.InstancedMesh> | THREE.InstancedMesh | null>(null);\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, ['weight', 'transform', 'count']);\n\n\t// NOTE: this could have been a viewChild.required, but we need to _try_ to consume\n\t// this Signal earlier than when a viewChild.required would resolve.\n\tgroupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\n\tprivate count = pick(this.options, 'count');\n\tprivate weight = pick(this.options, 'weight');\n\tprivate transform = pick(this.options, 'transform');\n\n\tconstructor() {\n\t\textend({ Group });\n\n\t\tconst meshToSample = computed(() => {\n\t\t\tconst group = this.groupRef().nativeElement;\n\t\t\tconst instanceState = getInstanceState(group);\n\t\t\tif (!instanceState) return null;\n\n\t\t\tconst mesh = resolveRef(this.mesh());\n\t\t\tif (mesh) return mesh;\n\n\t\t\tconst objects = instanceState.objects();\n\t\t\treturn objects.find((c) => is.three<THREE.Mesh>(c, 'isMesh'));\n\t\t});\n\n\t\tconst instancedMeshToSample = computed(() => {\n\t\t\tconst group = this.groupRef().nativeElement;\n\t\t\tconst instanceState = getInstanceState(group);\n\t\t\tif (!instanceState) return null;\n\n\t\t\tconst instances = resolveRef(this.instances());\n\t\t\tif (instances) return instances;\n\n\t\t\tconst objects = instanceState.objects();\n\t\t\treturn objects.find(\n\t\t\t\t(c) => !!Object.getOwnPropertyDescriptor(c, 'instanceMatrix'),\n\t\t\t) as unknown as THREE.InstancedMesh;\n\t\t});\n\n\t\t// NOTE: because injectSurfaceSampler returns a computed, we need to consume\n\t\t// this computed in a Reactive Context (an effect) to ensure the inner logic of\n\t\t// injectSurfaceSampler is run properly.\n\t\tconst sampler = surfaceSampler(meshToSample, {\n\t\t\tcount: this.count,\n\t\t\ttransform: this.transform,\n\t\t\tweight: this.weight,\n\t\t\tinstancedMesh: instancedMeshToSample,\n\t\t});\n\t\teffect(sampler);\n\t}\n}\n","import { NgtSize } from 'angular-three';\nimport * as THREE from 'three';\n\nconst tV0 = new THREE.Vector3();\nconst tV1 = new THREE.Vector3();\nconst tV2 = new THREE.Vector3();\n\nfunction getPoint2(point3: THREE.Vector3, camera: THREE.Camera, size: NgtSize) {\n\tconst widthHalf = size.width / 2;\n\tconst heightHalf = size.height / 2;\n\tcamera.updateMatrixWorld(false);\n\tconst vector = point3.project(camera);\n\tvector.x = vector.x * widthHalf + widthHalf;\n\tvector.y = -(vector.y * heightHalf) + heightHalf;\n\treturn vector;\n}\n\nfunction getPoint3(point2: THREE.Vector3, camera: THREE.Camera, size: NgtSize, zValue: number = 1) {\n\tconst vector = tV0.set((point2.x / size.width) * 2 - 1, -(point2.y / size.height) * 2 + 1, zValue);\n\tvector.unproject(camera);\n\treturn vector;\n}\n\nexport function calculateScaleFactor(point3: THREE.Vector3, radiusPx: number, camera: THREE.Camera, size: NgtSize) {\n\tconst point2 = getPoint2(tV2.copy(point3), camera, size);\n\tlet scale = 0;\n\tfor (let i = 0; i < 2; ++i) {\n\t\tconst point2off = tV1.copy(point2).setComponent(i, point2.getComponent(i) + radiusPx);\n\t\tconst point3off = getPoint3(point2off, camera, size, point2off.z);\n\t\tscale = Math.max(scale, point3.distanceTo(point3off));\n\t}\n\treturn scale;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["defaultOptions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"angular-three-soba-misc.mjs","sources":["../../../../libs/soba/misc/src/lib/animations.ts","../../../../libs/soba/misc/src/lib/bake-shadows.ts","../../../../libs/soba/misc/src/lib/computed-attribute.ts","../../../../libs/soba/misc/src/lib/constants.ts","../../../../libs/soba/misc/src/lib/decal.ts","../../../../libs/soba/misc/src/lib/deprecated.ts","../../../../libs/soba/misc/src/lib/fbo.ts","../../../../libs/soba/misc/src/lib/depth-buffer.ts","../../../../libs/soba/misc/src/lib/html/utils.ts","../../../../libs/soba/misc/src/lib/html/html-content.ts","../../../../libs/soba/misc/src/lib/html/html.ts","../../../../libs/soba/misc/src/lib/intersect.ts","../../../../libs/soba/misc/src/lib/preload.ts","../../../../libs/soba/misc/src/lib/sampler.ts","../../../../libs/soba/misc/src/lib/scale-factor.ts","../../../../libs/soba/misc/src/angular-three-soba-misc.ts"],"sourcesContent":["import { computed, effect, ElementRef, Injector, isSignal, signal, untracked } from '@angular/core';\nimport { injectBeforeRender, resolveRef } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\n/**\n * name: any to allow consumers to pass in type-safe animation clips\n */\ntype NgtsAnimationClipWithoutName = Omit<THREE.AnimationClip, 'name'> & { name: any };\nexport type NgtsAnimationClip = Omit<NgtsAnimationClipWithoutName, 'clone'> & { clone: () => NgtsAnimationClip };\nexport type NgtsAnimationClips<TAnimationNames extends string> = {\n\t[Name in TAnimationNames]: Omit<NgtsAnimationClip, 'name'> & { name: Name };\n}[TAnimationNames];\nexport type NgtsAnimationApi<T extends NgtsAnimationClip> = {\n\tclips: T[];\n\tmixer: THREE.AnimationMixer;\n\tnames: T['name'][];\n} & (\n\t| {\n\t\t\t/**\n\t\t\t * Whether or not the animations finishes initialized\n\t\t\t */\n\t\t\tget isReady(): true;\n\t\t\tactions: { [key in T['name']]: THREE.AnimationAction };\n\t }\n\t| {\n\t\t\t/**\n\t\t\t * Whether or not the animations finishes initialized\n\t\t\t */\n\t\t\tget isReady(): false;\n\t }\n);\n\nexport type NgtsAnimation<TAnimation extends NgtsAnimationClip = NgtsAnimationClip> =\n\t| TAnimation[]\n\t| { animations: TAnimation[] };\n\n/**\n * Use afterNextRender\n */\nexport function injectAnimations<TAnimation extends NgtsAnimationClip>(\n\tanimations: () => NgtsAnimation<TAnimation> | undefined | null,\n\tobject:\n\t\t| ElementRef<THREE.Object3D>\n\t\t| THREE.Object3D\n\t\t| (() => ElementRef<THREE.Object3D> | THREE.Object3D | undefined | null),\n\t{ injector }: { injector?: Injector } = {},\n): NgtsAnimationApi<TAnimation> {\n\treturn assertInjector(injectAnimations, injector, () => {\n\t\tconst mixer = new THREE.AnimationMixer(null!);\n\t\tinjectBeforeRender(({ delta }) => {\n\t\t\tif (!mixer.getRoot()) return;\n\t\t\tmixer.update(delta);\n\t\t});\n\n\t\tlet cached = {} as Record<string, THREE.AnimationAction>;\n\t\tconst actions = {} as { [key in TAnimation['name']]: THREE.AnimationAction };\n\t\tconst clips = [] as NgtsAnimationApi<TAnimation>['clips'];\n\t\tconst names = [] as NgtsAnimationApi<TAnimation>['names'];\n\n\t\tconst actualObject = computed(() => {\n\t\t\tif (isSignal(object) || typeof object === 'function') {\n\t\t\t\treturn resolveRef(object());\n\t\t\t}\n\n\t\t\treturn resolveRef(object);\n\t\t});\n\n\t\tconst ready = signal(false);\n\n\t\teffect((onCleanup) => {\n\t\t\tconst obj = actualObject() as THREE.Object3D | undefined;\n\t\t\tif (!obj) return;\n\n\t\t\tObject.assign(mixer, { _root: obj });\n\n\t\t\tconst maybeAnimationClips = animations();\n\t\t\tif (!maybeAnimationClips) return;\n\n\t\t\tconst animationClips = Array.isArray(maybeAnimationClips)\n\t\t\t\t? maybeAnimationClips\n\t\t\t\t: maybeAnimationClips.animations;\n\n\t\t\tfor (let i = 0; i < animationClips.length; i++) {\n\t\t\t\tconst clip = animationClips[i];\n\n\t\t\t\tnames.push(clip.name);\n\t\t\t\tclips.push(clip);\n\n\t\t\t\tif (!actions[clip.name as TAnimation['name']]) {\n\t\t\t\t\tObject.defineProperty(actions, clip.name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tget: () => {\n\t\t\t\t\t\t\tif (!cached[clip.name]) {\n\t\t\t\t\t\t\t\tcached[clip.name] = mixer.clipAction(clip, obj);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn cached[clip.name];\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!untracked(ready)) {\n\t\t\t\tready.set(true);\n\t\t\t}\n\n\t\t\tonCleanup(() => {\n\t\t\t\t// clear cached\n\t\t\t\tcached = {};\n\t\t\t\t// stop all actions\n\t\t\t\tmixer.stopAllAction();\n\t\t\t\t// uncache actions\n\t\t\t\tObject.values(actions).forEach((action) => {\n\t\t\t\t\tmixer.uncacheAction(action as THREE.AnimationClip, obj);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tconst result = { ready, clips, mixer, actions, names } as unknown as NgtsAnimationApi<TAnimation>;\n\n\t\tObject.defineProperty(result, 'isReady', { get: ready });\n\n\t\treturn result;\n\t});\n}\n","import { Directive, effect } from '@angular/core';\nimport { injectStore } from 'angular-three';\n\n@Directive({ selector: 'ngts-bake-shadows' })\nexport class NgtsBakeShadows {\n\tconstructor() {\n\t\tconst store = injectStore();\n\t\teffect((onCleanup) => {\n\t\t\tconst gl = store.gl();\n\t\t\tgl.shadowMap.autoUpdate = false;\n\t\t\tgl.shadowMap.needsUpdate = true;\n\t\t\tonCleanup(() => {\n\t\t\t\tgl.shadowMap.autoUpdate = gl.shadowMap.needsUpdate = true;\n\t\t\t});\n\t\t});\n\t}\n}\n","import {\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\teffect,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { NgtArgs, NgtThreeElements, getInstanceState } from 'angular-three';\nimport * as THREE from 'three';\n\n@Component({\n\tselector: 'ngts-computed-attribute',\n\ttemplate: `\n\t\t<ngt-primitive #attribute *args=\"[bufferAttribute]\" [attach]=\"['attributes', name()]\" [parameters]=\"options()\">\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\n/**\n * Used exclusively as a child of a BufferGeometry.\n * Computes the BufferAttribute by calling the `compute` function\n * and attaches the attribute to the geometry.\n */\nexport class NgtsComputedAttribute {\n\tcompute = input.required<(geometry: THREE.BufferGeometry) => THREE.BufferAttribute>();\n\tname = input.required<string>();\n\toptions = input({} as Partial<NgtThreeElements['ngt-buffer-geometry']>);\n\n\tprotected bufferAttribute = new THREE.BufferAttribute(new Float32Array(0), 1);\n\tattributeRef = viewChild<ElementRef<THREE.BufferAttribute>>('attribute');\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst bufferAttribute = this.attributeRef()?.nativeElement;\n\t\t\tif (!bufferAttribute) return;\n\n\t\t\tconst instanceState = getInstanceState(bufferAttribute);\n\t\t\tif (!instanceState) return;\n\n\t\t\tconst geometry = ((bufferAttribute as any).parent as THREE.BufferGeometry) ?? instanceState.parent();\n\n\t\t\tconst attribute = this.compute()(geometry);\n\t\t\tbufferAttribute.copy(attribute);\n\t\t});\n\t}\n}\n","import { REVISION } from 'three';\n\nexport function getVersion() {\n\treturn parseInt(REVISION.replace(/\\D+/g, ''));\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { applyProps, extend, getInstanceState, is, NgtThreeElements, omit, pick, resolveRef } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { AxesHelper, BoxGeometry, Mesh, MeshNormalMaterial } from 'three';\nimport { DecalGeometry } from 'three-stdlib';\n\nexport interface NgtsDecalOptions extends Partial<NgtThreeElements['ngt-mesh']> {\n\tpolygonOffsetFactor: number;\n\tdepthTest: boolean;\n\tdebug: boolean;\n\tmap?: THREE.Texture | null;\n}\n\nconst defaultOptions: NgtsDecalOptions = {\n\tpolygonOffsetFactor: -10,\n\tdebug: false,\n\tdepthTest: false,\n};\n\n@Component({\n\tselector: 'ngts-decal',\n\ttemplate: `\n\t\t<ngt-mesh #mesh [parameters]=\"parameters()\">\n\t\t\t<ngt-value [rawValue]=\"true\" attach=\"material.transparent\" />\n\t\t\t<ngt-value [rawValue]=\"true\" attach=\"material.polygonOffset\" />\n\t\t\t<ngt-value [rawValue]=\"map()\" attach=\"material.map\" />\n\n\t\t\t<ng-content>\n\t\t\t\t<!-- we only want to pass through these material properties if they don't use a custom material -->\n\t\t\t\t<ngt-value [rawValue]=\"polygonOffsetFactor()\" attach=\"material.polygonOffsetFactor\" />\n\t\t\t\t<ngt-value [rawValue]=\"depthTest()\" attach=\"material.depthTest\" />\n\t\t\t</ng-content>\n\n\t\t\t@if (debug()) {\n\t\t\t\t<ngt-mesh #helper>\n\t\t\t\t\t<ngt-box-geometry />\n\t\t\t\t\t<ngt-mesh-normal-material wireframe />\n\t\t\t\t\t<ngt-axes-helper />\n\t\t\t\t</ngt-mesh>\n\t\t\t}\n\t\t</ngt-mesh>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsDecal {\n\tmesh = input<ElementRef<THREE.Mesh> | THREE.Mesh | null>();\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, [\n\t\t'debug',\n\t\t'map',\n\t\t'depthTest',\n\t\t'polygonOffsetFactor',\n\t\t'position',\n\t\t'scale',\n\t\t'rotation',\n\t]);\n\n\tmeshRef = viewChild.required<ElementRef<THREE.Mesh>>('mesh');\n\tprivate helperRef = viewChild<ElementRef<THREE.Mesh>>('helper');\n\n\tprotected map = pick(this.options, 'map');\n\tprotected depthTest = pick(this.options, 'depthTest');\n\tprotected polygonOffsetFactor = pick(this.options, 'polygonOffsetFactor');\n\tprotected debug = pick(this.options, 'debug');\n\tprivate position = pick(this.options, 'position');\n\tprivate rotation = pick(this.options, 'rotation');\n\tprivate scale = pick(this.options, 'scale');\n\n\tconstructor() {\n\t\textend({ Mesh, BoxGeometry, MeshNormalMaterial, AxesHelper });\n\n\t\teffect((onCleanup) => {\n\t\t\tconst thisMesh = this.meshRef().nativeElement;\n\t\t\tconst instanceState = getInstanceState(thisMesh);\n\t\t\tif (!instanceState) return;\n\n\t\t\tconst parent = resolveRef(this.mesh()) || instanceState.parent();\n\n\t\t\tif (parent && !is.three<THREE.Mesh>(parent, 'isMesh')) {\n\t\t\t\tthrow new Error('<ngts-decal> must have a Mesh as parent or specify its \"mesh\" input');\n\t\t\t}\n\n\t\t\tif (!parent) return;\n\n\t\t\tconst parentInstanceState = getInstanceState(parent);\n\t\t\tif (!parentInstanceState) return;\n\n\t\t\t// track parent's children\n\t\t\tconst parentNonObjects = parentInstanceState.nonObjects();\n\t\t\tif (!parentNonObjects || !parentNonObjects.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// if parent geometry doesn't have its attributes populated properly, we skip\n\t\t\tif (!parent.geometry?.attributes?.['position']) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst [position, rotation, scale] = [this.position(), this.rotation(), this.scale()];\n\t\t\tconst state = {\n\t\t\t\tposition: new THREE.Vector3(),\n\t\t\t\trotation: new THREE.Euler(),\n\t\t\t\tscale: new THREE.Vector3(1, 1, 1),\n\t\t\t};\n\n\t\t\tapplyProps(state, { position, scale });\n\n\t\t\t// zero out the parents matrix world for this operation\n\t\t\tconst matrixWorld = parent.matrixWorld.clone();\n\t\t\tparent.matrixWorld.identity();\n\n\t\t\tif (!rotation || typeof rotation === 'number') {\n\t\t\t\tconst obj = new THREE.Object3D();\n\t\t\t\tobj.position.copy(state.position);\n\t\t\t\tobj.lookAt(parent.position);\n\t\t\t\tif (typeof rotation === 'number') obj.rotateZ(rotation);\n\t\t\t\tapplyProps(state, { rotation: obj.rotation });\n\t\t\t} else {\n\t\t\t\tapplyProps(state, { rotation });\n\t\t\t}\n\n\t\t\tthisMesh.geometry = new DecalGeometry(parent, state.position, state.rotation, state.scale);\n\t\t\tconst helper = this.helperRef()?.nativeElement;\n\t\t\tif (helper) {\n\t\t\t\tapplyProps(helper, state);\n\t\t\t\t// Prevent the helpers from blocking rays\n\t\t\t\thelper.traverse((child) => (child.raycast = () => null));\n\t\t\t}\n\n\t\t\t// Reset parents matrix-world\n\t\t\tparent.matrixWorld = matrixWorld;\n\n\t\t\tonCleanup(() => {\n\t\t\t\tthisMesh.geometry.dispose();\n\t\t\t});\n\t\t});\n\t}\n}\n","import type * as THREE from 'three';\n\n/**\n * NOTE: Sets `BufferAttribute.updateRange` since r159.\n */\nexport const setUpdateRange = (\n\tattribute: THREE.BufferAttribute,\n\tupdateRange: { offset: number; count: number },\n): void => {\n\tif ('updateRanges' in attribute) {\n\t\t// attribute.updateRanges[0] = updateRange;\n\t\tattribute.addUpdateRange(updateRange.offset, updateRange.count);\n\t} else {\n\t\tObject.assign(attribute, { updateRange });\n\t}\n};\n","import {\n\tDestroyRef,\n\tDirective,\n\tEmbeddedViewRef,\n\tInjector,\n\tTemplateRef,\n\tViewContainerRef,\n\tcomputed,\n\teffect,\n\tinject,\n\tinput,\n\tuntracked,\n} from '@angular/core';\nimport { injectStore } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\ninterface FBOSettings {\n\t/** Defines the count of MSAA samples. Can only be used with WebGL 2. Default: 0 */\n\tsamples?: number;\n\t/** If set, the scene depth will be rendered into buffer.depthTexture. Default: false */\n\tdepth?: boolean;\n\n\t// WebGLRenderTargetOptions => RenderTargetOptions\n\twrapS?: THREE.Wrapping | undefined;\n\twrapT?: THREE.Wrapping | undefined;\n\tmagFilter?: THREE.MagnificationTextureFilter | undefined;\n\tminFilter?: THREE.MinificationTextureFilter | undefined;\n\tformat?: number | undefined; // RGBAFormat;\n\ttype?: THREE.TextureDataType | undefined; // UnsignedByteType;\n\tanisotropy?: number | undefined; // 1;\n\tdepthBuffer?: boolean | undefined; // true;\n\tstencilBuffer?: boolean | undefined; // false;\n\tgenerateMipmaps?: boolean | undefined; // true;\n\tdepthTexture?: THREE.DepthTexture | undefined;\n\tcolorSpace?: THREE.ColorSpace | undefined;\n}\n\nexport interface NgtsFBOParams {\n\twidth?: number | FBOSettings;\n\theight?: number;\n\tsettings?: FBOSettings;\n}\n\nexport function injectFBO(params: () => NgtsFBOParams = () => ({}), { injector }: { injector?: Injector } = {}) {\n\treturn assertInjector(injectFBO, injector, () => {\n\t\tconst store = injectStore();\n\n\t\tconst width = computed(() => {\n\t\t\tconst { width } = params();\n\t\t\treturn typeof width === 'number' ? width : store.size.width() * store.viewport.dpr();\n\t\t});\n\n\t\tconst height = computed(() => {\n\t\t\tconst { height } = params();\n\t\t\treturn typeof height === 'number' ? height : store.size.height() * store.viewport.dpr();\n\t\t});\n\n\t\tconst settings = computed(() => {\n\t\t\tconst { width, settings } = params();\n\t\t\tconst _settings = (typeof width === 'number' ? settings : (width as FBOSettings)) || {};\n\t\t\tif (_settings.samples === undefined) {\n\t\t\t\t_settings.samples = 0;\n\t\t\t}\n\t\t\treturn _settings;\n\t\t});\n\n\t\tconst target = (() => {\n\t\t\tconst [{ samples = 0, depth, ...targetSettings }, _width, _height] = [\n\t\t\t\tuntracked(settings),\n\t\t\t\tuntracked(width),\n\t\t\t\tuntracked(height),\n\t\t\t];\n\n\t\t\tconst target = new THREE.WebGLRenderTarget(_width, _height, {\n\t\t\t\tminFilter: THREE.LinearFilter,\n\t\t\t\tmagFilter: THREE.LinearFilter,\n\t\t\t\ttype: THREE.HalfFloatType,\n\t\t\t\t...targetSettings,\n\t\t\t});\n\n\t\t\tif (depth) {\n\t\t\t\ttarget.depthTexture = new THREE.DepthTexture(_width, _height, THREE.FloatType);\n\t\t\t}\n\n\t\t\ttarget.samples = samples;\n\t\t\treturn target;\n\t\t})();\n\n\t\teffect(() => {\n\t\t\tconst [{ samples = 0 }, _width, _height] = [settings(), width(), height()];\n\t\t\ttarget.setSize(_width, _height);\n\t\t\tif (samples) target.samples = samples;\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => target.dispose());\n\n\t\treturn target;\n\t});\n}\n\n@Directive({ selector: 'ng-template[fbo]' })\nexport class NgtsFBO {\n\tfbo = input({} as { width: NgtsFBOParams['width']; height: NgtsFBOParams['height'] } & FBOSettings);\n\n\tprivate template = inject(TemplateRef);\n\tprivate viewContainerRef = inject(ViewContainerRef);\n\n\tconstructor() {\n\t\tlet ref: EmbeddedViewRef<{ $implicit: ReturnType<typeof injectFBO> }>;\n\n\t\tconst fboTarget = injectFBO(() => {\n\t\t\tconst { width, height, ...settings } = this.fbo();\n\t\t\treturn { width, height, settings };\n\t\t});\n\n\t\teffect(() => {\n\t\t\tref = this.viewContainerRef.createEmbeddedView(this.template, { $implicit: fboTarget });\n\t\t\tref.detectChanges();\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tref?.destroy();\n\t\t});\n\t}\n\n\tstatic ngTemplateContextGuard(_: NgtsFBO, ctx: unknown): ctx is { $implicit: ReturnType<typeof injectFBO> } {\n\t\treturn true;\n\t}\n}\n","import { computed, Injector } from '@angular/core';\nimport { injectBeforeRender, injectStore } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { injectFBO } from './fbo';\n\nexport function injectDepthBuffer(\n\tparams: () => { size?: number; frames?: number } = () => ({}),\n\t{ injector }: { injector?: Injector } = {},\n) {\n\treturn assertInjector(injectDepthBuffer, injector, () => {\n\t\tconst size = computed(() => params().size || 256);\n\t\tconst frames = computed(() => params().frames || Infinity);\n\n\t\tconst store = injectStore();\n\n\t\tconst w = computed(() => size() || store.size.width() * store.viewport.dpr());\n\t\tconst h = computed(() => size() || store.size.height() * store.viewport.dpr());\n\n\t\tconst depthConfig = computed(() => {\n\t\t\tconst depthTexture = new THREE.DepthTexture(w(), h());\n\t\t\tdepthTexture.format = THREE.DepthFormat;\n\t\t\tdepthTexture.type = THREE.UnsignedShortType;\n\t\t\treturn { depthTexture };\n\t\t});\n\n\t\tconst depthFBO = injectFBO(() => ({ width: w(), height: h(), settings: depthConfig() }));\n\n\t\tlet count = 0;\n\t\tinjectBeforeRender(({ gl, scene, camera }) => {\n\t\t\tif (frames() === Infinity || count < frames()) {\n\t\t\t\tgl.setRenderTarget(depthFBO);\n\t\t\t\tgl.render(scene, camera);\n\t\t\t\tgl.setRenderTarget(null);\n\t\t\t\tcount++;\n\t\t\t}\n\t\t});\n\n\t\treturn depthFBO.depthTexture;\n\t});\n}\n","import { is } from 'angular-three';\nimport * as THREE from 'three';\n\nconst v1 = new THREE.Vector3();\nconst v2 = new THREE.Vector3();\nconst v3 = new THREE.Vector3();\nconst v4 = new THREE.Vector2();\n\nexport function defaultCalculatePosition(\n\tel: THREE.Object3D,\n\tcamera: THREE.Camera,\n\tsize: { width: number; height: number },\n) {\n\tconst objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n\tobjectPos.project(camera);\n\tconst widthHalf = size.width / 2;\n\tconst heightHalf = size.height / 2;\n\treturn [objectPos.x * widthHalf + widthHalf, -(objectPos.y * heightHalf) + heightHalf];\n}\n\nexport type CalculatePosition = typeof defaultCalculatePosition;\n\nexport function isObjectBehindCamera(el: THREE.Object3D, camera: THREE.Camera) {\n\tconst objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n\tconst cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n\tconst deltaCamObj = objectPos.sub(cameraPos);\n\tconst camDir = camera.getWorldDirection(v3);\n\treturn deltaCamObj.angleTo(camDir) > Math.PI / 2;\n}\n\nexport function isObjectVisible(\n\tel: THREE.Object3D,\n\tcamera: THREE.Camera,\n\traycaster: THREE.Raycaster,\n\tocclude: THREE.Object3D[],\n) {\n\tconst elPos = v1.setFromMatrixPosition(el.matrixWorld);\n\tconst screenPos = elPos.clone();\n\tscreenPos.project(camera);\n\tv4.set(screenPos.x, screenPos.y);\n\traycaster.setFromCamera(v4, camera);\n\tconst intersects = raycaster.intersectObjects(occlude, true);\n\tif (intersects.length) {\n\t\tconst intersectionDistance = intersects[0].distance;\n\t\tconst pointDistance = elPos.distanceTo(raycaster.ray.origin);\n\t\treturn pointDistance < intersectionDistance;\n\t}\n\treturn true;\n}\n\nexport function objectScale(el: THREE.Object3D, camera: THREE.Camera) {\n\tif (is.three<THREE.OrthographicCamera>(camera, 'isOrthographicCamera')) return camera.zoom;\n\tif (is.three<THREE.PerspectiveCamera>(camera, 'isPerspectiveCamera')) {\n\t\tconst objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n\t\tconst cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n\t\tconst vFOV = (camera.fov * Math.PI) / 180;\n\t\tconst dist = objectPos.distanceTo(cameraPos);\n\t\tconst scaleFOV = 2 * Math.tan(vFOV / 2) * dist;\n\t\treturn 1 / scaleFOV;\n\t}\n\treturn 1;\n}\n\nexport function objectZIndex(el: THREE.Object3D, camera: THREE.Camera, zIndexRange: Array<number>) {\n\tif (\n\t\tis.three<THREE.PerspectiveCamera>(camera, 'isPerspectiveCamera') ||\n\t\tis.three<THREE.OrthographicCamera>(camera, 'isOrthographicCamera')\n\t) {\n\t\tconst objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n\t\tconst cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n\t\tconst dist = objectPos.distanceTo(cameraPos);\n\t\tconst A = (zIndexRange[1] - zIndexRange[0]) / (camera.far - camera.near);\n\t\tconst B = zIndexRange[1] - A * camera.far;\n\t\treturn Math.round(A * dist + B);\n\t}\n\treturn undefined;\n}\n\nexport function epsilon(value: number) {\n\treturn Math.abs(value) < 1e-10 ? 0 : value;\n}\n\nexport function getCSSMatrix(matrix: THREE.Matrix4, multipliers: number[], prepend = '') {\n\tlet matrix3d = 'matrix3d(';\n\tfor (let i = 0; i !== 16; i++) {\n\t\tmatrix3d += epsilon(multipliers[i] * matrix.elements[i]) + (i !== 15 ? ',' : ')');\n\t}\n\treturn prepend + matrix3d;\n}\n\nexport const getCameraCSSMatrix = ((multipliers: number[]) => {\n\treturn (matrix: THREE.Matrix4) => getCSSMatrix(matrix, multipliers);\n})([1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1]);\n\nexport const getObjectCSSMatrix = ((scaleMultipliers: (n: number) => number[]) => {\n\treturn (matrix: THREE.Matrix4, factor: number) =>\n\t\tgetCSSMatrix(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]);\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\toutput,\n\tRenderer2,\n\tuntracked,\n\tviewChild,\n} from '@angular/core';\nimport { injectBeforeRender, injectStore, is, NgtHTML, pick, resolveRef } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { NgtsHTMLImpl } from './html';\nimport {\n\tCalculatePosition,\n\tdefaultCalculatePosition,\n\tepsilon,\n\tgetCameraCSSMatrix,\n\tgetObjectCSSMatrix,\n\tisObjectBehindCamera,\n\tisObjectVisible,\n\tobjectScale,\n\tobjectZIndex,\n} from './utils';\n\ntype PointerEventsProperties =\n\t| 'auto'\n\t| 'none'\n\t| 'visiblePainted'\n\t| 'visibleFill'\n\t| 'visibleStroke'\n\t| 'visible'\n\t| 'painted'\n\t| 'fill'\n\t| 'stroke'\n\t| 'all'\n\t| 'inherit';\n\nexport interface NgtsHTMLContentOptions {\n\teps: number;\n\tzIndexRange: [number, number];\n\tcenter: boolean;\n\tprepend: boolean;\n\tfullscreen: boolean;\n\tcontainerClass: string;\n\tcontainerStyle: Partial<CSSStyleDeclaration>;\n\tpointerEvents: PointerEventsProperties;\n\tcalculatePosition: CalculatePosition;\n\tsprite: boolean;\n\tdistanceFactor?: number;\n\tparent?: HTMLElement | ElementRef<HTMLElement>;\n}\n\nconst defaultHtmlContentOptions: NgtsHTMLContentOptions = {\n\teps: 0.001,\n\tzIndexRange: [16777271, 0],\n\tpointerEvents: 'auto',\n\tcalculatePosition: defaultCalculatePosition,\n\tcontainerClass: '',\n\tcontainerStyle: {},\n\tcenter: false,\n\tprepend: false,\n\tfullscreen: false,\n\tsprite: false,\n};\n\n@Component({\n\tselector: 'div[htmlContent]',\n\ttemplate: `\n\t\t@if (html.transform()) {\n\t\t\t<div\n\t\t\t\t#transformOuter\n\t\t\t\tstyle=\"position: absolute; top: 0; left: 0; transform-style: preserve-3d; pointer-events: none;\"\n\t\t\t\t[style.width.px]=\"size().width\"\n\t\t\t\t[style.height.px]=\"size().height\"\n\t\t\t>\n\t\t\t\t<div #transformInner style=\"position: absolute\" [style.pointer-events]=\"pointerEvents()\">\n\t\t\t\t\t<div #container [class]=\"containerClass()\" [style]=\"containerStyle()\">\n\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"content\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t} @else {\n\t\t\t<div\n\t\t\t\t#container\n\t\t\t\tstyle=\"position:absolute\"\n\t\t\t\t[style.transform]=\"center() ? 'translate3d(-50%,-50%,0)' : 'none'\"\n\t\t\t\t[style.top]=\"fullscreen() ? -size.height() / 2 + 'px' : 'unset'\"\n\t\t\t\t[style.left]=\"fullscreen() ? -size.width() / 2 + 'px' : 'unset'\"\n\t\t\t\t[style.width]=\"fullscreen() ? size.width() : 'unset'\"\n\t\t\t\t[style.height]=\"fullscreen() ? size.height() : 'unset'\"\n\t\t\t\t[class]=\"containerClass()\"\n\t\t\t\t[style]=\"containerStyle()\"\n\t\t\t>\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"content\" />\n\t\t\t</div>\n\t\t}\n\n\t\t<ng-template #content>\n\t\t\t<ng-content />\n\t\t</ng-template>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgTemplateOutlet],\n\thost: { 'data-ngts-html-content': '' },\n})\nexport class NgtsHTMLContent extends NgtHTML {\n\toptions = input(defaultHtmlContentOptions, {\n\t\ttransform: mergeInputs(defaultHtmlContentOptions),\n\t\talias: 'htmlContent',\n\t});\n\toccluded = output<boolean>();\n\n\ttransformOuterRef = viewChild<ElementRef<HTMLDivElement>>('transformOuter');\n\ttransformInnerRef = viewChild<ElementRef<HTMLDivElement>>('transformInner');\n\tcontainerRef = viewChild<ElementRef<HTMLDivElement>>('container');\n\n\tprotected html = inject(NgtsHTMLImpl);\n\tprivate host = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprivate store = injectStore();\n\tprotected size = this.store.size;\n\n\tprivate parent = pick(this.options, 'parent');\n\tprivate zIndexRange = pick(this.options, 'zIndexRange');\n\tprivate calculatePosition = pick(this.options, 'calculatePosition');\n\tprivate prepend = pick(this.options, 'prepend');\n\tprotected center = pick(this.options, 'center');\n\tprotected fullscreen = pick(this.options, 'fullscreen');\n\tprotected pointerEvents = pick(this.options, 'pointerEvents');\n\tprotected containerClass = pick(this.options, 'containerClass');\n\tprotected containerStyle = pick(this.options, 'containerStyle');\n\n\tprivate target = computed(() => {\n\t\tconst parent = resolveRef(this.parent());\n\t\tif (parent) return parent;\n\t\treturn (this.store.events.connected?.() || this.store.gl.domElement.parentNode()) as HTMLElement;\n\t});\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tconst renderer = inject(Renderer2);\n\n\t\tlet isMeshSizeSet = false;\n\n\t\teffect(() => {\n\t\t\tconst [occlude, canvasEl, zIndexRange] = [\n\t\t\t\tthis.html.occlude(),\n\t\t\t\tthis.store.snapshot.gl.domElement,\n\t\t\t\tuntracked(this.zIndexRange),\n\t\t\t];\n\n\t\t\tif (occlude && occlude === 'blending') {\n\t\t\t\trenderer.setStyle(canvasEl, 'z-index', `${Math.floor(zIndexRange[0] / 2)}`);\n\t\t\t\trenderer.setStyle(canvasEl, 'position', 'absolute');\n\t\t\t\trenderer.setStyle(canvasEl, 'pointer-events', 'none');\n\t\t\t} else {\n\t\t\t\trenderer.removeStyle(canvasEl, 'z-index');\n\t\t\t\trenderer.removeStyle(canvasEl, 'position');\n\t\t\t\trenderer.removeStyle(canvasEl, 'pointer-events');\n\t\t\t}\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst [transform, target, hostEl, prepend, scene, calculatePosition, group, size, camera] = [\n\t\t\t\tthis.html.transform(),\n\t\t\t\tthis.target(),\n\t\t\t\tthis.host.nativeElement,\n\t\t\t\tuntracked(this.prepend),\n\t\t\t\tthis.store.snapshot.scene,\n\t\t\t\tuntracked(this.calculatePosition),\n\t\t\t\tuntracked(this.html.groupRef).nativeElement,\n\t\t\t\tthis.store.snapshot.size,\n\t\t\t\tthis.store.snapshot.camera,\n\t\t\t];\n\n\t\t\tscene.updateMatrixWorld();\n\t\t\trenderer.setStyle(hostEl, 'position', 'absolute');\n\t\t\trenderer.setStyle(hostEl, 'top', '0');\n\t\t\trenderer.setStyle(hostEl, 'left', '0');\n\n\t\t\tif (transform) {\n\t\t\t\trenderer.setStyle(hostEl, 'pointer-events', 'none');\n\t\t\t\trenderer.setStyle(hostEl, 'overflow', 'hidden');\n\t\t\t\trenderer.removeStyle(hostEl, 'transform');\n\t\t\t\trenderer.removeStyle(hostEl, 'transform-origin');\n\t\t\t} else {\n\t\t\t\tconst vec = calculatePosition(group, camera, size);\n\t\t\t\trenderer.setStyle(hostEl, 'transform', `translate3d(${vec[0]}px,${vec[1]}px,0)`);\n\t\t\t\trenderer.setStyle(hostEl, 'transform-origin', '0 0');\n\t\t\t\trenderer.removeStyle(hostEl, 'pointer-events');\n\t\t\t\trenderer.removeStyle(hostEl, 'overflow');\n\t\t\t}\n\n\t\t\tif (prepend) target.prepend(hostEl);\n\t\t\telse target.appendChild(hostEl);\n\n\t\t\tonCleanup(() => {\n\t\t\t\tif (target) target.removeChild(hostEl);\n\t\t\t});\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst _ = [this.options(), this.html.options()];\n\t\t\tisMeshSizeSet = false;\n\t\t});\n\n\t\tlet visible = true;\n\t\tlet oldZoom = 0;\n\t\tlet oldPosition = [0, 0];\n\n\t\tinjectBeforeRender(({ camera: rootCamera }) => {\n\t\t\tconst [\n\t\t\t\thostEl,\n\t\t\t\ttransformOuterEl,\n\t\t\t\ttransformInnerEl,\n\t\t\t\tgroup,\n\t\t\t\tocclusionMesh,\n\t\t\t\tocclusionGeometry,\n\t\t\t\tisRaycastOcclusion,\n\t\t\t\t{ camera, size, viewport, raycaster, scene },\n\t\t\t\t{ calculatePosition, eps, zIndexRange, sprite, distanceFactor },\n\t\t\t\t{ transform, occlude, scale },\n\t\t\t] = [\n\t\t\t\tthis.host.nativeElement,\n\t\t\t\tthis.transformOuterRef()?.nativeElement,\n\t\t\t\tthis.transformInnerRef()?.nativeElement,\n\t\t\t\tthis.html.groupRef().nativeElement,\n\t\t\t\tthis.html.occlusionMeshRef()?.nativeElement,\n\t\t\t\tthis.html.occlusionGeometryRef()?.nativeElement,\n\t\t\t\tthis.html.isRaycastOcclusion(),\n\t\t\t\tthis.store.snapshot,\n\t\t\t\tthis.options(),\n\t\t\t\tthis.html.options(),\n\t\t\t];\n\n\t\t\tif (group) {\n\t\t\t\tcamera.updateMatrixWorld();\n\t\t\t\tgroup.updateWorldMatrix(true, false);\n\t\t\t\tconst vec = transform ? oldPosition : calculatePosition(group, camera, size);\n\n\t\t\t\tif (\n\t\t\t\t\ttransform ||\n\t\t\t\t\tMath.abs(oldZoom - camera.zoom) > eps ||\n\t\t\t\t\tMath.abs(oldPosition[0] - vec[0]) > eps ||\n\t\t\t\t\tMath.abs(oldPosition[1] - vec[1]) > eps\n\t\t\t\t) {\n\t\t\t\t\tconst isBehindCamera = isObjectBehindCamera(group, camera);\n\t\t\t\t\tlet raytraceTarget: null | undefined | boolean | THREE.Object3D[] = false;\n\n\t\t\t\t\tif (isRaycastOcclusion) {\n\t\t\t\t\t\tif (Array.isArray(occlude)) {\n\t\t\t\t\t\t\traytraceTarget = occlude.map((item) => resolveRef(item)) as THREE.Object3D[];\n\t\t\t\t\t\t} else if (occlude !== 'blending') {\n\t\t\t\t\t\t\traytraceTarget = [scene];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst previouslyVisible = visible;\n\t\t\t\t\tif (raytraceTarget) {\n\t\t\t\t\t\tconst isVisible = isObjectVisible(group, camera, raycaster, raytraceTarget);\n\t\t\t\t\t\tvisible = isVisible && !isBehindCamera;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvisible = !isBehindCamera;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (previouslyVisible !== visible) {\n\t\t\t\t\t\tif (this.occluded['listeners']) this.occluded.emit(!visible);\n\t\t\t\t\t\telse renderer.setStyle(hostEl, 'display', visible ? 'block' : 'none');\n\t\t\t\t\t}\n\n\t\t\t\t\tconst halfRange = Math.floor(zIndexRange[0] / 2);\n\t\t\t\t\tconst zRange = occlude\n\t\t\t\t\t\t? isRaycastOcclusion //\n\t\t\t\t\t\t\t? [zIndexRange[0], halfRange]\n\t\t\t\t\t\t\t: [halfRange - 1, 0]\n\t\t\t\t\t\t: zIndexRange;\n\n\t\t\t\t\trenderer.setStyle(hostEl, 'z-index', `${objectZIndex(group, camera, zRange)}`);\n\n\t\t\t\t\tif (transform) {\n\t\t\t\t\t\tconst [widthHalf, heightHalf] = [size.width / 2, size.height / 2];\n\t\t\t\t\t\tconst fov = camera.projectionMatrix.elements[5] * heightHalf;\n\t\t\t\t\t\tconst { isOrthographicCamera, top, left, bottom, right } = camera as THREE.OrthographicCamera;\n\t\t\t\t\t\tconst cameraMatrix = getCameraCSSMatrix(camera.matrixWorldInverse);\n\t\t\t\t\t\tconst cameraTransform = isOrthographicCamera\n\t\t\t\t\t\t\t? `scale(${fov})translate(${epsilon(-(right + left) / 2)}px,${epsilon((top + bottom) / 2)}px)`\n\t\t\t\t\t\t\t: `translateZ(${fov}px)`;\n\t\t\t\t\t\tlet matrix = group.matrixWorld;\n\t\t\t\t\t\tif (sprite) {\n\t\t\t\t\t\t\tmatrix = camera.matrixWorldInverse\n\t\t\t\t\t\t\t\t.clone()\n\t\t\t\t\t\t\t\t.transpose()\n\t\t\t\t\t\t\t\t.copyPosition(matrix)\n\t\t\t\t\t\t\t\t.scale(group.scale);\n\t\t\t\t\t\t\tmatrix.elements[3] = matrix.elements[7] = matrix.elements[11] = 0;\n\t\t\t\t\t\t\tmatrix.elements[15] = 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trenderer.setStyle(hostEl, 'width', size.width + 'px');\n\t\t\t\t\t\trenderer.setStyle(hostEl, 'height', size.height + 'px');\n\t\t\t\t\t\trenderer.setStyle(hostEl, 'perspective', isOrthographicCamera ? '' : `${fov}px`);\n\n\t\t\t\t\t\tif (transformOuterEl && transformInnerEl) {\n\t\t\t\t\t\t\trenderer.setStyle(\n\t\t\t\t\t\t\t\ttransformOuterEl,\n\t\t\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t\t\t`${cameraTransform}${cameraMatrix}translate(${widthHalf}px,${heightHalf}px)`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\trenderer.setStyle(\n\t\t\t\t\t\t\t\ttransformInnerEl,\n\t\t\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t\t\tgetObjectCSSMatrix(matrix, 1 / ((distanceFactor || 10) / 400)),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst scale = distanceFactor === undefined ? 1 : objectScale(group, camera) * distanceFactor;\n\t\t\t\t\t\trenderer.setStyle(\n\t\t\t\t\t\t\thostEl,\n\t\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t\t`translate3d(${vec[0]}px,${vec[1]}px,0) scale(${scale})`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\toldPosition = vec;\n\t\t\t\t\toldZoom = camera.zoom;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!isRaycastOcclusion && occlusionMesh && !isMeshSizeSet) {\n\t\t\t\tif (transform) {\n\t\t\t\t\tif (transformOuterEl) {\n\t\t\t\t\t\tconst el = transformOuterEl.children[0];\n\n\t\t\t\t\t\tif (el?.clientWidth && el?.clientHeight) {\n\t\t\t\t\t\t\tconst { isOrthographicCamera } = camera as THREE.OrthographicCamera;\n\n\t\t\t\t\t\t\tif (isOrthographicCamera || occlusionGeometry) {\n\t\t\t\t\t\t\t\tif (scale) {\n\t\t\t\t\t\t\t\t\tif (!Array.isArray(scale)) {\n\t\t\t\t\t\t\t\t\t\tocclusionMesh.scale.setScalar(1 / (scale as number));\n\t\t\t\t\t\t\t\t\t} else if (is.three<THREE.Vector3>(scale, 'isVector3')) {\n\t\t\t\t\t\t\t\t\t\tocclusionMesh.scale.copy(scale.clone().divideScalar(1));\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tocclusionMesh.scale.set(1 / scale[0], 1 / scale[1], 1 / scale[2]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst ratio = (distanceFactor || 10) / 400;\n\t\t\t\t\t\t\t\tconst w = el.clientWidth * ratio;\n\t\t\t\t\t\t\t\tconst h = el.clientHeight * ratio;\n\n\t\t\t\t\t\t\t\tocclusionMesh.scale.set(w, h, 1);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tisMeshSizeSet = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst ele = hostEl.children[0];\n\n\t\t\t\t\tif (ele?.clientWidth && ele?.clientHeight) {\n\t\t\t\t\t\tconst ratio = 1 / viewport.factor;\n\t\t\t\t\t\tconst w = ele.clientWidth * ratio;\n\t\t\t\t\t\tconst h = ele.clientHeight * ratio;\n\n\t\t\t\t\t\tocclusionMesh.scale.set(w, h, 1);\n\n\t\t\t\t\t\tisMeshSizeSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tocclusionMesh.lookAt(rootCamera.position);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { extend, is, NgtThreeElements, omit, pick } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Group, Mesh, PlaneGeometry, ShaderMaterial } from 'three';\nimport { NgtsHTMLContent } from './html-content';\n\nexport interface NgtsHTMLOptions extends Partial<NgtThreeElements['ngt-group']> {\n\tocclude: ElementRef<THREE.Object3D>[] | THREE.Object3D[] | boolean | 'raycast' | 'blending';\n\ttransform: boolean;\n\tcastShadow: boolean;\n\treceiveShadow: boolean;\n}\n\nconst defaultHtmlOptions: NgtsHTMLOptions = {\n\tocclude: false,\n\ttransform: false,\n\tcastShadow: false,\n\treceiveShadow: false,\n};\n\n@Component({\n\tselector: 'ngts-html',\n\ttemplate: `\n\t\t<ngt-group #group [parameters]=\"parameters()\">\n\t\t\t@if (occlude() && !isRaycastOcclusion()) {\n\t\t\t\t<ngt-mesh #occlusionMesh [castShadow]=\"castShadow()\" [receiveShadow]=\"receiveShadow()\">\n\t\t\t\t\t<ng-content select=\"[data-occlusion-geometry]\">\n\t\t\t\t\t\t<ngt-plane-geometry #occlusionGeometry />\n\t\t\t\t\t</ng-content>\n\t\t\t\t\t<ng-content select=\"[data-occlusion-material]\">\n\t\t\t\t\t\t<ngt-shader-material\n\t\t\t\t\t\t\t[side]=\"DoubleSide\"\n\t\t\t\t\t\t\t[vertexShader]=\"vertexShader()\"\n\t\t\t\t\t\t\t[fragmentShader]=\"fragmentShader()\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ng-content>\n\t\t\t\t</ngt-mesh>\n\t\t\t}\n\t\t</ngt-group>\n\n\t\t<ng-content />\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsHTMLImpl {\n\toptions = input(defaultHtmlOptions, { transform: mergeInputs(defaultHtmlOptions) });\n\tprotected parameters = omit(this.options, ['occlude', 'castShadow', 'receiveShadow', 'transform']);\n\n\tgroupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\tocclusionMeshRef = viewChild<ElementRef<THREE.Mesh>>('occlusionMesh');\n\tocclusionGeometryRef = viewChild<ElementRef<THREE.PlaneGeometry>>('occlusionGeometry');\n\n\tprotected castShadow = pick(this.options, 'castShadow');\n\tprotected receiveShadow = pick(this.options, 'receiveShadow');\n\tocclude = pick(this.options, 'occlude');\n\ttransform = pick(this.options, 'transform');\n\n\tisRaycastOcclusion = computed(() => {\n\t\tconst occlude = this.occlude();\n\t\treturn (occlude && occlude !== 'blending') || (Array.isArray(occlude) && occlude.length && is.ref(occlude[0]));\n\t});\n\n\tprivate shaders = computed(() => {\n\t\tconst transform = this.transform();\n\t\tconst vertexShader = !transform\n\t\t\t? /* language=glsl glsl */ `\n /*\n This shader is from the THREE's SpriteMaterial.\n We need to turn the backing plane into a Sprite\n (make it always face the camera) if \"transfrom\"\n is false.\n */\n #include <common>\n\n void main() {\n vec2 center = vec2(0., 1.);\n float rotation = 0.0;\n\n // This is somewhat arbitrary, but it seems to work well\n // Need to figure out how to derive this dynamically if it even matters\n float size = 0.03;\n\n vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n vec2 scale;\n scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) scale *= - mvPosition.z;\n\n vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale * size;\n vec2 rotatedPosition;\n rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n mvPosition.xy += rotatedPosition;\n\n gl_Position = projectionMatrix * mvPosition;\n }\n `\n\t\t\t: undefined;\n\n\t\tconst fragmentShader = /* language=glsl glsl */ `\n void main() {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n `;\n\n\t\treturn { vertexShader, fragmentShader };\n\t});\n\n\tprotected vertexShader = pick(this.shaders, 'vertexShader');\n\tprotected fragmentShader = pick(this.shaders, 'fragmentShader');\n\n\tconstructor() {\n\t\textend({ Group, Mesh, PlaneGeometry, ShaderMaterial });\n\t}\n\n\tprotected readonly DoubleSide = THREE.DoubleSide;\n}\n\nexport const NgtsHTML = [NgtsHTMLImpl, NgtsHTMLContent] as const;\n","import { Directive, effect, ElementRef, inject, Injector, model, signal, WritableSignal } from '@angular/core';\nimport { addAfterEffect, addEffect, resolveRef } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\nexport function injectIntersect<TObject extends THREE.Object3D>(\n\tobject: () => ElementRef<TObject> | TObject | undefined | null,\n\t{ injector, source = signal(false) }: { injector?: Injector; source?: WritableSignal<boolean> } = {},\n) {\n\treturn assertInjector(injectIntersect, injector, () => {\n\t\tlet check = false;\n\t\tlet temp = false;\n\n\t\teffect((onCleanup) => {\n\t\t\tconst obj = resolveRef(object());\n\t\t\tif (!obj) return;\n\n\t\t\t// Stamp out frustum check pre-emptively\n\t\t\tconst unsub1 = addEffect(() => {\n\t\t\t\tcheck = false;\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\t// If the object is inside the frustum three will call onRender\n\t\t\tconst oldOnRender = obj.onBeforeRender?.bind(obj);\n\t\t\tobj.onBeforeRender = () => (check = true);\n\n\t\t\t// Compare the check value against the temp value, if it differs set state\n\t\t\tconst unsub2 = addAfterEffect(() => {\n\t\t\t\tif (check !== temp) source.set((temp = check));\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\tonCleanup(() => {\n\t\t\t\tobj.onBeforeRender = oldOnRender;\n\t\t\t\tunsub1();\n\t\t\t\tunsub2();\n\t\t\t});\n\t\t});\n\n\t\treturn source.asReadonly();\n\t});\n}\n\n@Directive({ selector: '[intersect]' })\nexport class NgtsIntersect {\n\tintersect = model(false);\n\n\tconstructor() {\n\t\tconst host = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\t\tinjectIntersect(() => host, { source: this.intersect });\n\t}\n}\n","import { computed, Directive, effect, ElementRef, model } from '@angular/core';\nimport { injectStore, resolveRef } from 'angular-three';\nimport * as THREE from 'three';\n\n@Directive({ selector: 'ngts-preload' })\nexport class NgtsPreload {\n\tall = model<boolean>();\n\tscene = model<THREE.Object3D | ElementRef<THREE.Object3D>>();\n\tcamera = model<THREE.Camera | ElementRef<THREE.Camera>>();\n\n\tprivate store = injectStore();\n\n\tprivate trueScene = computed(() => {\n\t\tconst scene = this.scene();\n\t\tif (scene) return resolveRef(scene);\n\t\treturn this.store.scene();\n\t});\n\n\tprivate trueCamera = computed(() => {\n\t\tconst camera = this.camera();\n\t\tif (camera) return resolveRef(camera);\n\t\treturn this.store.camera();\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst invisible: THREE.Object3D[] = [];\n\n\t\t\tconst [all, scene, camera, gl] = [this.all(), this.trueScene(), this.trueCamera(), this.store.gl()];\n\n\t\t\tif (!scene || !camera) return;\n\n\t\t\tif (all) {\n\t\t\t\t// Find all invisible objects, store and then flip them\n\t\t\t\tscene.traverse((object) => {\n\t\t\t\t\tif (!object.visible) {\n\t\t\t\t\t\tinvisible.push(object);\n\t\t\t\t\t\tobject.visible = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Now compile the scene\n\t\t\tgl.compile(scene, camera);\n\n\t\t\t// And for good measure, hit it with a cube camera\n\t\t\tconst cubeRenderTarget = new THREE.WebGLCubeRenderTarget(128);\n\t\t\tconst cubeCamera = new THREE.CubeCamera(0.01, 100000, cubeRenderTarget);\n\t\t\tcubeCamera.update(gl, scene);\n\t\t\tcubeRenderTarget.dispose();\n\n\t\t\t// Flips these objects back\n\t\t\tinvisible.forEach((object) => (object.visible = false));\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { checkUpdate, extend, getInstanceState, is, NgtThreeElements, omit, pick, resolveRef } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Group } from 'three';\nimport { MeshSurfaceSampler } from 'three-stdlib';\n\ninterface SamplePayload {\n\t/**\n\t * The position of the sample.\n\t */\n\tposition: THREE.Vector3;\n\t/**\n\t * The normal of the mesh at the sampled position.\n\t */\n\tnormal: THREE.Vector3;\n\t/**\n\t * The vertex color of the mesh at the sampled position.\n\t */\n\tcolor: THREE.Color;\n}\n\nexport type TransformFn = (payload: TransformPayload, i: number) => void;\n\ninterface TransformPayload extends SamplePayload {\n\t/**\n\t * The dummy object used to transform each instance.\n\t * This object's matrix will be updated after transforming & it will be used\n\t * to set the instance's matrix.\n\t */\n\tdummy: THREE.Object3D;\n\t/**\n\t * The mesh that's initially passed to the sampler.\n\t * Use this if you need to apply transforms from your mesh to your instances\n\t * or if you need to grab attributes from the geometry.\n\t */\n\tsampledMesh: THREE.Mesh;\n}\n\nexport function surfaceSampler(\n\tmesh: () => ElementRef<THREE.Mesh> | THREE.Mesh | null | undefined,\n\t{\n\t\tcount,\n\t\ttransform,\n\t\tweight,\n\t\tinstancedMesh,\n\t}: {\n\t\tcount?: () => number;\n\t\ttransform?: () => TransformFn | undefined;\n\t\tweight?: () => string | undefined;\n\t\tinstancedMesh?: () => ElementRef<THREE.InstancedMesh> | THREE.InstancedMesh | null | undefined;\n\t} = {},\n) {\n\tconst initialBufferAttribute = (() => {\n\t\tconst arr = Array.from({ length: count?.() ?? 16 }, () => [\n\t\t\t1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,\n\t\t]).flat();\n\t\treturn new THREE.InstancedBufferAttribute(Float32Array.from(arr), 16);\n\t})();\n\n\treturn computed(() => {\n\t\tconst currentMesh = resolveRef(mesh());\n\t\tif (!currentMesh) return initialBufferAttribute;\n\n\t\tconst instanceState = getInstanceState(currentMesh);\n\t\tif (!instanceState) return initialBufferAttribute;\n\n\t\tconst nonObjects = instanceState.nonObjects();\n\t\tif (\n\t\t\t!nonObjects ||\n\t\t\t!nonObjects.length ||\n\t\t\tnonObjects.every((nonObject) => !is.three<THREE.BufferGeometry>(nonObject, 'isBufferGeometry'))\n\t\t) {\n\t\t\treturn initialBufferAttribute;\n\t\t}\n\n\t\tconst sampler = new MeshSurfaceSampler(currentMesh);\n\t\tconst _count = count?.() ?? 16;\n\t\tconst _transform = transform?.();\n\t\tconst _weight = weight?.();\n\n\t\tif (_weight) {\n\t\t\tsampler.setWeightAttribute(_weight);\n\t\t}\n\n\t\tsampler.build();\n\n\t\tconst position = new THREE.Vector3();\n\t\tconst normal = new THREE.Vector3();\n\t\tconst color = new THREE.Color();\n\t\tconst dummy = new THREE.Object3D();\n\t\tconst instance = resolveRef(instancedMesh?.());\n\n\t\tcurrentMesh.updateMatrixWorld(true);\n\n\t\tfor (let i = 0; i < _count; i++) {\n\t\t\tsampler.sample(position, normal, color);\n\n\t\t\tif (typeof _transform === 'function') {\n\t\t\t\t_transform({ dummy, sampledMesh: currentMesh, position, normal, color }, i);\n\t\t\t} else {\n\t\t\t\tdummy.position.copy(position);\n\t\t\t}\n\n\t\t\tdummy.updateMatrix();\n\n\t\t\tif (instance) {\n\t\t\t\tinstance.setMatrixAt(i, dummy.matrix);\n\t\t\t}\n\n\t\t\tdummy.matrix.toArray(initialBufferAttribute.array, i * 16);\n\t\t}\n\n\t\tif (instance) {\n\t\t\tcheckUpdate(instance.instanceMatrix);\n\t\t}\n\n\t\tcheckUpdate(initialBufferAttribute);\n\n\t\treturn new THREE.InstancedBufferAttribute(initialBufferAttribute.array, initialBufferAttribute.itemSize).copy(\n\t\t\tinitialBufferAttribute,\n\t\t);\n\t});\n}\n\nexport interface NgtsSamplerOptions extends Partial<NgtThreeElements['ngt-group']> {\n\t/**\n\t * The NAME of the weight attribute to use when sampling.\n\t *\n\t * @see https://threejs.org/docs/#examples/en/math/MeshSurfaceSampler.setWeightAttribute\n\t */\n\tweight?: string;\n\t/**\n\t * Transformation to be applied to each instance.\n\t * Receives a dummy object3D with all the sampled data ( @see TransformPayload ).\n\t * It should mutate `transformPayload.dummy`.\n\t *\n\t * @see ( @todo add link to example )\n\t *\n\t * There is no need to update the dummy's matrix\n\t */\n\ttransform?: TransformFn;\n\tcount: number;\n}\n\nconst defaultOptions: NgtsSamplerOptions = {\n\tcount: 16,\n};\n\n@Component({\n\tselector: 'ngts-sampler',\n\ttemplate: `\n\t\t<ngt-group #group [parameters]=\"parameters()\">\n\t\t\t<ng-content />\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsSampler {\n\tmesh = input<ElementRef<THREE.Mesh> | THREE.Mesh | null>(null);\n\tinstances = input<ElementRef<THREE.InstancedMesh> | THREE.InstancedMesh | null>(null);\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, ['weight', 'transform', 'count']);\n\n\t// NOTE: this could have been a viewChild.required, but we need to _try_ to consume\n\t// this Signal earlier than when a viewChild.required would resolve.\n\tgroupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\n\tprivate count = pick(this.options, 'count');\n\tprivate weight = pick(this.options, 'weight');\n\tprivate transform = pick(this.options, 'transform');\n\n\tconstructor() {\n\t\textend({ Group });\n\n\t\tconst meshToSample = computed(() => {\n\t\t\tconst group = this.groupRef().nativeElement;\n\t\t\tconst instanceState = getInstanceState(group);\n\t\t\tif (!instanceState) return null;\n\n\t\t\tconst mesh = resolveRef(this.mesh());\n\t\t\tif (mesh) return mesh;\n\n\t\t\tconst objects = instanceState.objects();\n\t\t\treturn objects.find((c) => is.three<THREE.Mesh>(c, 'isMesh'));\n\t\t});\n\n\t\tconst instancedMeshToSample = computed(() => {\n\t\t\tconst group = this.groupRef().nativeElement;\n\t\t\tconst instanceState = getInstanceState(group);\n\t\t\tif (!instanceState) return null;\n\n\t\t\tconst instances = resolveRef(this.instances());\n\t\t\tif (instances) return instances;\n\n\t\t\tconst objects = instanceState.objects();\n\t\t\treturn objects.find(\n\t\t\t\t(c) => !!Object.getOwnPropertyDescriptor(c, 'instanceMatrix'),\n\t\t\t) as unknown as THREE.InstancedMesh;\n\t\t});\n\n\t\t// NOTE: because injectSurfaceSampler returns a computed, we need to consume\n\t\t// this computed in a Reactive Context (an effect) to ensure the inner logic of\n\t\t// injectSurfaceSampler is run properly.\n\t\tconst sampler = surfaceSampler(meshToSample, {\n\t\t\tcount: this.count,\n\t\t\ttransform: this.transform,\n\t\t\tweight: this.weight,\n\t\t\tinstancedMesh: instancedMeshToSample,\n\t\t});\n\t\teffect(sampler);\n\t}\n}\n","import { NgtSize } from 'angular-three';\nimport * as THREE from 'three';\n\nconst tV0 = new THREE.Vector3();\nconst tV1 = new THREE.Vector3();\nconst tV2 = new THREE.Vector3();\n\nfunction getPoint2(point3: THREE.Vector3, camera: THREE.Camera, size: NgtSize) {\n\tconst widthHalf = size.width / 2;\n\tconst heightHalf = size.height / 2;\n\tcamera.updateMatrixWorld(false);\n\tconst vector = point3.project(camera);\n\tvector.x = vector.x * widthHalf + widthHalf;\n\tvector.y = -(vector.y * heightHalf) + heightHalf;\n\treturn vector;\n}\n\nfunction getPoint3(point2: THREE.Vector3, camera: THREE.Camera, size: NgtSize, zValue: number = 1) {\n\tconst vector = tV0.set((point2.x / size.width) * 2 - 1, -(point2.y / size.height) * 2 + 1, zValue);\n\tvector.unproject(camera);\n\treturn vector;\n}\n\nexport function calculateScaleFactor(point3: THREE.Vector3, radiusPx: number, camera: THREE.Camera, size: NgtSize) {\n\tconst point2 = getPoint2(tV2.copy(point3), camera, size);\n\tlet scale = 0;\n\tfor (let i = 0; i < 2; ++i) {\n\t\tconst point2off = tV1.copy(point2).setComponent(i, point2.getComponent(i) + radiusPx);\n\t\tconst point3off = getPoint3(point2off, camera, size, point2off.z);\n\t\tscale = Math.max(scale, point3.distanceTo(point3off));\n\t}\n\treturn scale;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["defaultOptions"],"mappings":"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"}
|