angular-three-soba 4.0.0-next.3 → 4.0.0-next.5
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.
|
@@ -923,7 +923,7 @@ function injectIntersect(object, { injector, source = signal(false) } = {}) {
|
|
|
923
923
|
return true;
|
|
924
924
|
});
|
|
925
925
|
// If the object is inside the frustum three will call onRender
|
|
926
|
-
const oldOnRender = obj.onBeforeRender
|
|
926
|
+
const oldOnRender = obj.onBeforeRender?.bind(obj);
|
|
927
927
|
obj.onBeforeRender = () => (check = true);
|
|
928
928
|
// Compare the check value against the temp value, if it differs set state
|
|
929
929
|
const unsub2 = addAfterEffect(() => {
|
|
@@ -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) ? 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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "angular-three-soba",
|
|
3
|
-
"version": "4.0.0-next.
|
|
3
|
+
"version": "4.0.0-next.5",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -39,10 +39,6 @@
|
|
|
39
39
|
"types": "./cameras/index.d.ts",
|
|
40
40
|
"default": "./fesm2022/angular-three-soba-cameras.mjs"
|
|
41
41
|
},
|
|
42
|
-
"./controls": {
|
|
43
|
-
"types": "./controls/index.d.ts",
|
|
44
|
-
"default": "./fesm2022/angular-three-soba-controls.mjs"
|
|
45
|
-
},
|
|
46
42
|
"./loaders": {
|
|
47
43
|
"types": "./loaders/index.d.ts",
|
|
48
44
|
"default": "./fesm2022/angular-three-soba-loaders.mjs"
|
|
@@ -51,6 +47,10 @@
|
|
|
51
47
|
"types": "./gizmos/index.d.ts",
|
|
52
48
|
"default": "./fesm2022/angular-three-soba-gizmos.mjs"
|
|
53
49
|
},
|
|
50
|
+
"./controls": {
|
|
51
|
+
"types": "./controls/index.d.ts",
|
|
52
|
+
"default": "./fesm2022/angular-three-soba-controls.mjs"
|
|
53
|
+
},
|
|
54
54
|
"./materials": {
|
|
55
55
|
"types": "./materials/index.d.ts",
|
|
56
56
|
"default": "./fesm2022/angular-three-soba-materials.mjs"
|