angular-three 4.0.0-next.92 → 4.0.0-next.93
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-three.mjs","sources":["../../../../libs/core/src/lib/renderer/constants.ts","../../../../libs/core/src/lib/utils/is.ts","../../../../libs/core/src/lib/directives/common.ts","../../../../libs/core/src/lib/directives/args.ts","../../../../libs/core/src/lib/loop.ts","../../../../libs/core/src/lib/utils/make.ts","../../../../libs/core/src/lib/utils/signal-state.ts","../../../../libs/core/src/lib/utils/update.ts","../../../../libs/core/src/lib/store.ts","../../../../libs/core/src/lib/utils/resolve-ref.ts","../../../../libs/core/src/lib/directives/parent.ts","../../../../libs/core/src/lib/instance.ts","../../../../libs/core/src/lib/directives/selection.ts","../../../../libs/core/src/lib/html.ts","../../../../libs/core/src/lib/loader.ts","../../../../libs/core/src/lib/pipes/hexify.ts","../../../../libs/core/src/lib/renderer/catalogue.ts","../../../../libs/core/src/lib/utils/parameters.ts","../../../../libs/core/src/lib/portal.ts","../../../../libs/core/src/lib/events.ts","../../../../libs/core/src/lib/utils/apply-props.ts","../../../../libs/core/src/lib/renderer/state.ts","../../../../libs/core/src/lib/utils/attach.ts","../../../../libs/core/src/lib/renderer/utils.ts","../../../../libs/core/src/lib/renderer/renderer.ts","../../../../libs/core/src/lib/roots.ts","../../../../libs/core/src/lib/routed-scene.ts","../../../../libs/core/src/lib/utils/before-render.ts","../../../../libs/core/src/lib/utils/object-events.ts","../../../../libs/core/src/lib/utils/output-ref.ts","../../../../libs/core/src/angular-three.ts"],"sourcesContent":["export const NGT_RENDERER_NODE_FLAG = '__ngt_renderer__';\nexport const NGT_CANVAS_CONTENT_FLAG = '__ngt_renderer_canvas_content__';\nexport const NGT_PORTAL_CONTENT_FLAG = '__ngt_renderer_portal_content__';\nexport const NGT_ARGS_FLAG = '__ngt_renderer_args__';\nexport const NGT_PARENT_FLAG = '__ngt_renderer_parent__';\nexport const NGT_INTERNAL_ADD_COMMENT_FLAG = '__ngt_renderer_add_comment__';\nexport const NGT_INTERNAL_SET_PARENT_COMMENT_FLAG = '__ngt_renderer_set_parent_comment__';\nexport const NGT_GET_NODE_ATTRIBUTE_FLAG = '__ngt_get_node_attribute__';\nexport const NGT_DOM_PARENT_FLAG = '__ngt_dom_parent__';\nexport const NGT_DELEGATE_RENDERER_DESTROY_NODE_PATCHED_FLAG = '__ngt_delegate_renderer_destroy_node_patched__';\nexport const NGT_HTML_FLAG = '__ngt_html__';\n\nexport const THREE_NATIVE_EVENTS = ['added', 'removed', 'childadded', 'childremoved', 'change', 'disposed'];\n","import type { ElementRef } from '@angular/core';\nimport type * as THREE from 'three';\nimport type { NgtAnyRecord, NgtEquConfig, NgtInstanceNode, NgtRendererLike } from '../types';\n\nexport const is = {\n\tobj: (a: unknown): a is object => a === Object(a) && !Array.isArray(a) && typeof a !== 'function',\n\tmaterial: (a: unknown): a is THREE.Material => !!a && (a as THREE.Material).isMaterial,\n\tgeometry: (a: unknown): a is THREE.BufferGeometry => !!a && (a as THREE.BufferGeometry).isBufferGeometry,\n\torthographicCamera: (a: unknown): a is THREE.OrthographicCamera =>\n\t\t!!a && (a as THREE.OrthographicCamera).isOrthographicCamera,\n\tperspectiveCamera: (a: unknown): a is THREE.PerspectiveCamera =>\n\t\t!!a && (a as THREE.PerspectiveCamera).isPerspectiveCamera,\n\tcamera: (a: unknown): a is THREE.Camera => !!a && (a as THREE.Camera).isCamera,\n\trenderer: (a: unknown) => !!a && typeof a === 'object' && 'render' in a && typeof a['render'] === 'function',\n\tscene: (a: unknown): a is THREE.Scene => !!a && (a as THREE.Scene).isScene,\n\tref: (a: unknown): a is ElementRef => !!a && typeof a === 'object' && 'nativeElement' in a,\n\tinstance: (a: unknown): a is NgtInstanceNode => !!a && !!(a as NgtAnyRecord)['__ngt__'],\n\tobject3D: (a: unknown): a is THREE.Object3D => !!a && (a as THREE.Object3D).isObject3D,\n\tthree: <TThreeEntity extends object, TKey extends keyof TThreeEntity = keyof TThreeEntity>(\n\t\ta: unknown,\n\t\tisKey: TKey extends `is${infer K}` ? TKey : never,\n\t): a is TThreeEntity => !!a && (a as any)[isKey],\n\tcolorRepresentation: (a: unknown): a is THREE.ColorRepresentation =>\n\t\ta != null && (typeof a === 'string' || typeof a === 'number' || is.three<THREE.Color>(a, 'isColor')),\n\tcolorSpaceExist: <\n\t\tT extends NgtRendererLike | THREE.Texture | object,\n\t\tP = T extends NgtRendererLike ? { outputColorSpace: string } : { colorSpace: string },\n\t>(\n\t\tobject: T,\n\t): object is T & P => 'colorSpace' in object || 'outputColorSpace' in object,\n\tequ(a: any, b: any, { arrays = 'shallow', objects = 'reference', strict = true }: NgtEquConfig = {}) {\n\t\t// Wrong type or one of the two undefined, doesn't match\n\t\tif (typeof a !== typeof b || !!a !== !!b) return false;\n\t\t// Atomic, just compare a against b\n\t\tif (typeof a === 'string' || typeof a === 'number') return a === b;\n\t\tconst isObj = is.obj(a);\n\t\tif (isObj && objects === 'reference') return a === b;\n\t\tconst isArr = Array.isArray(a);\n\t\tif (isArr && arrays === 'reference') return a === b;\n\t\t// Array or Object, shallow compare first to see if it's a match\n\t\tif ((isArr || isObj) && a === b) return true;\n\t\t// Last resort, go through keys\n\t\tlet i;\n\t\tfor (i in a) if (!(i in b)) return false;\n\t\tfor (i in strict ? b : a) if (a[i] !== b[i]) return false;\n\t\tif (i === void 0) {\n\t\t\tif (isArr && a.length === 0 && b.length === 0) return true;\n\t\t\tif (isObj && Object.keys(a).length === 0 && Object.keys(b).length === 0) return true;\n\t\t\tif (a !== b) return false;\n\t\t}\n\t\treturn true;\n\t},\n};\n","import {\n\tDestroyRef,\n\tDirective,\n\teffect,\n\tEmbeddedViewRef,\n\tinject,\n\tInjector,\n\tSignal,\n\tTemplateRef,\n\tViewContainerRef,\n} from '@angular/core';\nimport { is } from '../utils/is';\n\n@Directive()\nexport abstract class NgtCommonDirective<TValue> {\n\tprivate vcr = inject(ViewContainerRef);\n\tprivate template = inject(TemplateRef);\n\tprotected injector = inject(Injector);\n\n\tprotected injected = false;\n\tprotected injectedValue: TValue | null = null;\n\tprivate view?: EmbeddedViewRef<unknown>;\n\n\tprotected get commentNode() {\n\t\treturn this.vcr.element.nativeElement;\n\t}\n\n\tabstract validate(): boolean;\n\tprotected abstract linkedValue: Signal<TValue | null>;\n\tprotected abstract shouldSkipRender: Signal<boolean>;\n\n\tprotected constructor() {\n\t\teffect(() => {\n\t\t\tif (this.shouldSkipRender()) return;\n\n\t\t\tconst value = this.linkedValue();\n\n\t\t\tif (is.equ(value, this.injectedValue)) {\n\t\t\t\t// we have the same value as before, no need to update\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.injected = false;\n\t\t\tthis.injectedValue = value;\n\t\t\tthis.createView();\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tthis.view?.destroy();\n\t\t});\n\t}\n\n\tget value() {\n\t\tif (this.validate()) {\n\t\t\tthis.injected = true;\n\t\t\treturn this.injectedValue;\n\t\t}\n\t\treturn null;\n\t}\n\n\tprotected beforeCreateView() {\n\t\t/* noop */\n\t}\n\n\tprivate createView() {\n\t\tif (this.view && !this.view.destroyed) this.view.destroy();\n\n\t\tthis.beforeCreateView();\n\n\t\tthis.view = this.vcr.createEmbeddedView(this.template);\n\t\tthis.view.detectChanges();\n\t}\n}\n","import { computed, Directive, input, linkedSignal } from '@angular/core';\nimport { NGT_ARGS_FLAG, NGT_INTERNAL_ADD_COMMENT_FLAG } from '../renderer/constants';\nimport { NgtCommonDirective } from './common';\n\n@Directive({ selector: 'ng-template[args]' })\nexport class NgtArgs extends NgtCommonDirective<any[]> {\n\targs = input.required<any[] | null>();\n\n\tprotected linkedValue = linkedSignal(this.args);\n\tprotected shouldSkipRender = computed(() => {\n\t\tconst args = this.args();\n\t\treturn args == null || !Array.isArray(args) || (args.length === 1 && args[0] === null);\n\t});\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tconst commentNode = this.commentNode;\n\t\tcommentNode.data = NGT_ARGS_FLAG;\n\t\tcommentNode[NGT_ARGS_FLAG] = true;\n\n\t\tif (commentNode[NGT_INTERNAL_ADD_COMMENT_FLAG]) {\n\t\t\tcommentNode[NGT_INTERNAL_ADD_COMMENT_FLAG]('args', this.injector);\n\t\t\tdelete commentNode[NGT_INTERNAL_ADD_COMMENT_FLAG];\n\t\t}\n\t}\n\n\tvalidate() {\n\t\treturn !this.injected && !!this.injectedValue?.length;\n\t}\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport type { NgtCanvasElement, NgtGlobalRenderCallback, NgtState } from './types';\nimport type { SignalState } from './utils/signal-state';\n\nexport const roots = new Map<NgtCanvasElement, SignalState<NgtState>>();\n\ntype SubItem = { callback: NgtGlobalRenderCallback };\n\nfunction createSubs(callback: NgtGlobalRenderCallback, subs: Set<SubItem>): () => void {\n\tconst sub = { callback };\n\tsubs.add(sub);\n\treturn () => void subs.delete(sub);\n}\n\nconst globalEffects: Set<SubItem> = new Set();\nconst globalAfterEffects: Set<SubItem> = new Set();\nconst globalTailEffects: Set<SubItem> = new Set();\n\n/**\n * Adds a global render callback which is called each frame.\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addEffect\n */\nexport const addEffect = (callback: NgtGlobalRenderCallback) => createSubs(callback, globalEffects);\n\n/**\n * Adds a global after-render callback which is called each frame.\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addAfterEffect\n */\nexport const addAfterEffect = (callback: NgtGlobalRenderCallback) => createSubs(callback, globalAfterEffects);\n\n/**\n * Adds a global callback which is called when rendering stops.\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addTail\n */\nexport const addTail = (callback: NgtGlobalRenderCallback) => createSubs(callback, globalTailEffects);\n\nfunction run(effects: Set<SubItem>, timestamp: number) {\n\tif (!effects.size) return;\n\tfor (const { callback } of effects.values()) {\n\t\tcallback(timestamp);\n\t}\n}\n\nexport type NgtGlobalEffectType = 'before' | 'after' | 'tail';\n\nexport function flushGlobalEffects(type: NgtGlobalEffectType, timestamp: number): void {\n\tswitch (type) {\n\t\tcase 'before':\n\t\t\treturn run(globalEffects, timestamp);\n\t\tcase 'after':\n\t\t\treturn run(globalAfterEffects, timestamp);\n\t\tcase 'tail':\n\t\t\treturn run(globalTailEffects, timestamp);\n\t}\n}\n\nfunction update(timestamp: number, store: SignalState<NgtState>, frame?: XRFrame) {\n\tconst state = store.snapshot;\n\t// Run local effects\n\tlet delta = state.clock.getDelta();\n\t// In frameloop='never' mode, clock times are updated using the provided timestamp\n\tif (state.frameloop === 'never' && typeof timestamp === 'number') {\n\t\tdelta = timestamp - state.clock.elapsedTime;\n\t\tstate.clock.oldTime = state.clock.elapsedTime;\n\t\tstate.clock.elapsedTime = timestamp;\n\t}\n\t// Call subscribers (beforeRender)\n\tconst subscribers = state.internal.subscribers;\n\tfor (let i = 0; i < subscribers.length; i++) {\n\t\tconst subscription = subscribers[i];\n\t\tsubscription.callback({ ...subscription.store.snapshot, delta, frame });\n\t}\n\t// Render content\n\tif (!state.internal.priority && state.gl.render) state.gl.render(state.scene, state.camera);\n\t// Decrease frame count\n\tstate.internal.frames = Math.max(0, state.internal.frames - 1);\n\treturn state.frameloop === 'always' ? 1 : state.internal.frames;\n}\n\nfunction createLoop<TCanvas>(roots: Map<TCanvas, SignalState<NgtState>>) {\n\tlet running = false;\n\tlet repeat: number;\n\tlet frame: number;\n\tlet beforeRenderInProgress = false;\n\n\tfunction loop(timestamp: number): void {\n\t\tframe = requestAnimationFrame(loop);\n\t\trunning = true;\n\t\trepeat = 0;\n\n\t\t// Run effects\n\t\tflushGlobalEffects('before', timestamp);\n\n\t\t// Render all roots\n\t\tbeforeRenderInProgress = true;\n\t\tfor (const root of roots.values()) {\n\t\t\tconst state = root.snapshot;\n\t\t\t// If the frameloop is invalidated, do not run another frame\n\t\t\tif (\n\t\t\t\tstate.internal.active &&\n\t\t\t\t(state.frameloop === 'always' || state.internal.frames > 0) &&\n\t\t\t\t!state.gl.xr?.isPresenting\n\t\t\t) {\n\t\t\t\trepeat += update(timestamp, root);\n\t\t\t}\n\t\t}\n\t\tbeforeRenderInProgress = false;\n\n\t\t// Run after-effects\n\t\tflushGlobalEffects('after', timestamp);\n\n\t\t// Stop the loop if nothing invalidates it\n\t\tif (repeat === 0) {\n\t\t\t// Tail call effects, they are called when rendering stops\n\t\t\tflushGlobalEffects('tail', timestamp);\n\n\t\t\t// Flag end of operation\n\t\t\trunning = false;\n\t\t\treturn cancelAnimationFrame(frame);\n\t\t}\n\t}\n\n\tfunction invalidate(store?: SignalState<NgtState>, frames = 1): void {\n\t\tconst state = store?.snapshot;\n\t\tif (!state) return roots.forEach((root) => invalidate(root, frames));\n\t\tif (state.gl.xr?.isPresenting || !state.internal.active || state.frameloop === 'never') return;\n\t\tif (frames > 1) {\n\t\t\t// legacy support for people using frames parameters\n\t\t\t// Increase frames, do not go higher than 60\n\t\t\tstate.internal.frames = Math.min(60, state.internal.frames + frames);\n\t\t} else {\n\t\t\tif (beforeRenderInProgress) {\n\t\t\t\t//called from within a beforeRender, it means the user wants an additional frame\n\t\t\t\tstate.internal.frames = 2;\n\t\t\t} else {\n\t\t\t\t//the user need a new frame, no need to increment further than 1\n\t\t\t\tstate.internal.frames = 1;\n\t\t\t}\n\t\t}\n\n\t\t// If the render-loop isn't active, start it\n\t\tif (!running) {\n\t\t\trunning = true;\n\t\t\trequestAnimationFrame(loop);\n\t\t}\n\t}\n\n\tfunction advance(timestamp: number, runGlobalEffects = true, store?: SignalState<NgtState>, frame?: XRFrame): void {\n\t\tif (runGlobalEffects) flushGlobalEffects('before', timestamp);\n\t\tif (!store) for (const root of roots.values()) update(timestamp, root);\n\t\telse update(timestamp, store, frame);\n\t\tif (runGlobalEffects) flushGlobalEffects('after', timestamp);\n\t}\n\n\treturn { loop, invalidate, advance };\n}\n\nexport const NGT_LOOP = new InjectionToken<ReturnType<typeof createLoop>>('NGT_LOOP', {\n\tfactory: () => createLoop(roots),\n});\n\nexport function injectLoop() {\n\treturn inject(NGT_LOOP);\n}\n","import * as THREE from 'three';\nimport type { NgtCanvasElement, NgtDpr, NgtGLDefaultOptions, NgtGLOptions, NgtIntersection, NgtSize } from '../types';\nimport { is } from './is';\n\nconst idCache: { [id: string]: boolean | undefined } = {};\nexport function makeId(event?: NgtIntersection): string {\n\tif (event) {\n\t\treturn (event.eventObject || event.object).uuid + '/' + event.index + event.instanceId;\n\t}\n\n\tconst newId = THREE.MathUtils.generateUUID();\n\t// ensure not already used\n\tif (!idCache[newId]) {\n\t\tidCache[newId] = true;\n\t\treturn newId;\n\t}\n\treturn makeId();\n}\n\nexport function makeDpr(dpr: NgtDpr, window?: Window) {\n\t// Err on the side of progress by assuming 2x dpr if we can't detect it\n\t// This will happen in workers where window is defined but dpr isn't.\n\tconst target = typeof window !== 'undefined' ? (window.devicePixelRatio ?? 2) : 1;\n\treturn Array.isArray(dpr) ? Math.min(Math.max(dpr[0], target), dpr[1]) : dpr;\n}\n\nexport function makeRendererInstance<TCanvas extends NgtCanvasElement>(\n\tglOptions: NgtGLOptions,\n\tcanvas: TCanvas,\n): THREE.WebGLRenderer {\n\tconst defaultOptions: NgtGLDefaultOptions = {\n\t\tpowerPreference: 'high-performance',\n\t\tcanvas,\n\t\tantialias: true,\n\t\talpha: true,\n\t};\n\n\tconst customRenderer = (\n\t\ttypeof glOptions === 'function' ? glOptions(defaultOptions) : glOptions\n\t) as THREE.WebGLRenderer;\n\tif (is.renderer(customRenderer)) return customRenderer;\n\treturn new THREE.WebGLRenderer({ ...defaultOptions, ...glOptions });\n}\n\nexport function makeCameraInstance(isOrthographic: boolean, size: NgtSize) {\n\tif (isOrthographic) return new THREE.OrthographicCamera(0, 0, 0, 0, 0.1, 1000);\n\treturn new THREE.PerspectiveCamera(75, size.width / size.height, 0.1, 1000);\n}\n\nexport type NgtObjectMap = {\n\tnodes: Record<string, THREE.Object3D<any>>;\n\tmaterials: Record<string, THREE.Material>;\n\tmeshes: Record<string, THREE.Mesh>;\n\t[key: string]: any;\n};\n\nexport function makeObjectGraph(object: THREE.Object3D): NgtObjectMap {\n\tconst data: NgtObjectMap = { nodes: {}, materials: {}, meshes: {} };\n\n\tif (object) {\n\t\tobject.traverse((child) => {\n\t\t\tif (child.name) data.nodes[child.name] = child;\n\t\t\tif ('material' in child && !data.materials[((child as THREE.Mesh).material as THREE.Material).name]) {\n\t\t\t\tdata.materials[((child as THREE.Mesh).material as THREE.Material).name] = (child as THREE.Mesh)\n\t\t\t\t\t.material as THREE.Material;\n\t\t\t}\n\t\t\tif (is.three<THREE.Mesh>(child, 'isMesh') && !data.meshes[child.name]) data.meshes[child.name] = child;\n\t\t});\n\t}\n\treturn data;\n}\n","/** ported from ngrx/signals */\nimport { computed, isSignal, Signal as NgSignal, signal, untracked, WritableSignal } from '@angular/core';\n\ntype NonRecord =\n\t| Iterable<any>\n\t| WeakSet<any>\n\t| WeakMap<any, any>\n\t| Promise<any>\n\t| Date\n\t| Error\n\t| RegExp\n\t| ArrayBuffer\n\t| DataView\n\t| Function;\n\ntype Prettify<T> = { [K in keyof T]: T[K] } & {};\ntype IsRecord<T> = T extends object ? (T extends NonRecord ? false : true) : false;\ntype IsUnknownRecord<T> = string extends keyof T ? true : number extends keyof T ? true : false;\ntype IsKnownRecord<T> = IsRecord<T> extends true ? (IsUnknownRecord<T> extends true ? false : true) : false;\n\nconst STATE_SOURCE = Symbol('STATE_SOURCE');\n\ntype WritableStateSource<State extends object> = {\n\t[STATE_SOURCE]: WritableSignal<State>;\n};\n\nexport type PartialStateUpdater<State extends object> = (state: State) => Partial<State>;\n\nfunction patchState<State extends object>(\n\tstateSource: WritableStateSource<State>,\n\t...updaters: Array<Partial<Prettify<State>> | PartialStateUpdater<Prettify<State>>>\n): void {\n\tstateSource[STATE_SOURCE].update((currentState) =>\n\t\tupdaters.reduce(\n\t\t\t(nextState: State, updater) => ({\n\t\t\t\t...nextState,\n\t\t\t\t...(typeof updater === 'function' ? updater(nextState) : updater),\n\t\t\t}),\n\t\t\tcurrentState,\n\t\t),\n\t);\n}\n\n// An extended Signal type that enables the correct typing\n// of nested signals with the `name` or `length` key.\nexport interface Signal<T> extends NgSignal<T> {\n\tname: unknown;\n\tlength: unknown;\n}\n\nexport type DeepSignal<T> = Signal<T> &\n\t(IsKnownRecord<T> extends true\n\t\t? Readonly<{\n\t\t\t\t[K in keyof T]: IsKnownRecord<T[K]> extends true ? DeepSignal<T[K]> : Signal<T[K]>;\n\t\t\t}>\n\t\t: unknown);\n\nfunction toDeepSignal<T>(signal: Signal<T>): DeepSignal<T> {\n\tconst value = untracked(() => signal());\n\tif (!isRecord(value)) {\n\t\treturn signal as DeepSignal<T>;\n\t}\n\n\treturn new Proxy(signal, {\n\t\tget(target: any, prop) {\n\t\t\tif (!(prop in value)) {\n\t\t\t\treturn target[prop];\n\t\t\t}\n\n\t\t\tif (!isSignal(target[prop])) {\n\t\t\t\tObject.defineProperty(target, prop, {\n\t\t\t\t\tvalue: computed(() => target()[prop]),\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn toDeepSignal(target[prop]);\n\t\t},\n\t});\n}\n\nconst nonRecords = [WeakSet, WeakMap, Promise, Date, Error, RegExp, ArrayBuffer, DataView, Function];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\tif (value === null || typeof value !== 'object' || isIterable(value)) {\n\t\treturn false;\n\t}\n\n\tlet proto = Object.getPrototypeOf(value);\n\tif (proto === Object.prototype) {\n\t\treturn true;\n\t}\n\n\twhile (proto && proto !== Object.prototype) {\n\t\tif (nonRecords.includes(proto.constructor)) {\n\t\t\treturn false;\n\t\t}\n\t\tproto = Object.getPrototypeOf(proto);\n\t}\n\n\treturn proto === Object.prototype;\n}\n\nfunction isIterable(value: any): value is Iterable<any> {\n\treturn typeof value?.[Symbol.iterator] === 'function';\n}\n\nexport type SignalState<State extends object> = DeepSignal<State> &\n\tWritableStateSource<State> & {\n\t\tupdate: (...updaters: Array<Partial<Prettify<State>> | PartialStateUpdater<Prettify<State>>>) => void;\n\t\tget snapshot(): State;\n\t};\n\nexport function signalState<State extends object>(initialState: State): SignalState<State> {\n\tconst stateSource = signal(initialState as State);\n\tconst signalState = toDeepSignal(stateSource.asReadonly());\n\n\tObject.defineProperties(signalState, {\n\t\t[STATE_SOURCE]: { value: stateSource },\n\t\tupdate: { value: patchState.bind(null, signalState as SignalState<State>) },\n\t\tsnapshot: { get: () => untracked(stateSource) },\n\t});\n\n\treturn signalState as SignalState<State>;\n}\n","import type * as THREE from 'three';\nimport type { NgtCamera, NgtSize } from '../types';\nimport { is } from './is';\n\nexport function checkNeedsUpdate(value: unknown) {\n\tif (value !== null && is.obj(value) && 'needsUpdate' in value) {\n\t\tvalue['needsUpdate'] = true;\n\t\tif ('uniformsNeedUpdate' in value) value['uniformsNeedUpdate'] = true;\n\t}\n}\n\nexport function checkUpdate(value: unknown) {\n\t// TODO (chau): this is messing with PivotControls. Re-evaluate later\n\t// if (is.object3D(value)) value.updateMatrix();\n\n\tif (is.three<THREE.Camera>(value, 'isCamera')) {\n\t\tif (\n\t\t\tis.three<THREE.PerspectiveCamera>(value, 'isPerspectiveCamera') ||\n\t\t\tis.three<THREE.OrthographicCamera>(value, 'isOrthographicCamera')\n\t\t)\n\t\t\tvalue.updateProjectionMatrix();\n\t\tvalue.updateMatrixWorld();\n\t}\n\n\t// NOTE: skip checkNeedsUpdate for CubeTexture\n\tif (is.three<THREE.CubeTexture>(value, 'isCubeTexture')) return;\n\n\tcheckNeedsUpdate(value);\n}\n\nexport function updateCamera(camera: NgtCamera, size: NgtSize) {\n\tif (!camera.manual) {\n\t\tif (is.three<THREE.OrthographicCamera>(camera, 'isOrthographicCamera')) {\n\t\t\tcamera.left = size.width / -2;\n\t\t\tcamera.right = size.width / 2;\n\t\t\tcamera.top = size.height / 2;\n\t\t\tcamera.bottom = size.height / -2;\n\t\t} else {\n\t\t\tcamera.aspect = size.width / size.height;\n\t\t}\n\n\t\tcamera.updateProjectionMatrix();\n\t\tcamera.updateMatrixWorld();\n\t}\n}\n","import { DOCUMENT } from '@angular/common';\nimport { ElementRef, InjectOptions, InjectionToken, effect, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as THREE from 'three';\nimport { injectLoop } from './loop';\nimport type {\n\tNgtBeforeRenderRecord,\n\tNgtCamera,\n\tNgtDpr,\n\tNgtEventManager,\n\tNgtFrameloop,\n\tNgtSize,\n\tNgtState,\n\tNgtXRManager,\n} from './types';\nimport { is } from './utils/is';\nimport { makeDpr, makeId } from './utils/make';\nimport { SignalState, signalState } from './utils/signal-state';\nimport { updateCamera } from './utils/update';\n\nexport function storeFactory() {\n\tconst { invalidate, advance } = injectLoop();\n\tconst document = inject(DOCUMENT);\n\tconst window = document.defaultView || undefined;\n\n\t// NOTE: using Subject because we do not care about late-subscribers\n\tconst pointerMissed$ = new Subject<MouseEvent>();\n\n\tconst position = new THREE.Vector3();\n\tconst defaultTarget = new THREE.Vector3();\n\tconst tempTarget = new THREE.Vector3();\n\n\tlet performanceTimeout: ReturnType<typeof setTimeout> | undefined = undefined;\n\n\tconst pointer = new THREE.Vector2();\n\n\tconst store: SignalState<NgtState> = signalState<NgtState>({\n\t\tid: makeId(),\n\t\tpointerMissed$: pointerMissed$.asObservable(),\n\t\tevents: { priority: 1, enabled: true, connected: false },\n\n\t\t// Mock objects that have to be configured\n\t\tgl: null as unknown as THREE.WebGLRenderer,\n\t\tcamera: null as unknown as NgtCamera,\n\t\traycaster: null as unknown as THREE.Raycaster,\n\t\tscene: null as unknown as THREE.Scene,\n\t\txr: null as unknown as NgtXRManager,\n\n\t\tinvalidate: (frames = 1) => invalidate(store, frames),\n\t\tadvance: (timestamp: number, runGlobalEffects?: boolean) => advance(timestamp, runGlobalEffects, store),\n\n\t\tlegacy: false,\n\t\tlinear: false,\n\t\tflat: false,\n\n\t\tcontrols: null,\n\t\tclock: new THREE.Clock(),\n\t\tpointer,\n\n\t\tframeloop: 'always',\n\n\t\tperformance: {\n\t\t\tcurrent: 1,\n\t\t\tmin: 0.5,\n\t\t\tmax: 1,\n\t\t\tdebounce: 200,\n\t\t\tregress: () => {\n\t\t\t\tconst state = store.snapshot;\n\t\t\t\t// Clear timeout\n\t\t\t\tif (performanceTimeout) clearTimeout(performanceTimeout);\n\t\t\t\t// Set lower bound performance\n\t\t\t\tif (state.performance.current !== state.performance.min)\n\t\t\t\t\tstore.update((state) => ({\n\t\t\t\t\t\tperformance: { ...state.performance, current: state.performance.min },\n\t\t\t\t\t}));\n\t\t\t\t// Go back to upper bound performance after a while unless something regresses meanwhile\n\t\t\t\tperformanceTimeout = setTimeout(\n\t\t\t\t\t() =>\n\t\t\t\t\t\tstore.update((state) => ({\n\t\t\t\t\t\t\tperformance: { ...state.performance, current: store.snapshot.performance.max },\n\t\t\t\t\t\t})),\n\t\t\t\t\tstate.performance.debounce,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\n\t\tsize: { width: 0, height: 0, top: 0, left: 0 },\n\t\tviewport: {\n\t\t\tinitialDpr: window?.devicePixelRatio || 1,\n\t\t\tdpr: window?.devicePixelRatio || 1,\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\ttop: 0,\n\t\t\tleft: 0,\n\t\t\taspect: 0,\n\t\t\tdistance: 0,\n\t\t\tfactor: 0,\n\t\t\tgetCurrentViewport(\n\t\t\t\tcamera: NgtCamera = store.snapshot.camera,\n\t\t\t\ttarget: THREE.Vector3 | Parameters<THREE.Vector3['set']> = defaultTarget,\n\t\t\t\tsize: NgtSize = store.snapshot.size,\n\t\t\t) {\n\t\t\t\tconst { width, height, top, left } = size;\n\t\t\t\tconst aspect = width / height;\n\n\t\t\t\tif ((target as THREE.Vector3).isVector3) tempTarget.copy(target as THREE.Vector3);\n\t\t\t\telse tempTarget.set(...(target as Parameters<THREE.Vector3['set']>));\n\n\t\t\t\tconst distance = camera.getWorldPosition(position).distanceTo(tempTarget);\n\n\t\t\t\tif (is.three<THREE.OrthographicCamera>(camera, 'isOrthographicCamera')) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\twidth: width / camera.zoom,\n\t\t\t\t\t\theight: height / camera.zoom,\n\t\t\t\t\t\ttop,\n\t\t\t\t\t\tleft,\n\t\t\t\t\t\tfactor: 1,\n\t\t\t\t\t\tdistance,\n\t\t\t\t\t\taspect,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst fov = (camera.fov * Math.PI) / 180; // convert vertical fov to radians\n\t\t\t\tconst h = 2 * Math.tan(fov / 2) * distance; // visible height\n\t\t\t\tconst w = h * (width / height);\n\t\t\t\treturn { width: w, height: h, top, left, factor: width / w, distance, aspect };\n\t\t\t},\n\t\t},\n\n\t\tsetEvents: (events: Partial<NgtEventManager<any>>) =>\n\t\t\tstore.update((state) => ({ events: { ...state.events, ...events } })),\n\t\tsetSize: (width: number, height: number, top?: number, left?: number) => {\n\t\t\tconst camera = store.snapshot.camera;\n\t\t\tconst size = { width, height, top: top ?? 0, left: left ?? 0 };\n\n\t\t\tstore.update((state) => ({\n\t\t\t\tsize,\n\t\t\t\tviewport: {\n\t\t\t\t\t...state.viewport,\n\t\t\t\t\t...state.viewport.getCurrentViewport(camera, defaultTarget, size),\n\t\t\t\t},\n\t\t\t}));\n\t\t},\n\t\tsetDpr: (dpr: NgtDpr) => {\n\t\t\tconst resolved = makeDpr(dpr, window);\n\t\t\tstore.update((state) => ({\n\t\t\t\tviewport: { ...state.viewport, dpr: resolved, initialDpr: state.viewport.initialDpr || resolved },\n\t\t\t}));\n\t\t},\n\t\tsetFrameloop: (frameloop?: NgtFrameloop) => {\n\t\t\tconst clock = store.snapshot.clock;\n\n\t\t\t// if frameloop === \"never\" clock.elapsedTime is updated using advance(timestamp)\n\t\t\tclock.stop();\n\t\t\tclock.elapsedTime = 0;\n\n\t\t\tif (frameloop !== 'never') {\n\t\t\t\tclock.start();\n\t\t\t\tclock.elapsedTime = 0;\n\t\t\t}\n\n\t\t\tstore.update(() => ({ frameloop }));\n\t\t},\n\t\tpreviousRoot: null,\n\t\tinternal: {\n\t\t\tactive: false,\n\t\t\tpriority: 0,\n\t\t\tframes: 0,\n\t\t\tlastEvent: new ElementRef(null),\n\t\t\tinteraction: [],\n\t\t\thovered: new Map(),\n\t\t\tcapturedMap: new Map(),\n\t\t\tinitialClick: [0, 0],\n\t\t\tinitialHits: [],\n\t\t\tsubscribers: [],\n\t\t\tsubscribe: (\n\t\t\t\tcallback: NgtBeforeRenderRecord['callback'],\n\t\t\t\tpriority = 0,\n\t\t\t\t_store: SignalState<NgtState> = store,\n\t\t\t) => {\n\t\t\t\tconst internal = _store.snapshot.internal;\n\t\t\t\t// If this subscription was given a priority, it takes rendering into its own hands\n\t\t\t\t// For that reason we switch off automatic rendering and increase the manual flag\n\t\t\t\t// As long as this flag is positive there can be no internal rendering at all\n\t\t\t\t// because there could be multiple render subscriptions\n\t\t\t\tinternal.priority = internal.priority + (priority > 0 ? 1 : 0);\n\t\t\t\tinternal.subscribers.push({ callback, priority, store: _store });\n\t\t\t\t// Register subscriber and sort layers from lowest to highest, meaning,\n\t\t\t\t// highest priority renders last (on top of the other frames)\n\t\t\t\tinternal.subscribers = internal.subscribers.sort((a, b) => (a.priority || 0) - (b.priority || 0));\n\n\t\t\t\treturn () => {\n\t\t\t\t\tconst internal = _store.snapshot.internal;\n\t\t\t\t\tif (internal?.subscribers) {\n\t\t\t\t\t\t// Decrease manual flag if this subscription had a priority\n\t\t\t\t\t\tinternal.priority = internal.priority - (priority > 0 ? 1 : 0);\n\t\t\t\t\t\t// Remove subscriber from list\n\t\t\t\t\t\tinternal.subscribers = internal.subscribers.filter((s) => s.callback !== callback);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t});\n\n\tObject.defineProperty(store, '__pointerMissed$', { get: () => pointerMissed$ });\n\n\tlet {\n\t\tsize: oldSize,\n\t\tviewport: { dpr: oldDpr },\n\t\tcamera: oldCamera,\n\t} = store.snapshot;\n\n\teffect(() => {\n\t\tconst newCamera = store.camera();\n\t\tconst newSize = store.size();\n\t\tconst newDpr = store.viewport.dpr();\n\t\tconst gl = store.gl();\n\n\t\t// Resize camera and renderer on changes to size and pixel-ratio\n\t\tif (newSize !== oldSize || newDpr !== oldDpr) {\n\t\t\toldSize = newSize;\n\t\t\toldDpr = newDpr;\n\t\t\t// Update camera & renderer\n\t\t\tupdateCamera(newCamera, newSize);\n\t\t\tgl.setPixelRatio(newDpr);\n\n\t\t\tconst updateStyle = typeof HTMLCanvasElement !== 'undefined' && gl.domElement instanceof HTMLCanvasElement;\n\t\t\tgl.setSize(newSize.width, newSize.height, updateStyle);\n\t\t}\n\n\t\t// Update viewport once the camera changes\n\t\tif (newCamera !== oldCamera) {\n\t\t\toldCamera = newCamera;\n\t\t\tupdateCamera(newCamera, newSize);\n\t\t\t// Update viewport\n\t\t\tstore.update((state) => ({\n\t\t\t\tviewport: { ...state.viewport, ...state.viewport.getCurrentViewport(newCamera) },\n\t\t\t}));\n\t\t}\n\t});\n\n\treturn store;\n}\n\nexport const NGT_STORE = new InjectionToken<SignalState<NgtState>>('NgtStore Token');\n\nexport function injectStore(options: InjectOptions & { optional?: false }): SignalState<NgtState>;\nexport function injectStore(options: InjectOptions): SignalState<NgtState> | null;\nexport function injectStore(): SignalState<NgtState>;\nexport function injectStore(options?: InjectOptions) {\n\treturn inject(NGT_STORE, options as InjectOptions);\n}\n","import { ElementRef } from '@angular/core';\nimport { is } from './is';\n\nexport function resolveRef<TObject>(ref: ElementRef<TObject | undefined> | TObject | undefined): TObject | undefined {\n\tif (is.ref(ref)) {\n\t\treturn ref.nativeElement;\n\t}\n\n\treturn ref;\n}\n","import { computed, Directive, ElementRef, input, linkedSignal } from '@angular/core';\nimport type * as THREE from 'three';\nimport {\n\tNGT_INTERNAL_ADD_COMMENT_FLAG,\n\tNGT_INTERNAL_SET_PARENT_COMMENT_FLAG,\n\tNGT_PARENT_FLAG,\n} from '../renderer/constants';\nimport { injectStore } from '../store';\nimport { NgtNullish } from '../types';\nimport { resolveRef } from '../utils/resolve-ref';\nimport { NgtCommonDirective } from './common';\n\n@Directive({ selector: 'ng-template[parent]' })\nexport class NgtParent extends NgtCommonDirective<THREE.Object3D | null | undefined> {\n\tparent = input.required<\n\t\t| string\n\t\t| THREE.Object3D\n\t\t| ElementRef<THREE.Object3D>\n\t\t| (() => NgtNullish<ElementRef<THREE.Object3D> | THREE.Object3D | string>)\n\t>();\n\n\tprivate store = injectStore();\n\n\tprivate _parent = computed(() => {\n\t\tconst parent = this.parent();\n\t\tconst rawParent = typeof parent === 'function' ? parent() : parent;\n\t\tif (!rawParent) return null;\n\n\t\tconst scene = this.store.scene();\n\t\tif (typeof rawParent === 'string') {\n\t\t\treturn scene.getObjectByName(rawParent);\n\t\t}\n\n\t\treturn resolveRef(rawParent);\n\t});\n\n\tprotected linkedValue = linkedSignal(this._parent);\n\tprotected shouldSkipRender = computed(() => !this._parent());\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tconst commentNode = this.commentNode;\n\t\tcommentNode.data = NGT_PARENT_FLAG;\n\t\tcommentNode[NGT_PARENT_FLAG] = true;\n\n\t\tif (commentNode[NGT_INTERNAL_ADD_COMMENT_FLAG]) {\n\t\t\tcommentNode[NGT_INTERNAL_ADD_COMMENT_FLAG]('parent', this.injector);\n\t\t\tdelete commentNode[NGT_INTERNAL_ADD_COMMENT_FLAG];\n\t\t}\n\t}\n\n\tvalidate() {\n\t\treturn !this.injected && !!this.injectedValue;\n\t}\n\n\tprotected override beforeCreateView() {\n\t\tconst commentNode = this.commentNode;\n\t\tif (commentNode[NGT_INTERNAL_SET_PARENT_COMMENT_FLAG]) {\n\t\t\tcommentNode[NGT_INTERNAL_SET_PARENT_COMMENT_FLAG](this.injectedValue);\n\t\t}\n\t}\n}\n","import { computed } from '@angular/core';\nimport type * as THREE from 'three';\nimport type {\n\tNgtAnyRecord,\n\tNgtEventHandlers,\n\tNgtInstanceHierarchyState,\n\tNgtInstanceNode,\n\tNgtInstanceState,\n\tNgtState,\n} from './types';\nimport { SignalState, signalState } from './utils/signal-state';\nimport { checkUpdate } from './utils/update';\n\n/**\n * @deprecated: use `getInstanceState` instead. Will be removed in 5.0.0\n */\nexport function getLocalState<TInstance extends object>(obj: TInstance | undefined): NgtInstanceState | undefined {\n\treturn getInstanceState(obj);\n}\n\nexport function getInstanceState<TInstance extends NgtAnyRecord>(\n\tobj: TInstance | undefined,\n): NgtInstanceState<TInstance> | undefined {\n\tif (!obj) return undefined;\n\treturn (obj as NgtInstanceNode<TInstance>).__ngt__ || undefined;\n}\n\nexport function invalidateInstance<TInstance extends NgtAnyRecord>(instance: NgtInstanceNode<TInstance>) {\n\tlet store = getInstanceState(instance)?.store;\n\n\tif (store) {\n\t\twhile (store.snapshot.previousRoot) {\n\t\t\tstore = store.snapshot.previousRoot;\n\t\t}\n\n\t\tif (store.snapshot.internal.frames === 0) {\n\t\t\tstore.snapshot.invalidate();\n\t\t}\n\t}\n\n\tcheckUpdate(instance);\n}\n\nexport function prepare<TInstance extends NgtAnyRecord = NgtAnyRecord>(\n\tobject: TInstance,\n\ttype: string,\n\tinstanceState?: Partial<NgtInstanceState>,\n) {\n\tconst instance = object as NgtInstanceNode<TInstance>;\n\n\tif (instanceState?.type === 'ngt-primitive' || !instance.__ngt__) {\n\t\tconst {\n\t\t\thierarchyStore = signalState<NgtInstanceHierarchyState>({\n\t\t\t\tparent: null,\n\t\t\t\tobjects: [],\n\t\t\t\tnonObjects: [],\n\t\t\t\tgeometryStamp: Date.now(),\n\t\t\t}),\n\t\t\tstore = null,\n\t\t\t...rest\n\t\t} = instanceState || {};\n\n\t\tconst nonObjects = hierarchyStore.nonObjects;\n\t\tconst geometryStamp = hierarchyStore.geometryStamp;\n\n\t\tconst nonObjectsChanged = computed(() => {\n\t\t\tconst [_nonObjects] = [nonObjects(), geometryStamp()];\n\t\t\treturn _nonObjects;\n\t\t});\n\n\t\tinstance.__ngt__ = {\n\t\t\tpreviousAttach: null,\n\t\t\ttype,\n\t\t\teventCount: 0,\n\t\t\thandlers: {},\n\t\t\thierarchyStore,\n\t\t\tobject: instance as any,\n\t\t\tparent: hierarchyStore.parent,\n\t\t\tobjects: hierarchyStore.objects,\n\t\t\tnonObjects: nonObjectsChanged,\n\t\t\tadd(object, type) {\n\t\t\t\tconst current = instance.__ngt__.hierarchyStore.snapshot[type];\n\t\t\t\tconst foundIndex = current.findIndex(\n\t\t\t\t\t(node) =>\n\t\t\t\t\t\tobject === node || (!!object['uuid'] && !!node['uuid'] && object['uuid'] === node['uuid']),\n\t\t\t\t);\n\n\t\t\t\tif (foundIndex > -1) {\n\t\t\t\t\tcurrent.splice(foundIndex, 1, object);\n\t\t\t\t\tinstance.__ngt__.hierarchyStore.update({ [type]: current });\n\t\t\t\t} else {\n\t\t\t\t\tinstance.__ngt__.hierarchyStore.update((prev) => ({ [type]: [...prev[type], object] }));\n\t\t\t\t}\n\n\t\t\t\tnotifyAncestors(instance.__ngt__.hierarchyStore.snapshot.parent, type);\n\t\t\t},\n\t\t\tremove(object, type) {\n\t\t\t\tinstance.__ngt__.hierarchyStore.update((prev) => ({\n\t\t\t\t\t[type]: prev[type].filter((node) => node !== object),\n\t\t\t\t}));\n\t\t\t\tnotifyAncestors(instance.__ngt__.hierarchyStore.snapshot.parent, type);\n\t\t\t},\n\t\t\tsetParent(parent) {\n\t\t\t\tinstance.__ngt__.hierarchyStore.update({ parent });\n\t\t\t},\n\t\t\tupdateGeometryStamp() {\n\t\t\t\tinstance.__ngt__.hierarchyStore.update({ geometryStamp: Date.now() });\n\t\t\t},\n\t\t\tstore,\n\t\t\t...rest,\n\t\t};\n\t}\n\n\tObject.defineProperty(instance.__ngt__, 'setPointerEvent', {\n\t\tvalue: <TEvent extends keyof NgtEventHandlers>(\n\t\t\teventName: TEvent,\n\t\t\tcallback: NonNullable<NgtEventHandlers[TEvent]>,\n\t\t) => {\n\t\t\tconst iS = getInstanceState(instance) as NgtInstanceState;\n\t\t\tif (!iS.handlers) iS.handlers = {};\n\n\t\t\t// try to get the previous handler. compound might have one, the THREE object might also have one with the same name\n\t\t\tconst previousHandler = iS.handlers[eventName];\n\t\t\t// readjust the callback\n\t\t\tconst updatedCallback: typeof callback = (event: any) => {\n\t\t\t\tif (previousHandler) previousHandler(event);\n\t\t\t\tcallback(event);\n\t\t\t};\n\n\t\t\tObject.assign(iS.handlers, { [eventName]: updatedCallback });\n\n\t\t\t// increment the count everytime\n\t\t\tiS.eventCount += 1;\n\n\t\t\t// clean up the event listener by removing the target from the interaction array\n\t\t\treturn () => {\n\t\t\t\tconst iS = getInstanceState(instance) as NgtInstanceState;\n\t\t\t\tif (iS) {\n\t\t\t\t\tiS.handlers && delete iS.handlers[eventName];\n\t\t\t\t\tiS.eventCount -= 1;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperties(instance.__ngt__, {\n\t\taddInteraction: {\n\t\t\tvalue: (store?: SignalState<NgtState>) => {\n\t\t\t\tif (!store) return;\n\n\t\t\t\tconst iS = getInstanceState(instance) as NgtInstanceState;\n\n\t\t\t\tif (iS.eventCount < 1 || !('raycast' in instance) || !instance['raycast']) return;\n\n\t\t\t\tlet root = store;\n\t\t\t\twhile (root.snapshot.previousRoot) {\n\t\t\t\t\troot = root.snapshot.previousRoot;\n\t\t\t\t}\n\n\t\t\t\tif (root.snapshot.internal) {\n\t\t\t\t\tconst interactions = root.snapshot.internal.interaction;\n\t\t\t\t\tconst index = interactions.findIndex(\n\t\t\t\t\t\t(obj) => obj.uuid === (instance as unknown as THREE.Object3D).uuid,\n\t\t\t\t\t);\n\t\t\t\t\t// if already exists, do not add to interactions\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\troot.snapshot.internal.interaction.push(instance as unknown as THREE.Object3D);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tconfigurable: true,\n\t\t},\n\t\tremoveInteraction: {\n\t\t\tvalue: (store?: SignalState<NgtState>) => {\n\t\t\t\tif (!store) return;\n\n\t\t\t\tlet root = store;\n\t\t\t\twhile (root.snapshot.previousRoot) {\n\t\t\t\t\troot = root.snapshot.previousRoot;\n\t\t\t\t}\n\n\t\t\t\tif (root.snapshot.internal) {\n\t\t\t\t\tconst interactions = root.snapshot.internal.interaction;\n\t\t\t\t\tconst index = interactions.findIndex(\n\t\t\t\t\t\t(obj) => obj.uuid === (instance as unknown as THREE.Object3D).uuid,\n\t\t\t\t\t);\n\t\t\t\t\tif (index >= 0) interactions.splice(index, 1);\n\t\t\t\t}\n\t\t\t},\n\t\t\tconfigurable: true,\n\t\t},\n\t});\n\n\treturn instance;\n}\n\nfunction notifyAncestors(instance: NgtInstanceNode | null, type: 'objects' | 'nonObjects') {\n\tif (!instance) return;\n\tconst localState = getInstanceState(instance);\n\tif (!localState) return;\n\tconst { parent } = localState.hierarchyStore.snapshot;\n\tlocalState.hierarchyStore.update({ [type]: (localState.hierarchyStore.snapshot[type] || []).slice() });\n\tnotifyAncestors(parent, type);\n}\n","import { booleanAttribute, Directive, effect, ElementRef, inject, input, signal, untracked } from '@angular/core';\nimport { Group, Mesh, Object3D } from 'three';\nimport { getInstanceState } from '../instance';\n\n@Directive({ selector: '[selection]' })\nexport class NgtSelectionApi {\n\tenabled = input(true, { alias: 'selection', transform: booleanAttribute });\n\n\tprivate source = signal<Array<ElementRef<Object3D> | Object3D>>([]);\n\tselected = this.source.asReadonly();\n\n\tupdate(...args: Parameters<typeof this.source.update>) {\n\t\tif (!this.enabled()) return;\n\t\tthis.source.update(...args);\n\t}\n}\n\n@Directive({ selector: 'ngt-group[select], ngt-mesh[select]' })\nexport class NgtSelect {\n\tenabled = input(false, { transform: booleanAttribute, alias: 'select' });\n\n\tconstructor() {\n\t\tconst elementRef = inject<ElementRef<Group | Mesh>>(ElementRef);\n\t\tconst selectionApi = inject(NgtSelectionApi);\n\n\t\teffect((onCleanup) => {\n\t\t\tconst selectionEnabled = selectionApi.enabled();\n\t\t\tif (!selectionEnabled) return;\n\n\t\t\tconst enabled = this.enabled();\n\t\t\tif (!enabled) return;\n\n\t\t\tconst host = elementRef.nativeElement;\n\t\t\tif (!host) return;\n\n\t\t\tconst localState = getInstanceState(host);\n\t\t\tif (!localState) return;\n\n\t\t\t// ngt-mesh[select]\n\t\t\tif (host.type === 'Mesh') {\n\t\t\t\tselectionApi.update((prev) => [...prev, host]);\n\t\t\t\tonCleanup(() => selectionApi.update((prev) => prev.filter((el) => el !== host)));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst [collection] = [untracked(selectionApi.selected), localState.objects()];\n\t\t\tlet changed = false;\n\t\t\tconst current: Object3D[] = [];\n\t\t\thost.traverse((child) => {\n\t\t\t\tchild.type === 'Mesh' && current.push(child);\n\t\t\t\tif (collection.indexOf(child) === -1) changed = true;\n\t\t\t});\n\n\t\t\tif (!changed) return;\n\n\t\t\tselectionApi.update((prev) => [...prev, ...current]);\n\t\t\tonCleanup(() => {\n\t\t\t\tselectionApi.update((prev) => prev.filter((el) => !current.includes(el as Object3D)));\n\t\t\t});\n\t\t});\n\t}\n}\n\nexport const NgtSelection = [NgtSelectionApi, NgtSelect] as const;\n","// import {\n// \tAbstractType,\n// \tDestroyRef,\n// \tDirective,\n// \tElementRef,\n// \tinject,\n// \tInjectionToken,\n// \tProvider,\n// \tProviderToken,\n// \tType,\n// } from '@angular/core';\n// import { HTML } from './renderer-old';\n// import { DOM_PARENT } from './renderer-old/constants';\n// import { injectStore } from './store';\n// import { NgtAnyRecord } from './types';\n\nimport {\n\tAbstractType,\n\tDestroyRef,\n\tDirective,\n\tElementRef,\n\tinject,\n\tInjectionToken,\n\tProvider,\n\tProviderToken,\n\tType,\n} from '@angular/core';\nimport { NGT_DOM_PARENT_FLAG, NGT_HTML_FLAG } from './renderer/constants';\nimport { injectStore } from './store';\nimport { NgtAnyRecord } from './types';\n\n//\nconst NGT_HTML_DOM_ELEMENT = new InjectionToken<'gl' | HTMLElement>('NGT_HTML_DOM_ELEMENT');\n\nexport function provideHTMLDomElement(): Provider;\nexport function provideHTMLDomElement(factory: () => HTMLElement): Provider;\nexport function provideHTMLDomElement<\n\tTDeps extends Array<ProviderToken<any>>,\n\tTValues extends {\n\t\t[K in keyof TDeps]: TDeps[K] extends Type<infer T> | AbstractType<infer T> | InjectionToken<infer T>\n\t\t\t? T\n\t\t\t: never;\n\t},\n>(deps: TDeps, factory: (...args: TValues) => HTMLElement): Provider;\nexport function provideHTMLDomElement(...args: any[]) {\n\tif (args.length === 0) {\n\t\treturn { provide: NGT_HTML_DOM_ELEMENT, useFactory: () => 'gl' };\n\t}\n\n\tif (args.length === 1) {\n\t\treturn { provide: NGT_HTML_DOM_ELEMENT, useFactory: args[0] };\n\t}\n\n\treturn { provide: NGT_HTML_DOM_ELEMENT, useFactory: args.pop(), deps: args };\n}\n\n@Directive()\nexport abstract class NgtHTML {\n\tstatic [NGT_HTML_FLAG] = true;\n\n\tprotected domElement = inject(NGT_HTML_DOM_ELEMENT, { self: true, optional: true });\n\n\tconstructor() {\n\t\tconst host = inject<ElementRef<HTMLElement>>(ElementRef);\n\t\tconst store = injectStore();\n\n\t\tif (this.domElement === 'gl') {\n\t\t\tObject.assign(host.nativeElement, {\n\t\t\t\t[NGT_DOM_PARENT_FLAG]: store.snapshot.gl.domElement.parentElement,\n\t\t\t});\n\t\t} else if (this.domElement) {\n\t\t\tObject.assign(host.nativeElement, { [NGT_DOM_PARENT_FLAG]: this.domElement });\n\t\t}\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\t(host.nativeElement as NgtAnyRecord)[NGT_DOM_PARENT_FLAG] = null;\n\t\t\tdelete (host.nativeElement as NgtAnyRecord)[NGT_DOM_PARENT_FLAG];\n\t\t});\n\t}\n}\n","import { Injector, Signal, effect, signal } from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { Loader, Object3D } from 'three';\nimport type { NgtAnyRecord } from './types';\nimport { NgtObjectMap, makeObjectGraph } from './utils/make';\n\nexport type NgtGLTFLike = { scene: Object3D };\n\nexport interface NgtLoader<T> extends Loader {\n\tload(\n\t\turl: string,\n\t\tonLoad?: (result: T) => void,\n\t\tonProgress?: (event: ProgressEvent) => void,\n\t\tonError?: (event: unknown) => void,\n\t): unknown;\n\tloadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<T>;\n}\n\nexport type NgtLoaderProto<T> = new (...args: any) => NgtLoader<T extends unknown ? any : T>;\nexport type NgtLoaderReturnType<T, L extends NgtLoaderProto<T>> = T extends unknown\n\t? Awaited<ReturnType<InstanceType<L>['loadAsync']>>\n\t: T;\n\nexport type NgtLoaderExtensions<T extends { prototype: NgtLoaderProto<any> }> = (loader: T['prototype']) => void;\nexport type NgtConditionalType<Child, Parent, Truthy, Falsy> = Child extends Parent ? Truthy : Falsy;\nexport type NgtBranchingReturn<T, Parent, Coerced> = NgtConditionalType<T, Parent, Coerced, T>;\n\nexport type NgtLoaderResults<\n\tTInput extends string | string[] | Record<string, string>,\n\tTReturn,\n> = TInput extends string[] ? TReturn[] : TInput extends object ? { [key in keyof TInput]: TReturn } : TReturn;\n\nconst cached = new Map();\nconst memoizedLoaders = new WeakMap();\n\nfunction normalizeInputs(input: string | string[] | Record<string, string>) {\n\tlet urls: string[] = [];\n\tif (Array.isArray(input)) {\n\t\turls = input;\n\t} else if (typeof input === 'string') {\n\t\turls = [input];\n\t} else {\n\t\turls = Object.values(input);\n\t}\n\n\treturn urls.map((url) => (url.includes('undefined') || url.includes('null') || !url ? '' : url));\n}\n\nfunction load<\n\tTData,\n\tTUrl extends string | string[] | Record<string, string>,\n\tTLoaderConstructor extends NgtLoaderProto<TData>,\n\tTReturn = NgtLoaderReturnType<TData, TLoaderConstructor>,\n>(\n\tloaderConstructorFactory: (inputs: string[]) => TLoaderConstructor,\n\tinputs: () => TUrl,\n\t{\n\t\textensions,\n\t\tonLoad,\n\t\tonProgress,\n\t}: {\n\t\textensions?: NgtLoaderExtensions<TLoaderConstructor>;\n\t\tonLoad?: (data: NoInfer<TReturn>) => void;\n\t\tonProgress?: (event: ProgressEvent) => void;\n\t} = {},\n) {\n\treturn (): Array<Promise<any>> => {\n\t\tconst urls = normalizeInputs(inputs());\n\n\t\tlet loader: Loader<TData> = memoizedLoaders.get(loaderConstructorFactory(urls));\n\t\tif (!loader) {\n\t\t\tloader = new (loaderConstructorFactory(urls))();\n\t\t\tmemoizedLoaders.set(loaderConstructorFactory(urls), loader);\n\t\t}\n\n\t\tif (extensions) extensions(loader);\n\n\t\treturn urls.map((url) => {\n\t\t\tif (url === '') return Promise.resolve(null);\n\n\t\t\tif (!cached.has(url)) {\n\t\t\t\tcached.set(\n\t\t\t\t\turl,\n\t\t\t\t\tnew Promise<TData>((resolve, reject) => {\n\t\t\t\t\t\tloader.load(\n\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\t(data) => {\n\t\t\t\t\t\t\t\tif ('scene' in (data as NgtAnyRecord)) {\n\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\tdata as NgtAnyRecord,\n\t\t\t\t\t\t\t\t\t\tmakeObjectGraph((data as NgtAnyRecord)['scene']),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (onLoad) {\n\t\t\t\t\t\t\t\t\tonLoad(data as unknown as TReturn);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonProgress,\n\t\t\t\t\t\t\t(error) =>\n\t\t\t\t\t\t\t\treject(new Error(`[NGT] Could not load ${url}: ${(error as ErrorEvent)?.message}`)),\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\treturn cached.get(url)!;\n\t\t});\n\t};\n}\n\nfunction _injectLoader<\n\tTData,\n\tTUrl extends string | string[] | Record<string, string>,\n\tTLoaderConstructor extends NgtLoaderProto<TData>,\n\tTReturn = NgtLoaderReturnType<TData, TLoaderConstructor>,\n>(\n\tloaderConstructorFactory: (inputs: string[]) => TLoaderConstructor,\n\tinputs: () => TUrl,\n\t{\n\t\textensions,\n\t\tonProgress,\n\t\tonLoad,\n\t\tinjector,\n\t}: {\n\t\textensions?: NgtLoaderExtensions<TLoaderConstructor>;\n\t\tonProgress?: (event: ProgressEvent) => void;\n\t\tonLoad?: (data: NoInfer<TReturn>) => void;\n\t\tinjector?: Injector;\n\t} = {},\n): Signal<NgtLoaderResults<TUrl, NgtBranchingReturn<TReturn, NgtGLTFLike, NgtGLTFLike & NgtObjectMap>> | null> {\n\treturn assertInjector(_injectLoader, injector, () => {\n\t\tconst response = signal<NgtLoaderResults<\n\t\t\tTUrl,\n\t\t\tNgtBranchingReturn<TReturn, NgtGLTFLike, NgtGLTFLike & NgtObjectMap>\n\t\t> | null>(null);\n\n\t\tconst cachedResultPromisesEffect = load(loaderConstructorFactory, inputs, {\n\t\t\textensions,\n\t\t\tonProgress,\n\t\t\tonLoad: onLoad as (data: unknown) => void,\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst originalUrls = inputs();\n\t\t\tconst cachedResultPromises = cachedResultPromisesEffect();\n\t\t\tPromise.all(cachedResultPromises).then((results) => {\n\t\t\t\tresponse.update(() => {\n\t\t\t\t\tif (Array.isArray(originalUrls)) return results;\n\t\t\t\t\tif (typeof originalUrls === 'string') return results[0];\n\t\t\t\t\tconst keys = Object.keys(originalUrls);\n\t\t\t\t\treturn keys.reduce(\n\t\t\t\t\t\t(result, key) => {\n\t\t\t\t\t\t\t(result as NgtAnyRecord)[key] = results[keys.indexOf(key)];\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{} as {\n\t\t\t\t\t\t\t[key in keyof TUrl]: NgtBranchingReturn<TReturn, NgtGLTFLike, NgtGLTFLike & NgtObjectMap>;\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\treturn response.asReadonly();\n\t});\n}\n\n_injectLoader.preload = <\n\tTData,\n\tTUrl extends string | string[] | Record<string, string>,\n\tTLoaderConstructor extends NgtLoaderProto<TData>,\n>(\n\tloaderConstructorFactory: (inputs: string[]) => TLoaderConstructor,\n\tinputs: () => TUrl,\n\textensions?: NgtLoaderExtensions<TLoaderConstructor>,\n\tonLoad?: (data: NoInfer<TData>) => void,\n) => {\n\tconst effects = load(loaderConstructorFactory, inputs, { extensions, onLoad })();\n\tif (effects) {\n\t\tvoid Promise.all(effects);\n\t}\n};\n\n_injectLoader.destroy = () => {\n\tcached.clear();\n};\n\n_injectLoader.clear = (urls: string | string[]) => {\n\tconst urlToClear = Array.isArray(urls) ? urls : [urls];\n\turlToClear.forEach((url) => {\n\t\tcached.delete(url);\n\t});\n};\n\nexport type NgtInjectedLoader = typeof _injectLoader;\nexport const injectLoader: NgtInjectedLoader = _injectLoader;\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Pipe } from '@angular/core';\n\nconst RGBA_REGEX = /rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+),?\\s*(\\d*\\.?\\d+)?\\)/;\nconst DEFAULT_COLOR = 0x000000;\n\n@Pipe({ name: 'hexify', pure: true })\nexport class NgtHexify {\n\tprivate document = inject(DOCUMENT, { optional: true });\n\tprivate ctx?: CanvasRenderingContext2D | null;\n\tprivate cache: Record<string, number> = {};\n\n\t/**\n\t * transforms a:\n\t * - hex string to a hex number\n\t * - rgb string to a hex number\n\t * - rgba string to a hex number\n\t * - css color string to a hex number\n\t *\n\t * always default to black if failed\n\t * @param value\n\t */\n\ttransform(value: string): number {\n\t\tif (value == null) return DEFAULT_COLOR;\n\n\t\tif (value.startsWith('#')) {\n\t\t\tif (!this.cache[value]) {\n\t\t\t\tthis.cache[value] = this.hexStringToNumber(value);\n\t\t\t}\n\t\t\treturn this.cache[value];\n\t\t}\n\n\t\tif (!this.ctx) {\n\t\t\tthis.ctx = this.document?.createElement('canvas').getContext('2d');\n\t\t}\n\n\t\tif (!this.ctx) {\n\t\t\tconsole.warn('[NGT] hexify: canvas context is not available');\n\t\t\treturn DEFAULT_COLOR;\n\t\t}\n\n\t\tthis.ctx.fillStyle = value;\n\t\tconst computedValue = this.ctx.fillStyle;\n\n\t\tif (computedValue.startsWith('#')) {\n\t\t\tif (!this.cache[computedValue]) {\n\t\t\t\tthis.cache[computedValue] = this.hexStringToNumber(computedValue);\n\t\t\t}\n\t\t\treturn this.cache[computedValue];\n\t\t}\n\n\t\tif (!computedValue.startsWith('rgba')) {\n\t\t\tconsole.warn(`[NGT] hexify: invalid color format. Expected rgba or hex, receive: ${computedValue}`);\n\t\t\treturn DEFAULT_COLOR;\n\t\t}\n\n\t\tconst match = computedValue.match(RGBA_REGEX);\n\t\tif (!match) {\n\t\t\tconsole.warn(`[NGT] hexify: invalid color format. Expected rgba or hex, receive: ${computedValue}`);\n\t\t\treturn DEFAULT_COLOR;\n\t\t}\n\n\t\tconst r = parseInt(match[1], 10);\n\t\tconst g = parseInt(match[2], 10);\n\t\tconst b = parseInt(match[3], 10);\n\t\tconst a = match[4] ? parseFloat(match[4]) : 1.0;\n\n\t\tconst cacheKey = `${r}:${g}:${b}:${a}`;\n\n\t\t// check result from cache\n\t\tif (!this.cache[cacheKey]) {\n\t\t\t// Convert the components to hex strings\n\t\t\tconst hexR = this.componentToHex(r);\n\t\t\tconst hexG = this.componentToHex(g);\n\t\t\tconst hexB = this.componentToHex(b);\n\t\t\tconst hexA = this.componentToHex(Math.round(a * 255));\n\n\t\t\t// Combine the hex components into a single hex string\n\t\t\tconst hex = `#${hexR}${hexG}${hexB}${hexA}`;\n\t\t\tthis.cache[cacheKey] = this.hexStringToNumber(hex);\n\t\t}\n\n\t\treturn this.cache[cacheKey];\n\t}\n\n\tprivate hexStringToNumber(hexString: string): number {\n\t\treturn parseInt(hexString.replace('#', ''), 16);\n\t}\n\n\tprivate componentToHex(component: number): string {\n\t\tconst hex = component.toString(16);\n\t\treturn hex.length === 1 ? '0' + hex : hex;\n\t}\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport type { NgtConstructorRepresentation } from '../types';\n\nconst catalogue: Record<string, NgtConstructorRepresentation> = {};\n\nexport function extend(objects: object): void {\n\tObject.assign(catalogue, objects);\n}\n\nexport const NGT_CATALOGUE = new InjectionToken<typeof catalogue>('NGT_CATALOGUE', { factory: () => catalogue });\n\nexport function injectCatalogue() {\n\treturn inject(NGT_CATALOGUE);\n}\n","import { computed, Signal, Type, ValueEqualityFn } from '@angular/core';\nimport * as THREE from 'three';\nimport type { NgtVector2, NgtVector3, NgtVector4 } from '../three-types';\nimport type { NgtAnyRecord } from '../types';\nimport { is } from './is';\n\ntype KeysOfType<TObject extends object, TType> = Exclude<\n\t{\n\t\t[K in keyof TObject]: TObject[K] extends TType | undefined | null ? K : never;\n\t}[keyof TObject],\n\tundefined\n>;\n\nexport function omit<TObject extends object, TKeys extends (keyof TObject)[]>(\n\tobjFn: () => TObject,\n\tkeysToOmit: TKeys,\n\tequal: ValueEqualityFn<NoInfer<Omit<TObject, TKeys[number]>>> = (a, b) =>\n\t\tis.equ(a, b, { objects: 'shallow', arrays: 'shallow' }),\n): Signal<Omit<TObject, TKeys[number]>> {\n\treturn computed(\n\t\t() => {\n\t\t\tconst obj = objFn();\n\t\t\tconst result = {} as NgtAnyRecord;\n\n\t\t\tfor (const key of Object.keys(obj)) {\n\t\t\t\tif (keysToOmit.includes(key as keyof TObject)) continue;\n\t\t\t\tObject.assign(result, { [key]: obj[key as keyof TObject] });\n\t\t\t}\n\n\t\t\treturn result as Omit<TObject, TKeys[number]>;\n\t\t},\n\t\t{ equal },\n\t);\n}\n\nexport function pick<TObject extends object, TKey extends keyof TObject>(\n\tobjFn: () => TObject,\n\tkey: TKey,\n\tequal?: ValueEqualityFn<NoInfer<TObject[TKey]>>,\n): Signal<TObject[TKey]>;\nexport function pick<TObject extends object, TKeys extends (keyof TObject)[]>(\n\tobjFn: () => TObject,\n\tkeys: TKeys,\n\tequal?: ValueEqualityFn<NoInfer<Pick<TObject, TKeys[number]>>>,\n): Signal<Pick<TObject, TKeys[number]>>;\nexport function pick(objFn: () => NgtAnyRecord, keyOrKeys: string | string[], equal?: ValueEqualityFn<any>) {\n\tif (Array.isArray(keyOrKeys)) {\n\t\tif (!equal) {\n\t\t\tequal = (a, b) => is.equ(a, b, { objects: 'shallow', arrays: 'shallow' });\n\t\t}\n\n\t\treturn computed(\n\t\t\t() => {\n\t\t\t\tconst obj = objFn();\n\t\t\t\tconst result = {} as NgtAnyRecord;\n\t\t\t\tfor (const key of keyOrKeys) {\n\t\t\t\t\tif (!(key in obj)) continue;\n\t\t\t\t\tObject.assign(result, { [key]: obj[key] });\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\t{ equal },\n\t\t);\n\t}\n\n\treturn computed(() => objFn()[keyOrKeys], { equal });\n}\n\nexport function merge<TObject extends object>(\n\tobjFn: () => TObject,\n\ttoMerge: Partial<TObject>,\n\tmode: 'override' | 'backfill' = 'override',\n\tequal: ValueEqualityFn<NoInfer<TObject>> = (a, b) => is.equ(a, b, { objects: 'shallow', arrays: 'shallow' }),\n) {\n\tif (mode === 'override') return computed(() => ({ ...objFn(), ...toMerge }), { equal });\n\treturn computed(() => ({ ...toMerge, ...objFn() }), { equal });\n}\n\ntype NgtVectorComputed<\n\tTVector extends THREE.Vector2 | THREE.Vector3 | THREE.Vector4,\n\tTNgtVector = TVector extends THREE.Vector2 ? NgtVector2 : TVector extends THREE.Vector3 ? NgtVector3 : NgtVector4,\n> = {\n\t(input: Signal<TNgtVector>): Signal<TVector>;\n\t(input: Signal<TNgtVector>, keepUndefined: true): Signal<TVector | undefined>;\n\t<TObject extends object>(options: Signal<TObject>, key: KeysOfType<TObject, TNgtVector>): Signal<TVector>;\n\t<TObject extends object>(\n\t\toptions: Signal<TObject>,\n\t\tkey: KeysOfType<TObject, TNgtVector>,\n\t\tkeepUndefined: true,\n\t): Signal<TVector | undefined>;\n};\n\nfunction createVectorComputed<TVector extends THREE.Vector2 | THREE.Vector3 | THREE.Vector4>(\n\tvectorCtor: Type<TVector>,\n) {\n\ttype TNgtVector = TVector extends THREE.Vector2\n\t\t? NgtVector2\n\t\t: TVector extends THREE.Vector3\n\t\t\t? NgtVector3\n\t\t\t: NgtVector4;\n\treturn ((\n\t\tinputOrOptions: Signal<NgtAnyRecord> | Signal<TNgtVector>,\n\t\tkeyOrKeepUndefined?: string | true,\n\t\tkeepUndefined?: boolean,\n\t) => {\n\t\tif (typeof keyOrKeepUndefined === 'undefined' || typeof keyOrKeepUndefined === 'boolean') {\n\t\t\tkeepUndefined = !!keyOrKeepUndefined;\n\t\t\tconst input = inputOrOptions as Signal<TNgtVector>;\n\t\t\treturn computed(\n\t\t\t\t() => {\n\t\t\t\t\tconst value = input();\n\t\t\t\t\tif (keepUndefined && value == undefined) return undefined;\n\t\t\t\t\tif (typeof value === 'number') return new vectorCtor().setScalar(value);\n\t\t\t\t\telse if (Array.isArray(value)) return new vectorCtor(...value);\n\t\t\t\t\telse if (value) return value as unknown as TVector;\n\t\t\t\t\telse return new vectorCtor();\n\t\t\t\t},\n\t\t\t\t{ equal: (a, b) => !!a && !!b && a.equals(b as any) },\n\t\t\t);\n\t\t}\n\n\t\tconst options = inputOrOptions as Signal<NgtAnyRecord>;\n\t\tconst key = keyOrKeepUndefined as string;\n\n\t\treturn computed(\n\t\t\t() => {\n\t\t\t\tconst value = options()[key] as TNgtVector;\n\t\t\t\tif (keepUndefined && value == undefined) return undefined;\n\t\t\t\tif (typeof value === 'number') return new vectorCtor().setScalar(value);\n\t\t\t\telse if (Array.isArray(value)) return new vectorCtor(...value);\n\t\t\t\telse if (value) return value as unknown as TVector;\n\t\t\t\telse return new vectorCtor();\n\t\t\t},\n\t\t\t{ equal: (a, b) => !!a && !!b && a.equals(b as any) },\n\t\t);\n\t}) as NgtVectorComputed<TVector, TNgtVector>;\n}\n\nexport const vector2 = createVectorComputed(THREE.Vector2);\nexport const vector3 = createVectorComputed(THREE.Vector3);\nexport const vector4 = createVectorComputed(THREE.Vector4);\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcontentChild,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDirective,\n\teffect,\n\tElementRef,\n\tEmbeddedViewRef,\n\tinject,\n\tInjector,\n\tinput,\n\tnumberAttribute,\n\tsignal,\n\tSkipSelf,\n\tTemplateRef,\n\tuntracked,\n\tViewContainerRef,\n} from '@angular/core';\nimport * as THREE from 'three';\nimport { Group } from 'three';\nimport { getInstanceState, prepare } from './instance';\nimport { extend } from './renderer/catalogue';\nimport { NGT_DOM_PARENT_FLAG, NGT_INTERNAL_ADD_COMMENT_FLAG, NGT_PORTAL_CONTENT_FLAG } from './renderer/constants';\nimport { injectStore, NGT_STORE } from './store';\nimport type { NgtComputeFunction, NgtEventManager, NgtSize, NgtState, NgtViewport } from './types';\nimport { is } from './utils/is';\nimport { makeId } from './utils/make';\nimport { omit, pick } from './utils/parameters';\nimport { signalState, SignalState } from './utils/signal-state';\nimport { updateCamera } from './utils/update';\n\n@Directive({ selector: 'ngt-portal[autoRender]' })\nexport class NgtPortalAutoRender {\n\tprivate portalStore = injectStore({ host: true });\n\tprivate parentStore = injectStore({ skipSelf: true });\n\tprivate portal = inject(NgtPortalImpl, { host: true });\n\n\trenderPriority = input(1, { alias: 'autoRender', transform: (value) => numberAttribute(value, 1) });\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\t// this.portalStore.update((state) => ({ events: { ...state.events, priority: this.renderPriority() + 1 } }));\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst portalRendered = this.portal.portalRendered();\n\t\t\tif (!portalRendered) return;\n\n\t\t\t// track state\n\t\t\tconst [renderPriority, { internal }] = [this.renderPriority(), this.portalStore()];\n\n\t\t\tlet oldClean: boolean;\n\n\t\t\tconst cleanup = internal.subscribe(\n\t\t\t\t({ gl, scene, camera }) => {\n\t\t\t\t\tconst [parentScene, parentCamera] = [\n\t\t\t\t\t\tthis.parentStore.snapshot.scene,\n\t\t\t\t\t\tthis.parentStore.snapshot.camera,\n\t\t\t\t\t];\n\t\t\t\t\toldClean = gl.autoClear;\n\t\t\t\t\tif (renderPriority === 1) {\n\t\t\t\t\t\t// clear scene and render with default\n\t\t\t\t\t\tgl.autoClear = true;\n\t\t\t\t\t\tgl.render(parentScene, parentCamera);\n\t\t\t\t\t}\n\n\t\t\t\t\t// disable cleaning\n\t\t\t\t\tgl.autoClear = false;\n\t\t\t\t\tgl.clearDepth();\n\t\t\t\t\tgl.render(scene, camera);\n\t\t\t\t\t// restore\n\t\t\t\t\tgl.autoClear = oldClean;\n\t\t\t\t},\n\t\t\t\trenderPriority,\n\t\t\t\tthis.portalStore,\n\t\t\t);\n\n\t\t\tonCleanup(() => cleanup());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ng-template[portalContent]' })\nexport class NgtPortalContent {\n\tstatic ngTemplateContextGuard(_: NgtPortalContent, ctx: unknown): ctx is { injector: Injector } {\n\t\treturn true;\n\t}\n\n\tconstructor() {\n\t\tconst host = inject<ElementRef<HTMLElement>>(ElementRef, { skipSelf: true });\n\t\tconst { element } = inject(ViewContainerRef);\n\t\tconst injector = inject(Injector);\n\t\tconst commentNode = element.nativeElement;\n\t\tconst store = injectStore();\n\n\t\tcommentNode.data = NGT_PORTAL_CONTENT_FLAG;\n\t\tcommentNode[NGT_PORTAL_CONTENT_FLAG] = store;\n\t\tcommentNode[NGT_DOM_PARENT_FLAG] = host.nativeElement;\n\n\t\tif (commentNode[NGT_INTERNAL_ADD_COMMENT_FLAG]) {\n\t\t\tcommentNode[NGT_INTERNAL_ADD_COMMENT_FLAG]('portal', injector);\n\t\t\tdelete commentNode[NGT_INTERNAL_ADD_COMMENT_FLAG];\n\t\t}\n\t}\n}\n\nexport interface NgtPortalState extends Omit<NgtState, 'events'> {\n\tevents: {\n\t\tenabled?: boolean;\n\t\tpriority?: number;\n\t\tcompute?: NgtComputeFunction;\n\t\tconnected?: any;\n\t};\n}\n\nfunction mergeState(\n\tpreviousRoot: SignalState<NgtState>,\n\tstore: SignalState<NgtState>,\n\tcontainer: THREE.Object3D,\n\tpointer: THREE.Vector2,\n\traycaster: THREE.Raycaster,\n\tevents?: NgtPortalState['events'],\n\tsize?: NgtSize,\n) {\n\t// we never want to spread the id\n\tconst { id: _, ...previousState } = previousRoot.snapshot;\n\tconst state = store.snapshot;\n\n\tlet viewport: Omit<NgtViewport, 'dpr' | 'initialDpr'> | undefined = undefined;\n\n\tif (state.camera && size) {\n\t\tconst camera = state.camera;\n\t\t// calculate the override viewport, if present\n\t\tviewport = previousState.viewport.getCurrentViewport(camera, new THREE.Vector3(), size);\n\t\t// update the portal camera, if it differs from the previous layer\n\t\tif (camera !== previousState.camera) updateCamera(camera, size);\n\t}\n\n\treturn {\n\t\t// the intersect consists of the previous root state\n\t\t...previousState,\n\t\t...state,\n\t\t// portals have their own scene, which forms the root, a raycaster and a pointer\n\t\tscene: container as THREE.Scene,\n\t\tpointer,\n\t\traycaster,\n\t\t// their previous root is the layer before it\n\t\tpreviousRoot,\n\t\tevents: { ...previousState.events, ...state.events, ...events },\n\t\tsize: { ...previousState.size, ...size },\n\t\tviewport: { ...previousState.viewport, ...viewport },\n\t\t// layers are allowed to override events\n\t\tsetEvents: (events: Partial<NgtEventManager<any>>) =>\n\t\t\tstore.update((state) => ({ ...state, events: { ...state.events, ...events } })),\n\t} as NgtState;\n}\n\n@Component({\n\tselector: 'ngt-portal',\n\ttemplate: `\n\t\t@if (portalRendered()) {\n\t\t\t<!-- Without an element that receives pointer events state.pointer will always be 0/0 -->\n\t\t\t<ngt-group (pointerover)=\"(undefined)\" attach=\"none\" />\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NGT_STORE,\n\t\t\tuseFactory: (previousStore: SignalState<NgtState>) => {\n\t\t\t\tconst pointer = new THREE.Vector2();\n\t\t\t\tconst raycaster = new THREE.Raycaster();\n\n\t\t\t\tconst { id: _skipId, ...previousState } = previousStore.snapshot;\n\n\t\t\t\tconst store = signalState<NgtState>({\n\t\t\t\t\tid: makeId(),\n\t\t\t\t\t...previousState,\n\t\t\t\t\tscene: null as unknown as THREE.Scene,\n\t\t\t\t\tpreviousRoot: previousStore,\n\t\t\t\t\tpointer,\n\t\t\t\t\traycaster,\n\t\t\t\t});\n\t\t\t\tstore.update(mergeState(previousStore, store, null!, pointer, raycaster));\n\t\t\t\treturn store;\n\t\t\t},\n\t\t\tdeps: [[new SkipSelf(), NGT_STORE]],\n\t\t},\n\t],\n})\nexport class NgtPortalImpl {\n\tcontainer = input.required<THREE.Object3D>();\n\tstate = input<Partial<NgtPortalState>>({});\n\n\tprivate contentRef = contentChild.required(NgtPortalContent, { read: TemplateRef });\n\tprivate anchorRef = contentChild.required(NgtPortalContent, { read: ViewContainerRef });\n\n\tprivate previousStore = injectStore({ skipSelf: true });\n\tprivate portalStore = injectStore();\n\tprivate injector = inject(Injector);\n\n\tprivate size = pick(this.state, 'size');\n\tprivate events = pick(this.state, 'events');\n\tprivate restState = omit(this.state, ['size', 'events']);\n\n\tprivate portalContentRendered = signal(false);\n\tportalRendered = this.portalContentRendered.asReadonly();\n\n\tprivate portalViewRef?: EmbeddedViewRef<unknown>;\n\n\tconstructor() {\n\t\textend({ Group });\n\n\t\teffect(() => {\n\t\t\tlet [container, anchor, content] = [\n\t\t\t\tthis.container(),\n\t\t\t\tthis.anchorRef(),\n\t\t\t\tthis.contentRef(),\n\t\t\t\tthis.previousStore(),\n\t\t\t];\n\n\t\t\tconst [size, events, restState] = [untracked(this.size), untracked(this.events), untracked(this.restState)];\n\n\t\t\tif (!is.instance(container)) {\n\t\t\t\tcontainer = prepare(container, 'ngt-portal', { store: this.portalStore });\n\t\t\t}\n\n\t\t\tconst instanceState = getInstanceState(container);\n\t\t\tif (instanceState && instanceState.store !== this.portalStore) {\n\t\t\t\tinstanceState.store = this.portalStore;\n\t\t\t}\n\n\t\t\tthis.portalStore.update(\n\t\t\t\trestState,\n\t\t\t\tmergeState(\n\t\t\t\t\tthis.previousStore,\n\t\t\t\t\tthis.portalStore,\n\t\t\t\t\tcontainer,\n\t\t\t\t\tthis.portalStore.snapshot.pointer,\n\t\t\t\t\tthis.portalStore.snapshot.raycaster,\n\t\t\t\t\tevents,\n\t\t\t\t\tsize,\n\t\t\t\t),\n\t\t\t);\n\n\t\t\tif (this.portalViewRef) {\n\t\t\t\tthis.portalViewRef.detectChanges();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.portalViewRef = anchor.createEmbeddedView(\n\t\t\t\tcontent,\n\t\t\t\t{ injector: this.injector },\n\t\t\t\t{ injector: this.injector },\n\t\t\t);\n\t\t\tthis.portalViewRef.detectChanges();\n\t\t\tthis.portalContentRendered.set(true);\n\t\t});\n\t}\n}\n\nexport const NgtPortal = [NgtPortalImpl, NgtPortalContent] as const;\n","import { Subject } from 'rxjs';\nimport * as THREE from 'three';\nimport { getInstanceState } from './instance';\nimport type {\n\tNgtAnyRecord,\n\tNgtDomEvent,\n\tNgtEventHandlers,\n\tNgtIntersection,\n\tNgtPointerCaptureTarget,\n\tNgtState,\n\tNgtThreeEvent,\n} from './types';\nimport { makeId } from './utils/make';\nimport { SignalState } from './utils/signal-state';\n\n/**\n * Release pointer captures.\n * This is called by releasePointerCapture in the API, and when an object is removed.\n */\nfunction releaseInternalPointerCapture(\n\tcapturedMap: Map<number, Map<THREE.Object3D, NgtPointerCaptureTarget>>,\n\tobj: THREE.Object3D,\n\tcaptures: Map<THREE.Object3D, NgtPointerCaptureTarget>,\n\tpointerId: number,\n): void {\n\tconst captureData: NgtPointerCaptureTarget | undefined = captures.get(obj);\n\tif (captureData) {\n\t\tcaptures.delete(obj);\n\t\t// If this was the last capturing object for this pointer\n\t\tif (captures.size === 0) {\n\t\t\tcapturedMap.delete(pointerId);\n\t\t\tcaptureData.target.releasePointerCapture(pointerId);\n\t\t}\n\t}\n}\n\nexport function removeInteractivity(store: SignalState<NgtState>, object: THREE.Object3D) {\n\tconst { internal } = store.snapshot;\n\t// Removes every trace of an object from the data store\n\tinternal.interaction = internal.interaction.filter((o) => o !== object);\n\tinternal.initialHits = internal.initialHits.filter((o) => o !== object);\n\tinternal.hovered.forEach((value, key) => {\n\t\tif (value.eventObject === object || value.object === object) {\n\t\t\t// Clear out intersects, they are outdated by now\n\t\t\tinternal.hovered.delete(key);\n\t\t}\n\t});\n\tinternal.capturedMap.forEach((captures, pointerId) => {\n\t\treleaseInternalPointerCapture(internal.capturedMap, object, captures, pointerId);\n\t});\n}\n\nexport function createEvents(store: SignalState<NgtState>) {\n\t/** Calculates delta */\n\tfunction calculateDistance(event: NgtDomEvent) {\n\t\tconst internal = store.snapshot.internal;\n\t\tconst dx = event.offsetX - internal.initialClick[0];\n\t\tconst dy = event.offsetY - internal.initialClick[1];\n\t\treturn Math.round(Math.sqrt(dx * dx + dy * dy));\n\t}\n\n\t/** Returns true if an instance has a valid pointer-event registered, this excludes scroll, clicks etc */\n\tfunction filterPointerEvents(objects: THREE.Object3D[]) {\n\t\treturn objects.filter((obj) =>\n\t\t\t['move', 'over', 'enter', 'out', 'leave'].some((name) => {\n\t\t\t\tconst eventName = `pointer${name}` as keyof NgtEventHandlers;\n\t\t\t\treturn getInstanceState(obj)?.handlers?.[eventName];\n\t\t\t}),\n\t\t);\n\t}\n\n\tfunction intersect(event: NgtDomEvent, filter?: (objects: THREE.Object3D[]) => THREE.Object3D[]) {\n\t\tconst state = store.snapshot;\n\t\tconst duplicates = new Set<string>();\n\t\tconst intersections: NgtIntersection[] = [];\n\t\t// Allow callers to eliminate event objects\n\t\tconst eventsObjects = filter ? filter(state.internal.interaction) : state.internal.interaction;\n\t\t// Reset all raycaster cameras to undefined\n\t\tfor (let i = 0; i < eventsObjects.length; i++) {\n\t\t\tconst objectRootState = getInstanceState(eventsObjects[i])?.store?.snapshot;\n\t\t\tif (objectRootState) {\n\t\t\t\tobjectRootState.raycaster.camera = undefined!;\n\t\t\t}\n\t\t}\n\n\t\tif (!state.previousRoot) {\n\t\t\t// Make sure root-level pointer and ray are set up\n\t\t\tstate.events.compute?.(event, store, null);\n\t\t}\n\n\t\tfunction handleRaycast(obj: THREE.Object3D) {\n\t\t\tconst objStore = getInstanceState(obj)?.store;\n\t\t\tconst objState = objStore?.snapshot;\n\t\t\t// Skip event handling when noEvents is set, or when the raycasters camera is null\n\t\t\tif (!objState || !objState.events.enabled || objState.raycaster.camera === null) return [];\n\n\t\t\t// When the camera is undefined we have to call the event layers update function\n\t\t\tif (objState.raycaster.camera === undefined) {\n\t\t\t\tobjState.events.compute?.(event, objStore, objState.previousRoot);\n\t\t\t\t// If the camera is still undefined we have to skip this layer entirely\n\t\t\t\tif (objState.raycaster.camera === undefined) objState.raycaster.camera = null!;\n\t\t\t}\n\n\t\t\t// Intersect object by object\n\t\t\treturn objState.raycaster.camera ? objState.raycaster.intersectObject(obj, true) : [];\n\t\t}\n\n\t\t// Collect events\n\t\tlet hits: THREE.Intersection<THREE.Object3D>[] = eventsObjects\n\t\t\t// Intersect objects\n\t\t\t.flatMap(handleRaycast)\n\t\t\t// Sort by event priority and distance\n\t\t\t.sort((a, b) => {\n\t\t\t\tconst aState = getInstanceState(a.object)?.store?.snapshot;\n\t\t\t\tconst bState = getInstanceState(b.object)?.store?.snapshot;\n\t\t\t\tif (!aState || !bState) return a.distance - b.distance;\n\t\t\t\treturn bState.events.priority - aState.events.priority || a.distance - b.distance;\n\t\t\t})\n\t\t\t// Filter out duplicates\n\t\t\t.filter((item) => {\n\t\t\t\tconst id = makeId(item as NgtIntersection);\n\t\t\t\tif (duplicates.has(id)) return false;\n\t\t\t\tduplicates.add(id);\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t// https://github.com/mrdoob/three.js/issues/16031\n\t\t// Allow custom userland intersect sort order, this likely only makes sense on the root filter\n\t\tif (state.events.filter) hits = state.events.filter(hits, store);\n\n\t\t// Bubble up the events, find the event source (eventObject)\n\t\tfor (const hit of hits) {\n\t\t\tlet eventObject: THREE.Object3D | null = hit.object;\n\t\t\t// bubble event up\n\t\t\twhile (eventObject) {\n\t\t\t\tif (getInstanceState(eventObject)?.eventCount) intersections.push({ ...hit, eventObject });\n\t\t\t\teventObject = eventObject.parent;\n\t\t\t}\n\t\t}\n\n\t\t// If the interaction is captured, make all capturing targets part of the intersect.\n\t\tif ('pointerId' in event && state.internal.capturedMap.has(event.pointerId)) {\n\t\t\tfor (const captureData of state.internal.capturedMap.get(event.pointerId)!.values()) {\n\t\t\t\tif (!duplicates.has(makeId(captureData.intersection))) intersections.push(captureData.intersection);\n\t\t\t}\n\t\t}\n\t\treturn intersections;\n\t}\n\n\t/** Handles intersections by forwarding them to handlers */\n\tfunction handleIntersects(\n\t\tintersections: NgtIntersection[],\n\t\tevent: NgtDomEvent,\n\t\tdelta: number,\n\t\tcallback: (event: NgtThreeEvent<NgtDomEvent>) => void,\n\t) {\n\t\tconst rootState = store.snapshot;\n\n\t\t// If anything has been found, forward it to the event listeners\n\t\tif (intersections.length) {\n\t\t\tconst localState = { stopped: false };\n\t\t\tfor (const hit of intersections) {\n\t\t\t\tlet instanceState = getInstanceState(hit.object);\n\n\t\t\t\t// If the object is not managed by NGT, it might be parented to an element which is.\n\t\t\t\t// Traverse upwards until we find a managed parent and use its state instead.\n\t\t\t\tif (!instanceState) {\n\t\t\t\t\thit.object.traverseAncestors((ancestor) => {\n\t\t\t\t\t\tconst parentInstanceState = getInstanceState(ancestor);\n\t\t\t\t\t\tif (parentInstanceState) {\n\t\t\t\t\t\t\tinstanceState = parentInstanceState;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst { raycaster, pointer, camera, internal } = instanceState?.store?.snapshot || rootState;\n\n\t\t\t\tconst unprojectedPoint = new THREE.Vector3(pointer.x, pointer.y, 0).unproject(camera);\n\t\t\t\tconst hasPointerCapture = (id: number) => internal.capturedMap.get(id)?.has(hit.eventObject) ?? false;\n\n\t\t\t\tconst setPointerCapture = (id: number) => {\n\t\t\t\t\tconst captureData = { intersection: hit, target: event.target as Element };\n\t\t\t\t\tif (internal.capturedMap.has(id)) {\n\t\t\t\t\t\t// if the pointerId was previously captured, we add the hit to the\n\t\t\t\t\t\t// event capturedMap.\n\t\t\t\t\t\tinternal.capturedMap.get(id)!.set(hit.eventObject, captureData);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// if the pointerId was not previously captured, we create a map\n\t\t\t\t\t\t// containing the hitObject, and the hit. hitObject is used for\n\t\t\t\t\t\t// faster access.\n\t\t\t\t\t\tinternal.capturedMap.set(id, new Map([[hit.eventObject, captureData]]));\n\t\t\t\t\t}\n\t\t\t\t\t// Call the original event now\n\t\t\t\t\t(event.target as Element).setPointerCapture(id);\n\t\t\t\t};\n\n\t\t\t\tconst releasePointerCapture = (id: number) => {\n\t\t\t\t\tconst captures = internal.capturedMap.get(id);\n\t\t\t\t\tif (captures) {\n\t\t\t\t\t\treleaseInternalPointerCapture(internal.capturedMap, hit.eventObject, captures, id);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Add native event props\n\t\t\t\tconst extractEventProps: any = {};\n\t\t\t\t// This iterates over the event's properties including the inherited ones. Native PointerEvents have most of their props as getters which are inherited, but polyfilled PointerEvents have them all as their own properties (i.e. not inherited). We can't use Object.keys() or Object.entries() as they only return \"own\" properties; nor Object.getPrototypeOf(event) as that *doesn't* return \"own\" properties, only inherited ones.\n\t\t\t\tfor (const prop in event) {\n\t\t\t\t\tconst property = event[prop as keyof NgtDomEvent];\n\t\t\t\t\t// Only copy over atomics, leave functions alone as these should be\n\t\t\t\t\t// called as event.nativeEvent.fn()\n\t\t\t\t\tif (typeof property !== 'function') extractEventProps[prop] = property;\n\t\t\t\t}\n\n\t\t\t\tconst raycastEvent: NgtThreeEvent<NgtDomEvent> = {\n\t\t\t\t\t...hit,\n\t\t\t\t\t...extractEventProps,\n\t\t\t\t\tpointer,\n\t\t\t\t\tintersections,\n\t\t\t\t\tstopped: localState.stopped,\n\t\t\t\t\tdelta,\n\t\t\t\t\tunprojectedPoint,\n\t\t\t\t\tray: raycaster.ray,\n\t\t\t\t\tcamera,\n\t\t\t\t\t// Hijack stopPropagation, which just sets a flag\n\t\t\t\t\tstopPropagation() {\n\t\t\t\t\t\t// https://github.com/pmndrs/react-three-fiber/issues/596\n\t\t\t\t\t\t// Events are not allowed to stop propagation if the pointer has been captured\n\t\t\t\t\t\tconst capturesForPointer = 'pointerId' in event && internal.capturedMap.get(event.pointerId);\n\n\t\t\t\t\t\t// We only authorize stopPropagation...\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t// ...if this pointer hasn't been captured\n\t\t\t\t\t\t\t!capturesForPointer ||\n\t\t\t\t\t\t\t// ... or if the hit object is capturing the pointer\n\t\t\t\t\t\t\tcapturesForPointer.has(hit.eventObject)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\traycastEvent.stopped = localState.stopped = true;\n\t\t\t\t\t\t\t// Propagation is stopped, remove all other hover records\n\t\t\t\t\t\t\t// An event handler is only allowed to flush other handlers if it is hovered itself\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tinternal.hovered.size &&\n\t\t\t\t\t\t\t\tArray.from(internal.hovered.values()).find((i) => i.eventObject === hit.eventObject)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// Objects cannot flush out higher up objects that have already caught the event\n\t\t\t\t\t\t\t\tconst higher = intersections.slice(0, intersections.indexOf(hit));\n\t\t\t\t\t\t\t\tcancelPointer([...higher, hit]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t// there should be a distinction between target and currentTarget\n\t\t\t\t\ttarget: { hasPointerCapture, setPointerCapture, releasePointerCapture },\n\t\t\t\t\tcurrentTarget: { hasPointerCapture, setPointerCapture, releasePointerCapture },\n\t\t\t\t\tnativeEvent: event,\n\t\t\t\t};\n\n\t\t\t\t// Call subscribers\n\t\t\t\tcallback(raycastEvent);\n\t\t\t\t// Event bubbling may be interrupted by stopPropagation\n\t\t\t\tif (localState.stopped) break;\n\t\t\t}\n\t\t}\n\t\treturn intersections;\n\t}\n\n\tfunction cancelPointer(intersections: NgtIntersection[]) {\n\t\tconst internal = store.snapshot.internal;\n\t\tfor (const hoveredObj of internal.hovered.values()) {\n\t\t\t// When no objects were hit or the the hovered object wasn't found underneath the cursor\n\t\t\t// we call onPointerOut and delete the object from the hovered-elements map\n\t\t\tif (\n\t\t\t\t!intersections.length ||\n\t\t\t\t!intersections.find(\n\t\t\t\t\t(hit) =>\n\t\t\t\t\t\thit.object === hoveredObj.object &&\n\t\t\t\t\t\thit.index === hoveredObj.index &&\n\t\t\t\t\t\thit.instanceId === hoveredObj.instanceId,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tconst eventObject = hoveredObj.eventObject;\n\t\t\t\tconst instance = getInstanceState(eventObject);\n\t\t\t\tconst handlers = instance?.handlers;\n\t\t\t\tinternal.hovered.delete(makeId(hoveredObj));\n\t\t\t\tif (instance?.eventCount) {\n\t\t\t\t\t// Clear out intersects, they are outdated by now\n\t\t\t\t\tconst data = { ...hoveredObj, intersections };\n\t\t\t\t\thandlers?.pointerout?.(data as NgtThreeEvent<PointerEvent>);\n\t\t\t\t\thandlers?.pointerleave?.(data as NgtThreeEvent<PointerEvent>);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction pointerMissed(event: MouseEvent, objects: THREE.Object3D[]) {\n\t\tfor (let i = 0; i < objects.length; i++) {\n\t\t\tconst instance = getInstanceState(objects[i]);\n\t\t\tinstance?.handlers.pointermissed?.(event);\n\t\t}\n\t}\n\n\tfunction handlePointer(name: string) {\n\t\t// Deal with cancelation\n\t\tswitch (name) {\n\t\t\tcase 'pointerleave':\n\t\t\tcase 'pointercancel':\n\t\t\t\treturn () => cancelPointer([]);\n\t\t\tcase 'lostpointercapture':\n\t\t\t\treturn (event: NgtDomEvent) => {\n\t\t\t\t\tconst { internal } = store.snapshot;\n\t\t\t\t\tif ('pointerId' in event && internal.capturedMap.has(event.pointerId)) {\n\t\t\t\t\t\t// If the object event interface had lostpointercapture, we'd call it here on every\n\t\t\t\t\t\t// object that's getting removed. We call it on the next frame because lostpointercapture\n\t\t\t\t\t\t// fires before pointerup. Otherwise pointerUp would never be called if the event didn't\n\t\t\t\t\t\t// happen in the object it originated from, leaving components in a in-between state.\n\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\t// Only release if pointer-up didn't do it already\n\t\t\t\t\t\t\tif (internal.capturedMap.has(event.pointerId)) {\n\t\t\t\t\t\t\t\tinternal.capturedMap.delete(event.pointerId);\n\t\t\t\t\t\t\t\tcancelPointer([]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t}\n\n\t\t// Any other pointer goes here ...\n\t\treturn function handleEvent(event: NgtDomEvent) {\n\t\t\t// NOTE: __pointerMissed$ on NgtStore is private subject since we only expose the Observable\n\t\t\tconst pointerMissed$: Subject<MouseEvent> = (store as NgtAnyRecord)['__pointerMissed$'];\n\t\t\tconst internal = store.snapshot.internal;\n\n\t\t\t// prepareRay(event)\n\t\t\tinternal.lastEvent.nativeElement = event;\n\n\t\t\t// Get fresh intersects\n\t\t\tconst isPointerMove = name === 'pointermove';\n\t\t\tconst isClickEvent = name === 'click' || name === 'contextmenu' || name === 'dblclick';\n\t\t\tconst filter = isPointerMove ? filterPointerEvents : undefined;\n\n\t\t\tconst hits = intersect(event, filter);\n\t\t\tconst delta = isClickEvent ? calculateDistance(event) : 0;\n\n\t\t\t// Save initial coordinates on pointer-down\n\t\t\tif (name === 'pointerdown') {\n\t\t\t\tinternal.initialClick = [event.offsetX, event.offsetY];\n\t\t\t\tinternal.initialHits = hits.map((hit) => hit.eventObject);\n\t\t\t}\n\n\t\t\t// If a click yields no results, pass it back to the user as a miss\n\t\t\t// Missed events have to come first in order to establish user-land side-effect clean up\n\t\t\tif (isClickEvent && !hits.length) {\n\t\t\t\tif (delta <= 2) {\n\t\t\t\t\tpointerMissed(event, internal.interaction);\n\t\t\t\t\tpointerMissed$.next(event);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take care of unhover\n\t\t\tif (isPointerMove) cancelPointer(hits);\n\n\t\t\tfunction onIntersect(data: NgtThreeEvent<NgtDomEvent>) {\n\t\t\t\tconst eventObject = data.eventObject;\n\t\t\t\tconst instance = getInstanceState(eventObject);\n\t\t\t\tconst handlers = instance?.handlers;\n\n\t\t\t\t// Check presence of handlers\n\t\t\t\tif (!instance?.eventCount) return;\n\n\t\t\t\t/*\n MAYBE TODO, DELETE IF NOT:\n Check if the object is captured, captured events should not have intersects running in parallel\n But wouldn't it be better to just replace capturedMap with a single entry?\n Also, are we OK with straight up making picking up multiple objects impossible?\n\n const pointerId = (data as ThreeEvent<PointerEvent>).pointerId\n if (pointerId !== undefined) {\n const capturedMeshSet = internal.capturedMap.get(pointerId)\n if (capturedMeshSet) {\n const captured = capturedMeshSet.get(eventObject)\n if (captured && captured.localState.stopped) return\n }\n }*/\n\n\t\t\t\tif (isPointerMove) {\n\t\t\t\t\t// Move event ...\n\t\t\t\t\tif (\n\t\t\t\t\t\thandlers?.pointerover ||\n\t\t\t\t\t\thandlers?.pointerenter ||\n\t\t\t\t\t\thandlers?.pointerout ||\n\t\t\t\t\t\thandlers?.pointerleave\n\t\t\t\t\t) {\n\t\t\t\t\t\t// When enter or out is present take care of hover-state\n\t\t\t\t\t\tconst id = makeId(data);\n\t\t\t\t\t\tconst hoveredItem = internal.hovered.get(id);\n\t\t\t\t\t\tif (!hoveredItem) {\n\t\t\t\t\t\t\t// If the object wasn't previously hovered, book it and call its handler\n\t\t\t\t\t\t\tinternal.hovered.set(id, data);\n\t\t\t\t\t\t\thandlers.pointerover?.(data as NgtThreeEvent<PointerEvent>);\n\t\t\t\t\t\t\thandlers.pointerenter?.(data as NgtThreeEvent<PointerEvent>);\n\t\t\t\t\t\t} else if (hoveredItem.stopped) {\n\t\t\t\t\t\t\t// If the object was previously hovered and stopped, we shouldn't allow other items to proceed\n\t\t\t\t\t\t\tdata.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Call mouse move\n\t\t\t\t\thandlers?.pointermove?.(data as NgtThreeEvent<PointerEvent>);\n\t\t\t\t} else {\n\t\t\t\t\t// All other events ...\n\t\t\t\t\tconst handler = handlers?.[name as keyof NgtEventHandlers] as (\n\t\t\t\t\t\tevent: NgtThreeEvent<PointerEvent>,\n\t\t\t\t\t) => void;\n\t\t\t\t\tif (handler) {\n\t\t\t\t\t\t// Forward all events back to their respective handlers with the exception of click events,\n\t\t\t\t\t\t// which must use the initial target\n\t\t\t\t\t\tif (!isClickEvent || internal.initialHits.includes(eventObject)) {\n\t\t\t\t\t\t\t// Missed events have to come first\n\t\t\t\t\t\t\tpointerMissed(\n\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\tinternal.interaction.filter((object) => !internal.initialHits.includes(object)),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// Now call the handler\n\t\t\t\t\t\t\thandler(data as NgtThreeEvent<PointerEvent>);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Trigger onPointerMissed on all elements that have pointer over/out handlers, but not click and weren't hit\n\t\t\t\t\t\tif (isClickEvent && internal.initialHits.includes(eventObject)) {\n\t\t\t\t\t\t\tpointerMissed(\n\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\tinternal.interaction.filter((object) => !internal.initialHits.includes(object)),\n\t\t\t\t\t\t\t);\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\thandleIntersects(hits, event, delta, onIntersect);\n\t\t};\n\t}\n\n\treturn { handlePointer };\n}\n","import * as THREE from 'three';\nimport { getInstanceState, invalidateInstance } from '../instance';\nimport type { NgtAnyRecord, NgtInstanceNode, NgtInstanceState, NgtState } from '../types';\nimport { is } from './is';\nimport { checkUpdate } from './update';\n\n// This function prepares a set of changes to be applied to the instance\nfunction diffProps(instance: NgtAnyRecord, props: NgtAnyRecord) {\n\tconst changes: [key: string, value: unknown][] = [];\n\n\tfor (const propKey in props) {\n\t\tconst propValue = props[propKey];\n\t\tlet key = propKey;\n\t\tif (is.colorSpaceExist(instance)) {\n\t\t\tif (propKey === 'encoding') {\n\t\t\t\tkey = 'colorSpace';\n\t\t\t} else if (propKey === 'outputEncoding') {\n\t\t\t\tkey = 'outputColorSpace';\n\t\t\t}\n\t\t}\n\t\tif (is.equ(propValue, instance[key])) continue;\n\t\tchanges.push([propKey, propValue]);\n\t}\n\n\treturn changes;\n}\n\n// NOTE: this is a workaround to give the instance a chance to have the store from the parent.\n// we clear this property after the applyProps is done\nexport const NGT_APPLY_PROPS = '__ngt_apply_props__';\n\n// https://github.com/mrdoob/three.js/pull/27042\n// https://github.com/mrdoob/three.js/pull/22748\nconst colorMaps = ['map', 'emissiveMap', 'sheenColorMap', 'specularColorMap', 'envMap'];\n\ntype ClassConstructor = { new (): void };\n\nconst MEMOIZED_PROTOTYPES = new Map();\n\nfunction getMemoizedPrototype(root: any) {\n\tlet ctor = MEMOIZED_PROTOTYPES.get(root.constructor);\n\ttry {\n\t\tif (!ctor) {\n\t\t\tctor = new root.constructor();\n\t\t\tMEMOIZED_PROTOTYPES.set(root.constructor, ctor);\n\t\t}\n\t} catch (e) {\n\t\t// ...\n\t}\n\treturn ctor;\n}\n\nfunction resolve(instance: any, key: string): { root: any; targetKey: string; targetProp: any } {\n\tlet targetProp = instance[key];\n\tif (!key.includes('.')) return { root: instance, targetKey: key, targetProp };\n\n\t// Resolve pierced target\n\tconst chain = key.split('.');\n\ttargetProp = chain.reduce((acc, part) => acc[part], instance);\n\tconst targetKey = chain.pop()!;\n\n\t// Switch root if atomic\n\tif (!targetProp?.set) instance = chain.reduce((acc, part) => acc[part], instance);\n\n\treturn { root: instance, targetKey, targetProp };\n}\n\n// This function applies a set of changes to the instance\nexport function applyProps<T extends NgtAnyRecord>(instance: NgtInstanceState<T>['object'], props: NgtAnyRecord) {\n\t// if props is empty\n\tif (!Object.keys(props).length) return instance;\n\n\tconst localState = getInstanceState(instance);\n\tconst rootState =\n\t\tlocalState?.store?.snapshot ?? (instance as NgtAnyRecord)[NGT_APPLY_PROPS]?.snapshot ?? ({} as NgtState);\n\tconst changes = diffProps(instance, props);\n\n\tfor (let i = 0; i < changes.length; i++) {\n\t\tlet [key, value] = changes[i];\n\n\t\t// Ignore setting undefined props\n\t\t// https://github.com/pmndrs/react-three-fiber/issues/274\n\t\tif (value === undefined) continue;\n\n\t\t// Alias (output)encoding => (output)colorSpace (since r152)\n\t\t// https://github.com/pmndrs/react-three-fiber/pull/2829\n\t\t// if (is.colorSpaceExist(instance)) {\n\t\t// \tconst sRGBEncoding = 3001;\n\t\t// \tconst SRGBColorSpace = 'srgb';\n\t\t// \tconst LinearSRGBColorSpace = 'srgb-linear';\n\t\t//\n\t\t// \tif (key === 'encoding') {\n\t\t// \t\tkey = 'colorSpace';\n\t\t// \t\tvalue = value === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace;\n\t\t// \t} else if (key === 'outputEncoding') {\n\t\t// \t\tkey = 'outputColorSpace';\n\t\t// \t\tvalue = value === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace;\n\t\t// \t}\n\t\t// }\n\n\t\tconst { root, targetKey, targetProp } = resolve(instance, key);\n\n\t\t// we have switched due to pierced props\n\t\tif (root !== instance) {\n\t\t\treturn applyProps(root, { [targetKey]: value });\n\t\t}\n\n\t\t// Layers have no copy function, we must therefore copy the mask property\n\t\tif (targetProp instanceof THREE.Layers && value instanceof THREE.Layers) {\n\t\t\ttargetProp.mask = value.mask;\n\t\t} else if (is.three<THREE.Color>(targetProp, 'isColor') && is.colorRepresentation(value)) {\n\t\t\ttargetProp.set(value);\n\t\t}\n\t\t// Copy if properties match signatures\n\t\telse if (\n\t\t\ttargetProp &&\n\t\t\ttypeof targetProp.set === 'function' &&\n\t\t\ttypeof targetProp.copy === 'function' &&\n\t\t\t(value as ClassConstructor | undefined)?.constructor &&\n\t\t\t(targetProp as ClassConstructor).constructor === (value as ClassConstructor).constructor\n\t\t) {\n\t\t\t// If both are geometries, we should assign the value directly instead of copying\n\t\t\tif (\n\t\t\t\tis.three<THREE.BufferGeometry>(targetProp, 'isBufferGeometry') &&\n\t\t\t\tis.three<THREE.BufferGeometry>(value, 'isBufferGeometry')\n\t\t\t) {\n\t\t\t\tObject.assign(root, { [targetKey]: value });\n\t\t\t} else {\n\t\t\t\ttargetProp.copy(value);\n\t\t\t}\n\t\t}\n\t\t// Set array types\n\t\telse if (targetProp && typeof targetProp.set === 'function' && Array.isArray(value)) {\n\t\t\tif (typeof targetProp.fromArray === 'function') targetProp.fromArray(value);\n\t\t\telse targetProp.set(...value);\n\t\t}\n\t\t// Set literal types\n\t\telse if (targetProp && typeof targetProp.set === 'function' && typeof value !== 'object') {\n\t\t\tconst isColor = is.three<THREE.Color>(targetProp, 'isColor');\n\t\t\t// Allow setting array scalars\n\t\t\tif (!isColor && typeof targetProp.setScalar === 'function' && typeof value === 'number')\n\t\t\t\ttargetProp.setScalar(value);\n\t\t\t// Otherwise just set single value\n\t\t\telse targetProp.set(value);\n\t\t}\n\t\t// Else, just overwrite the value\n\t\telse {\n\t\t\tObject.assign(root, { [targetKey]: value });\n\n\t\t\t// Auto-convert sRGB texture parameters for built-in materials\n\t\t\t// https://github.com/pmndrs/react-three-fiber/issues/344\n\t\t\t// https://github.com/mrdoob/three.js/pull/25857\n\t\t\tif (\n\t\t\t\trootState &&\n\t\t\t\t!rootState.linear &&\n\t\t\t\tcolorMaps.includes(targetKey) &&\n\t\t\t\t(root[targetKey] as THREE.Texture | undefined)?.isTexture &&\n\t\t\t\t// sRGB textures must be RGBA8 since r137 https://github.com/mrdoob/three.js/pull/23129\n\t\t\t\troot[targetKey].format === THREE.RGBAFormat &&\n\t\t\t\troot[targetKey].type === THREE.UnsignedByteType\n\t\t\t) {\n\t\t\t\t// NOTE: this cannot be set from the renderer (e.g. sRGB source textures rendered to P3)\n\t\t\t\troot[targetKey].colorSpace = THREE.SRGBColorSpace;\n\t\t\t}\n\t\t}\n\n\t\tcheckUpdate(root[targetKey]);\n\t\tcheckUpdate(targetProp);\n\t\tinvalidateInstance(instance as NgtInstanceNode<T>);\n\t}\n\n\tconst instanceHandlersCount = localState?.eventCount;\n\tconst parent = localState?.hierarchyStore?.snapshot.parent;\n\n\tif (parent && rootState.internal && instance['raycast'] && instanceHandlersCount !== localState?.eventCount) {\n\t\t// Pre-emptively remove the instance from the interaction manager\n\t\tconst index = rootState.internal.interaction.indexOf(instance);\n\t\tif (index > -1) rootState.internal.interaction.splice(index, 1);\n\t\t// Add the instance to the interaction manager only when it has handlers\n\t\tif (localState?.eventCount) rootState.internal.interaction.push(instance);\n\t}\n\n\tif (parent && localState?.onUpdate && changes.length) {\n\t\tlocalState.onUpdate(instance as NgtInstanceNode<T>);\n\t}\n\n\t// clearing the intermediate store from the instance\n\tif (instance[NGT_APPLY_PROPS]) {\n\t\tdelete instance[NGT_APPLY_PROPS];\n\t}\n\n\treturn instance;\n}\n","import { Injector } from '@angular/core';\nimport type { NgtAnyRecord } from '../types';\nimport { NGT_DOM_PARENT_FLAG, NGT_GET_NODE_ATTRIBUTE_FLAG, NGT_RENDERER_NODE_FLAG } from './constants';\nimport { NgtRendererClassId } from './utils';\n\ntype ThreeRendererState = [\n\ttype: 'three',\n\tdestroyed: boolean,\n\trawValue: any | undefined,\n\tportalContainer: never | undefined,\n\tinjector: never | undefined,\n\t// ThreeRendererState is the case where *parent is used\n\tparent: NgtRendererNode<'platform' | 'portal' | 'three'> | undefined,\n\tchildren: Array<NgtRendererNode<'platform' | 'portal' | 'comment'>>,\n];\n\ntype PortalRendererState = [\n\ttype: 'portal',\n\tdestroyed: boolean,\n\trawValue: never | undefined,\n\tportalContainer: NgtRendererNode<'three'> | undefined,\n\tinjector: Injector | undefined,\n\tparent: any | undefined,\n\tchildren: any[],\n];\n\ntype PlatformRendererState = [\n\ttype: 'platform',\n\tdestroyed: boolean,\n\trawValue: never | undefined,\n\tportalContainer: never | undefined,\n\tinjector: never | undefined,\n\tparent: NgtRendererNode<'three' | 'portal'> | undefined,\n\tchildren: Array<NgtRendererNode<'three' | 'portal' | 'comment'>>,\n];\n\ntype CommentRendererState = [\n\ttype: 'comment',\n\tdestroyed: boolean,\n\trawValue: never | undefined,\n\tportalContainer: never | undefined,\n\tinjector: Injector | undefined,\n\tparent: NgtRendererNode | undefined,\n\tchildren: NgtRendererNode[],\n];\n\ntype TextRendererState = [\n\ttype: 'text',\n\tdestroyed: boolean,\n\trawValue: never | undefined,\n\tportalContainer: never | undefined,\n\tinjector: never | undefined,\n\tparent: NgtRendererNode | undefined,\n\tchildren: NgtRendererNode[],\n];\n\ntype NgtRendererStateMap = {\n\tthree: ThreeRendererState;\n\tportal: PortalRendererState;\n\tplatform: PlatformRendererState;\n\tcomment: CommentRendererState;\n\ttext: TextRendererState;\n};\n\nexport type NgtRendererState =\n\t| ThreeRendererState\n\t| PortalRendererState\n\t| PlatformRendererState\n\t| CommentRendererState\n\t| TextRendererState;\n\nexport interface NgtRendererNode<TType extends keyof NgtRendererStateMap = keyof NgtRendererStateMap>\n\textends NgtAnyRecord {\n\t[NGT_RENDERER_NODE_FLAG]: NgtRendererStateMap[TType];\n\t[NGT_DOM_PARENT_FLAG]?: HTMLElement;\n}\n\nexport function isRendererNode(node: unknown): node is NgtRendererNode {\n\treturn !!node && typeof node === 'object' && NGT_RENDERER_NODE_FLAG in node;\n}\n\nexport function createRendererNode<TType extends keyof NgtRendererStateMap>(\n\ttype: TType,\n\tnode: NgtAnyRecord,\n\tdocument: Document,\n) {\n\tconst state = [type, false, undefined, undefined, undefined, undefined, []] as NgtRendererState;\n\tconst rendererNode = Object.assign(node, { [NGT_RENDERER_NODE_FLAG]: state });\n\n\t// NOTE: assign ownerDocument to node so we can use HostListener in Component\n\tif (!rendererNode['ownerDocument']) rendererNode['ownerDocument'] = document;\n\n\t// NOTE: Angular SSR calls `node.getAttribute()` to retrieve hydration info on a node\n\tif (!('getAttribute' in rendererNode) || typeof rendererNode['getAttribute'] !== 'function') {\n\t\tconst getNodeAttribute = (name: string) => rendererNode[name];\n\t\tgetNodeAttribute[NGT_GET_NODE_ATTRIBUTE_FLAG] = true;\n\t\tObject.defineProperty(rendererNode, 'getAttribute', { value: getNodeAttribute, configurable: true });\n\t}\n\n\treturn rendererNode as NgtRendererNode<TType>;\n}\n\nexport function setRendererParentNode(node: NgtRendererNode, parent: NgtRendererNode) {\n\tif (!node.__ngt_renderer__[NgtRendererClassId.parent]) {\n\t\tnode.__ngt_renderer__[NgtRendererClassId.parent] = parent;\n\t}\n}\n\nexport function addRendererChildNode(node: NgtRendererNode, child: NgtRendererNode) {\n\tif (!node.__ngt_renderer__[NgtRendererClassId.children].includes(child)) {\n\t\tnode.__ngt_renderer__[NgtRendererClassId.children].push(child);\n\t}\n}\n","import { getInstanceState } from '../instance';\nimport type { NgtAttachFunction, NgtInstanceNode, NgtState } from '../types';\nimport { applyProps, NGT_APPLY_PROPS } from './apply-props';\nimport { SignalState } from './signal-state';\n\nexport function attach(object: NgtInstanceNode, value: unknown, paths: string[] = [], useApplyProps = false): void {\n\tconst [base, ...remaining] = paths;\n\tif (!base) return;\n\n\tif (remaining.length === 0) {\n\t\tif (useApplyProps) applyProps(object, { [base]: value });\n\t\telse object[base] = value;\n\t} else {\n\t\tassignEmpty(object, base, useApplyProps);\n\t\tattach(object[base], value, remaining, useApplyProps);\n\t}\n}\n\nexport function detach(parent: NgtInstanceNode, child: NgtInstanceNode, attachProp: string[] | NgtAttachFunction) {\n\tconst childInstanceState = getInstanceState(child);\n\tif (childInstanceState) {\n\t\tif (Array.isArray(attachProp))\n\t\t\tattach(parent, childInstanceState.previousAttach, attachProp, childInstanceState.type === 'ngt-value');\n\t\telse (childInstanceState.previousAttach as () => void)?.();\n\t}\n}\n\nfunction assignEmpty(obj: NgtInstanceNode, base: string, shouldAssignStoreForApplyProps = false) {\n\tif ((!Object.hasOwn(obj, base) && Reflect && !!Reflect.has && !Reflect.has(obj, base)) || obj[base] === undefined) {\n\t\tobj[base] = {};\n\t}\n\n\tif (shouldAssignStoreForApplyProps) {\n\t\tconst instanceState = getInstanceState(obj[base]);\n\t\t// if we already have instance state, bail out\n\t\tif (instanceState) return;\n\n\t\tconst parentInstanceState = getInstanceState(obj);\n\t\t// if parent doesn't have instance state, bail out\n\t\tif (!parentInstanceState) return;\n\n\t\tObject.assign(obj[base], { [NGT_APPLY_PROPS]: parentInstanceState.store });\n\t}\n}\n\nexport function createAttachFunction<TChild = any, TParent = any>(\n\tcb: (params: { parent: TParent; child: TChild; store: SignalState<NgtState> }) => (() => void) | void,\n): NgtAttachFunction<TChild, TParent> {\n\treturn (parent, child, store) => cb({ parent, child, store });\n}\n","import { untracked } from '@angular/core';\nimport * as THREE from 'three';\nimport { removeInteractivity } from '../events';\nimport { getInstanceState, invalidateInstance } from '../instance';\nimport { NgtAnyRecord, NgtInstanceNode } from '../types';\nimport { attach, detach } from '../utils/attach';\nimport { is } from '../utils/is';\nimport {\n\tNGT_CANVAS_CONTENT_FLAG,\n\tNGT_DOM_PARENT_FLAG,\n\tNGT_GET_NODE_ATTRIBUTE_FLAG,\n\tNGT_INTERNAL_ADD_COMMENT_FLAG,\n\tNGT_INTERNAL_SET_PARENT_COMMENT_FLAG,\n\tNGT_PORTAL_CONTENT_FLAG,\n} from './constants';\nimport { NgtRendererNode } from './state';\n\n// @internal\nexport const enum NgtRendererClassId {\n\ttype,\n\tdestroyed,\n\trawValue,\n\tportalContainer,\n\tinjector,\n\tparent,\n\tchildren,\n}\n\nexport function kebabToPascal(str: string): string {\n\tif (!str) return str; // Handle empty input\n\n\tlet pascalStr = '';\n\tlet capitalizeNext = true; // Flag to track capitalization\n\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst char = str[i];\n\t\tif (char === '-') {\n\t\t\tcapitalizeNext = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tpascalStr += capitalizeNext ? char.toUpperCase() : char;\n\t\tcapitalizeNext = false;\n\t}\n\n\treturn pascalStr;\n}\n\nfunction propagateStoreRecursively(node: NgtInstanceNode, parentNode: NgtInstanceNode) {\n\tconst iS = getInstanceState(node);\n\tconst pIS = getInstanceState(parentNode);\n\n\tif (!iS || !pIS) return;\n\n\t// assign store on child if not already exist\n\t// or child store is not the same as parent store\n\t// or child store is the parent of parent store\n\tif (!iS.store || iS.store !== pIS.store || iS.store === pIS.store.snapshot.previousRoot) {\n\t\tiS.store = pIS.store;\n\n\t\t// Call addInteraction if it exists\n\t\tiS.addInteraction?.(pIS.store);\n\n\t\t// Collect all children (objects and nonObjects)\n\t\tconst children = [\n\t\t\t...(iS.objects ? untracked(iS.objects) : []),\n\t\t\t...(iS.nonObjects ? untracked(iS.nonObjects) : []),\n\t\t];\n\n\t\t// Recursively reassign the store for each child\n\t\tfor (const child of children) {\n\t\t\tpropagateStoreRecursively(child, node);\n\t\t}\n\t}\n}\n\nexport function attachThreeNodes(parent: NgtInstanceNode, child: NgtInstanceNode) {\n\tconst pIS = getInstanceState(parent);\n\tconst cIS = getInstanceState(child);\n\n\tif (!pIS || !cIS) {\n\t\tthrow new Error(`[NGT] THREE instances need to be prepared with local state.`);\n\t}\n\n\t// whether the child is added to the parent with parent.add()\n\tlet added = false;\n\n\t// propagate store recursively\n\tpropagateStoreRecursively(child, parent);\n\n\tif (cIS.attach) {\n\t\tconst attachProp = cIS.attach;\n\n\t\tif (typeof attachProp === 'function') {\n\t\t\tlet attachCleanUp: ReturnType<typeof attachProp> | undefined = undefined;\n\n\t\t\tif (cIS.type === 'ngt-value') {\n\t\t\t\tif (cIS.hierarchyStore.snapshot.parent !== parent) {\n\t\t\t\t\tcIS.setParent(parent);\n\t\t\t\t}\n\t\t\t\t// at this point we don't have rawValue yet, so we bail and wait until the Renderer recalls attach\n\t\t\t\tif ((child as unknown as NgtRendererNode).__ngt_renderer__[NgtRendererClassId.rawValue] === undefined)\n\t\t\t\t\treturn;\n\t\t\t\tattachCleanUp = attachProp(\n\t\t\t\t\tparent,\n\t\t\t\t\t(child as unknown as NgtRendererNode).__ngt_renderer__[NgtRendererClassId.rawValue],\n\t\t\t\t\tcIS.store!,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tattachCleanUp = attachProp(parent, child, cIS.store!);\n\t\t\t}\n\n\t\t\tif (attachCleanUp) cIS.previousAttach = attachCleanUp;\n\t\t} else {\n\t\t\t// we skip attach none if set explicitly\n\t\t\tif (attachProp[0] === 'none') {\n\t\t\t\tinvalidateInstance(child);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// handle material array\n\t\t\tif (\n\t\t\t\tattachProp[0] === 'material' &&\n\t\t\t\tattachProp[1] &&\n\t\t\t\ttypeof Number(attachProp[1]) === 'number' &&\n\t\t\t\tis.three<THREE.Material>(child, 'isMaterial') &&\n\t\t\t\t!Array.isArray(parent['material'])\n\t\t\t) {\n\t\t\t\tparent['material'] = [];\n\t\t\t}\n\n\t\t\tif (cIS.type === 'ngt-value') {\n\t\t\t\tif (cIS.hierarchyStore.snapshot.parent !== parent) {\n\t\t\t\t\tcIS.setParent(parent);\n\t\t\t\t}\n\t\t\t\t// at this point we don't have rawValue yet, so we bail and wait until the Renderer recalls attach\n\t\t\t\tif ((child as unknown as NgtRendererNode).__ngt_renderer__[NgtRendererClassId.rawValue] === undefined)\n\t\t\t\t\treturn;\n\n\t\t\t\t// save prev value\n\t\t\t\tcIS.previousAttach = attachProp.reduce((value, key) => value[key], parent);\n\t\t\t\tattach(\n\t\t\t\t\tparent,\n\t\t\t\t\t(child as unknown as NgtRendererNode).__ngt_renderer__[NgtRendererClassId.rawValue],\n\t\t\t\t\tattachProp,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// save prev value\n\t\t\t\tcIS.previousAttach = attachProp.reduce((value, key) => value[key], parent);\n\t\t\t\tattach(parent, child, attachProp);\n\t\t\t}\n\t\t}\n\t} else if (is.three<THREE.Object3D>(parent, 'isObject3D') && is.three<THREE.Object3D>(child, 'isObject3D')) {\n\t\tparent.add(child);\n\t\tadded = true;\n\t\tcIS.addInteraction?.(cIS.store || pIS.store);\n\t}\n\n\tif (pIS.add) {\n\t\tpIS.add(child, added ? 'objects' : 'nonObjects');\n\t}\n\n\tif (cIS.parent && untracked(cIS.parent) !== parent) {\n\t\tcIS.setParent(parent);\n\t}\n\n\t// NOTE: this does not mean that the child is actually attached to the parent on the scenegraph.\n\t// a child on the Angular template can also emit onAttach\n\tif (cIS.onAttach) cIS.onAttach({ parent, node: child });\n\n\tinvalidateInstance(child);\n\tinvalidateInstance(parent);\n}\n\nexport function removeThreeChild(child: NgtInstanceNode, parent: NgtInstanceNode, dispose?: boolean) {\n\tconst pIS = getInstanceState(parent);\n\tconst cIS = getInstanceState(child);\n\n\t// clear parent ref\n\tcIS?.setParent(null);\n\n\t// remove child from parent\n\tpIS?.remove?.(child, 'objects');\n\tpIS?.remove?.(child, 'nonObjects');\n\n\tif (cIS?.attach) {\n\t\tdetach(parent, child, cIS.attach);\n\t} else if (is.three<THREE.Object3D>(parent, 'isObject3D') && is.three<THREE.Object3D>(child, 'isObject3D')) {\n\t\tparent.remove(child);\n\t\tconst store = cIS?.store || pIS?.store;\n\t\tcIS?.removeInteraction?.(store);\n\t\tif (store) removeInteractivity(store, child);\n\t}\n\n\t// dispose\n\tconst isPrimitive = cIS?.type && cIS.type !== 'ngt-primitive';\n\tif (!isPrimitive && child['dispose'] && !is.three<THREE.Scene>(child, 'isScene')) {\n\t\tqueueMicrotask(() => child['dispose']());\n\t}\n\n\tinvalidateInstance(parent);\n}\n\nexport function internalDestroyNode(\n\tnode: NgtRendererNode,\n\tremoveChild: null | ((node: NgtRendererNode, child: NgtRendererNode) => void),\n) {\n\tconst rS = node.__ngt_renderer__;\n\tif (!rS || rS[NgtRendererClassId.destroyed]) return;\n\n\tfor (const child of rS[NgtRendererClassId.children].slice()) {\n\t\tremoveChild?.(node, child);\n\t\tinternalDestroyNode(child, removeChild);\n\t}\n\n\t// clear out parent if haven't\n\trS[NgtRendererClassId.parent] = undefined;\n\t// clear out children\n\trS[NgtRendererClassId.children].length = 0;\n\n\t// clear out NgtInstanceState\n\tconst iS = getInstanceState(node);\n\tif (iS) {\n\t\tconst temp = iS as NgtAnyRecord;\n\n\t\tiS.removeInteraction?.(iS.store);\n\n\t\tdelete temp['onAttach'];\n\t\tdelete temp['onUpdate'];\n\t\tdelete temp['object'];\n\t\tdelete temp['objects'];\n\t\tdelete temp['nonObjects'];\n\t\tdelete temp['parent'];\n\t\tdelete temp['add'];\n\t\tdelete temp['remove'];\n\t\tdelete temp['updateGeometryStamp'];\n\t\tdelete temp['setParent'];\n\t\tdelete temp['store'];\n\t\tdelete temp['handlers'];\n\t\tdelete temp['hierarchyStore'];\n\t\tdelete temp['previousAttach'];\n\t\tdelete temp['setPointerEvent'];\n\t\tdelete temp['addInteraction'];\n\t\tdelete temp['removeInteraction'];\n\n\t\tif (iS.type !== 'ngt-primitive') {\n\t\t\tdelete node['__ngt__'];\n\t\t}\n\t}\n\n\t// clear our debugNode\n\trS[NgtRendererClassId.injector] = undefined;\n\n\tif (rS[NgtRendererClassId.type] === 'comment') {\n\t\tdelete node[NGT_INTERNAL_ADD_COMMENT_FLAG];\n\t\tdelete node[NGT_INTERNAL_SET_PARENT_COMMENT_FLAG];\n\t\tdelete node[NGT_CANVAS_CONTENT_FLAG];\n\t\tdelete node[NGT_PORTAL_CONTENT_FLAG];\n\t\tdelete node[NGT_DOM_PARENT_FLAG];\n\t}\n\n\t// clear getAttribute if exist\n\tif (\n\t\t'getAttribute' in node &&\n\t\ttypeof node['getAttribute'] === 'function' &&\n\t\tnode['getAttribute'][NGT_GET_NODE_ATTRIBUTE_FLAG]\n\t) {\n\t\tdelete node['getAttribute'];\n\t}\n\n\t// mark node as destroyed\n\trS[NgtRendererClassId.destroyed] = true;\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n\tinject,\n\tInjectable,\n\tInjectionToken,\n\tInjector,\n\tRenderer2,\n\tRendererFactory2,\n\tRendererType2,\n\tType,\n\tuntracked,\n} from '@angular/core';\nimport * as THREE from 'three';\nimport { NgtArgs } from '../directives/args';\nimport { NgtCommonDirective } from '../directives/common';\nimport { NgtParent } from '../directives/parent';\nimport { getInstanceState, prepare } from '../instance';\nimport { NgtConstructorRepresentation, NgtEventHandlers, NgtInstanceNode, NgtInstanceState } from '../types';\nimport { applyProps } from '../utils/apply-props';\nimport { is } from '../utils/is';\nimport { injectCatalogue } from './catalogue';\nimport {\n\tNGT_CANVAS_CONTENT_FLAG,\n\tNGT_DELEGATE_RENDERER_DESTROY_NODE_PATCHED_FLAG,\n\tNGT_DOM_PARENT_FLAG,\n\tNGT_HTML_FLAG,\n\tNGT_INTERNAL_ADD_COMMENT_FLAG,\n\tNGT_INTERNAL_SET_PARENT_COMMENT_FLAG,\n\tNGT_PORTAL_CONTENT_FLAG,\n\tNGT_RENDERER_NODE_FLAG,\n\tTHREE_NATIVE_EVENTS,\n} from './constants';\nimport {\n\taddRendererChildNode,\n\tcreateRendererNode,\n\tisRendererNode,\n\tNgtRendererNode,\n\tsetRendererParentNode,\n} from './state';\nimport { attachThreeNodes, internalDestroyNode, kebabToPascal, NgtRendererClassId, removeThreeChild } from './utils';\n\nexport interface NgtRendererFactory2Options {\n\tverbose?: boolean;\n}\n\nexport const NGT_RENDERER_OPTIONS = new InjectionToken<NgtRendererFactory2Options>('NGT_RENDERER_OPTIONS');\n\n@Injectable()\nexport class NgtRendererFactory2 implements RendererFactory2 {\n\tprivate catalogue = injectCatalogue();\n\tprivate document = inject(DOCUMENT);\n\tprivate options = inject(NGT_RENDERER_OPTIONS, { optional: true }) || {};\n\tprivate rendererMap = new Map<string, Renderer2>();\n\n\t/**\n\t * NOTE: We use `useFactory` to instantiate `NgtRendererFactory2`\n\t */\n\tconstructor(private delegateRendererFactory: RendererFactory2) {}\n\n\tcreateRenderer(hostElement: any, type: RendererType2 | null): Renderer2 {\n\t\tconst delegateRenderer = this.delegateRendererFactory.createRenderer(hostElement, type);\n\t\tif (!type) return delegateRenderer;\n\n\t\tlet renderer = this.rendererMap.get(type.id);\n\t\tif (renderer) {\n\t\t\tif (renderer instanceof NgtRenderer2) {\n\t\t\t\trenderer.count += 1;\n\t\t\t\tif (renderer.delegateRenderer !== delegateRenderer) {\n\t\t\t\t\trenderer.delegateRenderer = delegateRenderer;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn renderer;\n\t\t}\n\n\t\tif (hostElement && !isRendererNode(hostElement)) {\n\t\t\tcreateRendererNode('platform', hostElement, this.document);\n\t\t}\n\n\t\tif (Reflect.get(type, 'type')?.[NGT_HTML_FLAG]) {\n\t\t\tthis.rendererMap.set(type.id, delegateRenderer);\n\n\t\t\t// patch delegate destroyNode so we can destroy this HTML node\n\t\t\t// TODO: make sure we really need to do this\n\t\t\tconst originalDestroyNode = delegateRenderer.destroyNode?.bind(delegateRenderer);\n\t\t\tif (!originalDestroyNode || !(NGT_DELEGATE_RENDERER_DESTROY_NODE_PATCHED_FLAG in originalDestroyNode)) {\n\t\t\t\tdelegateRenderer.destroyNode = (node) => {\n\t\t\t\t\toriginalDestroyNode?.(node);\n\t\t\t\t\tif (node !== hostElement) return;\n\t\t\t\t\tinternalDestroyNode(node, null);\n\t\t\t\t};\n\t\t\t\tObject.assign(delegateRenderer.destroyNode, {\n\t\t\t\t\t[NGT_DELEGATE_RENDERER_DESTROY_NODE_PATCHED_FLAG]: true,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn delegateRenderer;\n\t\t}\n\n\t\tthis.rendererMap.set(\n\t\t\ttype.id,\n\t\t\t(renderer = new NgtRenderer2(delegateRenderer, this.catalogue, this.document, this.options)),\n\t\t);\n\t\treturn renderer;\n\t}\n}\n\nexport class NgtRenderer2 implements Renderer2 {\n\tprivate argsInjectors: Array<Injector> = [];\n\tprivate parentInjectors: Array<Injector> = [];\n\tprivate portalInjectors: Array<Injector> = [];\n\n\tconstructor(\n\t\tpublic delegateRenderer: Renderer2,\n\t\tprivate catalogue: Record<string, NgtConstructorRepresentation>,\n\t\tprivate document: Document,\n\t\tprivate options: NgtRendererFactory2Options,\n\t\tpublic count = 1,\n\t) {\n\t\tif (!this.options.verbose) {\n\t\t\tthis.options.verbose = false;\n\t\t}\n\t}\n\n\tget data(): { [key: string]: any } {\n\t\treturn { ...this.delegateRenderer.data, __ngt_renderer__: true };\n\t}\n\n\tdestroy(): void {\n\t\tif (this.count > 1) {\n\t\t\tthis.count -= 1;\n\t\t\treturn;\n\t\t}\n\n\t\t// this is the last instance of the same NgtRenderer2\n\t\tthis.count = 0;\n\t\tthis.argsInjectors = [];\n\t\tthis.parentInjectors = [];\n\t\tthis.portalInjectors = [];\n\t}\n\n\tcreateElement(name: string, namespace?: string | null) {\n\t\tconst platformElement = this.delegateRenderer.createElement(name, namespace);\n\n\t\tif (name === 'ngt-portal') {\n\t\t\treturn createRendererNode('portal', platformElement, this.document);\n\t\t}\n\n\t\tif (name === 'ngt-value') {\n\t\t\treturn createRendererNode('three', prepare(platformElement, 'ngt-value'), this.document);\n\t\t}\n\n\t\tconst [injectedArgs, injectedParent] = [\n\t\t\tthis.getNgtDirective(NgtArgs, this.argsInjectors)?.value || [],\n\t\t\tthis.getNgtDirective(NgtParent, this.parentInjectors)?.value,\n\t\t];\n\n\t\tif (name === 'ngt-primitive') {\n\t\t\tif (!injectedArgs[0]) throw new Error(`[NGT] ngt-primitive without args is invalid`);\n\t\t\tconst object = injectedArgs[0];\n\t\t\tlet instanceState = getInstanceState(object);\n\t\t\tif (!instanceState || instanceState.type !== 'ngt-primitive') {\n\t\t\t\t// if an object isn't already \"prepared\", we'll prepare it\n\t\t\t\tprepare(object, 'ngt-primitive', instanceState);\n\t\t\t}\n\n\t\t\tconst primitiveRendererNode = createRendererNode('three', object, this.document);\n\t\t\tif (injectedParent) {\n\t\t\t\tprimitiveRendererNode.__ngt_renderer__[NgtRendererClassId.parent] =\n\t\t\t\t\tinjectedParent as unknown as NgtRendererNode<'three'>;\n\t\t\t}\n\n\t\t\treturn primitiveRendererNode;\n\t\t}\n\n\t\tconst threeName = kebabToPascal(name.startsWith('ngt-') ? name.slice(4) : name);\n\t\tconst threeTarget = this.catalogue[threeName];\n\n\t\tif (threeTarget) {\n\t\t\tconst threeInstance = prepare(new threeTarget(...injectedArgs), name);\n\t\t\tconst rendererNode = createRendererNode('three', threeInstance, this.document);\n\t\t\t// assert type here because it is just created so we don't have to null check it\n\t\t\tconst instanceState = getInstanceState(threeInstance) as NgtInstanceState;\n\n\t\t\t// auto-attach for geometry and material\n\t\t\tif (is.three<THREE.BufferGeometry>(threeInstance, 'isBufferGeometry')) {\n\t\t\t\tinstanceState.attach = ['geometry'];\n\t\t\t} else if (is.three<THREE.Material>(threeInstance, 'isMaterial')) {\n\t\t\t\tinstanceState.attach = ['material'];\n\t\t\t}\n\n\t\t\tif (injectedParent) {\n\t\t\t\trendererNode.__ngt_renderer__[NgtRendererClassId.parent] =\n\t\t\t\t\tinjectedParent as unknown as NgtRendererNode<'three'>;\n\t\t\t}\n\n\t\t\treturn rendererNode;\n\t\t}\n\n\t\treturn createRendererNode('platform', platformElement, this.document);\n\t}\n\n\tcreateComment(value: string) {\n\t\tconst commentNode = this.delegateRenderer.createComment(value);\n\n\t\tconst commentRendererNode = createRendererNode('comment', commentNode, this.document);\n\n\t\t// NOTE: we attach an arrow function to the Comment node\n\t\t// In our directives, we can call this function to then start tracking the RendererNode\n\t\t// this is done to limit the amount of Nodes we need to process for getCreationState\n\t\tObject.assign(commentRendererNode, {\n\t\t\t[NGT_INTERNAL_ADD_COMMENT_FLAG]: (type: 'args' | 'parent' | 'portal', injector: Injector) => {\n\t\t\t\tif (type === 'args') {\n\t\t\t\t\tthis.argsInjectors.push(injector);\n\t\t\t\t} else if (type === 'parent') {\n\t\t\t\t\tObject.assign(commentRendererNode, {\n\t\t\t\t\t\t[NGT_INTERNAL_SET_PARENT_COMMENT_FLAG]: (ngtParent: NgtRendererNode<'three'>) => {\n\t\t\t\t\t\t\tcommentRendererNode.__ngt_renderer__[NgtRendererClassId.parent] = ngtParent;\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tthis.parentInjectors.push(injector);\n\t\t\t\t} else if (type === 'portal') {\n\t\t\t\t\tthis.portalInjectors.push(injector);\n\t\t\t\t}\n\n\t\t\t\tcommentRendererNode.__ngt_renderer__[NgtRendererClassId.injector] = injector;\n\t\t\t},\n\t\t});\n\n\t\treturn commentRendererNode;\n\t}\n\n\tcreateText(value: string) {\n\t\tconst textNode = this.delegateRenderer.createText(value);\n\t\treturn createRendererNode('text', textNode, this.document);\n\t}\n\n\tdestroyNode: (node: NgtRendererNode) => void = (node) => {\n\t\tinternalDestroyNode(node, this.removeChild.bind(this));\n\t};\n\n\tappendChild(\n\t\tparent: NgtRendererNode,\n\t\tnewChild: NgtRendererNode,\n\t\trefChild?: NgtRendererNode,\n\t\tisMove?: boolean,\n\t): void {\n\t\tconst delegatedFn = refChild\n\t\t\t? this.delegateRenderer.insertBefore.bind(this.delegateRenderer, parent, newChild, refChild, isMove)\n\t\t\t: this.delegateRenderer.appendChild.bind(this.delegateRenderer, parent, newChild);\n\n\t\tconst pRS = parent.__ngt_renderer__;\n\t\tconst cRS = newChild.__ngt_renderer__;\n\n\t\tif (!pRS || !cRS) {\n\t\t\tthis.options.verbose &&\n\t\t\t\tconsole.warn('[NGT dev mode] One of parent or child is not a renderer node.', { parent, newChild });\n\t\t\treturn delegatedFn();\n\t\t}\n\n\t\tif (cRS[NgtRendererClassId.type] === 'comment') {\n\t\t\t// if child is a comment, we'll set the parent then bail.\n\t\t\t// comment usually means it's part of a templateRef ViewContainerRef or structural directive\n\t\t\tsetRendererParentNode(newChild, parent);\n\n\t\t\t// if parent is not three, we'll delegate to the renderer\n\t\t\tif (pRS[NgtRendererClassId.type] !== 'three') {\n\t\t\t\tdelegatedFn();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'platform' && cRS[NgtRendererClassId.type] === 'platform') {\n\t\t\tif (newChild[NGT_DOM_PARENT_FLAG] && newChild[NGT_DOM_PARENT_FLAG] instanceof HTMLElement) {\n\t\t\t\treturn this.delegateRenderer.appendChild(newChild[NGT_DOM_PARENT_FLAG], newChild);\n\t\t\t}\n\n\t\t\tif (pRS[NgtRendererClassId.parent] && !cRS[NgtRendererClassId.parent]) {\n\t\t\t\treturn this.appendChild(pRS[NgtRendererClassId.parent], newChild);\n\t\t\t}\n\n\t\t\treturn delegatedFn();\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'three' && cRS[NgtRendererClassId.type] === 'three') {\n\t\t\treturn this.appendThreeRendererNodes(parent, newChild);\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'platform' && cRS[NgtRendererClassId.type] === 'three') {\n\t\t\t// if platform has parent, delegate to that parent\n\t\t\tif (pRS[NgtRendererClassId.parent]) {\n\t\t\t\t// but track the child for this parent as well\n\t\t\t\taddRendererChildNode(parent, newChild);\n\t\t\t\treturn this.appendChild(pRS[NgtRendererClassId.parent], newChild);\n\t\t\t}\n\n\t\t\t// platform can also have normal parentNode\n\t\t\tconst platformParentNode = this.delegateRenderer.parentNode(parent);\n\t\t\tif (platformParentNode) {\n\t\t\t\treturn this.appendChild(platformParentNode, newChild);\n\t\t\t}\n\n\t\t\t// if not, set up parent and child relationship for this pair then bail\n\t\t\tthis.setNodeRelationship(parent, newChild);\n\t\t\treturn;\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'three' && cRS[NgtRendererClassId.type] === 'platform') {\n\t\t\tif (!cRS[NgtRendererClassId.parent]) {\n\t\t\t\tsetRendererParentNode(newChild, parent);\n\t\t\t}\n\n\t\t\tfor (const child of cRS[NgtRendererClassId.children]) {\n\t\t\t\tthis.appendChild(parent, child);\n\t\t\t}\n\n\t\t\tfor (const platformChildNode of newChild['childNodes'] || []) {\n\t\t\t\tif (\n\t\t\t\t\t!isRendererNode(platformChildNode) ||\n\t\t\t\t\tplatformChildNode.__ngt_renderer__[NgtRendererClassId.type] !== 'platform'\n\t\t\t\t)\n\t\t\t\t\tcontinue;\n\t\t\t\tthis.appendChild(parent, platformChildNode);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'portal' && cRS[NgtRendererClassId.type] === 'three') {\n\t\t\tif (!cRS[NgtRendererClassId.parent] && pRS[NgtRendererClassId.portalContainer]) {\n\t\t\t\treturn this.appendChild(pRS[NgtRendererClassId.portalContainer], newChild);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'platform' && cRS[NgtRendererClassId.type] === 'portal') {\n\t\t\treturn this.delegateRenderer.appendChild(parent, newChild);\n\t\t}\n\n\t\treturn delegatedFn();\n\t}\n\n\tinsertBefore(\n\t\tparent: NgtRendererNode,\n\t\tnewChild: NgtRendererNode,\n\t\trefChild: NgtRendererNode,\n\t\tisMove?: boolean,\n\t): void {\n\t\t// if both are comments and the reference child is NgtCanvasContent, we'll assign the same flag to the newChild\n\t\t// this means that the NgtCanvas component is embedding. This flag allows the Renderer to get the root scene\n\t\t// when it tries to attach the template under `ng-template[canvasContent]`\n\t\tif (\n\t\t\trefChild &&\n\t\t\trefChild[NGT_CANVAS_CONTENT_FLAG] &&\n\t\t\trefChild instanceof Comment &&\n\t\t\tnewChild instanceof Comment\n\t\t) {\n\t\t\tObject.assign(newChild, { [NGT_CANVAS_CONTENT_FLAG]: refChild[NGT_CANVAS_CONTENT_FLAG] });\n\t\t}\n\n\t\t// if there is no parent, we delegate\n\t\tif (!parent) {\n\t\t\treturn this.delegateRenderer.insertBefore(parent, newChild, refChild, isMove);\n\t\t}\n\n\t\treturn this.appendChild(parent, newChild, refChild, isMove);\n\t}\n\n\tremoveChild(parent: NgtRendererNode, oldChild: NgtRendererNode, isHostElement?: boolean): void {\n\t\tif (parent === null) {\n\t\t\tparent = this.parentNode(oldChild);\n\t\t}\n\n\t\tconst cRS = oldChild.__ngt_renderer__;\n\n\t\tif (!cRS) {\n\t\t\ttry {\n\t\t\t\treturn this.delegateRenderer.removeChild(parent, oldChild, isHostElement);\n\t\t\t} catch {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// disassociate things from oldChild\n\t\tcRS[NgtRendererClassId.parent] = null;\n\n\t\t// if parent is still undefined\n\t\tif (parent == null) {\n\t\t\tif (cRS[NgtRendererClassId.destroyed]) {\n\t\t\t\t// if the child is already destroyed, just skip\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.options.verbose &&\n\t\t\t\tconsole.warn('[NGT dev mode] parent is not found when remove child', { parent, oldChild });\n\t\t\treturn;\n\t\t}\n\n\t\tconst pRS = parent.__ngt_renderer__;\n\n\t\tif (!pRS) {\n\t\t\treturn this.delegateRenderer.removeChild(parent, oldChild, isHostElement);\n\t\t}\n\n\t\tconst childIndex = pRS[NgtRendererClassId.children].indexOf(oldChild);\n\t\tif (childIndex >= 0) {\n\t\t\t// disassociate oldChild from parent children\n\t\t\tpRS[NgtRendererClassId.children].splice(childIndex, 1);\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'three' && cRS[NgtRendererClassId.type] === 'three') {\n\t\t\treturn removeThreeChild(oldChild as unknown as NgtInstanceNode, parent as unknown as NgtInstanceNode, true);\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'platform' && cRS[NgtRendererClassId.type] === 'platform') {\n\t\t\treturn this.delegateRenderer.removeChild(parent, oldChild, isHostElement);\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'three' && cRS[NgtRendererClassId.type] === 'platform') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'platform' && cRS[NgtRendererClassId.type] === 'three') {\n\t\t\tconst childLS = getInstanceState(oldChild);\n\t\t\tif (!childLS) return;\n\n\t\t\tconst threeParent = childLS.parent ? untracked(childLS.parent) : null;\n\t\t\tif (!threeParent) return;\n\n\t\t\treturn this.removeChild(threeParent as unknown as NgtRendererNode, oldChild);\n\t\t}\n\n\t\treturn this.delegateRenderer.removeChild(parent, oldChild, isHostElement);\n\t}\n\n\tparentNode(node: NgtRendererNode) {\n\t\tif (\n\t\t\tnode &&\n\t\t\t(node[NGT_CANVAS_CONTENT_FLAG] || node[NGT_PORTAL_CONTENT_FLAG]) &&\n\t\t\tnode instanceof Comment &&\n\t\t\tisRendererNode(node)\n\t\t) {\n\t\t\tconst store = node[NGT_CANVAS_CONTENT_FLAG] || node[NGT_PORTAL_CONTENT_FLAG];\n\n\t\t\t// this should not happen but if it does, we'll delegate to the renderer\n\t\t\tif (!store) {\n\t\t\t\treturn this.delegateRenderer.parentNode(node);\n\t\t\t}\n\n\t\t\tconst rootScene = store.snapshot.scene;\n\n\t\t\t// if we don't have the scene yet, bail again\n\t\t\tif (!rootScene) {\n\t\t\t\treturn this.delegateRenderer.parentNode(node);\n\t\t\t}\n\n\t\t\t// if root scene is not a renderer node, we'll make it a renderer node here\n\t\t\tif (!(NGT_RENDERER_NODE_FLAG in rootScene)) {\n\t\t\t\tconst sceneRendererNode = createRendererNode('three', rootScene, this.document);\n\t\t\t\t// set parent to the comment too\n\t\t\t\tsetRendererParentNode(node, sceneRendererNode);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tnode[NGT_PORTAL_CONTENT_FLAG] &&\n\t\t\t\tnode[NGT_DOM_PARENT_FLAG] &&\n\t\t\t\tisRendererNode(node[NGT_DOM_PARENT_FLAG])\n\t\t\t) {\n\t\t\t\tconst portalContentParent = node[NGT_DOM_PARENT_FLAG] as NgtRendererNode<'portal'>;\n\t\t\t\tconst portalContentParentRS = portalContentParent.__ngt_renderer__;\n\t\t\t\tif (!portalContentParentRS[NgtRendererClassId.portalContainer]) {\n\t\t\t\t\tportalContentParentRS[NgtRendererClassId.portalContainer] = rootScene;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn rootScene;\n\t\t}\n\n\t\tconst rendererParentNode = node.__ngt_renderer__?.[NgtRendererClassId.parent];\n\t\t// returns the renderer parent node if it exists, otherwise returns the delegateRenderer parentNode\n\t\treturn rendererParentNode ?? this.delegateRenderer.parentNode(node);\n\t}\n\n\tremoveAttribute(el: NgtRendererNode, name: string, namespace?: string | null): void {\n\t\tconst rS = el.__ngt_renderer__;\n\t\tif (!rS || rS[NgtRendererClassId.destroyed]) return this.delegateRenderer.removeAttribute(el, name, namespace);\n\n\t\tif (rS[NgtRendererClassId.type] === 'three') {\n\t\t\treturn;\n\t\t}\n\t\treturn this.delegateRenderer.removeAttribute(el, name, namespace);\n\t}\n\n\tsetAttribute(el: NgtRendererNode, name: string, value: string, namespace?: string | null): void {\n\t\tconst rS = el.__ngt_renderer__;\n\t\tif (!rS) return this.delegateRenderer.setAttribute(el, name, value, namespace);\n\n\t\tif (rS[NgtRendererClassId.destroyed]) {\n\t\t\tthis.options.verbose &&\n\t\t\t\tconsole.warn(`[NGT dev mode] setAttribute is invoked on destroyed renderer node.`, { el, name, value });\n\t\t\treturn;\n\t\t}\n\n\t\tif (rS[NgtRendererClassId.type] === 'three') {\n\t\t\tif (name === 'attach') {\n\t\t\t\tconst paths = value.split('.');\n\t\t\t\tif (paths.length) {\n\t\t\t\t\tconst instanceState = getInstanceState(el);\n\t\t\t\t\tif (instanceState) instanceState.attach = paths;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// coercion for primitive values\n\t\t\tlet maybeCoerced: string | number | boolean = value;\n\n\t\t\tif (maybeCoerced === '' || maybeCoerced === 'true' || maybeCoerced === 'false') {\n\t\t\t\tmaybeCoerced = maybeCoerced === 'true' || maybeCoerced === '';\n\t\t\t} else {\n\t\t\t\tconst maybeNumber = Number(maybeCoerced);\n\t\t\t\tif (!isNaN(maybeNumber)) maybeCoerced = maybeNumber;\n\t\t\t}\n\n\t\t\tif (name === 'rawValue') {\n\t\t\t\trS[NgtRendererClassId.rawValue] = maybeCoerced;\n\t\t\t} else {\n\t\t\t\tapplyProps(el, { [name]: maybeCoerced });\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.delegateRenderer.setAttribute(el, name, value, namespace);\n\t}\n\n\tsetProperty(el: NgtRendererNode, name: string, value: any): void {\n\t\t// NOTE: untrack all signal updates because this is during setProperty which is a reactive context\n\t\t// attaching potentially updates signals which is not allowed\n\n\t\tconst rS = el.__ngt_renderer__;\n\n\t\tif (!rS || rS[NgtRendererClassId.destroyed]) {\n\t\t\tthis.options.verbose &&\n\t\t\t\tconsole.warn('[NGT dev mode] setProperty is invoked on destroyed renderer node.', { el, name, value });\n\t\t\treturn;\n\t\t}\n\n\t\tif (rS[NgtRendererClassId.type] === 'three') {\n\t\t\tconst instanceState = getInstanceState(el);\n\n\t\t\tif (name === 'parameters') {\n\t\t\t\t// NOTE: short-cut for null raycast to prevent upstream from creating a nullRaycast property\n\t\t\t\tif ('raycast' in value && value['raycast'] === null) {\n\t\t\t\t\tvalue['raycast'] = () => null;\n\t\t\t\t}\n\n\t\t\t\tapplyProps(el, value);\n\n\t\t\t\tif ('geometry' in value && is.three<THREE.BufferGeometry>(value['geometry'], 'isBufferGeometry')) {\n\t\t\t\t\tuntracked(() => {\n\t\t\t\t\t\tinstanceState?.updateGeometryStamp();\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst parent = instanceState?.hierarchyStore.snapshot.parent || rS[NgtRendererClassId.parent];\n\n\t\t\t// [rawValue]\n\t\t\tif (instanceState?.type === 'ngt-value' && name === 'rawValue') {\n\t\t\t\trS[NgtRendererClassId.rawValue] = value;\n\t\t\t\tif (parent) {\n\t\t\t\t\tuntracked(() => attachThreeNodes(parent, el as unknown as NgtInstanceNode));\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// [attach]\n\t\t\tif (name === 'attach') {\n\t\t\t\tif (instanceState)\n\t\t\t\t\tinstanceState.attach = Array.isArray(value)\n\t\t\t\t\t\t? value.map((v) => v.toString())\n\t\t\t\t\t\t: typeof value === 'function'\n\t\t\t\t\t\t\t? value\n\t\t\t\t\t\t\t: typeof value === 'string'\n\t\t\t\t\t\t\t\t? value.split('.')\n\t\t\t\t\t\t\t\t: [value];\n\t\t\t\tif (parent) {\n\t\t\t\t\tuntracked(() => attachThreeNodes(parent, el as unknown as NgtInstanceNode));\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// NOTE: short-cut for null raycast to prevent upstream from creating a nullRaycast property\n\t\t\tif (name === 'raycast' && value === null) {\n\t\t\t\tvalue = () => null;\n\t\t\t}\n\n\t\t\tapplyProps(el, { [name]: value });\n\n\t\t\tif (instanceState && name === 'geometry' && is.three<THREE.BufferGeometry>(value, 'isBufferGeometry')) {\n\t\t\t\tuntracked(() => {\n\t\t\t\t\tinstanceState.updateGeometryStamp();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.delegateRenderer.setProperty(el, name, value);\n\t}\n\n\tlisten(\n\t\ttarget: 'window' | 'document' | 'body' | NgtRendererNode,\n\t\teventName: string,\n\t\tcallback: (event: any) => boolean | void,\n\t): () => void {\n\t\tif (typeof target === 'string') {\n\t\t\treturn this.delegateRenderer.listen(target, eventName, callback);\n\t\t}\n\n\t\tconst rS = target.__ngt_renderer__;\n\t\tif (!rS) {\n\t\t\treturn this.delegateRenderer.listen(target, eventName, callback);\n\t\t}\n\n\t\tif (rS[NgtRendererClassId.destroyed]) return () => {};\n\n\t\tif (rS[NgtRendererClassId.type] === 'three') {\n\t\t\tconst iS = getInstanceState(target);\n\t\t\tif (!iS) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'[NGT] instance which has not been prepared cannot have events. Call `prepare()` manually if needed.',\n\t\t\t\t);\n\t\t\t\treturn () => {};\n\t\t\t}\n\n\t\t\tif (eventName === 'created') {\n\t\t\t\tcallback(target);\n\t\t\t\treturn () => {};\n\t\t\t}\n\n\t\t\tif (eventName === 'attached') {\n\t\t\t\tiS.onAttach = callback;\n\t\t\t\tconst parent = iS.parent && untracked(iS.parent);\n\t\t\t\tif (parent) iS.onAttach({ parent, node: target as unknown as NgtInstanceNode });\n\t\t\t\treturn () => {\n\t\t\t\t\tiS.onAttach = undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (eventName === 'updated') {\n\t\t\t\tiS.onUpdate = callback;\n\t\t\t\treturn () => {\n\t\t\t\t\tiS.onUpdate = undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (THREE_NATIVE_EVENTS.includes(eventName) && target instanceof THREE.EventDispatcher) {\n\t\t\t\t// NOTE: rename to dispose because that's the event type, not disposed.\n\t\t\t\tif (eventName === 'disposed') {\n\t\t\t\t\teventName = 'dispose';\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t(target as unknown as THREE.Object3D).parent &&\n\t\t\t\t\t(eventName === 'added' || eventName === 'removed')\n\t\t\t\t) {\n\t\t\t\t\tcallback({ type: eventName, target });\n\t\t\t\t}\n\n\t\t\t\ttarget.addEventListener(eventName, callback);\n\t\t\t\treturn () => {\n\t\t\t\t\ttarget.removeEventListener(eventName, callback);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst cleanup = iS.setPointerEvent?.(eventName as keyof NgtEventHandlers, callback) || (() => {});\n\n\t\t\t// this means the object has already been attached to the parent and has its store propagated\n\t\t\tif (iS.store) {\n\t\t\t\tiS.addInteraction?.(iS.store);\n\t\t\t}\n\n\t\t\treturn cleanup;\n\t\t}\n\n\t\treturn this.delegateRenderer.listen(target, eventName, callback);\n\t}\n\n\tprivate appendThreeRendererNodes(parent: NgtRendererNode, child: NgtRendererNode) {\n\t\t// if parent and child are the same, skip\n\t\tif (parent === child) {\n\t\t\tthis.options.verbose &&\n\t\t\t\tconsole.warn('[NGT dev mode] appending THREE.js parent and child but they are the same', {\n\t\t\t\t\tparent,\n\t\t\t\t\tchild,\n\t\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst cIS = getInstanceState(child);\n\n\t\t// if child is already attached to a parent, skip\n\t\tif (cIS?.hierarchyStore.snapshot.parent) {\n\t\t\tthis.options.verbose &&\n\t\t\t\tconsole.warn('[NGT dev mode] appending THREE.js parent and child but child is already attached', {\n\t\t\t\t\tparent,\n\t\t\t\t\tchild,\n\t\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// set the relationship\n\t\tthis.setNodeRelationship(parent, child);\n\n\t\t// attach THREE child\n\t\tattachThreeNodes(parent as unknown as NgtInstanceNode, child as unknown as NgtInstanceNode);\n\t\treturn;\n\t}\n\n\tprivate setNodeRelationship(parent: NgtRendererNode, child: NgtRendererNode) {\n\t\tsetRendererParentNode(child, parent);\n\t\taddRendererChildNode(parent, child);\n\t}\n\n\tprivate getNgtDirective<TDirective extends NgtCommonDirective<any>>(\n\t\tdirective: Type<TDirective>,\n\t\tinjectors: Array<Injector>,\n\t) {\n\t\tlet directiveInstance: TDirective | undefined;\n\n\t\tlet i = injectors.length - 1;\n\t\twhile (i >= 0) {\n\t\t\tconst injector = injectors[i];\n\t\t\tconst instance = injector.get(directive, null);\n\t\t\tif (instance && typeof instance === 'object' && instance.validate()) {\n\t\t\t\tdirectiveInstance = instance;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ti--;\n\t\t}\n\n\t\treturn directiveInstance;\n\t}\n\n\taddClass = this.delegateRenderer.addClass.bind(this.delegateRenderer);\n\tremoveClass = this.delegateRenderer.removeClass.bind(this.delegateRenderer);\n\tsetStyle = this.delegateRenderer.setStyle.bind(this.delegateRenderer);\n\tremoveStyle = this.delegateRenderer.removeStyle.bind(this.delegateRenderer);\n\tselectRootElement = this.delegateRenderer.selectRootElement.bind(this.delegateRenderer);\n\tnextSibling = this.delegateRenderer.nextSibling.bind(this.delegateRenderer);\n\tsetValue = this.delegateRenderer.setValue.bind(this.delegateRenderer);\n}\n","import { Injector } from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { prepare } from './instance';\nimport { injectLoop, roots } from './loop';\nimport { injectStore } from './store';\nimport type { NgtCanvasElement, NgtCanvasOptions, NgtDisposable, NgtEquConfig, NgtSize, NgtState } from './types';\nimport { applyProps } from './utils/apply-props';\nimport { is } from './utils/is';\nimport { makeCameraInstance, makeDpr, makeRendererInstance } from './utils/make';\nimport { checkNeedsUpdate } from './utils/update';\n\nconst shallowLoose = { objects: 'shallow', strict: false } as NgtEquConfig;\n\nexport function injectCanvasRootInitializer(injector?: Injector) {\n\treturn assertInjector(injectCanvasRootInitializer, injector, () => {\n\t\tconst injectedStore = injectStore();\n\t\tconst loop = injectLoop();\n\n\t\treturn (canvas: NgtCanvasElement) => {\n\t\t\tconst exist = roots.has(canvas);\n\t\t\tlet store = roots.get(canvas);\n\n\t\t\tif (store) {\n\t\t\t\tconsole.warn('[NGT] Same canvas root is being created twice');\n\t\t\t}\n\n\t\t\tstore ||= injectedStore;\n\n\t\t\tif (!store) {\n\t\t\t\tthrow new Error('[NGT] No store initialized');\n\t\t\t}\n\n\t\t\tif (!exist) {\n\t\t\t\troots.set(canvas, store);\n\t\t\t}\n\n\t\t\tlet isConfigured = false;\n\t\t\tlet lastCamera: NgtCanvasOptions['camera'];\n\n\t\t\treturn {\n\t\t\t\tisConfigured,\n\t\t\t\tdestroy: (timeout = 500) => {\n\t\t\t\t\tconst root = roots.get(canvas);\n\t\t\t\t\tif (root) {\n\t\t\t\t\t\troot.update((state) => ({ internal: { ...state.internal, active: false } }));\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst state = root.snapshot;\n\t\t\t\t\t\t\t\tstate.events.disconnect?.();\n\n\t\t\t\t\t\t\t\tstate.gl?.renderLists?.dispose?.();\n\t\t\t\t\t\t\t\tstate.gl?.dispose?.();\n\t\t\t\t\t\t\t\tstate.gl?.forceContextLoss?.();\n\t\t\t\t\t\t\t\tif (state.gl?.xr) state.xr.disconnect();\n\t\t\t\t\t\t\t\tdispose(state.scene);\n\t\t\t\t\t\t\t\troots.delete(canvas);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\tconsole.error('[NGT] Unexpected error while destroying Canvas Root', e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, timeout);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tconfigure: (inputs: NgtCanvasOptions) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tshadows = false,\n\t\t\t\t\t\tlinear = false,\n\t\t\t\t\t\tflat = false,\n\t\t\t\t\t\tlegacy = false,\n\t\t\t\t\t\torthographic = false,\n\t\t\t\t\t\tframeloop = 'always',\n\t\t\t\t\t\tdpr = [1, 2],\n\t\t\t\t\t\tgl: glOptions,\n\t\t\t\t\t\tsize: sizeOptions,\n\t\t\t\t\t\tcamera: cameraOptions,\n\t\t\t\t\t\traycaster: raycasterOptions,\n\t\t\t\t\t\tscene: sceneOptions,\n\t\t\t\t\t\tevents,\n\t\t\t\t\t\tlookAt,\n\t\t\t\t\t\tperformance,\n\t\t\t\t\t} = inputs;\n\n\t\t\t\t\tconst state = store.snapshot;\n\t\t\t\t\tconst stateToUpdate: Partial<NgtState> = {};\n\n\t\t\t\t\t// setup renderer\n\t\t\t\t\tlet gl = state.gl;\n\t\t\t\t\tif (!state.gl) stateToUpdate.gl = gl = makeRendererInstance(glOptions, canvas);\n\n\t\t\t\t\t// setup raycaster\n\t\t\t\t\tlet raycaster = state.raycaster;\n\t\t\t\t\tif (!raycaster) stateToUpdate.raycaster = raycaster = new THREE.Raycaster();\n\n\t\t\t\t\t// set raycaster options\n\t\t\t\t\tconst { params, ...options } = raycasterOptions || {};\n\t\t\t\t\tif (!is.equ(options, raycaster, shallowLoose)) applyProps(raycaster, options);\n\t\t\t\t\tif (!is.equ(params, raycaster.params, shallowLoose)) {\n\t\t\t\t\t\tapplyProps(raycaster, { params: { ...raycaster.params, ...(params || {}) } });\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create default camera, don't overwrite any user-set state\n\t\t\t\t\tif (\n\t\t\t\t\t\t!state.camera ||\n\t\t\t\t\t\t(state.camera === lastCamera && !is.equ(lastCamera, cameraOptions, shallowLoose))\n\t\t\t\t\t) {\n\t\t\t\t\t\tlastCamera = cameraOptions;\n\t\t\t\t\t\tconst isCamera = is.three<THREE.Camera>(cameraOptions, 'isCamera');\n\t\t\t\t\t\tlet camera = isCamera\n\t\t\t\t\t\t\t? cameraOptions\n\t\t\t\t\t\t\t: makeCameraInstance(orthographic, sizeOptions ?? state.size);\n\n\t\t\t\t\t\tif (!isCamera) {\n\t\t\t\t\t\t\tcamera.position.z = 5;\n\t\t\t\t\t\t\tif (cameraOptions) {\n\t\t\t\t\t\t\t\tapplyProps(camera, cameraOptions);\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t'aspect' in cameraOptions ||\n\t\t\t\t\t\t\t\t\t'left' in cameraOptions ||\n\t\t\t\t\t\t\t\t\t'right' in cameraOptions ||\n\t\t\t\t\t\t\t\t\t'top' in cameraOptions ||\n\t\t\t\t\t\t\t\t\t'bottom' in cameraOptions\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tObject.assign(camera, { manual: true });\n\t\t\t\t\t\t\t\t\tcamera?.updateProjectionMatrix();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// always look at center or passed-in lookAt by default\n\t\t\t\t\t\t\tif (!state.camera && !cameraOptions?.rotation && !cameraOptions?.quaternion) {\n\t\t\t\t\t\t\t\tif (Array.isArray(lookAt)) camera.lookAt(lookAt[0], lookAt[1], lookAt[2]);\n\t\t\t\t\t\t\t\telse if (typeof lookAt === 'number') camera.lookAt(lookAt, lookAt, lookAt);\n\t\t\t\t\t\t\t\telse if (lookAt?.isVector3) camera.lookAt(lookAt);\n\t\t\t\t\t\t\t\telse camera.lookAt(0, 0, 0);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// update projection matrix after applyprops\n\t\t\t\t\t\t\tcamera.updateProjectionMatrix?.();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!is.instance(camera)) camera = prepare(camera, '', { store });\n\n\t\t\t\t\t\tstateToUpdate.camera = camera;\n\n\t\t\t\t\t\t// Configure raycaster\n\t\t\t\t\t\t// https://github.com/pmndrs/react-xr/issues/300\n\t\t\t\t\t\traycaster.camera = camera;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set up scene (one time only!)\n\t\t\t\t\tif (!state.scene) {\n\t\t\t\t\t\tlet scene: THREE.Scene;\n\n\t\t\t\t\t\tif (is.three<THREE.Scene>(sceneOptions, 'isScene')) {\n\t\t\t\t\t\t\tscene = sceneOptions;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tscene = new THREE.Scene();\n\t\t\t\t\t\t\tif (sceneOptions) applyProps(scene, sceneOptions);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tapplyProps(scene, {\n\t\t\t\t\t\t\tname: '__ngt_root_scene__',\n\t\t\t\t\t\t\tsetAttribute: (name: string, value: string) => {\n\t\t\t\t\t\t\t\tif (canvas instanceof HTMLCanvasElement) {\n\t\t\t\t\t\t\t\t\tif (canvas.parentElement) {\n\t\t\t\t\t\t\t\t\t\tcanvas.parentElement.setAttribute(name, value);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcanvas.setAttribute(name, value);\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},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tstateToUpdate.scene = prepare(scene, 'ngt-scene', { store });\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set up XR (one time only!)\n\t\t\t\t\tif (!state.xr) {\n\t\t\t\t\t\t// Handle frame behavior in WebXR\n\t\t\t\t\t\tconst handleXRFrame: XRFrameRequestCallback = (timestamp: number, frame?: XRFrame) => {\n\t\t\t\t\t\t\tconst state = store.snapshot;\n\t\t\t\t\t\t\tif (state.frameloop === 'never') return;\n\t\t\t\t\t\t\tloop.advance(timestamp, true, store, frame);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// Toggle render switching on session\n\t\t\t\t\t\tconst handleSessionChange = () => {\n\t\t\t\t\t\t\tconst state = store.snapshot;\n\t\t\t\t\t\t\tstate.gl.xr.enabled = state.gl.xr.isPresenting;\n\t\t\t\t\t\t\tstate.gl.xr.setAnimationLoop(state.gl.xr.isPresenting ? handleXRFrame : null);\n\t\t\t\t\t\t\tif (!state.gl.xr.isPresenting) loop.invalidate(store);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// WebXR session manager\n\t\t\t\t\t\tconst xr = {\n\t\t\t\t\t\t\tconnect: () => {\n\t\t\t\t\t\t\t\tgl.xr.addEventListener('sessionstart', handleSessionChange);\n\t\t\t\t\t\t\t\tgl.xr.addEventListener('sessionend', handleSessionChange);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdisconnect: () => {\n\t\t\t\t\t\t\t\tgl.xr.removeEventListener('sessionstart', handleSessionChange);\n\t\t\t\t\t\t\t\tgl.xr.removeEventListener('sessionend', handleSessionChange);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// Subscribe to WebXR session events\n\t\t\t\t\t\tif (gl.xr && typeof gl.xr.addEventListener === 'function') xr.connect();\n\t\t\t\t\t\tstateToUpdate.xr = xr;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set shadowmap\n\t\t\t\t\tif (gl.shadowMap) {\n\t\t\t\t\t\tconst oldEnabled = gl.shadowMap.enabled;\n\t\t\t\t\t\tconst oldType = gl.shadowMap.type;\n\t\t\t\t\t\tgl.shadowMap.enabled = !!shadows;\n\n\t\t\t\t\t\tif (typeof shadows === 'boolean') {\n\t\t\t\t\t\t\tgl.shadowMap.type = THREE.PCFSoftShadowMap;\n\t\t\t\t\t\t} else if (typeof shadows === 'string') {\n\t\t\t\t\t\t\tconst types = {\n\t\t\t\t\t\t\t\tbasic: THREE.BasicShadowMap,\n\t\t\t\t\t\t\t\tpercentage: THREE.PCFShadowMap,\n\t\t\t\t\t\t\t\tsoft: THREE.PCFSoftShadowMap,\n\t\t\t\t\t\t\t\tvariance: THREE.VSMShadowMap,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tgl.shadowMap.type = types[shadows] ?? THREE.PCFSoftShadowMap;\n\t\t\t\t\t\t} else if (is.obj(shadows)) {\n\t\t\t\t\t\t\tObject.assign(gl.shadowMap, shadows);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (oldEnabled !== gl.shadowMap.enabled || oldType !== gl.shadowMap.type)\n\t\t\t\t\t\t\tcheckNeedsUpdate(gl.shadowMap);\n\t\t\t\t\t}\n\n\t\t\t\t\tTHREE.ColorManagement.enabled = !legacy;\n\n\t\t\t\t\tif (!isConfigured) {\n\t\t\t\t\t\t// set color space and tonemapping preferences once\n\t\t\t\t\t\tapplyProps(gl, {\n\t\t\t\t\t\t\toutputColorSpace: linear ? THREE.LinearSRGBColorSpace : THREE.SRGBColorSpace,\n\t\t\t\t\t\t\ttoneMapping: flat ? THREE.NoToneMapping : THREE.ACESFilmicToneMapping,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update color management state\n\t\t\t\t\tif (state.legacy !== legacy) stateToUpdate.legacy = legacy;\n\t\t\t\t\tif (state.linear !== linear) stateToUpdate.linear = linear;\n\t\t\t\t\tif (state.flat !== flat) stateToUpdate.flat = flat;\n\n\t\t\t\t\t// Set gl props\n\t\t\t\t\tif (gl.setClearAlpha) {\n\t\t\t\t\t\tgl.setClearAlpha(0);\n\t\t\t\t\t}\n\t\t\t\t\tgl.setPixelRatio(makeDpr(state.viewport.dpr));\n\t\t\t\t\tgl.setSize(sizeOptions?.width ?? state.size.width, sizeOptions?.height ?? state.size.height);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tis.obj(glOptions) &&\n\t\t\t\t\t\t!(typeof glOptions === 'function') &&\n\t\t\t\t\t\t!is.renderer(glOptions) &&\n\t\t\t\t\t\t!is.equ(glOptions, gl, shallowLoose)\n\t\t\t\t\t) {\n\t\t\t\t\t\tapplyProps(gl, glOptions);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Store events internally\n\t\t\t\t\tif (events && !state.events.handlers) stateToUpdate.events = events(store);\n\n\t\t\t\t\t// Check performance\n\t\t\t\t\tif (performance && !is.equ(performance, state.performance, shallowLoose)) {\n\t\t\t\t\t\tstateToUpdate.performance = { ...state.performance, ...performance };\n\t\t\t\t\t}\n\n\t\t\t\t\tif (Object.keys(stateToUpdate).length) {\n\t\t\t\t\t\tstore.update(stateToUpdate);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check size, allow it to take on container bounds initially\n\t\t\t\t\tconst size = computeInitialSize(canvas, sizeOptions);\n\t\t\t\t\tif (!is.equ(size, state.size, shallowLoose)) {\n\t\t\t\t\t\tstate.setSize(size.width, size.height, size.top, size.left);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check pixelratio\n\t\t\t\t\tif (dpr && state.viewport.dpr !== makeDpr(dpr)) state.setDpr(dpr);\n\t\t\t\t\t// Check frameloop\n\t\t\t\t\tif (state.frameloop !== frameloop) state.setFrameloop(frameloop);\n\n\t\t\t\t\tisConfigured = true;\n\t\t\t\t},\n\t\t\t};\n\t\t};\n\t});\n}\n\nexport type NgtCanvasConfigurator = ReturnType<ReturnType<typeof injectCanvasRootInitializer>>;\n\nfunction computeInitialSize(canvas: NgtCanvasElement, defaultSize?: NgtSize): NgtSize {\n\tif (defaultSize) return defaultSize;\n\n\tif (typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement && canvas.parentElement) {\n\t\treturn canvas.parentElement.getBoundingClientRect();\n\t}\n\n\tif (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n\t\treturn { width: canvas.width, height: canvas.height, top: 0, left: 0 };\n\t}\n\n\treturn { width: 0, height: 0, top: 0, left: 0 };\n}\n\n// Disposes an object and all its properties\nexport function dispose<T extends NgtDisposable>(obj: T): void {\n\tif (obj.type !== 'Scene') obj.dispose?.();\n\tfor (const p in obj) {\n\t\tconst prop = obj[p] as NgtDisposable | undefined;\n\t\tif (prop?.type !== 'Scene') prop?.dispose?.();\n\t}\n}\n","import { ChangeDetectorRef, Component, effect } from '@angular/core';\nimport { ActivationEnd, Router, RouterOutlet } from '@angular/router';\nimport { filter } from 'rxjs';\n\n@Component({\n\tselector: 'ngt-routed-scene',\n\ttemplate: `\n\t\t<router-outlet />\n\t`,\n\timports: [RouterOutlet],\n})\nexport class NgtRoutedScene {\n\tconstructor(router: Router, cdr: ChangeDetectorRef) {\n\t\teffect((onCleanup) => {\n\t\t\tconst sub = router.events\n\t\t\t\t.pipe(filter((event) => event instanceof ActivationEnd))\n\t\t\t\t.subscribe(cdr.detectChanges.bind(cdr));\n\t\t\tonCleanup(() => sub.unsubscribe());\n\t\t});\n\t}\n}\n","import { DestroyRef, effect, inject, Injector } from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { injectStore } from '../store';\nimport type { NgtBeforeRenderRecord } from '../types';\n\n/**\n * `injectBeforeRender` invokes its callback on every frame. Hence, the notion of tracking\n * changes (i.e: signals) does not really matter since we're getting latest values of the things we need on every frame anyway.\n *\n * If `priority` is a Signal, `injectBeforeRender` will set up an Effect internally and returns the `EffectRef#destroy` instead.\n *\n * @example\n * ```ts\n * const destroy = injectBeforeRender(\n * ({ gl, camera }) => {\n * // before render logic\n * },\n * {\n * priority: this.priority, // this.priority is a Signal<number>\n * }\n * )\n * ```\n */\nexport function injectBeforeRender(\n\tcb: NgtBeforeRenderRecord['callback'],\n\t{ priority = 0, injector }: { priority?: number | (() => number); injector?: Injector } = {},\n) {\n\tif (typeof priority === 'function') {\n\t\tconst effectRef = assertInjector(injectBeforeRender, injector, () => {\n\t\t\tconst store = injectStore();\n\t\t\tconst ref = effect((onCleanup) => {\n\t\t\t\tconst p = priority();\n\t\t\t\tconst sub = store.snapshot.internal.subscribe(cb, p, store);\n\t\t\t\tonCleanup(() => sub());\n\t\t\t});\n\n\t\t\tinject(DestroyRef).onDestroy(() => void ref.destroy());\n\n\t\t\treturn ref;\n\t\t});\n\n\t\treturn effectRef.destroy.bind(effectRef);\n\t}\n\n\treturn assertInjector(injectBeforeRender, injector, () => {\n\t\tconst store = injectStore();\n\t\tconst sub = store.snapshot.internal.subscribe(cb, priority, store);\n\t\tinject(DestroyRef).onDestroy(() => void sub());\n\t\treturn sub;\n\t});\n}\n","import {\n\tcomputed,\n\tDestroyRef,\n\tDirective,\n\teffect,\n\tElementRef,\n\tinject,\n\tInjector,\n\tmodel,\n\toutput,\n\tRenderer2,\n} from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport type * as THREE from 'three';\nimport type { NgtEventHandlers, NgtThreeEvent } from '../types';\nimport { is } from './is';\nimport { resolveRef } from './resolve-ref';\n\n@Directive({ selector: '[ngtObjectEvents]' })\n/**\n * As host directive:\n * - outputs: [\n 'click',\n 'dblclick',\n 'contextmenu',\n 'pointerup',\n 'pointerdown',\n 'pointerover',\n 'pointerout',\n 'pointerenter',\n 'pointerleave',\n 'pointermove',\n 'pointermissed',\n 'pointercancel',\n 'wheel',\n * ]\n * - inputs: [\n * 'ngtObjectEvents'\n * ]\n */\nexport class NgtObjectEvents {\n\tclick = output<NgtThreeEvent<MouseEvent>>();\n\tdblclick = output<NgtThreeEvent<MouseEvent>>();\n\tcontextmenu = output<NgtThreeEvent<MouseEvent>>();\n\tpointerup = output<NgtThreeEvent<PointerEvent>>();\n\tpointerdown = output<NgtThreeEvent<PointerEvent>>();\n\tpointerover = output<NgtThreeEvent<PointerEvent>>();\n\tpointerout = output<NgtThreeEvent<PointerEvent>>();\n\tpointerenter = output<NgtThreeEvent<PointerEvent>>();\n\tpointerleave = output<NgtThreeEvent<PointerEvent>>();\n\tpointermove = output<NgtThreeEvent<PointerEvent>>();\n\tpointermissed = output<NgtThreeEvent<MouseEvent>>();\n\tpointercancel = output<NgtThreeEvent<PointerEvent>>();\n\twheel = output<NgtThreeEvent<WheelEvent>>();\n\n\t// NOTE: we use model here to allow for the hostDirective host to set this value\n\tngtObjectEvents = model<\n\t\t| ElementRef<THREE.Object3D>\n\t\t| THREE.Object3D\n\t\t| null\n\t\t| undefined\n\t\t| (() => ElementRef<THREE.Object3D> | THREE.Object3D | null | undefined)\n\t>();\n\n\tconstructor() {\n\t\tconst obj = computed(() => {\n\t\t\tconst ngtObject = this.ngtObjectEvents();\n\t\t\tif (typeof ngtObject === 'function') return ngtObject();\n\t\t\treturn ngtObject;\n\t\t});\n\n\t\tinjectObjectEvents(obj, {\n\t\t\tclick: this.emitEvent('click'),\n\t\t\tdblclick: this.emitEvent('dblclick'),\n\t\t\tcontextmenu: this.emitEvent('contextmenu'),\n\t\t\tpointerup: this.emitEvent('pointerup'),\n\t\t\tpointerdown: this.emitEvent('pointerdown'),\n\t\t\tpointerover: this.emitEvent('pointerover'),\n\t\t\tpointerout: this.emitEvent('pointerout'),\n\t\t\tpointerenter: this.emitEvent('pointerenter'),\n\t\t\tpointerleave: this.emitEvent('pointerleave'),\n\t\t\tpointermove: this.emitEvent('pointermove'),\n\t\t\tpointermissed: this.emitEvent('pointermissed'),\n\t\t\tpointercancel: this.emitEvent('pointercancel'),\n\t\t\twheel: this.emitEvent('wheel'),\n\t\t});\n\t}\n\n\tprivate emitEvent<TEvent extends keyof NgtEventHandlers>(eventName: TEvent) {\n\t\treturn this[eventName].emit.bind(this[eventName]) as NgtEventHandlers[TEvent];\n\t}\n}\n\nexport function injectObjectEvents(\n\ttarget: () => ElementRef<THREE.Object3D> | THREE.Object3D | null | undefined,\n\tevents: NgtEventHandlers,\n\t{ injector }: { injector?: Injector } = {},\n) {\n\treturn assertInjector(injectObjectEvents, injector, () => {\n\t\tconst renderer = inject(Renderer2);\n\n\t\tconst cleanUps: Array<() => void> = [];\n\n\t\teffect((onCleanup) => {\n\t\t\tconst targetObj = resolveRef(target());\n\n\t\t\tif (!targetObj || !is.instance(targetObj)) return;\n\n\t\t\tObject.entries(events).forEach(([eventName, eventHandler]) => {\n\t\t\t\tcleanUps.push(renderer.listen(targetObj, eventName, eventHandler));\n\t\t\t});\n\n\t\t\tonCleanup(() => {\n\t\t\t\tcleanUps.forEach((cleanUp) => cleanUp());\n\t\t\t});\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tcleanUps.forEach((cleanUp) => cleanUp());\n\t\t});\n\n\t\treturn cleanUps;\n\t});\n}\n","import { OutputEmitterRef } from '@angular/core';\n\nexport function getEmitter<T>(emitterRef: OutputEmitterRef<T> | undefined) {\n\tif (!emitterRef || !emitterRef['listeners'] || emitterRef['destroyed']) return undefined;\n\treturn emitterRef.emit.bind(emitterRef);\n}\n\nexport function hasListener(...emitterRefs: (OutputEmitterRef<unknown> | undefined)[]) {\n\treturn emitterRefs.some(\n\t\t(emitterRef) =>\n\t\t\temitterRef && !emitterRef['destroyed'] && emitterRef['listeners'] && emitterRef['listeners'].length > 0,\n\t);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"angular-three.mjs","sources":["../../../../libs/core/src/lib/renderer/constants.ts","../../../../libs/core/src/lib/utils/is.ts","../../../../libs/core/src/lib/directives/common.ts","../../../../libs/core/src/lib/directives/args.ts","../../../../libs/core/src/lib/loop.ts","../../../../libs/core/src/lib/utils/make.ts","../../../../libs/core/src/lib/utils/signal-state.ts","../../../../libs/core/src/lib/utils/update.ts","../../../../libs/core/src/lib/store.ts","../../../../libs/core/src/lib/utils/resolve-ref.ts","../../../../libs/core/src/lib/directives/parent.ts","../../../../libs/core/src/lib/instance.ts","../../../../libs/core/src/lib/directives/selection.ts","../../../../libs/core/src/lib/html.ts","../../../../libs/core/src/lib/loader.ts","../../../../libs/core/src/lib/pipes/hexify.ts","../../../../libs/core/src/lib/renderer/catalogue.ts","../../../../libs/core/src/lib/utils/parameters.ts","../../../../libs/core/src/lib/portal.ts","../../../../libs/core/src/lib/events.ts","../../../../libs/core/src/lib/utils/apply-props.ts","../../../../libs/core/src/lib/renderer/state.ts","../../../../libs/core/src/lib/utils/attach.ts","../../../../libs/core/src/lib/renderer/utils.ts","../../../../libs/core/src/lib/renderer/renderer.ts","../../../../libs/core/src/lib/roots.ts","../../../../libs/core/src/lib/routed-scene.ts","../../../../libs/core/src/lib/utils/before-render.ts","../../../../libs/core/src/lib/utils/object-events.ts","../../../../libs/core/src/lib/utils/output-ref.ts","../../../../libs/core/src/angular-three.ts"],"sourcesContent":["export const NGT_RENDERER_NODE_FLAG = '__ngt_renderer__';\nexport const NGT_CANVAS_CONTENT_FLAG = '__ngt_renderer_canvas_content__';\nexport const NGT_PORTAL_CONTENT_FLAG = '__ngt_renderer_portal_content__';\nexport const NGT_ARGS_FLAG = '__ngt_renderer_args__';\nexport const NGT_PARENT_FLAG = '__ngt_renderer_parent__';\nexport const NGT_INTERNAL_ADD_COMMENT_FLAG = '__ngt_renderer_add_comment__';\nexport const NGT_INTERNAL_SET_PARENT_COMMENT_FLAG = '__ngt_renderer_set_parent_comment__';\nexport const NGT_GET_NODE_ATTRIBUTE_FLAG = '__ngt_get_node_attribute__';\nexport const NGT_DOM_PARENT_FLAG = '__ngt_dom_parent__';\nexport const NGT_DELEGATE_RENDERER_DESTROY_NODE_PATCHED_FLAG = '__ngt_delegate_renderer_destroy_node_patched__';\nexport const NGT_HTML_FLAG = '__ngt_html__';\n\nexport const THREE_NATIVE_EVENTS = ['added', 'removed', 'childadded', 'childremoved', 'change', 'disposed'];\n","import type { ElementRef } from '@angular/core';\nimport type * as THREE from 'three';\nimport type { NgtAnyRecord, NgtEquConfig, NgtInstanceNode, NgtRendererLike } from '../types';\n\nexport const is = {\n\tobj: (a: unknown): a is object => a === Object(a) && !Array.isArray(a) && typeof a !== 'function',\n\tmaterial: (a: unknown): a is THREE.Material => !!a && (a as THREE.Material).isMaterial,\n\tgeometry: (a: unknown): a is THREE.BufferGeometry => !!a && (a as THREE.BufferGeometry).isBufferGeometry,\n\torthographicCamera: (a: unknown): a is THREE.OrthographicCamera =>\n\t\t!!a && (a as THREE.OrthographicCamera).isOrthographicCamera,\n\tperspectiveCamera: (a: unknown): a is THREE.PerspectiveCamera =>\n\t\t!!a && (a as THREE.PerspectiveCamera).isPerspectiveCamera,\n\tcamera: (a: unknown): a is THREE.Camera => !!a && (a as THREE.Camera).isCamera,\n\trenderer: (a: unknown) => !!a && typeof a === 'object' && 'render' in a && typeof a['render'] === 'function',\n\tscene: (a: unknown): a is THREE.Scene => !!a && (a as THREE.Scene).isScene,\n\tref: (a: unknown): a is ElementRef => !!a && typeof a === 'object' && 'nativeElement' in a,\n\tinstance: (a: unknown): a is NgtInstanceNode => !!a && !!(a as NgtAnyRecord)['__ngt__'],\n\tobject3D: (a: unknown): a is THREE.Object3D => !!a && (a as THREE.Object3D).isObject3D,\n\tthree: <TThreeEntity extends object, TKey extends keyof TThreeEntity = keyof TThreeEntity>(\n\t\ta: unknown,\n\t\tisKey: TKey extends `is${infer K}` ? TKey : never,\n\t): a is TThreeEntity => !!a && (a as any)[isKey],\n\tcolorRepresentation: (a: unknown): a is THREE.ColorRepresentation =>\n\t\ta != null && (typeof a === 'string' || typeof a === 'number' || is.three<THREE.Color>(a, 'isColor')),\n\tcolorSpaceExist: <\n\t\tT extends NgtRendererLike | THREE.Texture | object,\n\t\tP = T extends NgtRendererLike ? { outputColorSpace: string } : { colorSpace: string },\n\t>(\n\t\tobject: T,\n\t): object is T & P => 'colorSpace' in object || 'outputColorSpace' in object,\n\tequ(a: any, b: any, { arrays = 'shallow', objects = 'reference', strict = true }: NgtEquConfig = {}) {\n\t\t// Wrong type or one of the two undefined, doesn't match\n\t\tif (typeof a !== typeof b || !!a !== !!b) return false;\n\t\t// Atomic, just compare a against b\n\t\tif (typeof a === 'string' || typeof a === 'number') return a === b;\n\t\tconst isObj = is.obj(a);\n\t\tif (isObj && objects === 'reference') return a === b;\n\t\tconst isArr = Array.isArray(a);\n\t\tif (isArr && arrays === 'reference') return a === b;\n\t\t// Array or Object, shallow compare first to see if it's a match\n\t\tif ((isArr || isObj) && a === b) return true;\n\t\t// Last resort, go through keys\n\t\tlet i;\n\t\tfor (i in a) if (!(i in b)) return false;\n\t\tfor (i in strict ? b : a) if (a[i] !== b[i]) return false;\n\t\tif (i === void 0) {\n\t\t\tif (isArr && a.length === 0 && b.length === 0) return true;\n\t\t\tif (isObj && Object.keys(a).length === 0 && Object.keys(b).length === 0) return true;\n\t\t\tif (a !== b) return false;\n\t\t}\n\t\treturn true;\n\t},\n};\n","import {\n\tDestroyRef,\n\tDirective,\n\teffect,\n\tEmbeddedViewRef,\n\tinject,\n\tInjector,\n\tSignal,\n\tTemplateRef,\n\tViewContainerRef,\n} from '@angular/core';\nimport { is } from '../utils/is';\n\n@Directive()\nexport abstract class NgtCommonDirective<TValue> {\n\tprivate vcr = inject(ViewContainerRef);\n\tprivate template = inject(TemplateRef);\n\tprotected injector = inject(Injector);\n\n\tprotected injected = false;\n\tprotected injectedValue: TValue | null = null;\n\tprivate view?: EmbeddedViewRef<unknown>;\n\n\tprotected get commentNode() {\n\t\treturn this.vcr.element.nativeElement;\n\t}\n\n\tabstract validate(): boolean;\n\tprotected abstract linkedValue: Signal<TValue | null>;\n\tprotected abstract shouldSkipRender: Signal<boolean>;\n\n\tprotected constructor() {\n\t\teffect(() => {\n\t\t\tif (this.shouldSkipRender()) return;\n\n\t\t\tconst value = this.linkedValue();\n\n\t\t\tif (is.equ(value, this.injectedValue)) {\n\t\t\t\t// we have the same value as before, no need to update\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.injected = false;\n\t\t\tthis.injectedValue = value;\n\t\t\tthis.createView();\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tthis.view?.destroy();\n\t\t});\n\t}\n\n\tget value() {\n\t\tif (this.validate()) {\n\t\t\tthis.injected = true;\n\t\t\treturn this.injectedValue;\n\t\t}\n\t\treturn null;\n\t}\n\n\tprotected beforeCreateView() {\n\t\t/* noop */\n\t}\n\n\tprivate createView() {\n\t\tif (this.view && !this.view.destroyed) this.view.destroy();\n\n\t\tthis.beforeCreateView();\n\n\t\tthis.view = this.vcr.createEmbeddedView(this.template);\n\t\tthis.view.detectChanges();\n\t}\n}\n","import { computed, Directive, input, linkedSignal } from '@angular/core';\nimport { NGT_ARGS_FLAG, NGT_INTERNAL_ADD_COMMENT_FLAG } from '../renderer/constants';\nimport { NgtCommonDirective } from './common';\n\n@Directive({ selector: 'ng-template[args]' })\nexport class NgtArgs extends NgtCommonDirective<any[]> {\n\targs = input.required<any[] | null>();\n\n\tprotected linkedValue = linkedSignal(this.args);\n\tprotected shouldSkipRender = computed(() => {\n\t\tconst args = this.args();\n\t\treturn args == null || !Array.isArray(args) || (args.length === 1 && args[0] === null);\n\t});\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tconst commentNode = this.commentNode;\n\t\tcommentNode.data = NGT_ARGS_FLAG;\n\t\tcommentNode[NGT_ARGS_FLAG] = true;\n\n\t\tif (commentNode[NGT_INTERNAL_ADD_COMMENT_FLAG]) {\n\t\t\tcommentNode[NGT_INTERNAL_ADD_COMMENT_FLAG]('args', this.injector);\n\t\t\tdelete commentNode[NGT_INTERNAL_ADD_COMMENT_FLAG];\n\t\t}\n\t}\n\n\tvalidate() {\n\t\treturn !this.injected && !!this.injectedValue?.length;\n\t}\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport type { NgtCanvasElement, NgtGlobalRenderCallback, NgtState } from './types';\nimport type { SignalState } from './utils/signal-state';\n\nexport const roots = new Map<NgtCanvasElement, SignalState<NgtState>>();\n\ntype SubItem = { callback: NgtGlobalRenderCallback };\n\nfunction createSubs(callback: NgtGlobalRenderCallback, subs: Set<SubItem>): () => void {\n\tconst sub = { callback };\n\tsubs.add(sub);\n\treturn () => void subs.delete(sub);\n}\n\nconst globalEffects: Set<SubItem> = new Set();\nconst globalAfterEffects: Set<SubItem> = new Set();\nconst globalTailEffects: Set<SubItem> = new Set();\n\n/**\n * Adds a global render callback which is called each frame.\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addEffect\n */\nexport const addEffect = (callback: NgtGlobalRenderCallback) => createSubs(callback, globalEffects);\n\n/**\n * Adds a global after-render callback which is called each frame.\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addAfterEffect\n */\nexport const addAfterEffect = (callback: NgtGlobalRenderCallback) => createSubs(callback, globalAfterEffects);\n\n/**\n * Adds a global callback which is called when rendering stops.\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addTail\n */\nexport const addTail = (callback: NgtGlobalRenderCallback) => createSubs(callback, globalTailEffects);\n\nfunction run(effects: Set<SubItem>, timestamp: number) {\n\tif (!effects.size) return;\n\tfor (const { callback } of effects.values()) {\n\t\tcallback(timestamp);\n\t}\n}\n\nexport type NgtGlobalEffectType = 'before' | 'after' | 'tail';\n\nexport function flushGlobalEffects(type: NgtGlobalEffectType, timestamp: number): void {\n\tswitch (type) {\n\t\tcase 'before':\n\t\t\treturn run(globalEffects, timestamp);\n\t\tcase 'after':\n\t\t\treturn run(globalAfterEffects, timestamp);\n\t\tcase 'tail':\n\t\t\treturn run(globalTailEffects, timestamp);\n\t}\n}\n\nfunction update(timestamp: number, store: SignalState<NgtState>, frame?: XRFrame) {\n\tconst state = store.snapshot;\n\t// Run local effects\n\tlet delta = state.clock.getDelta();\n\t// In frameloop='never' mode, clock times are updated using the provided timestamp\n\tif (state.frameloop === 'never' && typeof timestamp === 'number') {\n\t\tdelta = timestamp - state.clock.elapsedTime;\n\t\tstate.clock.oldTime = state.clock.elapsedTime;\n\t\tstate.clock.elapsedTime = timestamp;\n\t}\n\t// Call subscribers (beforeRender)\n\tconst subscribers = state.internal.subscribers;\n\tfor (let i = 0; i < subscribers.length; i++) {\n\t\tconst subscription = subscribers[i];\n\t\tsubscription.callback({ ...subscription.store.snapshot, delta, frame });\n\t}\n\t// Render content\n\tif (!state.internal.priority && state.gl.render) state.gl.render(state.scene, state.camera);\n\t// Decrease frame count\n\tstate.internal.frames = Math.max(0, state.internal.frames - 1);\n\treturn state.frameloop === 'always' ? 1 : state.internal.frames;\n}\n\nfunction createLoop<TCanvas>(roots: Map<TCanvas, SignalState<NgtState>>) {\n\tlet running = false;\n\tlet repeat: number;\n\tlet frame: number;\n\tlet beforeRenderInProgress = false;\n\n\tfunction loop(timestamp: number): void {\n\t\tframe = requestAnimationFrame(loop);\n\t\trunning = true;\n\t\trepeat = 0;\n\n\t\t// Run effects\n\t\tflushGlobalEffects('before', timestamp);\n\n\t\t// Render all roots\n\t\tbeforeRenderInProgress = true;\n\t\tfor (const root of roots.values()) {\n\t\t\tconst state = root.snapshot;\n\t\t\t// If the frameloop is invalidated, do not run another frame\n\t\t\tif (\n\t\t\t\tstate.internal.active &&\n\t\t\t\t(state.frameloop === 'always' || state.internal.frames > 0) &&\n\t\t\t\t!state.gl.xr?.isPresenting\n\t\t\t) {\n\t\t\t\trepeat += update(timestamp, root);\n\t\t\t}\n\t\t}\n\t\tbeforeRenderInProgress = false;\n\n\t\t// Run after-effects\n\t\tflushGlobalEffects('after', timestamp);\n\n\t\t// Stop the loop if nothing invalidates it\n\t\tif (repeat === 0) {\n\t\t\t// Tail call effects, they are called when rendering stops\n\t\t\tflushGlobalEffects('tail', timestamp);\n\n\t\t\t// Flag end of operation\n\t\t\trunning = false;\n\t\t\treturn cancelAnimationFrame(frame);\n\t\t}\n\t}\n\n\tfunction invalidate(store?: SignalState<NgtState>, frames = 1): void {\n\t\tconst state = store?.snapshot;\n\t\tif (!state) return roots.forEach((root) => invalidate(root, frames));\n\t\tif (state.gl.xr?.isPresenting || !state.internal.active || state.frameloop === 'never') return;\n\t\tif (frames > 1) {\n\t\t\t// legacy support for people using frames parameters\n\t\t\t// Increase frames, do not go higher than 60\n\t\t\tstate.internal.frames = Math.min(60, state.internal.frames + frames);\n\t\t} else {\n\t\t\tif (beforeRenderInProgress) {\n\t\t\t\t//called from within a beforeRender, it means the user wants an additional frame\n\t\t\t\tstate.internal.frames = 2;\n\t\t\t} else {\n\t\t\t\t//the user need a new frame, no need to increment further than 1\n\t\t\t\tstate.internal.frames = 1;\n\t\t\t}\n\t\t}\n\n\t\t// If the render-loop isn't active, start it\n\t\tif (!running) {\n\t\t\trunning = true;\n\t\t\trequestAnimationFrame(loop);\n\t\t}\n\t}\n\n\tfunction advance(timestamp: number, runGlobalEffects = true, store?: SignalState<NgtState>, frame?: XRFrame): void {\n\t\tif (runGlobalEffects) flushGlobalEffects('before', timestamp);\n\t\tif (!store) for (const root of roots.values()) update(timestamp, root);\n\t\telse update(timestamp, store, frame);\n\t\tif (runGlobalEffects) flushGlobalEffects('after', timestamp);\n\t}\n\n\treturn { loop, invalidate, advance };\n}\n\nexport const NGT_LOOP = new InjectionToken<ReturnType<typeof createLoop>>('NGT_LOOP', {\n\tfactory: () => createLoop(roots),\n});\n\nexport function injectLoop() {\n\treturn inject(NGT_LOOP);\n}\n","import * as THREE from 'three';\nimport type { NgtCanvasElement, NgtDpr, NgtGLDefaultOptions, NgtGLOptions, NgtIntersection, NgtSize } from '../types';\nimport { is } from './is';\n\nconst idCache: { [id: string]: boolean | undefined } = {};\nexport function makeId(event?: NgtIntersection): string {\n\tif (event) {\n\t\treturn (event.eventObject || event.object).uuid + '/' + event.index + event.instanceId;\n\t}\n\n\tconst newId = THREE.MathUtils.generateUUID();\n\t// ensure not already used\n\tif (!idCache[newId]) {\n\t\tidCache[newId] = true;\n\t\treturn newId;\n\t}\n\treturn makeId();\n}\n\nexport function makeDpr(dpr: NgtDpr, window?: Window) {\n\t// Err on the side of progress by assuming 2x dpr if we can't detect it\n\t// This will happen in workers where window is defined but dpr isn't.\n\tconst target = typeof window !== 'undefined' ? (window.devicePixelRatio ?? 2) : 1;\n\treturn Array.isArray(dpr) ? Math.min(Math.max(dpr[0], target), dpr[1]) : dpr;\n}\n\nexport function makeRendererInstance<TCanvas extends NgtCanvasElement>(\n\tglOptions: NgtGLOptions,\n\tcanvas: TCanvas,\n): THREE.WebGLRenderer {\n\tconst defaultOptions: NgtGLDefaultOptions = {\n\t\tpowerPreference: 'high-performance',\n\t\tcanvas,\n\t\tantialias: true,\n\t\talpha: true,\n\t};\n\n\tconst customRenderer = (\n\t\ttypeof glOptions === 'function' ? glOptions(defaultOptions) : glOptions\n\t) as THREE.WebGLRenderer;\n\tif (is.renderer(customRenderer)) return customRenderer;\n\treturn new THREE.WebGLRenderer({ ...defaultOptions, ...glOptions });\n}\n\nexport function makeCameraInstance(isOrthographic: boolean, size: NgtSize) {\n\tif (isOrthographic) return new THREE.OrthographicCamera(0, 0, 0, 0, 0.1, 1000);\n\treturn new THREE.PerspectiveCamera(75, size.width / size.height, 0.1, 1000);\n}\n\nexport type NgtObjectMap = {\n\tnodes: Record<string, THREE.Object3D<any>>;\n\tmaterials: Record<string, THREE.Material>;\n\tmeshes: Record<string, THREE.Mesh>;\n\t[key: string]: any;\n};\n\nexport function makeObjectGraph(object: THREE.Object3D): NgtObjectMap {\n\tconst data: NgtObjectMap = { nodes: {}, materials: {}, meshes: {} };\n\n\tif (object) {\n\t\tobject.traverse((child) => {\n\t\t\tif (child.name) data.nodes[child.name] = child;\n\t\t\tif ('material' in child && !data.materials[((child as THREE.Mesh).material as THREE.Material).name]) {\n\t\t\t\tdata.materials[((child as THREE.Mesh).material as THREE.Material).name] = (child as THREE.Mesh)\n\t\t\t\t\t.material as THREE.Material;\n\t\t\t}\n\t\t\tif (is.three<THREE.Mesh>(child, 'isMesh') && !data.meshes[child.name]) data.meshes[child.name] = child;\n\t\t});\n\t}\n\treturn data;\n}\n","/** ported from ngrx/signals */\nimport { computed, isSignal, Signal as NgSignal, signal, untracked, WritableSignal } from '@angular/core';\n\ntype NonRecord =\n\t| Iterable<any>\n\t| WeakSet<any>\n\t| WeakMap<any, any>\n\t| Promise<any>\n\t| Date\n\t| Error\n\t| RegExp\n\t| ArrayBuffer\n\t| DataView\n\t| Function;\n\ntype Prettify<T> = { [K in keyof T]: T[K] } & {};\ntype IsRecord<T> = T extends object ? (T extends NonRecord ? false : true) : false;\ntype IsUnknownRecord<T> = string extends keyof T ? true : number extends keyof T ? true : false;\ntype IsKnownRecord<T> = IsRecord<T> extends true ? (IsUnknownRecord<T> extends true ? false : true) : false;\n\nconst STATE_SOURCE = Symbol('STATE_SOURCE');\n\ntype WritableStateSource<State extends object> = {\n\t[STATE_SOURCE]: WritableSignal<State>;\n};\n\nexport type PartialStateUpdater<State extends object> = (state: State) => Partial<State>;\n\nfunction patchState<State extends object>(\n\tstateSource: WritableStateSource<State>,\n\t...updaters: Array<Partial<Prettify<State>> | PartialStateUpdater<Prettify<State>>>\n): void {\n\tstateSource[STATE_SOURCE].update((currentState) =>\n\t\tupdaters.reduce(\n\t\t\t(nextState: State, updater) => ({\n\t\t\t\t...nextState,\n\t\t\t\t...(typeof updater === 'function' ? updater(nextState) : updater),\n\t\t\t}),\n\t\t\tcurrentState,\n\t\t),\n\t);\n}\n\n// An extended Signal type that enables the correct typing\n// of nested signals with the `name` or `length` key.\nexport interface Signal<T> extends NgSignal<T> {\n\tname: unknown;\n\tlength: unknown;\n}\n\nexport type DeepSignal<T> = Signal<T> &\n\t(IsKnownRecord<T> extends true\n\t\t? Readonly<{\n\t\t\t\t[K in keyof T]: IsKnownRecord<T[K]> extends true ? DeepSignal<T[K]> : Signal<T[K]>;\n\t\t\t}>\n\t\t: unknown);\n\nfunction toDeepSignal<T>(signal: Signal<T>): DeepSignal<T> {\n\tconst value = untracked(() => signal());\n\tif (!isRecord(value)) {\n\t\treturn signal as DeepSignal<T>;\n\t}\n\n\treturn new Proxy(signal, {\n\t\tget(target: any, prop) {\n\t\t\tif (!(prop in value)) {\n\t\t\t\treturn target[prop];\n\t\t\t}\n\n\t\t\tif (!isSignal(target[prop])) {\n\t\t\t\tObject.defineProperty(target, prop, {\n\t\t\t\t\tvalue: computed(() => target()[prop]),\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn toDeepSignal(target[prop]);\n\t\t},\n\t});\n}\n\nconst nonRecords = [WeakSet, WeakMap, Promise, Date, Error, RegExp, ArrayBuffer, DataView, Function];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\tif (value === null || typeof value !== 'object' || isIterable(value)) {\n\t\treturn false;\n\t}\n\n\tlet proto = Object.getPrototypeOf(value);\n\tif (proto === Object.prototype) {\n\t\treturn true;\n\t}\n\n\twhile (proto && proto !== Object.prototype) {\n\t\tif (nonRecords.includes(proto.constructor)) {\n\t\t\treturn false;\n\t\t}\n\t\tproto = Object.getPrototypeOf(proto);\n\t}\n\n\treturn proto === Object.prototype;\n}\n\nfunction isIterable(value: any): value is Iterable<any> {\n\treturn typeof value?.[Symbol.iterator] === 'function';\n}\n\nexport type SignalState<State extends object> = DeepSignal<State> &\n\tWritableStateSource<State> & {\n\t\tupdate: (...updaters: Array<Partial<Prettify<State>> | PartialStateUpdater<Prettify<State>>>) => void;\n\t\tget snapshot(): State;\n\t};\n\nexport function signalState<State extends object>(initialState: State): SignalState<State> {\n\tconst stateSource = signal(initialState as State);\n\tconst signalState = toDeepSignal(stateSource.asReadonly());\n\n\tObject.defineProperties(signalState, {\n\t\t[STATE_SOURCE]: { value: stateSource },\n\t\tupdate: { value: patchState.bind(null, signalState as SignalState<State>) },\n\t\tsnapshot: { get: () => untracked(stateSource) },\n\t});\n\n\treturn signalState as SignalState<State>;\n}\n","import type * as THREE from 'three';\nimport type { NgtCamera, NgtSize } from '../types';\nimport { is } from './is';\n\nexport function checkNeedsUpdate(value: unknown) {\n\tif (value !== null && is.obj(value) && 'needsUpdate' in value) {\n\t\tvalue['needsUpdate'] = true;\n\t\tif ('uniformsNeedUpdate' in value) value['uniformsNeedUpdate'] = true;\n\t}\n}\n\nexport function checkUpdate(value: unknown) {\n\t// TODO (chau): this is messing with PivotControls. Re-evaluate later\n\t// if (is.object3D(value)) value.updateMatrix();\n\n\tif (is.three<THREE.Camera>(value, 'isCamera')) {\n\t\tif (\n\t\t\tis.three<THREE.PerspectiveCamera>(value, 'isPerspectiveCamera') ||\n\t\t\tis.three<THREE.OrthographicCamera>(value, 'isOrthographicCamera')\n\t\t)\n\t\t\tvalue.updateProjectionMatrix();\n\t\tvalue.updateMatrixWorld();\n\t}\n\n\t// NOTE: skip checkNeedsUpdate for CubeTexture\n\tif (is.three<THREE.CubeTexture>(value, 'isCubeTexture')) return;\n\n\tcheckNeedsUpdate(value);\n}\n\nexport function updateCamera(camera: NgtCamera, size: NgtSize) {\n\tif (!camera.manual) {\n\t\tif (is.three<THREE.OrthographicCamera>(camera, 'isOrthographicCamera')) {\n\t\t\tcamera.left = size.width / -2;\n\t\t\tcamera.right = size.width / 2;\n\t\t\tcamera.top = size.height / 2;\n\t\t\tcamera.bottom = size.height / -2;\n\t\t} else {\n\t\t\tcamera.aspect = size.width / size.height;\n\t\t}\n\n\t\tcamera.updateProjectionMatrix();\n\t\tcamera.updateMatrixWorld();\n\t}\n}\n","import { DOCUMENT } from '@angular/common';\nimport { ElementRef, InjectOptions, InjectionToken, effect, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as THREE from 'three';\nimport { injectLoop } from './loop';\nimport type {\n\tNgtBeforeRenderRecord,\n\tNgtCamera,\n\tNgtDpr,\n\tNgtEventManager,\n\tNgtFrameloop,\n\tNgtSize,\n\tNgtState,\n\tNgtXRManager,\n} from './types';\nimport { is } from './utils/is';\nimport { makeDpr, makeId } from './utils/make';\nimport { SignalState, signalState } from './utils/signal-state';\nimport { updateCamera } from './utils/update';\n\nexport function storeFactory() {\n\tconst { invalidate, advance } = injectLoop();\n\tconst document = inject(DOCUMENT);\n\tconst window = document.defaultView || undefined;\n\n\t// NOTE: using Subject because we do not care about late-subscribers\n\tconst pointerMissed$ = new Subject<MouseEvent>();\n\n\tconst position = new THREE.Vector3();\n\tconst defaultTarget = new THREE.Vector3();\n\tconst tempTarget = new THREE.Vector3();\n\n\tlet performanceTimeout: ReturnType<typeof setTimeout> | undefined = undefined;\n\n\tconst pointer = new THREE.Vector2();\n\n\tconst store: SignalState<NgtState> = signalState<NgtState>({\n\t\tid: makeId(),\n\t\tpointerMissed$: pointerMissed$.asObservable(),\n\t\tevents: { priority: 1, enabled: true, connected: false },\n\n\t\t// Mock objects that have to be configured\n\t\tgl: null as unknown as THREE.WebGLRenderer,\n\t\tcamera: null as unknown as NgtCamera,\n\t\traycaster: null as unknown as THREE.Raycaster,\n\t\tscene: null as unknown as THREE.Scene,\n\t\txr: null as unknown as NgtXRManager,\n\n\t\tinvalidate: (frames = 1) => invalidate(store, frames),\n\t\tadvance: (timestamp: number, runGlobalEffects?: boolean) => advance(timestamp, runGlobalEffects, store),\n\n\t\tlegacy: false,\n\t\tlinear: false,\n\t\tflat: false,\n\n\t\tcontrols: null,\n\t\tclock: new THREE.Clock(),\n\t\tpointer,\n\n\t\tframeloop: 'always',\n\n\t\tperformance: {\n\t\t\tcurrent: 1,\n\t\t\tmin: 0.5,\n\t\t\tmax: 1,\n\t\t\tdebounce: 200,\n\t\t\tregress: () => {\n\t\t\t\tconst state = store.snapshot;\n\t\t\t\t// Clear timeout\n\t\t\t\tif (performanceTimeout) clearTimeout(performanceTimeout);\n\t\t\t\t// Set lower bound performance\n\t\t\t\tif (state.performance.current !== state.performance.min)\n\t\t\t\t\tstore.update((state) => ({\n\t\t\t\t\t\tperformance: { ...state.performance, current: state.performance.min },\n\t\t\t\t\t}));\n\t\t\t\t// Go back to upper bound performance after a while unless something regresses meanwhile\n\t\t\t\tperformanceTimeout = setTimeout(\n\t\t\t\t\t() =>\n\t\t\t\t\t\tstore.update((state) => ({\n\t\t\t\t\t\t\tperformance: { ...state.performance, current: store.snapshot.performance.max },\n\t\t\t\t\t\t})),\n\t\t\t\t\tstate.performance.debounce,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\n\t\tsize: { width: 0, height: 0, top: 0, left: 0 },\n\t\tviewport: {\n\t\t\tinitialDpr: window?.devicePixelRatio || 1,\n\t\t\tdpr: window?.devicePixelRatio || 1,\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\ttop: 0,\n\t\t\tleft: 0,\n\t\t\taspect: 0,\n\t\t\tdistance: 0,\n\t\t\tfactor: 0,\n\t\t\tgetCurrentViewport(\n\t\t\t\tcamera: NgtCamera = store.snapshot.camera,\n\t\t\t\ttarget: THREE.Vector3 | Parameters<THREE.Vector3['set']> = defaultTarget,\n\t\t\t\tsize: NgtSize = store.snapshot.size,\n\t\t\t) {\n\t\t\t\tconst { width, height, top, left } = size;\n\t\t\t\tconst aspect = width / height;\n\n\t\t\t\tif ((target as THREE.Vector3).isVector3) tempTarget.copy(target as THREE.Vector3);\n\t\t\t\telse tempTarget.set(...(target as Parameters<THREE.Vector3['set']>));\n\n\t\t\t\tconst distance = camera.getWorldPosition(position).distanceTo(tempTarget);\n\n\t\t\t\tif (is.three<THREE.OrthographicCamera>(camera, 'isOrthographicCamera')) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\twidth: width / camera.zoom,\n\t\t\t\t\t\theight: height / camera.zoom,\n\t\t\t\t\t\ttop,\n\t\t\t\t\t\tleft,\n\t\t\t\t\t\tfactor: 1,\n\t\t\t\t\t\tdistance,\n\t\t\t\t\t\taspect,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst fov = (camera.fov * Math.PI) / 180; // convert vertical fov to radians\n\t\t\t\tconst h = 2 * Math.tan(fov / 2) * distance; // visible height\n\t\t\t\tconst w = h * (width / height);\n\t\t\t\treturn { width: w, height: h, top, left, factor: width / w, distance, aspect };\n\t\t\t},\n\t\t},\n\n\t\tsetEvents: (events: Partial<NgtEventManager<any>>) =>\n\t\t\tstore.update((state) => ({ events: { ...state.events, ...events } })),\n\t\tsetSize: (width: number, height: number, top?: number, left?: number) => {\n\t\t\tconst camera = store.snapshot.camera;\n\t\t\tconst size = { width, height, top: top ?? 0, left: left ?? 0 };\n\n\t\t\tstore.update((state) => ({\n\t\t\t\tsize,\n\t\t\t\tviewport: {\n\t\t\t\t\t...state.viewport,\n\t\t\t\t\t...state.viewport.getCurrentViewport(camera, defaultTarget, size),\n\t\t\t\t},\n\t\t\t}));\n\t\t},\n\t\tsetDpr: (dpr: NgtDpr) => {\n\t\t\tconst resolved = makeDpr(dpr, window);\n\t\t\tstore.update((state) => ({\n\t\t\t\tviewport: { ...state.viewport, dpr: resolved, initialDpr: state.viewport.initialDpr || resolved },\n\t\t\t}));\n\t\t},\n\t\tsetFrameloop: (frameloop?: NgtFrameloop) => {\n\t\t\tconst clock = store.snapshot.clock;\n\n\t\t\t// if frameloop === \"never\" clock.elapsedTime is updated using advance(timestamp)\n\t\t\tclock.stop();\n\t\t\tclock.elapsedTime = 0;\n\n\t\t\tif (frameloop !== 'never') {\n\t\t\t\tclock.start();\n\t\t\t\tclock.elapsedTime = 0;\n\t\t\t}\n\n\t\t\tstore.update(() => ({ frameloop }));\n\t\t},\n\t\tpreviousRoot: null,\n\t\tinternal: {\n\t\t\tactive: false,\n\t\t\tpriority: 0,\n\t\t\tframes: 0,\n\t\t\tlastEvent: new ElementRef(null),\n\t\t\tinteraction: [],\n\t\t\thovered: new Map(),\n\t\t\tcapturedMap: new Map(),\n\t\t\tinitialClick: [0, 0],\n\t\t\tinitialHits: [],\n\t\t\tsubscribers: [],\n\t\t\tsubscribe: (\n\t\t\t\tcallback: NgtBeforeRenderRecord['callback'],\n\t\t\t\tpriority = 0,\n\t\t\t\t_store: SignalState<NgtState> = store,\n\t\t\t) => {\n\t\t\t\tconst internal = _store.snapshot.internal;\n\t\t\t\t// If this subscription was given a priority, it takes rendering into its own hands\n\t\t\t\t// For that reason we switch off automatic rendering and increase the manual flag\n\t\t\t\t// As long as this flag is positive there can be no internal rendering at all\n\t\t\t\t// because there could be multiple render subscriptions\n\t\t\t\tinternal.priority = internal.priority + (priority > 0 ? 1 : 0);\n\t\t\t\tinternal.subscribers.push({ callback, priority, store: _store });\n\t\t\t\t// Register subscriber and sort layers from lowest to highest, meaning,\n\t\t\t\t// highest priority renders last (on top of the other frames)\n\t\t\t\tinternal.subscribers = internal.subscribers.sort((a, b) => (a.priority || 0) - (b.priority || 0));\n\n\t\t\t\treturn () => {\n\t\t\t\t\tconst internal = _store.snapshot.internal;\n\t\t\t\t\tif (internal?.subscribers) {\n\t\t\t\t\t\t// Decrease manual flag if this subscription had a priority\n\t\t\t\t\t\tinternal.priority = internal.priority - (priority > 0 ? 1 : 0);\n\t\t\t\t\t\t// Remove subscriber from list\n\t\t\t\t\t\tinternal.subscribers = internal.subscribers.filter((s) => s.callback !== callback);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t});\n\n\tObject.defineProperty(store, '__pointerMissed$', { get: () => pointerMissed$ });\n\n\tlet {\n\t\tsize: oldSize,\n\t\tviewport: { dpr: oldDpr },\n\t\tcamera: oldCamera,\n\t} = store.snapshot;\n\n\teffect(() => {\n\t\tconst newCamera = store.camera();\n\t\tconst newSize = store.size();\n\t\tconst newDpr = store.viewport.dpr();\n\t\tconst gl = store.gl();\n\n\t\t// Resize camera and renderer on changes to size and pixel-ratio\n\t\tif (newSize !== oldSize || newDpr !== oldDpr) {\n\t\t\toldSize = newSize;\n\t\t\toldDpr = newDpr;\n\t\t\t// Update camera & renderer\n\t\t\tupdateCamera(newCamera, newSize);\n\t\t\tgl.setPixelRatio(newDpr);\n\n\t\t\tconst updateStyle = typeof HTMLCanvasElement !== 'undefined' && gl.domElement instanceof HTMLCanvasElement;\n\t\t\tgl.setSize(newSize.width, newSize.height, updateStyle);\n\t\t}\n\n\t\t// Update viewport once the camera changes\n\t\tif (newCamera !== oldCamera) {\n\t\t\toldCamera = newCamera;\n\t\t\tupdateCamera(newCamera, newSize);\n\t\t\t// Update viewport\n\t\t\tstore.update((state) => ({\n\t\t\t\tviewport: { ...state.viewport, ...state.viewport.getCurrentViewport(newCamera) },\n\t\t\t}));\n\t\t}\n\t});\n\n\treturn store;\n}\n\nexport const NGT_STORE = new InjectionToken<SignalState<NgtState>>('NgtStore Token');\n\nexport function injectStore(options: InjectOptions & { optional?: false }): SignalState<NgtState>;\nexport function injectStore(options: InjectOptions): SignalState<NgtState> | null;\nexport function injectStore(): SignalState<NgtState>;\nexport function injectStore(options?: InjectOptions) {\n\treturn inject(NGT_STORE, options as InjectOptions);\n}\n","import { ElementRef } from '@angular/core';\nimport { is } from './is';\n\nexport function resolveRef<TObject>(ref: ElementRef<TObject | undefined> | TObject | undefined): TObject | undefined {\n\tif (is.ref(ref)) {\n\t\treturn ref.nativeElement;\n\t}\n\n\treturn ref;\n}\n","import { computed, Directive, ElementRef, input, linkedSignal } from '@angular/core';\nimport type * as THREE from 'three';\nimport {\n\tNGT_INTERNAL_ADD_COMMENT_FLAG,\n\tNGT_INTERNAL_SET_PARENT_COMMENT_FLAG,\n\tNGT_PARENT_FLAG,\n} from '../renderer/constants';\nimport { injectStore } from '../store';\nimport { NgtNullish } from '../types';\nimport { resolveRef } from '../utils/resolve-ref';\nimport { NgtCommonDirective } from './common';\n\n@Directive({ selector: 'ng-template[parent]' })\nexport class NgtParent extends NgtCommonDirective<THREE.Object3D | null | undefined> {\n\tparent = input.required<\n\t\t| string\n\t\t| THREE.Object3D\n\t\t| ElementRef<THREE.Object3D>\n\t\t| (() => NgtNullish<ElementRef<THREE.Object3D> | THREE.Object3D | string>)\n\t>();\n\n\tprivate store = injectStore();\n\n\tprivate _parent = computed(() => {\n\t\tconst parent = this.parent();\n\t\tconst rawParent = typeof parent === 'function' ? parent() : parent;\n\t\tif (!rawParent) return null;\n\n\t\tconst scene = this.store.scene();\n\t\tif (typeof rawParent === 'string') {\n\t\t\treturn scene.getObjectByName(rawParent);\n\t\t}\n\n\t\treturn resolveRef(rawParent);\n\t});\n\n\tprotected linkedValue = linkedSignal(this._parent);\n\tprotected shouldSkipRender = computed(() => !this._parent());\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tconst commentNode = this.commentNode;\n\t\tcommentNode.data = NGT_PARENT_FLAG;\n\t\tcommentNode[NGT_PARENT_FLAG] = true;\n\n\t\tif (commentNode[NGT_INTERNAL_ADD_COMMENT_FLAG]) {\n\t\t\tcommentNode[NGT_INTERNAL_ADD_COMMENT_FLAG]('parent', this.injector);\n\t\t\tdelete commentNode[NGT_INTERNAL_ADD_COMMENT_FLAG];\n\t\t}\n\t}\n\n\tvalidate() {\n\t\treturn !this.injected && !!this.injectedValue;\n\t}\n\n\tprotected override beforeCreateView() {\n\t\tconst commentNode = this.commentNode;\n\t\tif (commentNode[NGT_INTERNAL_SET_PARENT_COMMENT_FLAG]) {\n\t\t\tcommentNode[NGT_INTERNAL_SET_PARENT_COMMENT_FLAG](this.injectedValue);\n\t\t}\n\t}\n}\n","import { computed } from '@angular/core';\nimport type * as THREE from 'three';\nimport type {\n\tNgtAnyRecord,\n\tNgtEventHandlers,\n\tNgtInstanceHierarchyState,\n\tNgtInstanceNode,\n\tNgtInstanceState,\n\tNgtState,\n} from './types';\nimport { SignalState, signalState } from './utils/signal-state';\nimport { checkUpdate } from './utils/update';\n\n/**\n * @deprecated: use `getInstanceState` instead. Will be removed in 5.0.0\n */\nexport function getLocalState<TInstance extends object>(obj: TInstance | undefined): NgtInstanceState | undefined {\n\treturn getInstanceState(obj);\n}\n\nexport function getInstanceState<TInstance extends NgtAnyRecord>(\n\tobj: TInstance | undefined,\n): NgtInstanceState<TInstance> | undefined {\n\tif (!obj) return undefined;\n\treturn (obj as NgtInstanceNode<TInstance>).__ngt__ || undefined;\n}\n\nexport function invalidateInstance<TInstance extends NgtAnyRecord>(instance: NgtInstanceNode<TInstance>) {\n\tlet store = getInstanceState(instance)?.store;\n\n\tif (store) {\n\t\twhile (store.snapshot.previousRoot) {\n\t\t\tstore = store.snapshot.previousRoot;\n\t\t}\n\n\t\tif (store.snapshot.internal.frames === 0) {\n\t\t\tstore.snapshot.invalidate();\n\t\t}\n\t}\n\n\tcheckUpdate(instance);\n}\n\nexport function prepare<TInstance extends NgtAnyRecord = NgtAnyRecord>(\n\tobject: TInstance,\n\ttype: string,\n\tinstanceState?: Partial<NgtInstanceState>,\n) {\n\tconst instance = object as NgtInstanceNode<TInstance>;\n\n\tif (instanceState?.type === 'ngt-primitive' || !instance.__ngt__) {\n\t\tconst {\n\t\t\thierarchyStore = signalState<NgtInstanceHierarchyState>({\n\t\t\t\tparent: null,\n\t\t\t\tobjects: [],\n\t\t\t\tnonObjects: [],\n\t\t\t\tgeometryStamp: Date.now(),\n\t\t\t}),\n\t\t\tstore = null,\n\t\t\t...rest\n\t\t} = instanceState || {};\n\n\t\tconst nonObjects = hierarchyStore.nonObjects;\n\t\tconst geometryStamp = hierarchyStore.geometryStamp;\n\n\t\tconst nonObjectsChanged = computed(() => {\n\t\t\tconst [_nonObjects] = [nonObjects(), geometryStamp()];\n\t\t\treturn _nonObjects;\n\t\t});\n\n\t\tinstance.__ngt__ = {\n\t\t\tpreviousAttach: null,\n\t\t\ttype,\n\t\t\teventCount: 0,\n\t\t\thandlers: {},\n\t\t\thierarchyStore,\n\t\t\tobject: instance as any,\n\t\t\tparent: hierarchyStore.parent,\n\t\t\tobjects: hierarchyStore.objects,\n\t\t\tnonObjects: nonObjectsChanged,\n\t\t\tadd(object, type) {\n\t\t\t\tconst current = instance.__ngt__.hierarchyStore.snapshot[type];\n\t\t\t\tconst foundIndex = current.findIndex(\n\t\t\t\t\t(node) =>\n\t\t\t\t\t\tobject === node || (!!object['uuid'] && !!node['uuid'] && object['uuid'] === node['uuid']),\n\t\t\t\t);\n\n\t\t\t\tif (foundIndex > -1) {\n\t\t\t\t\tcurrent.splice(foundIndex, 1, object);\n\t\t\t\t\tinstance.__ngt__.hierarchyStore.update({ [type]: current });\n\t\t\t\t} else {\n\t\t\t\t\tinstance.__ngt__.hierarchyStore.update((prev) => ({ [type]: [...prev[type], object] }));\n\t\t\t\t}\n\n\t\t\t\tnotifyAncestors(instance.__ngt__.hierarchyStore.snapshot.parent, type);\n\t\t\t},\n\t\t\tremove(object, type) {\n\t\t\t\tinstance.__ngt__.hierarchyStore.update((prev) => ({\n\t\t\t\t\t[type]: prev[type].filter((node) => node !== object),\n\t\t\t\t}));\n\t\t\t\tnotifyAncestors(instance.__ngt__.hierarchyStore.snapshot.parent, type);\n\t\t\t},\n\t\t\tsetParent(parent) {\n\t\t\t\tinstance.__ngt__.hierarchyStore.update({ parent });\n\t\t\t},\n\t\t\tupdateGeometryStamp() {\n\t\t\t\tinstance.__ngt__.hierarchyStore.update({ geometryStamp: Date.now() });\n\t\t\t},\n\t\t\tstore,\n\t\t\t...rest,\n\t\t};\n\t}\n\n\tObject.defineProperty(instance.__ngt__, 'setPointerEvent', {\n\t\tvalue: <TEvent extends keyof NgtEventHandlers>(\n\t\t\teventName: TEvent,\n\t\t\tcallback: NonNullable<NgtEventHandlers[TEvent]>,\n\t\t) => {\n\t\t\tconst iS = getInstanceState(instance) as NgtInstanceState;\n\t\t\tif (!iS.handlers) iS.handlers = {};\n\n\t\t\t// try to get the previous handler. compound might have one, the THREE object might also have one with the same name\n\t\t\tconst previousHandler = iS.handlers[eventName];\n\t\t\t// readjust the callback\n\t\t\tconst updatedCallback: typeof callback = (event: any) => {\n\t\t\t\tif (previousHandler) previousHandler(event);\n\t\t\t\tcallback(event);\n\t\t\t};\n\n\t\t\tObject.assign(iS.handlers, { [eventName]: updatedCallback });\n\n\t\t\t// increment the count everytime\n\t\t\tiS.eventCount += 1;\n\n\t\t\t// clean up the event listener by removing the target from the interaction array\n\t\t\treturn () => {\n\t\t\t\tconst iS = getInstanceState(instance) as NgtInstanceState;\n\t\t\t\tif (iS) {\n\t\t\t\t\tiS.handlers && delete iS.handlers[eventName];\n\t\t\t\t\tiS.eventCount -= 1;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tconfigurable: true,\n\t});\n\n\tObject.defineProperties(instance.__ngt__, {\n\t\taddInteraction: {\n\t\t\tvalue: (store?: SignalState<NgtState>) => {\n\t\t\t\tif (!store) return;\n\n\t\t\t\tconst iS = getInstanceState(instance) as NgtInstanceState;\n\n\t\t\t\tif (iS.eventCount < 1 || !('raycast' in instance) || !instance['raycast']) return;\n\n\t\t\t\tlet root = store;\n\t\t\t\twhile (root.snapshot.previousRoot) {\n\t\t\t\t\troot = root.snapshot.previousRoot;\n\t\t\t\t}\n\n\t\t\t\tif (root.snapshot.internal) {\n\t\t\t\t\tconst interactions = root.snapshot.internal.interaction;\n\t\t\t\t\tconst index = interactions.findIndex(\n\t\t\t\t\t\t(obj) => obj.uuid === (instance as unknown as THREE.Object3D).uuid,\n\t\t\t\t\t);\n\t\t\t\t\t// if already exists, do not add to interactions\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\troot.snapshot.internal.interaction.push(instance as unknown as THREE.Object3D);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tconfigurable: true,\n\t\t},\n\t\tremoveInteraction: {\n\t\t\tvalue: (store?: SignalState<NgtState>) => {\n\t\t\t\tif (!store) return;\n\n\t\t\t\tlet root = store;\n\t\t\t\twhile (root.snapshot.previousRoot) {\n\t\t\t\t\troot = root.snapshot.previousRoot;\n\t\t\t\t}\n\n\t\t\t\tif (root.snapshot.internal) {\n\t\t\t\t\tconst interactions = root.snapshot.internal.interaction;\n\t\t\t\t\tconst index = interactions.findIndex(\n\t\t\t\t\t\t(obj) => obj.uuid === (instance as unknown as THREE.Object3D).uuid,\n\t\t\t\t\t);\n\t\t\t\t\tif (index >= 0) interactions.splice(index, 1);\n\t\t\t\t}\n\t\t\t},\n\t\t\tconfigurable: true,\n\t\t},\n\t});\n\n\treturn instance;\n}\n\nfunction notifyAncestors(instance: NgtInstanceNode | null, type: 'objects' | 'nonObjects') {\n\tif (!instance) return;\n\tconst localState = getInstanceState(instance);\n\tif (!localState) return;\n\tconst { parent } = localState.hierarchyStore.snapshot;\n\tlocalState.hierarchyStore.update({ [type]: (localState.hierarchyStore.snapshot[type] || []).slice() });\n\tnotifyAncestors(parent, type);\n}\n","import { booleanAttribute, Directive, effect, ElementRef, inject, input, signal, untracked } from '@angular/core';\nimport { Group, Mesh, Object3D } from 'three';\nimport { getInstanceState } from '../instance';\n\n@Directive({ selector: '[selection]' })\nexport class NgtSelectionApi {\n\tenabled = input(true, { alias: 'selection', transform: booleanAttribute });\n\n\tprivate source = signal<Array<ElementRef<Object3D> | Object3D>>([]);\n\tselected = this.source.asReadonly();\n\n\tupdate(...args: Parameters<typeof this.source.update>) {\n\t\tif (!this.enabled()) return;\n\t\tthis.source.update(...args);\n\t}\n}\n\n@Directive({ selector: 'ngt-group[select], ngt-mesh[select]' })\nexport class NgtSelect {\n\tenabled = input(false, { transform: booleanAttribute, alias: 'select' });\n\n\tconstructor() {\n\t\tconst elementRef = inject<ElementRef<Group | Mesh>>(ElementRef);\n\t\tconst selectionApi = inject(NgtSelectionApi);\n\n\t\teffect((onCleanup) => {\n\t\t\tconst selectionEnabled = selectionApi.enabled();\n\t\t\tif (!selectionEnabled) return;\n\n\t\t\tconst enabled = this.enabled();\n\t\t\tif (!enabled) return;\n\n\t\t\tconst host = elementRef.nativeElement;\n\t\t\tif (!host) return;\n\n\t\t\tconst localState = getInstanceState(host);\n\t\t\tif (!localState) return;\n\n\t\t\t// ngt-mesh[select]\n\t\t\tif (host.type === 'Mesh') {\n\t\t\t\tselectionApi.update((prev) => [...prev, host]);\n\t\t\t\tonCleanup(() => selectionApi.update((prev) => prev.filter((el) => el !== host)));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst [collection] = [untracked(selectionApi.selected), localState.objects()];\n\t\t\tlet changed = false;\n\t\t\tconst current: Object3D[] = [];\n\t\t\thost.traverse((child) => {\n\t\t\t\tchild.type === 'Mesh' && current.push(child);\n\t\t\t\tif (collection.indexOf(child) === -1) changed = true;\n\t\t\t});\n\n\t\t\tif (!changed) return;\n\n\t\t\tselectionApi.update((prev) => [...prev, ...current]);\n\t\t\tonCleanup(() => {\n\t\t\t\tselectionApi.update((prev) => prev.filter((el) => !current.includes(el as Object3D)));\n\t\t\t});\n\t\t});\n\t}\n}\n\nexport const NgtSelection = [NgtSelectionApi, NgtSelect] as const;\n","// import {\n// \tAbstractType,\n// \tDestroyRef,\n// \tDirective,\n// \tElementRef,\n// \tinject,\n// \tInjectionToken,\n// \tProvider,\n// \tProviderToken,\n// \tType,\n// } from '@angular/core';\n// import { HTML } from './renderer-old';\n// import { DOM_PARENT } from './renderer-old/constants';\n// import { injectStore } from './store';\n// import { NgtAnyRecord } from './types';\n\nimport {\n\tAbstractType,\n\tDestroyRef,\n\tDirective,\n\tElementRef,\n\tinject,\n\tInjectionToken,\n\tProvider,\n\tProviderToken,\n\tType,\n} from '@angular/core';\nimport { NGT_DOM_PARENT_FLAG, NGT_HTML_FLAG } from './renderer/constants';\nimport { injectStore } from './store';\nimport { NgtAnyRecord } from './types';\n\n//\nconst NGT_HTML_DOM_ELEMENT = new InjectionToken<'gl' | HTMLElement>('NGT_HTML_DOM_ELEMENT');\n\nexport function provideHTMLDomElement(): Provider;\nexport function provideHTMLDomElement(factory: () => HTMLElement): Provider;\nexport function provideHTMLDomElement<\n\tTDeps extends Array<ProviderToken<any>>,\n\tTValues extends {\n\t\t[K in keyof TDeps]: TDeps[K] extends Type<infer T> | AbstractType<infer T> | InjectionToken<infer T>\n\t\t\t? T\n\t\t\t: never;\n\t},\n>(deps: TDeps, factory: (...args: TValues) => HTMLElement): Provider;\nexport function provideHTMLDomElement(...args: any[]) {\n\tif (args.length === 0) {\n\t\treturn { provide: NGT_HTML_DOM_ELEMENT, useFactory: () => 'gl' };\n\t}\n\n\tif (args.length === 1) {\n\t\treturn { provide: NGT_HTML_DOM_ELEMENT, useFactory: args[0] };\n\t}\n\n\treturn { provide: NGT_HTML_DOM_ELEMENT, useFactory: args.pop(), deps: args };\n}\n\n@Directive()\nexport abstract class NgtHTML {\n\tstatic [NGT_HTML_FLAG] = true;\n\n\tprotected domElement = inject(NGT_HTML_DOM_ELEMENT, { self: true, optional: true });\n\n\tconstructor() {\n\t\tconst host = inject<ElementRef<HTMLElement>>(ElementRef);\n\t\tconst store = injectStore();\n\n\t\tif (this.domElement === 'gl') {\n\t\t\tObject.assign(host.nativeElement, {\n\t\t\t\t[NGT_DOM_PARENT_FLAG]: store.snapshot.gl.domElement.parentElement,\n\t\t\t});\n\t\t} else if (this.domElement) {\n\t\t\tObject.assign(host.nativeElement, { [NGT_DOM_PARENT_FLAG]: this.domElement });\n\t\t}\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\t(host.nativeElement as NgtAnyRecord)[NGT_DOM_PARENT_FLAG] = null;\n\t\t\tdelete (host.nativeElement as NgtAnyRecord)[NGT_DOM_PARENT_FLAG];\n\t\t});\n\t}\n}\n","import { Injector, Signal, effect, signal } from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { Loader, Object3D } from 'three';\nimport type { NgtAnyRecord } from './types';\nimport { NgtObjectMap, makeObjectGraph } from './utils/make';\n\nexport type NgtGLTFLike = { scene: Object3D };\n\nexport interface NgtLoader<T> extends Loader {\n\tload(\n\t\turl: string,\n\t\tonLoad?: (result: T) => void,\n\t\tonProgress?: (event: ProgressEvent) => void,\n\t\tonError?: (event: unknown) => void,\n\t): unknown;\n\tloadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<T>;\n}\n\nexport type NgtLoaderProto<T> = new (...args: any) => NgtLoader<T extends unknown ? any : T>;\nexport type NgtLoaderReturnType<T, L extends NgtLoaderProto<T>> = T extends unknown\n\t? Awaited<ReturnType<InstanceType<L>['loadAsync']>>\n\t: T;\n\nexport type NgtLoaderExtensions<T extends { prototype: NgtLoaderProto<any> }> = (loader: T['prototype']) => void;\nexport type NgtConditionalType<Child, Parent, Truthy, Falsy> = Child extends Parent ? Truthy : Falsy;\nexport type NgtBranchingReturn<T, Parent, Coerced> = NgtConditionalType<T, Parent, Coerced, T>;\n\nexport type NgtLoaderResults<\n\tTInput extends string | string[] | Record<string, string>,\n\tTReturn,\n> = TInput extends string[] ? TReturn[] : TInput extends object ? { [key in keyof TInput]: TReturn } : TReturn;\n\nconst cached = new Map();\nconst memoizedLoaders = new WeakMap();\n\nfunction normalizeInputs(input: string | string[] | Record<string, string>) {\n\tlet urls: string[] = [];\n\tif (Array.isArray(input)) {\n\t\turls = input;\n\t} else if (typeof input === 'string') {\n\t\turls = [input];\n\t} else {\n\t\turls = Object.values(input);\n\t}\n\n\treturn urls.map((url) => (url.includes('undefined') || url.includes('null') || !url ? '' : url));\n}\n\nfunction load<\n\tTData,\n\tTUrl extends string | string[] | Record<string, string>,\n\tTLoaderConstructor extends NgtLoaderProto<TData>,\n\tTReturn = NgtLoaderReturnType<TData, TLoaderConstructor>,\n>(\n\tloaderConstructorFactory: (inputs: string[]) => TLoaderConstructor,\n\tinputs: () => TUrl,\n\t{\n\t\textensions,\n\t\tonLoad,\n\t\tonProgress,\n\t}: {\n\t\textensions?: NgtLoaderExtensions<TLoaderConstructor>;\n\t\tonLoad?: (data: NoInfer<TReturn>) => void;\n\t\tonProgress?: (event: ProgressEvent) => void;\n\t} = {},\n) {\n\treturn (): Array<Promise<any>> => {\n\t\tconst urls = normalizeInputs(inputs());\n\n\t\tlet loader: Loader<TData> = memoizedLoaders.get(loaderConstructorFactory(urls));\n\t\tif (!loader) {\n\t\t\tloader = new (loaderConstructorFactory(urls))();\n\t\t\tmemoizedLoaders.set(loaderConstructorFactory(urls), loader);\n\t\t}\n\n\t\tif (extensions) extensions(loader);\n\n\t\treturn urls.map((url) => {\n\t\t\tif (url === '') return Promise.resolve(null);\n\n\t\t\tif (!cached.has(url)) {\n\t\t\t\tcached.set(\n\t\t\t\t\turl,\n\t\t\t\t\tnew Promise<TData>((resolve, reject) => {\n\t\t\t\t\t\tloader.load(\n\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\t(data) => {\n\t\t\t\t\t\t\t\tif ('scene' in (data as NgtAnyRecord)) {\n\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\tdata as NgtAnyRecord,\n\t\t\t\t\t\t\t\t\t\tmakeObjectGraph((data as NgtAnyRecord)['scene']),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (onLoad) {\n\t\t\t\t\t\t\t\t\tonLoad(data as unknown as TReturn);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonProgress,\n\t\t\t\t\t\t\t(error) =>\n\t\t\t\t\t\t\t\treject(new Error(`[NGT] Could not load ${url}: ${(error as ErrorEvent)?.message}`)),\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\treturn cached.get(url)!;\n\t\t});\n\t};\n}\n\nfunction _injectLoader<\n\tTData,\n\tTUrl extends string | string[] | Record<string, string>,\n\tTLoaderConstructor extends NgtLoaderProto<TData>,\n\tTReturn = NgtLoaderReturnType<TData, TLoaderConstructor>,\n>(\n\tloaderConstructorFactory: (inputs: string[]) => TLoaderConstructor,\n\tinputs: () => TUrl,\n\t{\n\t\textensions,\n\t\tonProgress,\n\t\tonLoad,\n\t\tinjector,\n\t}: {\n\t\textensions?: NgtLoaderExtensions<TLoaderConstructor>;\n\t\tonProgress?: (event: ProgressEvent) => void;\n\t\tonLoad?: (data: NoInfer<TReturn>) => void;\n\t\tinjector?: Injector;\n\t} = {},\n): Signal<NgtLoaderResults<TUrl, NgtBranchingReturn<TReturn, NgtGLTFLike, NgtGLTFLike & NgtObjectMap>> | null> {\n\treturn assertInjector(_injectLoader, injector, () => {\n\t\tconst response = signal<NgtLoaderResults<\n\t\t\tTUrl,\n\t\t\tNgtBranchingReturn<TReturn, NgtGLTFLike, NgtGLTFLike & NgtObjectMap>\n\t\t> | null>(null);\n\n\t\tconst cachedResultPromisesEffect = load(loaderConstructorFactory, inputs, {\n\t\t\textensions,\n\t\t\tonProgress,\n\t\t\tonLoad: onLoad as (data: unknown) => void,\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst originalUrls = inputs();\n\t\t\tconst cachedResultPromises = cachedResultPromisesEffect();\n\t\t\tPromise.all(cachedResultPromises).then((results) => {\n\t\t\t\tresponse.update(() => {\n\t\t\t\t\tif (Array.isArray(originalUrls)) return results;\n\t\t\t\t\tif (typeof originalUrls === 'string') return results[0];\n\t\t\t\t\tconst keys = Object.keys(originalUrls);\n\t\t\t\t\treturn keys.reduce(\n\t\t\t\t\t\t(result, key) => {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\t(result as NgtAnyRecord)[key] = results[keys.indexOf(key)];\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{} as {\n\t\t\t\t\t\t\t[key in keyof TUrl]: NgtBranchingReturn<TReturn, NgtGLTFLike, NgtGLTFLike & NgtObjectMap>;\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\treturn response.asReadonly();\n\t});\n}\n\n_injectLoader.preload = <\n\tTData,\n\tTUrl extends string | string[] | Record<string, string>,\n\tTLoaderConstructor extends NgtLoaderProto<TData>,\n>(\n\tloaderConstructorFactory: (inputs: string[]) => TLoaderConstructor,\n\tinputs: () => TUrl,\n\textensions?: NgtLoaderExtensions<TLoaderConstructor>,\n\tonLoad?: (data: NoInfer<TData>) => void,\n) => {\n\tconst effects = load(loaderConstructorFactory, inputs, { extensions, onLoad })();\n\tif (effects) {\n\t\tvoid Promise.all(effects);\n\t}\n};\n\n_injectLoader.destroy = () => {\n\tcached.clear();\n};\n\n_injectLoader.clear = (urls: string | string[]) => {\n\tconst urlToClear = Array.isArray(urls) ? urls : [urls];\n\turlToClear.forEach((url) => {\n\t\tcached.delete(url);\n\t});\n};\n\nexport type NgtInjectedLoader = typeof _injectLoader;\nexport const injectLoader: NgtInjectedLoader = _injectLoader;\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Pipe } from '@angular/core';\n\nconst RGBA_REGEX = /rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+),?\\s*(\\d*\\.?\\d+)?\\)/;\nconst DEFAULT_COLOR = 0x000000;\n\n@Pipe({ name: 'hexify', pure: true })\nexport class NgtHexify {\n\tprivate document = inject(DOCUMENT, { optional: true });\n\tprivate ctx?: CanvasRenderingContext2D | null;\n\tprivate cache: Record<string, number> = {};\n\n\t/**\n\t * transforms a:\n\t * - hex string to a hex number\n\t * - rgb string to a hex number\n\t * - rgba string to a hex number\n\t * - css color string to a hex number\n\t *\n\t * always default to black if failed\n\t * @param value\n\t */\n\ttransform(value: string): number {\n\t\tif (value == null) return DEFAULT_COLOR;\n\n\t\tif (value.startsWith('#')) {\n\t\t\tif (!this.cache[value]) {\n\t\t\t\tthis.cache[value] = this.hexStringToNumber(value);\n\t\t\t}\n\t\t\treturn this.cache[value];\n\t\t}\n\n\t\tif (!this.ctx) {\n\t\t\tthis.ctx = this.document?.createElement('canvas').getContext('2d');\n\t\t}\n\n\t\tif (!this.ctx) {\n\t\t\tconsole.warn('[NGT] hexify: canvas context is not available');\n\t\t\treturn DEFAULT_COLOR;\n\t\t}\n\n\t\tthis.ctx.fillStyle = value;\n\t\tconst computedValue = this.ctx.fillStyle;\n\n\t\tif (computedValue.startsWith('#')) {\n\t\t\tif (!this.cache[computedValue]) {\n\t\t\t\tthis.cache[computedValue] = this.hexStringToNumber(computedValue);\n\t\t\t}\n\t\t\treturn this.cache[computedValue];\n\t\t}\n\n\t\tif (!computedValue.startsWith('rgba')) {\n\t\t\tconsole.warn(`[NGT] hexify: invalid color format. Expected rgba or hex, receive: ${computedValue}`);\n\t\t\treturn DEFAULT_COLOR;\n\t\t}\n\n\t\tconst match = computedValue.match(RGBA_REGEX);\n\t\tif (!match) {\n\t\t\tconsole.warn(`[NGT] hexify: invalid color format. Expected rgba or hex, receive: ${computedValue}`);\n\t\t\treturn DEFAULT_COLOR;\n\t\t}\n\n\t\tconst r = parseInt(match[1], 10);\n\t\tconst g = parseInt(match[2], 10);\n\t\tconst b = parseInt(match[3], 10);\n\t\tconst a = match[4] ? parseFloat(match[4]) : 1.0;\n\n\t\tconst cacheKey = `${r}:${g}:${b}:${a}`;\n\n\t\t// check result from cache\n\t\tif (!this.cache[cacheKey]) {\n\t\t\t// Convert the components to hex strings\n\t\t\tconst hexR = this.componentToHex(r);\n\t\t\tconst hexG = this.componentToHex(g);\n\t\t\tconst hexB = this.componentToHex(b);\n\t\t\tconst hexA = this.componentToHex(Math.round(a * 255));\n\n\t\t\t// Combine the hex components into a single hex string\n\t\t\tconst hex = `#${hexR}${hexG}${hexB}${hexA}`;\n\t\t\tthis.cache[cacheKey] = this.hexStringToNumber(hex);\n\t\t}\n\n\t\treturn this.cache[cacheKey];\n\t}\n\n\tprivate hexStringToNumber(hexString: string): number {\n\t\treturn parseInt(hexString.replace('#', ''), 16);\n\t}\n\n\tprivate componentToHex(component: number): string {\n\t\tconst hex = component.toString(16);\n\t\treturn hex.length === 1 ? '0' + hex : hex;\n\t}\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport type { NgtConstructorRepresentation } from '../types';\n\nconst catalogue: Record<string, NgtConstructorRepresentation> = {};\n\nexport function extend(objects: object): void {\n\tObject.assign(catalogue, objects);\n}\n\nexport const NGT_CATALOGUE = new InjectionToken<typeof catalogue>('NGT_CATALOGUE', { factory: () => catalogue });\n\nexport function injectCatalogue() {\n\treturn inject(NGT_CATALOGUE);\n}\n","import { computed, Signal, Type, ValueEqualityFn } from '@angular/core';\nimport * as THREE from 'three';\nimport type { NgtVector2, NgtVector3, NgtVector4 } from '../three-types';\nimport type { NgtAnyRecord } from '../types';\nimport { is } from './is';\n\ntype KeysOfType<TObject extends object, TType> = Exclude<\n\t{\n\t\t[K in keyof TObject]: TObject[K] extends TType | undefined | null ? K : never;\n\t}[keyof TObject],\n\tundefined\n>;\n\nexport function omit<TObject extends object, TKeys extends (keyof TObject)[]>(\n\tobjFn: () => TObject,\n\tkeysToOmit: TKeys,\n\tequal: ValueEqualityFn<NoInfer<Omit<TObject, TKeys[number]>>> = (a, b) =>\n\t\tis.equ(a, b, { objects: 'shallow', arrays: 'shallow' }),\n): Signal<Omit<TObject, TKeys[number]>> {\n\treturn computed(\n\t\t() => {\n\t\t\tconst obj = objFn();\n\t\t\tconst result = {} as NgtAnyRecord;\n\n\t\t\tfor (const key of Object.keys(obj)) {\n\t\t\t\tif (keysToOmit.includes(key as keyof TObject)) continue;\n\t\t\t\tObject.assign(result, { [key]: obj[key as keyof TObject] });\n\t\t\t}\n\n\t\t\treturn result as Omit<TObject, TKeys[number]>;\n\t\t},\n\t\t{ equal },\n\t);\n}\n\nexport function pick<TObject extends object, TKey extends keyof TObject>(\n\tobjFn: () => TObject,\n\tkey: TKey,\n\tequal?: ValueEqualityFn<NoInfer<TObject[TKey]>>,\n): Signal<TObject[TKey]>;\nexport function pick<TObject extends object, TKeys extends (keyof TObject)[]>(\n\tobjFn: () => TObject,\n\tkeys: TKeys,\n\tequal?: ValueEqualityFn<NoInfer<Pick<TObject, TKeys[number]>>>,\n): Signal<Pick<TObject, TKeys[number]>>;\nexport function pick(objFn: () => NgtAnyRecord, keyOrKeys: string | string[], equal?: ValueEqualityFn<any>) {\n\tif (Array.isArray(keyOrKeys)) {\n\t\tif (!equal) {\n\t\t\tequal = (a, b) => is.equ(a, b, { objects: 'shallow', arrays: 'shallow' });\n\t\t}\n\n\t\treturn computed(\n\t\t\t() => {\n\t\t\t\tconst obj = objFn();\n\t\t\t\tconst result = {} as NgtAnyRecord;\n\t\t\t\tfor (const key of keyOrKeys) {\n\t\t\t\t\tif (!(key in obj)) continue;\n\t\t\t\t\tObject.assign(result, { [key]: obj[key] });\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\t{ equal },\n\t\t);\n\t}\n\n\treturn computed(() => objFn()[keyOrKeys], { equal });\n}\n\nexport function merge<TObject extends object>(\n\tobjFn: () => TObject,\n\ttoMerge: Partial<TObject>,\n\tmode: 'override' | 'backfill' = 'override',\n\tequal: ValueEqualityFn<NoInfer<TObject>> = (a, b) => is.equ(a, b, { objects: 'shallow', arrays: 'shallow' }),\n) {\n\tif (mode === 'override') return computed(() => ({ ...objFn(), ...toMerge }), { equal });\n\treturn computed(() => ({ ...toMerge, ...objFn() }), { equal });\n}\n\ntype NgtVectorComputed<\n\tTVector extends THREE.Vector2 | THREE.Vector3 | THREE.Vector4,\n\tTNgtVector = TVector extends THREE.Vector2 ? NgtVector2 : TVector extends THREE.Vector3 ? NgtVector3 : NgtVector4,\n> = {\n\t(input: Signal<TNgtVector>): Signal<TVector>;\n\t(input: Signal<TNgtVector>, keepUndefined: true): Signal<TVector | undefined>;\n\t<TObject extends object>(options: Signal<TObject>, key: KeysOfType<TObject, TNgtVector>): Signal<TVector>;\n\t<TObject extends object>(\n\t\toptions: Signal<TObject>,\n\t\tkey: KeysOfType<TObject, TNgtVector>,\n\t\tkeepUndefined: true,\n\t): Signal<TVector | undefined>;\n};\n\nfunction createVectorComputed<TVector extends THREE.Vector2 | THREE.Vector3 | THREE.Vector4>(\n\tvectorCtor: Type<TVector>,\n) {\n\ttype TNgtVector = TVector extends THREE.Vector2\n\t\t? NgtVector2\n\t\t: TVector extends THREE.Vector3\n\t\t\t? NgtVector3\n\t\t\t: NgtVector4;\n\treturn ((\n\t\tinputOrOptions: Signal<NgtAnyRecord> | Signal<TNgtVector>,\n\t\tkeyOrKeepUndefined?: string | true,\n\t\tkeepUndefined?: boolean,\n\t) => {\n\t\tif (typeof keyOrKeepUndefined === 'undefined' || typeof keyOrKeepUndefined === 'boolean') {\n\t\t\tkeepUndefined = !!keyOrKeepUndefined;\n\t\t\tconst input = inputOrOptions as Signal<TNgtVector>;\n\t\t\treturn computed(\n\t\t\t\t() => {\n\t\t\t\t\tconst value = input();\n\t\t\t\t\tif (keepUndefined && value == undefined) return undefined;\n\t\t\t\t\tif (typeof value === 'number') return new vectorCtor().setScalar(value);\n\t\t\t\t\telse if (Array.isArray(value)) return new vectorCtor(...value);\n\t\t\t\t\telse if (value) return value as unknown as TVector;\n\t\t\t\t\telse return new vectorCtor();\n\t\t\t\t},\n\t\t\t\t{ equal: (a, b) => !!a && !!b && a.equals(b as any) },\n\t\t\t);\n\t\t}\n\n\t\tconst options = inputOrOptions as Signal<NgtAnyRecord>;\n\t\tconst key = keyOrKeepUndefined as string;\n\n\t\treturn computed(\n\t\t\t() => {\n\t\t\t\tconst value = options()[key] as TNgtVector;\n\t\t\t\tif (keepUndefined && value == undefined) return undefined;\n\t\t\t\tif (typeof value === 'number') return new vectorCtor().setScalar(value);\n\t\t\t\telse if (Array.isArray(value)) return new vectorCtor(...value);\n\t\t\t\telse if (value) return value as unknown as TVector;\n\t\t\t\telse return new vectorCtor();\n\t\t\t},\n\t\t\t{ equal: (a, b) => !!a && !!b && a.equals(b as any) },\n\t\t);\n\t}) as NgtVectorComputed<TVector, TNgtVector>;\n}\n\nexport const vector2 = createVectorComputed(THREE.Vector2);\nexport const vector3 = createVectorComputed(THREE.Vector3);\nexport const vector4 = createVectorComputed(THREE.Vector4);\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcontentChild,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDirective,\n\teffect,\n\tElementRef,\n\tEmbeddedViewRef,\n\tinject,\n\tInjector,\n\tinput,\n\tnumberAttribute,\n\tsignal,\n\tSkipSelf,\n\tTemplateRef,\n\tuntracked,\n\tViewContainerRef,\n} from '@angular/core';\nimport * as THREE from 'three';\nimport { Group } from 'three';\nimport { getInstanceState, prepare } from './instance';\nimport { extend } from './renderer/catalogue';\nimport { NGT_DOM_PARENT_FLAG, NGT_INTERNAL_ADD_COMMENT_FLAG, NGT_PORTAL_CONTENT_FLAG } from './renderer/constants';\nimport { injectStore, NGT_STORE } from './store';\nimport type { NgtComputeFunction, NgtEventManager, NgtSize, NgtState, NgtViewport } from './types';\nimport { is } from './utils/is';\nimport { makeId } from './utils/make';\nimport { omit, pick } from './utils/parameters';\nimport { signalState, SignalState } from './utils/signal-state';\nimport { updateCamera } from './utils/update';\n\n@Directive({ selector: 'ngt-portal[autoRender]' })\nexport class NgtPortalAutoRender {\n\tprivate portalStore = injectStore({ host: true });\n\tprivate parentStore = injectStore({ skipSelf: true });\n\tprivate portal = inject(NgtPortalImpl, { host: true });\n\n\trenderPriority = input(1, { alias: 'autoRender', transform: (value) => numberAttribute(value, 1) });\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\t// this.portalStore.update((state) => ({ events: { ...state.events, priority: this.renderPriority() + 1 } }));\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst portalRendered = this.portal.portalRendered();\n\t\t\tif (!portalRendered) return;\n\n\t\t\t// track state\n\t\t\tconst [renderPriority, { internal }] = [this.renderPriority(), this.portalStore()];\n\n\t\t\tlet oldClean: boolean;\n\n\t\t\tconst cleanup = internal.subscribe(\n\t\t\t\t({ gl, scene, camera }) => {\n\t\t\t\t\tconst [parentScene, parentCamera] = [\n\t\t\t\t\t\tthis.parentStore.snapshot.scene,\n\t\t\t\t\t\tthis.parentStore.snapshot.camera,\n\t\t\t\t\t];\n\t\t\t\t\toldClean = gl.autoClear;\n\t\t\t\t\tif (renderPriority === 1) {\n\t\t\t\t\t\t// clear scene and render with default\n\t\t\t\t\t\tgl.autoClear = true;\n\t\t\t\t\t\tgl.render(parentScene, parentCamera);\n\t\t\t\t\t}\n\n\t\t\t\t\t// disable cleaning\n\t\t\t\t\tgl.autoClear = false;\n\t\t\t\t\tgl.clearDepth();\n\t\t\t\t\tgl.render(scene, camera);\n\t\t\t\t\t// restore\n\t\t\t\t\tgl.autoClear = oldClean;\n\t\t\t\t},\n\t\t\t\trenderPriority,\n\t\t\t\tthis.portalStore,\n\t\t\t);\n\n\t\t\tonCleanup(() => cleanup());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ng-template[portalContent]' })\nexport class NgtPortalContent {\n\tstatic ngTemplateContextGuard(_: NgtPortalContent, ctx: unknown): ctx is { injector: Injector } {\n\t\treturn true;\n\t}\n\n\tconstructor() {\n\t\tconst host = inject<ElementRef<HTMLElement>>(ElementRef, { skipSelf: true });\n\t\tconst { element } = inject(ViewContainerRef);\n\t\tconst injector = inject(Injector);\n\t\tconst commentNode = element.nativeElement;\n\t\tconst store = injectStore();\n\n\t\tcommentNode.data = NGT_PORTAL_CONTENT_FLAG;\n\t\tcommentNode[NGT_PORTAL_CONTENT_FLAG] = store;\n\t\tcommentNode[NGT_DOM_PARENT_FLAG] = host.nativeElement;\n\n\t\tif (commentNode[NGT_INTERNAL_ADD_COMMENT_FLAG]) {\n\t\t\tcommentNode[NGT_INTERNAL_ADD_COMMENT_FLAG]('portal', injector);\n\t\t\tdelete commentNode[NGT_INTERNAL_ADD_COMMENT_FLAG];\n\t\t}\n\t}\n}\n\nexport interface NgtPortalState extends Omit<NgtState, 'events'> {\n\tevents: {\n\t\tenabled?: boolean;\n\t\tpriority?: number;\n\t\tcompute?: NgtComputeFunction;\n\t\tconnected?: any;\n\t};\n}\n\nfunction mergeState(\n\tpreviousRoot: SignalState<NgtState>,\n\tstore: SignalState<NgtState>,\n\tcontainer: THREE.Object3D,\n\tpointer: THREE.Vector2,\n\traycaster: THREE.Raycaster,\n\tevents?: NgtPortalState['events'],\n\tsize?: NgtSize,\n) {\n\t// we never want to spread the id\n\tconst { id: _, ...previousState } = previousRoot.snapshot;\n\tconst state = store.snapshot;\n\n\tlet viewport: Omit<NgtViewport, 'dpr' | 'initialDpr'> | undefined = undefined;\n\n\tif (state.camera && size) {\n\t\tconst camera = state.camera;\n\t\t// calculate the override viewport, if present\n\t\tviewport = previousState.viewport.getCurrentViewport(camera, new THREE.Vector3(), size);\n\t\t// update the portal camera, if it differs from the previous layer\n\t\tif (camera !== previousState.camera) updateCamera(camera, size);\n\t}\n\n\treturn {\n\t\t// the intersect consists of the previous root state\n\t\t...previousState,\n\t\t...state,\n\t\t// portals have their own scene, which forms the root, a raycaster and a pointer\n\t\tscene: container as THREE.Scene,\n\t\tpointer,\n\t\traycaster,\n\t\t// their previous root is the layer before it\n\t\tpreviousRoot,\n\t\tevents: { ...previousState.events, ...state.events, ...events },\n\t\tsize: { ...previousState.size, ...size },\n\t\tviewport: { ...previousState.viewport, ...viewport },\n\t\t// layers are allowed to override events\n\t\tsetEvents: (events: Partial<NgtEventManager<any>>) =>\n\t\t\tstore.update((state) => ({ ...state, events: { ...state.events, ...events } })),\n\t} as NgtState;\n}\n\n@Component({\n\tselector: 'ngt-portal',\n\ttemplate: `\n\t\t@if (portalRendered()) {\n\t\t\t<!-- Without an element that receives pointer events state.pointer will always be 0/0 -->\n\t\t\t<ngt-group (pointerover)=\"(undefined)\" attach=\"none\" />\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NGT_STORE,\n\t\t\tuseFactory: (previousStore: SignalState<NgtState>) => {\n\t\t\t\tconst pointer = new THREE.Vector2();\n\t\t\t\tconst raycaster = new THREE.Raycaster();\n\n\t\t\t\tconst { id: _skipId, ...previousState } = previousStore.snapshot;\n\n\t\t\t\tconst store = signalState<NgtState>({\n\t\t\t\t\tid: makeId(),\n\t\t\t\t\t...previousState,\n\t\t\t\t\tscene: null as unknown as THREE.Scene,\n\t\t\t\t\tpreviousRoot: previousStore,\n\t\t\t\t\tpointer,\n\t\t\t\t\traycaster,\n\t\t\t\t});\n\t\t\t\tstore.update(mergeState(previousStore, store, null!, pointer, raycaster));\n\t\t\t\treturn store;\n\t\t\t},\n\t\t\tdeps: [[new SkipSelf(), NGT_STORE]],\n\t\t},\n\t],\n})\nexport class NgtPortalImpl {\n\tcontainer = input.required<THREE.Object3D>();\n\tstate = input<Partial<NgtPortalState>>({});\n\n\tprivate contentRef = contentChild.required(NgtPortalContent, { read: TemplateRef });\n\tprivate anchorRef = contentChild.required(NgtPortalContent, { read: ViewContainerRef });\n\n\tprivate previousStore = injectStore({ skipSelf: true });\n\tprivate portalStore = injectStore();\n\tprivate injector = inject(Injector);\n\n\tprivate size = pick(this.state, 'size');\n\tprivate events = pick(this.state, 'events');\n\tprivate restState = omit(this.state, ['size', 'events']);\n\n\tprivate portalContentRendered = signal(false);\n\tportalRendered = this.portalContentRendered.asReadonly();\n\n\tprivate portalViewRef?: EmbeddedViewRef<unknown>;\n\n\tconstructor() {\n\t\textend({ Group });\n\n\t\teffect(() => {\n\t\t\tlet [container, anchor, content] = [\n\t\t\t\tthis.container(),\n\t\t\t\tthis.anchorRef(),\n\t\t\t\tthis.contentRef(),\n\t\t\t\tthis.previousStore(),\n\t\t\t];\n\n\t\t\tconst [size, events, restState] = [untracked(this.size), untracked(this.events), untracked(this.restState)];\n\n\t\t\tif (!is.instance(container)) {\n\t\t\t\tcontainer = prepare(container, 'ngt-portal', { store: this.portalStore });\n\t\t\t}\n\n\t\t\tconst instanceState = getInstanceState(container);\n\t\t\tif (instanceState && instanceState.store !== this.portalStore) {\n\t\t\t\tinstanceState.store = this.portalStore;\n\t\t\t}\n\n\t\t\tthis.portalStore.update(\n\t\t\t\trestState,\n\t\t\t\tmergeState(\n\t\t\t\t\tthis.previousStore,\n\t\t\t\t\tthis.portalStore,\n\t\t\t\t\tcontainer,\n\t\t\t\t\tthis.portalStore.snapshot.pointer,\n\t\t\t\t\tthis.portalStore.snapshot.raycaster,\n\t\t\t\t\tevents,\n\t\t\t\t\tsize,\n\t\t\t\t),\n\t\t\t);\n\n\t\t\tif (this.portalViewRef) {\n\t\t\t\tthis.portalViewRef.detectChanges();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.portalViewRef = anchor.createEmbeddedView(\n\t\t\t\tcontent,\n\t\t\t\t{ injector: this.injector },\n\t\t\t\t{ injector: this.injector },\n\t\t\t);\n\t\t\tthis.portalViewRef.detectChanges();\n\t\t\tthis.portalContentRendered.set(true);\n\t\t});\n\t}\n}\n\nexport const NgtPortal = [NgtPortalImpl, NgtPortalContent] as const;\n","import { Subject } from 'rxjs';\nimport * as THREE from 'three';\nimport { getInstanceState } from './instance';\nimport type {\n\tNgtAnyRecord,\n\tNgtDomEvent,\n\tNgtEventHandlers,\n\tNgtIntersection,\n\tNgtPointerCaptureTarget,\n\tNgtState,\n\tNgtThreeEvent,\n} from './types';\nimport { makeId } from './utils/make';\nimport { SignalState } from './utils/signal-state';\n\n/**\n * Release pointer captures.\n * This is called by releasePointerCapture in the API, and when an object is removed.\n */\nfunction releaseInternalPointerCapture(\n\tcapturedMap: Map<number, Map<THREE.Object3D, NgtPointerCaptureTarget>>,\n\tobj: THREE.Object3D,\n\tcaptures: Map<THREE.Object3D, NgtPointerCaptureTarget>,\n\tpointerId: number,\n): void {\n\tconst captureData: NgtPointerCaptureTarget | undefined = captures.get(obj);\n\tif (captureData) {\n\t\tcaptures.delete(obj);\n\t\t// If this was the last capturing object for this pointer\n\t\tif (captures.size === 0) {\n\t\t\tcapturedMap.delete(pointerId);\n\t\t\tcaptureData.target.releasePointerCapture(pointerId);\n\t\t}\n\t}\n}\n\nexport function removeInteractivity(store: SignalState<NgtState>, object: THREE.Object3D) {\n\tconst { internal } = store.snapshot;\n\t// Removes every trace of an object from the data store\n\tinternal.interaction = internal.interaction.filter((o) => o !== object);\n\tinternal.initialHits = internal.initialHits.filter((o) => o !== object);\n\tinternal.hovered.forEach((value, key) => {\n\t\tif (value.eventObject === object || value.object === object) {\n\t\t\t// Clear out intersects, they are outdated by now\n\t\t\tinternal.hovered.delete(key);\n\t\t}\n\t});\n\tinternal.capturedMap.forEach((captures, pointerId) => {\n\t\treleaseInternalPointerCapture(internal.capturedMap, object, captures, pointerId);\n\t});\n}\n\nexport function createEvents(store: SignalState<NgtState>) {\n\t/** Calculates delta */\n\tfunction calculateDistance(event: NgtDomEvent) {\n\t\tconst internal = store.snapshot.internal;\n\t\tconst dx = event.offsetX - internal.initialClick[0];\n\t\tconst dy = event.offsetY - internal.initialClick[1];\n\t\treturn Math.round(Math.sqrt(dx * dx + dy * dy));\n\t}\n\n\t/** Returns true if an instance has a valid pointer-event registered, this excludes scroll, clicks etc */\n\tfunction filterPointerEvents(objects: THREE.Object3D[]) {\n\t\treturn objects.filter((obj) =>\n\t\t\t['move', 'over', 'enter', 'out', 'leave'].some((name) => {\n\t\t\t\tconst eventName = `pointer${name}` as keyof NgtEventHandlers;\n\t\t\t\treturn getInstanceState(obj)?.handlers?.[eventName];\n\t\t\t}),\n\t\t);\n\t}\n\n\tfunction intersect(event: NgtDomEvent, filter?: (objects: THREE.Object3D[]) => THREE.Object3D[]) {\n\t\tconst state = store.snapshot;\n\t\tconst duplicates = new Set<string>();\n\t\tconst intersections: NgtIntersection[] = [];\n\t\t// Allow callers to eliminate event objects\n\t\tconst eventsObjects = filter ? filter(state.internal.interaction) : state.internal.interaction;\n\t\t// Reset all raycaster cameras to undefined\n\t\tfor (let i = 0; i < eventsObjects.length; i++) {\n\t\t\tconst objectRootState = getInstanceState(eventsObjects[i])?.store?.snapshot;\n\t\t\tif (objectRootState) {\n\t\t\t\tobjectRootState.raycaster.camera = undefined!;\n\t\t\t}\n\t\t}\n\n\t\tif (!state.previousRoot) {\n\t\t\t// Make sure root-level pointer and ray are set up\n\t\t\tstate.events.compute?.(event, store, null);\n\t\t}\n\n\t\tfunction handleRaycast(obj: THREE.Object3D) {\n\t\t\tconst objStore = getInstanceState(obj)?.store;\n\t\t\tconst objState = objStore?.snapshot;\n\t\t\t// Skip event handling when noEvents is set, or when the raycasters camera is null\n\t\t\tif (!objState || !objState.events.enabled || objState.raycaster.camera === null) return [];\n\n\t\t\t// When the camera is undefined we have to call the event layers update function\n\t\t\tif (objState.raycaster.camera === undefined) {\n\t\t\t\tobjState.events.compute?.(event, objStore, objState.previousRoot);\n\t\t\t\t// If the camera is still undefined we have to skip this layer entirely\n\t\t\t\tif (objState.raycaster.camera === undefined) objState.raycaster.camera = null!;\n\t\t\t}\n\n\t\t\t// Intersect object by object\n\t\t\treturn objState.raycaster.camera ? objState.raycaster.intersectObject(obj, true) : [];\n\t\t}\n\n\t\t// Collect events\n\t\tlet hits: THREE.Intersection<THREE.Object3D>[] = eventsObjects\n\t\t\t// Intersect objects\n\t\t\t.flatMap(handleRaycast)\n\t\t\t// Sort by event priority and distance\n\t\t\t.sort((a, b) => {\n\t\t\t\tconst aState = getInstanceState(a.object)?.store?.snapshot;\n\t\t\t\tconst bState = getInstanceState(b.object)?.store?.snapshot;\n\t\t\t\tif (!aState || !bState) return a.distance - b.distance;\n\t\t\t\treturn bState.events.priority - aState.events.priority || a.distance - b.distance;\n\t\t\t})\n\t\t\t// Filter out duplicates\n\t\t\t.filter((item) => {\n\t\t\t\tconst id = makeId(item as NgtIntersection);\n\t\t\t\tif (duplicates.has(id)) return false;\n\t\t\t\tduplicates.add(id);\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t// https://github.com/mrdoob/three.js/issues/16031\n\t\t// Allow custom userland intersect sort order, this likely only makes sense on the root filter\n\t\tif (state.events.filter) hits = state.events.filter(hits, store);\n\n\t\t// Bubble up the events, find the event source (eventObject)\n\t\tfor (const hit of hits) {\n\t\t\tlet eventObject: THREE.Object3D | null = hit.object;\n\t\t\t// bubble event up\n\t\t\twhile (eventObject) {\n\t\t\t\tif (getInstanceState(eventObject)?.eventCount) intersections.push({ ...hit, eventObject });\n\t\t\t\teventObject = eventObject.parent;\n\t\t\t}\n\t\t}\n\n\t\t// If the interaction is captured, make all capturing targets part of the intersect.\n\t\tif ('pointerId' in event && state.internal.capturedMap.has(event.pointerId)) {\n\t\t\tfor (const captureData of state.internal.capturedMap.get(event.pointerId)!.values()) {\n\t\t\t\tif (!duplicates.has(makeId(captureData.intersection))) intersections.push(captureData.intersection);\n\t\t\t}\n\t\t}\n\t\treturn intersections;\n\t}\n\n\t/** Handles intersections by forwarding them to handlers */\n\tfunction handleIntersects(\n\t\tintersections: NgtIntersection[],\n\t\tevent: NgtDomEvent,\n\t\tdelta: number,\n\t\tcallback: (event: NgtThreeEvent<NgtDomEvent>) => void,\n\t) {\n\t\tconst rootState = store.snapshot;\n\n\t\t// If anything has been found, forward it to the event listeners\n\t\tif (intersections.length) {\n\t\t\tconst localState = { stopped: false };\n\t\t\tfor (const hit of intersections) {\n\t\t\t\tlet instanceState = getInstanceState(hit.object);\n\n\t\t\t\t// If the object is not managed by NGT, it might be parented to an element which is.\n\t\t\t\t// Traverse upwards until we find a managed parent and use its state instead.\n\t\t\t\tif (!instanceState) {\n\t\t\t\t\thit.object.traverseAncestors((ancestor) => {\n\t\t\t\t\t\tconst parentInstanceState = getInstanceState(ancestor);\n\t\t\t\t\t\tif (parentInstanceState) {\n\t\t\t\t\t\t\tinstanceState = parentInstanceState;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst { raycaster, pointer, camera, internal } = instanceState?.store?.snapshot || rootState;\n\n\t\t\t\tconst unprojectedPoint = new THREE.Vector3(pointer.x, pointer.y, 0).unproject(camera);\n\t\t\t\tconst hasPointerCapture = (id: number) => internal.capturedMap.get(id)?.has(hit.eventObject) ?? false;\n\n\t\t\t\tconst setPointerCapture = (id: number) => {\n\t\t\t\t\tconst captureData = { intersection: hit, target: event.target as Element };\n\t\t\t\t\tif (internal.capturedMap.has(id)) {\n\t\t\t\t\t\t// if the pointerId was previously captured, we add the hit to the\n\t\t\t\t\t\t// event capturedMap.\n\t\t\t\t\t\tinternal.capturedMap.get(id)!.set(hit.eventObject, captureData);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// if the pointerId was not previously captured, we create a map\n\t\t\t\t\t\t// containing the hitObject, and the hit. hitObject is used for\n\t\t\t\t\t\t// faster access.\n\t\t\t\t\t\tinternal.capturedMap.set(id, new Map([[hit.eventObject, captureData]]));\n\t\t\t\t\t}\n\t\t\t\t\t// Call the original event now\n\t\t\t\t\t(event.target as Element).setPointerCapture(id);\n\t\t\t\t};\n\n\t\t\t\tconst releasePointerCapture = (id: number) => {\n\t\t\t\t\tconst captures = internal.capturedMap.get(id);\n\t\t\t\t\tif (captures) {\n\t\t\t\t\t\treleaseInternalPointerCapture(internal.capturedMap, hit.eventObject, captures, id);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Add native event props\n\t\t\t\tconst extractEventProps: any = {};\n\t\t\t\t// This iterates over the event's properties including the inherited ones. Native PointerEvents have most of their props as getters which are inherited, but polyfilled PointerEvents have them all as their own properties (i.e. not inherited). We can't use Object.keys() or Object.entries() as they only return \"own\" properties; nor Object.getPrototypeOf(event) as that *doesn't* return \"own\" properties, only inherited ones.\n\t\t\t\tfor (const prop in event) {\n\t\t\t\t\tconst property = event[prop as keyof NgtDomEvent];\n\t\t\t\t\t// Only copy over atomics, leave functions alone as these should be\n\t\t\t\t\t// called as event.nativeEvent.fn()\n\t\t\t\t\tif (typeof property !== 'function') extractEventProps[prop] = property;\n\t\t\t\t}\n\n\t\t\t\tconst raycastEvent: NgtThreeEvent<NgtDomEvent> = {\n\t\t\t\t\t...hit,\n\t\t\t\t\t...extractEventProps,\n\t\t\t\t\tpointer,\n\t\t\t\t\tintersections,\n\t\t\t\t\tstopped: localState.stopped,\n\t\t\t\t\tdelta,\n\t\t\t\t\tunprojectedPoint,\n\t\t\t\t\tray: raycaster.ray,\n\t\t\t\t\tcamera,\n\t\t\t\t\t// Hijack stopPropagation, which just sets a flag\n\t\t\t\t\tstopPropagation() {\n\t\t\t\t\t\t// https://github.com/pmndrs/react-three-fiber/issues/596\n\t\t\t\t\t\t// Events are not allowed to stop propagation if the pointer has been captured\n\t\t\t\t\t\tconst capturesForPointer = 'pointerId' in event && internal.capturedMap.get(event.pointerId);\n\n\t\t\t\t\t\t// We only authorize stopPropagation...\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t// ...if this pointer hasn't been captured\n\t\t\t\t\t\t\t!capturesForPointer ||\n\t\t\t\t\t\t\t// ... or if the hit object is capturing the pointer\n\t\t\t\t\t\t\tcapturesForPointer.has(hit.eventObject)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\traycastEvent.stopped = localState.stopped = true;\n\t\t\t\t\t\t\t// Propagation is stopped, remove all other hover records\n\t\t\t\t\t\t\t// An event handler is only allowed to flush other handlers if it is hovered itself\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tinternal.hovered.size &&\n\t\t\t\t\t\t\t\tArray.from(internal.hovered.values()).find((i) => i.eventObject === hit.eventObject)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// Objects cannot flush out higher up objects that have already caught the event\n\t\t\t\t\t\t\t\tconst higher = intersections.slice(0, intersections.indexOf(hit));\n\t\t\t\t\t\t\t\tcancelPointer([...higher, hit]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t// there should be a distinction between target and currentTarget\n\t\t\t\t\ttarget: { hasPointerCapture, setPointerCapture, releasePointerCapture },\n\t\t\t\t\tcurrentTarget: { hasPointerCapture, setPointerCapture, releasePointerCapture },\n\t\t\t\t\tnativeEvent: event,\n\t\t\t\t};\n\n\t\t\t\t// Call subscribers\n\t\t\t\tcallback(raycastEvent);\n\t\t\t\t// Event bubbling may be interrupted by stopPropagation\n\t\t\t\tif (localState.stopped) break;\n\t\t\t}\n\t\t}\n\t\treturn intersections;\n\t}\n\n\tfunction cancelPointer(intersections: NgtIntersection[]) {\n\t\tconst internal = store.snapshot.internal;\n\t\tfor (const hoveredObj of internal.hovered.values()) {\n\t\t\t// When no objects were hit or the the hovered object wasn't found underneath the cursor\n\t\t\t// we call onPointerOut and delete the object from the hovered-elements map\n\t\t\tif (\n\t\t\t\t!intersections.length ||\n\t\t\t\t!intersections.find(\n\t\t\t\t\t(hit) =>\n\t\t\t\t\t\thit.object === hoveredObj.object &&\n\t\t\t\t\t\thit.index === hoveredObj.index &&\n\t\t\t\t\t\thit.instanceId === hoveredObj.instanceId,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tconst eventObject = hoveredObj.eventObject;\n\t\t\t\tconst instance = getInstanceState(eventObject);\n\t\t\t\tconst handlers = instance?.handlers;\n\t\t\t\tinternal.hovered.delete(makeId(hoveredObj));\n\t\t\t\tif (instance?.eventCount) {\n\t\t\t\t\t// Clear out intersects, they are outdated by now\n\t\t\t\t\tconst data = { ...hoveredObj, intersections };\n\t\t\t\t\thandlers?.pointerout?.(data as NgtThreeEvent<PointerEvent>);\n\t\t\t\t\thandlers?.pointerleave?.(data as NgtThreeEvent<PointerEvent>);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction pointerMissed(event: MouseEvent, objects: THREE.Object3D[]) {\n\t\tfor (let i = 0; i < objects.length; i++) {\n\t\t\tconst instance = getInstanceState(objects[i]);\n\t\t\tinstance?.handlers.pointermissed?.(event);\n\t\t}\n\t}\n\n\tfunction handlePointer(name: string) {\n\t\t// Deal with cancelation\n\t\tswitch (name) {\n\t\t\tcase 'pointerleave':\n\t\t\tcase 'pointercancel':\n\t\t\t\treturn () => cancelPointer([]);\n\t\t\tcase 'lostpointercapture':\n\t\t\t\treturn (event: NgtDomEvent) => {\n\t\t\t\t\tconst { internal } = store.snapshot;\n\t\t\t\t\tif ('pointerId' in event && internal.capturedMap.has(event.pointerId)) {\n\t\t\t\t\t\t// If the object event interface had lostpointercapture, we'd call it here on every\n\t\t\t\t\t\t// object that's getting removed. We call it on the next frame because lostpointercapture\n\t\t\t\t\t\t// fires before pointerup. Otherwise pointerUp would never be called if the event didn't\n\t\t\t\t\t\t// happen in the object it originated from, leaving components in a in-between state.\n\t\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\t\t// Only release if pointer-up didn't do it already\n\t\t\t\t\t\t\tif (internal.capturedMap.has(event.pointerId)) {\n\t\t\t\t\t\t\t\tinternal.capturedMap.delete(event.pointerId);\n\t\t\t\t\t\t\t\tcancelPointer([]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t}\n\n\t\t// Any other pointer goes here ...\n\t\treturn function handleEvent(event: NgtDomEvent) {\n\t\t\t// NOTE: __pointerMissed$ on NgtStore is private subject since we only expose the Observable\n\t\t\tconst pointerMissed$: Subject<MouseEvent> = (store as NgtAnyRecord)['__pointerMissed$'];\n\t\t\tconst internal = store.snapshot.internal;\n\n\t\t\t// prepareRay(event)\n\t\t\tinternal.lastEvent.nativeElement = event;\n\n\t\t\t// Get fresh intersects\n\t\t\tconst isPointerMove = name === 'pointermove';\n\t\t\tconst isClickEvent = name === 'click' || name === 'contextmenu' || name === 'dblclick';\n\t\t\tconst filter = isPointerMove ? filterPointerEvents : undefined;\n\n\t\t\tconst hits = intersect(event, filter);\n\t\t\tconst delta = isClickEvent ? calculateDistance(event) : 0;\n\n\t\t\t// Save initial coordinates on pointer-down\n\t\t\tif (name === 'pointerdown') {\n\t\t\t\tinternal.initialClick = [event.offsetX, event.offsetY];\n\t\t\t\tinternal.initialHits = hits.map((hit) => hit.eventObject);\n\t\t\t}\n\n\t\t\t// If a click yields no results, pass it back to the user as a miss\n\t\t\t// Missed events have to come first in order to establish user-land side-effect clean up\n\t\t\tif (isClickEvent && !hits.length) {\n\t\t\t\tif (delta <= 2) {\n\t\t\t\t\tpointerMissed(event, internal.interaction);\n\t\t\t\t\tpointerMissed$.next(event);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take care of unhover\n\t\t\tif (isPointerMove) cancelPointer(hits);\n\n\t\t\tfunction onIntersect(data: NgtThreeEvent<NgtDomEvent>) {\n\t\t\t\tconst eventObject = data.eventObject;\n\t\t\t\tconst instance = getInstanceState(eventObject);\n\t\t\t\tconst handlers = instance?.handlers;\n\n\t\t\t\t// Check presence of handlers\n\t\t\t\tif (!instance?.eventCount) return;\n\n\t\t\t\t/*\n MAYBE TODO, DELETE IF NOT:\n Check if the object is captured, captured events should not have intersects running in parallel\n But wouldn't it be better to just replace capturedMap with a single entry?\n Also, are we OK with straight up making picking up multiple objects impossible?\n\n const pointerId = (data as ThreeEvent<PointerEvent>).pointerId\n if (pointerId !== undefined) {\n const capturedMeshSet = internal.capturedMap.get(pointerId)\n if (capturedMeshSet) {\n const captured = capturedMeshSet.get(eventObject)\n if (captured && captured.localState.stopped) return\n }\n }*/\n\n\t\t\t\tif (isPointerMove) {\n\t\t\t\t\t// Move event ...\n\t\t\t\t\tif (\n\t\t\t\t\t\thandlers?.pointerover ||\n\t\t\t\t\t\thandlers?.pointerenter ||\n\t\t\t\t\t\thandlers?.pointerout ||\n\t\t\t\t\t\thandlers?.pointerleave\n\t\t\t\t\t) {\n\t\t\t\t\t\t// When enter or out is present take care of hover-state\n\t\t\t\t\t\tconst id = makeId(data);\n\t\t\t\t\t\tconst hoveredItem = internal.hovered.get(id);\n\t\t\t\t\t\tif (!hoveredItem) {\n\t\t\t\t\t\t\t// If the object wasn't previously hovered, book it and call its handler\n\t\t\t\t\t\t\tinternal.hovered.set(id, data);\n\t\t\t\t\t\t\thandlers.pointerover?.(data as NgtThreeEvent<PointerEvent>);\n\t\t\t\t\t\t\thandlers.pointerenter?.(data as NgtThreeEvent<PointerEvent>);\n\t\t\t\t\t\t} else if (hoveredItem.stopped) {\n\t\t\t\t\t\t\t// If the object was previously hovered and stopped, we shouldn't allow other items to proceed\n\t\t\t\t\t\t\tdata.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Call mouse move\n\t\t\t\t\thandlers?.pointermove?.(data as NgtThreeEvent<PointerEvent>);\n\t\t\t\t} else {\n\t\t\t\t\t// All other events ...\n\t\t\t\t\tconst handler = handlers?.[name as keyof NgtEventHandlers] as (\n\t\t\t\t\t\tevent: NgtThreeEvent<PointerEvent>,\n\t\t\t\t\t) => void;\n\t\t\t\t\tif (handler) {\n\t\t\t\t\t\t// Forward all events back to their respective handlers with the exception of click events,\n\t\t\t\t\t\t// which must use the initial target\n\t\t\t\t\t\tif (!isClickEvent || internal.initialHits.includes(eventObject)) {\n\t\t\t\t\t\t\t// Missed events have to come first\n\t\t\t\t\t\t\tpointerMissed(\n\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\tinternal.interaction.filter((object) => !internal.initialHits.includes(object)),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// Now call the handler\n\t\t\t\t\t\t\thandler(data as NgtThreeEvent<PointerEvent>);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Trigger onPointerMissed on all elements that have pointer over/out handlers, but not click and weren't hit\n\t\t\t\t\t\tif (isClickEvent && internal.initialHits.includes(eventObject)) {\n\t\t\t\t\t\t\tpointerMissed(\n\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\tinternal.interaction.filter((object) => !internal.initialHits.includes(object)),\n\t\t\t\t\t\t\t);\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\thandleIntersects(hits, event, delta, onIntersect);\n\t\t};\n\t}\n\n\treturn { handlePointer };\n}\n","import * as THREE from 'three';\nimport { getInstanceState, invalidateInstance } from '../instance';\nimport type { NgtAnyRecord, NgtInstanceNode, NgtInstanceState, NgtState } from '../types';\nimport { is } from './is';\nimport { checkUpdate } from './update';\n\n// This function prepares a set of changes to be applied to the instance\nfunction diffProps(instance: NgtAnyRecord, props: NgtAnyRecord) {\n\tconst changes: [key: string, value: unknown][] = [];\n\n\tfor (const propKey in props) {\n\t\tconst propValue = props[propKey];\n\t\tlet key = propKey;\n\t\tif (is.colorSpaceExist(instance)) {\n\t\t\tif (propKey === 'encoding') {\n\t\t\t\tkey = 'colorSpace';\n\t\t\t} else if (propKey === 'outputEncoding') {\n\t\t\t\tkey = 'outputColorSpace';\n\t\t\t}\n\t\t}\n\t\tif (is.equ(propValue, instance[key])) continue;\n\t\tchanges.push([propKey, propValue]);\n\t}\n\n\treturn changes;\n}\n\n// NOTE: this is a workaround to give the instance a chance to have the store from the parent.\n// we clear this property after the applyProps is done\nexport const NGT_APPLY_PROPS = '__ngt_apply_props__';\n\n// https://github.com/mrdoob/three.js/pull/27042\n// https://github.com/mrdoob/three.js/pull/22748\nconst colorMaps = ['map', 'emissiveMap', 'sheenColorMap', 'specularColorMap', 'envMap'];\n\ntype ClassConstructor = { new (): void };\n\nexport function resolveInstanceKey(instance: any, key: string): { root: any; targetKey: string; targetProp: any } {\n\tlet targetProp = instance[key];\n\tif (!key.includes('.')) return { root: instance, targetKey: key, targetProp };\n\n\t// Resolve pierced target\n\tconst chain = key.split('.');\n\ttargetProp = chain.reduce((acc, part) => acc[part], instance);\n\tconst targetKey = chain.pop()!;\n\n\t// Switch root if atomic\n\tif (!targetProp?.set) instance = chain.reduce((acc, part) => acc[part], instance);\n\n\treturn { root: instance, targetKey, targetProp };\n}\n\n// This function applies a set of changes to the instance\nexport function applyProps<T extends NgtAnyRecord>(instance: NgtInstanceState<T>['object'], props: NgtAnyRecord) {\n\t// if props is empty\n\tif (!Object.keys(props).length) return instance;\n\n\tconst localState = getInstanceState(instance);\n\tconst rootState =\n\t\tlocalState?.store?.snapshot ?? (instance as NgtAnyRecord)[NGT_APPLY_PROPS]?.snapshot ?? ({} as NgtState);\n\tconst changes = diffProps(instance, props);\n\n\tfor (let i = 0; i < changes.length; i++) {\n\t\tlet [key, value] = changes[i];\n\n\t\t// Ignore setting undefined props\n\t\t// https://github.com/pmndrs/react-three-fiber/issues/274\n\t\tif (value === undefined) continue;\n\n\t\t// Alias (output)encoding => (output)colorSpace (since r152)\n\t\t// https://github.com/pmndrs/react-three-fiber/pull/2829\n\t\t// if (is.colorSpaceExist(instance)) {\n\t\t// \tconst sRGBEncoding = 3001;\n\t\t// \tconst SRGBColorSpace = 'srgb';\n\t\t// \tconst LinearSRGBColorSpace = 'srgb-linear';\n\t\t//\n\t\t// \tif (key === 'encoding') {\n\t\t// \t\tkey = 'colorSpace';\n\t\t// \t\tvalue = value === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace;\n\t\t// \t} else if (key === 'outputEncoding') {\n\t\t// \t\tkey = 'outputColorSpace';\n\t\t// \t\tvalue = value === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace;\n\t\t// \t}\n\t\t// }\n\n\t\tconst { root, targetKey, targetProp } = resolveInstanceKey(instance, key);\n\n\t\t// we have switched due to pierced props\n\t\tif (root !== instance) {\n\t\t\treturn applyProps(root, { [targetKey]: value });\n\t\t}\n\n\t\t// Layers have no copy function, we must therefore copy the mask property\n\t\tif (targetProp instanceof THREE.Layers && value instanceof THREE.Layers) {\n\t\t\ttargetProp.mask = value.mask;\n\t\t} else if (is.three<THREE.Color>(targetProp, 'isColor') && is.colorRepresentation(value)) {\n\t\t\ttargetProp.set(value);\n\t\t}\n\t\t// Copy if properties match signatures\n\t\telse if (\n\t\t\ttargetProp &&\n\t\t\ttypeof targetProp.set === 'function' &&\n\t\t\ttypeof targetProp.copy === 'function' &&\n\t\t\t(value as ClassConstructor | undefined)?.constructor &&\n\t\t\t(targetProp as ClassConstructor).constructor === (value as ClassConstructor).constructor\n\t\t) {\n\t\t\t// If both are geometries, we should assign the value directly instead of copying\n\t\t\tif (\n\t\t\t\tis.three<THREE.BufferGeometry>(targetProp, 'isBufferGeometry') &&\n\t\t\t\tis.three<THREE.BufferGeometry>(value, 'isBufferGeometry')\n\t\t\t) {\n\t\t\t\tObject.assign(root, { [targetKey]: value });\n\t\t\t} else {\n\t\t\t\ttargetProp.copy(value);\n\t\t\t}\n\t\t}\n\t\t// Set array types\n\t\telse if (targetProp && typeof targetProp.set === 'function' && Array.isArray(value)) {\n\t\t\tif (typeof targetProp.fromArray === 'function') targetProp.fromArray(value);\n\t\t\telse targetProp.set(...value);\n\t\t}\n\t\t// Set literal types\n\t\telse if (targetProp && typeof targetProp.set === 'function' && typeof value !== 'object') {\n\t\t\tconst isColor = is.three<THREE.Color>(targetProp, 'isColor');\n\t\t\t// Allow setting array scalars\n\t\t\tif (!isColor && typeof targetProp.setScalar === 'function' && typeof value === 'number')\n\t\t\t\ttargetProp.setScalar(value);\n\t\t\t// Otherwise just set single value\n\t\t\telse targetProp.set(value);\n\t\t}\n\t\t// Else, just overwrite the value\n\t\telse {\n\t\t\tObject.assign(root, { [targetKey]: value });\n\n\t\t\t// Auto-convert sRGB texture parameters for built-in materials\n\t\t\t// https://github.com/pmndrs/react-three-fiber/issues/344\n\t\t\t// https://github.com/mrdoob/three.js/pull/25857\n\t\t\tif (\n\t\t\t\trootState &&\n\t\t\t\t!rootState.linear &&\n\t\t\t\tcolorMaps.includes(targetKey) &&\n\t\t\t\t(root[targetKey] as THREE.Texture | undefined)?.isTexture &&\n\t\t\t\t// sRGB textures must be RGBA8 since r137 https://github.com/mrdoob/three.js/pull/23129\n\t\t\t\troot[targetKey].format === THREE.RGBAFormat &&\n\t\t\t\troot[targetKey].type === THREE.UnsignedByteType\n\t\t\t) {\n\t\t\t\t// NOTE: this cannot be set from the renderer (e.g. sRGB source textures rendered to P3)\n\t\t\t\troot[targetKey].colorSpace = THREE.SRGBColorSpace;\n\t\t\t}\n\t\t}\n\n\t\tcheckUpdate(root[targetKey]);\n\t\tcheckUpdate(targetProp);\n\t\tinvalidateInstance(instance as NgtInstanceNode<T>);\n\t}\n\n\tconst instanceHandlersCount = localState?.eventCount;\n\tconst parent = localState?.hierarchyStore?.snapshot.parent;\n\n\tif (parent && rootState.internal && instance['raycast'] && instanceHandlersCount !== localState?.eventCount) {\n\t\t// Pre-emptively remove the instance from the interaction manager\n\t\tconst index = rootState.internal.interaction.indexOf(instance);\n\t\tif (index > -1) rootState.internal.interaction.splice(index, 1);\n\t\t// Add the instance to the interaction manager only when it has handlers\n\t\tif (localState?.eventCount) rootState.internal.interaction.push(instance);\n\t}\n\n\tif (parent && localState?.onUpdate && changes.length) {\n\t\tlocalState.onUpdate(instance as NgtInstanceNode<T>);\n\t}\n\n\t// clearing the intermediate store from the instance\n\tif (instance[NGT_APPLY_PROPS]) {\n\t\tdelete instance[NGT_APPLY_PROPS];\n\t}\n\n\treturn instance;\n}\n","import { Injector } from '@angular/core';\nimport type { NgtAnyRecord } from '../types';\nimport { NGT_DOM_PARENT_FLAG, NGT_GET_NODE_ATTRIBUTE_FLAG, NGT_RENDERER_NODE_FLAG } from './constants';\nimport { NgtRendererClassId } from './utils';\n\ntype ThreeRendererState = [\n\ttype: 'three',\n\tdestroyed: boolean,\n\trawValue: any | undefined,\n\tportalContainer: never | undefined,\n\tinjector: never | undefined,\n\t// ThreeRendererState is the case where *parent is used\n\tparent: NgtRendererNode<'platform' | 'portal' | 'three'> | undefined,\n\tchildren: Array<NgtRendererNode<'platform' | 'portal' | 'comment'>>,\n];\n\ntype PortalRendererState = [\n\ttype: 'portal',\n\tdestroyed: boolean,\n\trawValue: never | undefined,\n\tportalContainer: NgtRendererNode<'three'> | undefined,\n\tinjector: Injector | undefined,\n\tparent: any | undefined,\n\tchildren: any[],\n];\n\ntype PlatformRendererState = [\n\ttype: 'platform',\n\tdestroyed: boolean,\n\trawValue: never | undefined,\n\tportalContainer: never | undefined,\n\tinjector: never | undefined,\n\tparent: NgtRendererNode<'three' | 'portal'> | undefined,\n\tchildren: Array<NgtRendererNode<'three' | 'portal' | 'comment'>>,\n];\n\ntype CommentRendererState = [\n\ttype: 'comment',\n\tdestroyed: boolean,\n\trawValue: never | undefined,\n\tportalContainer: never | undefined,\n\tinjector: Injector | undefined,\n\tparent: NgtRendererNode | undefined,\n\tchildren: NgtRendererNode[],\n];\n\ntype TextRendererState = [\n\ttype: 'text',\n\tdestroyed: boolean,\n\trawValue: never | undefined,\n\tportalContainer: never | undefined,\n\tinjector: never | undefined,\n\tparent: NgtRendererNode | undefined,\n\tchildren: NgtRendererNode[],\n];\n\ntype NgtRendererStateMap = {\n\tthree: ThreeRendererState;\n\tportal: PortalRendererState;\n\tplatform: PlatformRendererState;\n\tcomment: CommentRendererState;\n\ttext: TextRendererState;\n};\n\nexport type NgtRendererState =\n\t| ThreeRendererState\n\t| PortalRendererState\n\t| PlatformRendererState\n\t| CommentRendererState\n\t| TextRendererState;\n\nexport interface NgtRendererNode<TType extends keyof NgtRendererStateMap = keyof NgtRendererStateMap>\n\textends NgtAnyRecord {\n\t[NGT_RENDERER_NODE_FLAG]: NgtRendererStateMap[TType];\n\t[NGT_DOM_PARENT_FLAG]?: HTMLElement;\n}\n\nexport function isRendererNode(node: unknown): node is NgtRendererNode {\n\treturn !!node && typeof node === 'object' && NGT_RENDERER_NODE_FLAG in node;\n}\n\nexport function createRendererNode<TType extends keyof NgtRendererStateMap>(\n\ttype: TType,\n\tnode: NgtAnyRecord,\n\tdocument: Document,\n) {\n\tconst state = [type, false, undefined, undefined, undefined, undefined, []] as NgtRendererState;\n\tconst rendererNode = Object.assign(node, { [NGT_RENDERER_NODE_FLAG]: state });\n\n\t// NOTE: assign ownerDocument to node so we can use HostListener in Component\n\tif (!rendererNode['ownerDocument']) rendererNode['ownerDocument'] = document;\n\n\t// NOTE: Angular SSR calls `node.getAttribute()` to retrieve hydration info on a node\n\tif (!('getAttribute' in rendererNode) || typeof rendererNode['getAttribute'] !== 'function') {\n\t\tconst getNodeAttribute = (name: string) => rendererNode[name];\n\t\tgetNodeAttribute[NGT_GET_NODE_ATTRIBUTE_FLAG] = true;\n\t\tObject.defineProperty(rendererNode, 'getAttribute', { value: getNodeAttribute, configurable: true });\n\t}\n\n\treturn rendererNode as NgtRendererNode<TType>;\n}\n\nexport function setRendererParentNode(node: NgtRendererNode, parent: NgtRendererNode) {\n\tif (!node.__ngt_renderer__[NgtRendererClassId.parent]) {\n\t\tnode.__ngt_renderer__[NgtRendererClassId.parent] = parent;\n\t}\n}\n\nexport function addRendererChildNode(node: NgtRendererNode, child: NgtRendererNode) {\n\tif (!node.__ngt_renderer__[NgtRendererClassId.children].includes(child)) {\n\t\tnode.__ngt_renderer__[NgtRendererClassId.children].push(child);\n\t}\n}\n","import { getInstanceState } from '../instance';\nimport type { NgtAttachFunction, NgtInstanceNode, NgtState } from '../types';\nimport { applyProps, NGT_APPLY_PROPS } from './apply-props';\nimport { SignalState } from './signal-state';\n\nexport function attach(object: NgtInstanceNode, value: unknown, paths: string[] = [], useApplyProps = false): void {\n\tconst [base, ...remaining] = paths;\n\tif (!base) return;\n\n\tif (remaining.length === 0) {\n\t\tif (useApplyProps) applyProps(object, { [base]: value });\n\t\telse object[base] = value;\n\t} else {\n\t\tassignEmpty(object, base, useApplyProps);\n\t\tattach(object[base], value, remaining, useApplyProps);\n\t}\n}\n\nexport function detach(parent: NgtInstanceNode, child: NgtInstanceNode, attachProp: string[] | NgtAttachFunction) {\n\tconst childInstanceState = getInstanceState(child);\n\tif (childInstanceState) {\n\t\tif (Array.isArray(attachProp))\n\t\t\tattach(parent, childInstanceState.previousAttach, attachProp, childInstanceState.type === 'ngt-value');\n\t\telse (childInstanceState.previousAttach as () => void)?.();\n\t}\n}\n\nfunction assignEmpty(obj: NgtInstanceNode, base: string, shouldAssignStoreForApplyProps = false) {\n\tif ((!Object.hasOwn(obj, base) && Reflect && !!Reflect.has && !Reflect.has(obj, base)) || obj[base] === undefined) {\n\t\tobj[base] = {};\n\t}\n\n\tif (shouldAssignStoreForApplyProps) {\n\t\tconst instanceState = getInstanceState(obj[base]);\n\t\t// if we already have instance state, bail out\n\t\tif (instanceState) return;\n\n\t\tconst parentInstanceState = getInstanceState(obj);\n\t\t// if parent doesn't have instance state, bail out\n\t\tif (!parentInstanceState) return;\n\n\t\tObject.assign(obj[base], { [NGT_APPLY_PROPS]: parentInstanceState.store });\n\t}\n}\n\nexport function createAttachFunction<TChild = any, TParent = any>(\n\tcb: (params: { parent: TParent; child: TChild; store: SignalState<NgtState> }) => (() => void) | void,\n): NgtAttachFunction<TChild, TParent> {\n\treturn (parent, child, store) => cb({ parent, child, store });\n}\n","import { untracked } from '@angular/core';\nimport * as THREE from 'three';\nimport { removeInteractivity } from '../events';\nimport { getInstanceState, invalidateInstance } from '../instance';\nimport { NgtAnyRecord, NgtInstanceNode } from '../types';\nimport { attach, detach } from '../utils/attach';\nimport { is } from '../utils/is';\nimport {\n\tNGT_CANVAS_CONTENT_FLAG,\n\tNGT_DOM_PARENT_FLAG,\n\tNGT_GET_NODE_ATTRIBUTE_FLAG,\n\tNGT_INTERNAL_ADD_COMMENT_FLAG,\n\tNGT_INTERNAL_SET_PARENT_COMMENT_FLAG,\n\tNGT_PORTAL_CONTENT_FLAG,\n} from './constants';\nimport { NgtRendererNode } from './state';\n\n// @internal\nexport const enum NgtRendererClassId {\n\ttype,\n\tdestroyed,\n\trawValue,\n\tportalContainer,\n\tinjector,\n\tparent,\n\tchildren,\n}\n\nexport function kebabToPascal(str: string): string {\n\tif (!str) return str; // Handle empty input\n\n\tlet pascalStr = '';\n\tlet capitalizeNext = true; // Flag to track capitalization\n\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst char = str[i];\n\t\tif (char === '-') {\n\t\t\tcapitalizeNext = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tpascalStr += capitalizeNext ? char.toUpperCase() : char;\n\t\tcapitalizeNext = false;\n\t}\n\n\treturn pascalStr;\n}\n\nfunction propagateStoreRecursively(node: NgtInstanceNode, parentNode: NgtInstanceNode) {\n\tconst iS = getInstanceState(node);\n\tconst pIS = getInstanceState(parentNode);\n\n\tif (!iS || !pIS) return;\n\n\t// assign store on child if not already exist\n\t// or child store is not the same as parent store\n\t// or child store is the parent of parent store\n\tif (!iS.store || iS.store !== pIS.store || iS.store === pIS.store.snapshot.previousRoot) {\n\t\tiS.store = pIS.store;\n\n\t\t// Call addInteraction if it exists\n\t\tiS.addInteraction?.(pIS.store);\n\n\t\t// Collect all children (objects and nonObjects)\n\t\tconst children = [\n\t\t\t...(iS.objects ? untracked(iS.objects) : []),\n\t\t\t...(iS.nonObjects ? untracked(iS.nonObjects) : []),\n\t\t];\n\n\t\t// Recursively reassign the store for each child\n\t\tfor (const child of children) {\n\t\t\tpropagateStoreRecursively(child, node);\n\t\t}\n\t}\n}\n\nexport function attachThreeNodes(parent: NgtInstanceNode, child: NgtInstanceNode) {\n\tconst pIS = getInstanceState(parent);\n\tconst cIS = getInstanceState(child);\n\n\tif (!pIS || !cIS) {\n\t\tthrow new Error(`[NGT] THREE instances need to be prepared with local state.`);\n\t}\n\n\t// whether the child is added to the parent with parent.add()\n\tlet added = false;\n\n\t// propagate store recursively\n\tpropagateStoreRecursively(child, parent);\n\n\tif (cIS.attach) {\n\t\tconst attachProp = cIS.attach;\n\n\t\tif (typeof attachProp === 'function') {\n\t\t\tlet attachCleanUp: ReturnType<typeof attachProp> | undefined = undefined;\n\n\t\t\tif (cIS.type === 'ngt-value') {\n\t\t\t\tif (cIS.hierarchyStore.snapshot.parent !== parent) {\n\t\t\t\t\tcIS.setParent(parent);\n\t\t\t\t}\n\t\t\t\t// at this point we don't have rawValue yet, so we bail and wait until the Renderer recalls attach\n\t\t\t\tif ((child as unknown as NgtRendererNode).__ngt_renderer__[NgtRendererClassId.rawValue] === undefined)\n\t\t\t\t\treturn;\n\t\t\t\tattachCleanUp = attachProp(\n\t\t\t\t\tparent,\n\t\t\t\t\t(child as unknown as NgtRendererNode).__ngt_renderer__[NgtRendererClassId.rawValue],\n\t\t\t\t\tcIS.store!,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tattachCleanUp = attachProp(parent, child, cIS.store!);\n\t\t\t}\n\n\t\t\tif (attachCleanUp) cIS.previousAttach = attachCleanUp;\n\t\t} else {\n\t\t\t// we skip attach none if set explicitly\n\t\t\tif (attachProp[0] === 'none') {\n\t\t\t\tinvalidateInstance(child);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// handle material array\n\t\t\tif (\n\t\t\t\tattachProp[0] === 'material' &&\n\t\t\t\tattachProp[1] &&\n\t\t\t\ttypeof Number(attachProp[1]) === 'number' &&\n\t\t\t\tis.three<THREE.Material>(child, 'isMaterial') &&\n\t\t\t\t!Array.isArray(parent['material'])\n\t\t\t) {\n\t\t\t\tparent['material'] = [];\n\t\t\t}\n\n\t\t\tif (cIS.type === 'ngt-value') {\n\t\t\t\tif (cIS.hierarchyStore.snapshot.parent !== parent) {\n\t\t\t\t\tcIS.setParent(parent);\n\t\t\t\t}\n\t\t\t\t// at this point we don't have rawValue yet, so we bail and wait until the Renderer recalls attach\n\t\t\t\tif ((child as unknown as NgtRendererNode).__ngt_renderer__[NgtRendererClassId.rawValue] === undefined)\n\t\t\t\t\treturn;\n\n\t\t\t\t// save prev value\n\t\t\t\tcIS.previousAttach = attachProp.reduce((value, key) => value[key], parent);\n\t\t\t\tattach(\n\t\t\t\t\tparent,\n\t\t\t\t\t(child as unknown as NgtRendererNode).__ngt_renderer__[NgtRendererClassId.rawValue],\n\t\t\t\t\tattachProp,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// save prev value\n\t\t\t\tcIS.previousAttach = attachProp.reduce((value, key) => value[key], parent);\n\t\t\t\tattach(parent, child, attachProp);\n\t\t\t}\n\t\t}\n\t} else if (is.three<THREE.Object3D>(parent, 'isObject3D') && is.three<THREE.Object3D>(child, 'isObject3D')) {\n\t\tparent.add(child);\n\t\tadded = true;\n\t\tcIS.addInteraction?.(cIS.store || pIS.store);\n\t}\n\n\tif (pIS.add) {\n\t\tpIS.add(child, added ? 'objects' : 'nonObjects');\n\t}\n\n\tif (cIS.parent && untracked(cIS.parent) !== parent) {\n\t\tcIS.setParent(parent);\n\t}\n\n\t// NOTE: this does not mean that the child is actually attached to the parent on the scenegraph.\n\t// a child on the Angular template can also emit onAttach\n\tif (cIS.onAttach) cIS.onAttach({ parent, node: child });\n\n\tinvalidateInstance(child);\n\tinvalidateInstance(parent);\n}\n\nexport function removeThreeChild(child: NgtInstanceNode, parent: NgtInstanceNode, dispose?: boolean) {\n\tconst pIS = getInstanceState(parent);\n\tconst cIS = getInstanceState(child);\n\n\t// clear parent ref\n\tcIS?.setParent(null);\n\n\t// remove child from parent\n\tpIS?.remove?.(child, 'objects');\n\tpIS?.remove?.(child, 'nonObjects');\n\n\tif (cIS?.attach) {\n\t\tdetach(parent, child, cIS.attach);\n\t} else if (is.three<THREE.Object3D>(parent, 'isObject3D') && is.three<THREE.Object3D>(child, 'isObject3D')) {\n\t\tparent.remove(child);\n\t\tconst store = cIS?.store || pIS?.store;\n\t\tcIS?.removeInteraction?.(store);\n\t\tif (store) removeInteractivity(store, child);\n\t}\n\n\t// dispose\n\tconst isPrimitive = cIS?.type && cIS.type !== 'ngt-primitive';\n\tif (!isPrimitive && child['dispose'] && !is.three<THREE.Scene>(child, 'isScene')) {\n\t\tqueueMicrotask(() => child['dispose']());\n\t}\n\n\tinvalidateInstance(parent);\n}\n\nexport function internalDestroyNode(\n\tnode: NgtRendererNode,\n\tremoveChild: null | ((node: NgtRendererNode, child: NgtRendererNode) => void),\n) {\n\tconst rS = node.__ngt_renderer__;\n\tif (!rS || rS[NgtRendererClassId.destroyed]) return;\n\n\tfor (const child of rS[NgtRendererClassId.children].slice()) {\n\t\tremoveChild?.(node, child);\n\t\tinternalDestroyNode(child, removeChild);\n\t}\n\n\t// clear out parent if haven't\n\trS[NgtRendererClassId.parent] = undefined;\n\t// clear out children\n\trS[NgtRendererClassId.children].length = 0;\n\n\t// clear out NgtInstanceState\n\tconst iS = getInstanceState(node);\n\tif (iS) {\n\t\tconst temp = iS as NgtAnyRecord;\n\n\t\tiS.removeInteraction?.(iS.store);\n\n\t\tdelete temp['onAttach'];\n\t\tdelete temp['onUpdate'];\n\t\tdelete temp['object'];\n\t\tdelete temp['objects'];\n\t\tdelete temp['nonObjects'];\n\t\tdelete temp['parent'];\n\t\tdelete temp['add'];\n\t\tdelete temp['remove'];\n\t\tdelete temp['updateGeometryStamp'];\n\t\tdelete temp['setParent'];\n\t\tdelete temp['store'];\n\t\tdelete temp['handlers'];\n\t\tdelete temp['hierarchyStore'];\n\t\tdelete temp['previousAttach'];\n\t\tdelete temp['setPointerEvent'];\n\t\tdelete temp['addInteraction'];\n\t\tdelete temp['removeInteraction'];\n\n\t\tif (iS.type !== 'ngt-primitive') {\n\t\t\tdelete node['__ngt__'];\n\t\t}\n\t}\n\n\t// clear our debugNode\n\trS[NgtRendererClassId.injector] = undefined;\n\n\tif (rS[NgtRendererClassId.type] === 'comment') {\n\t\tdelete node[NGT_INTERNAL_ADD_COMMENT_FLAG];\n\t\tdelete node[NGT_INTERNAL_SET_PARENT_COMMENT_FLAG];\n\t\tdelete node[NGT_CANVAS_CONTENT_FLAG];\n\t\tdelete node[NGT_PORTAL_CONTENT_FLAG];\n\t\tdelete node[NGT_DOM_PARENT_FLAG];\n\t}\n\n\t// clear getAttribute if exist\n\tif (\n\t\t'getAttribute' in node &&\n\t\ttypeof node['getAttribute'] === 'function' &&\n\t\tnode['getAttribute'][NGT_GET_NODE_ATTRIBUTE_FLAG]\n\t) {\n\t\tdelete node['getAttribute'];\n\t}\n\n\t// mark node as destroyed\n\trS[NgtRendererClassId.destroyed] = true;\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n\tinject,\n\tInjectable,\n\tInjectionToken,\n\tInjector,\n\tRenderer2,\n\tRendererFactory2,\n\tRendererType2,\n\tType,\n\tuntracked,\n} from '@angular/core';\nimport * as THREE from 'three';\nimport { NgtArgs } from '../directives/args';\nimport { NgtCommonDirective } from '../directives/common';\nimport { NgtParent } from '../directives/parent';\nimport { getInstanceState, prepare } from '../instance';\nimport { NgtConstructorRepresentation, NgtEventHandlers, NgtInstanceNode, NgtInstanceState } from '../types';\nimport { applyProps } from '../utils/apply-props';\nimport { is } from '../utils/is';\nimport { injectCatalogue } from './catalogue';\nimport {\n\tNGT_CANVAS_CONTENT_FLAG,\n\tNGT_DELEGATE_RENDERER_DESTROY_NODE_PATCHED_FLAG,\n\tNGT_DOM_PARENT_FLAG,\n\tNGT_HTML_FLAG,\n\tNGT_INTERNAL_ADD_COMMENT_FLAG,\n\tNGT_INTERNAL_SET_PARENT_COMMENT_FLAG,\n\tNGT_PORTAL_CONTENT_FLAG,\n\tNGT_RENDERER_NODE_FLAG,\n\tTHREE_NATIVE_EVENTS,\n} from './constants';\nimport {\n\taddRendererChildNode,\n\tcreateRendererNode,\n\tisRendererNode,\n\tNgtRendererNode,\n\tsetRendererParentNode,\n} from './state';\nimport { attachThreeNodes, internalDestroyNode, kebabToPascal, NgtRendererClassId, removeThreeChild } from './utils';\n\nexport interface NgtRendererFactory2Options {\n\tverbose?: boolean;\n}\n\nexport const NGT_RENDERER_OPTIONS = new InjectionToken<NgtRendererFactory2Options>('NGT_RENDERER_OPTIONS');\n\n@Injectable()\nexport class NgtRendererFactory2 implements RendererFactory2 {\n\tprivate catalogue = injectCatalogue();\n\tprivate document = inject(DOCUMENT);\n\tprivate options = inject(NGT_RENDERER_OPTIONS, { optional: true }) || {};\n\tprivate rendererMap = new Map<string, Renderer2>();\n\n\t/**\n\t * NOTE: We use `useFactory` to instantiate `NgtRendererFactory2`\n\t */\n\tconstructor(private delegateRendererFactory: RendererFactory2) {}\n\n\tcreateRenderer(hostElement: any, type: RendererType2 | null): Renderer2 {\n\t\tconst delegateRenderer = this.delegateRendererFactory.createRenderer(hostElement, type);\n\t\tif (!type) return delegateRenderer;\n\n\t\tlet renderer = this.rendererMap.get(type.id);\n\t\tif (renderer) {\n\t\t\tif (renderer instanceof NgtRenderer2) {\n\t\t\t\trenderer.count += 1;\n\t\t\t\tif (renderer.delegateRenderer !== delegateRenderer) {\n\t\t\t\t\trenderer.delegateRenderer = delegateRenderer;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn renderer;\n\t\t}\n\n\t\tif (hostElement && !isRendererNode(hostElement)) {\n\t\t\tcreateRendererNode('platform', hostElement, this.document);\n\t\t}\n\n\t\tif (Reflect.get(type, 'type')?.[NGT_HTML_FLAG]) {\n\t\t\tthis.rendererMap.set(type.id, delegateRenderer);\n\n\t\t\t// patch delegate destroyNode so we can destroy this HTML node\n\t\t\t// TODO: make sure we really need to do this\n\t\t\tconst originalDestroyNode = delegateRenderer.destroyNode?.bind(delegateRenderer);\n\t\t\tif (!originalDestroyNode || !(NGT_DELEGATE_RENDERER_DESTROY_NODE_PATCHED_FLAG in originalDestroyNode)) {\n\t\t\t\tdelegateRenderer.destroyNode = (node) => {\n\t\t\t\t\toriginalDestroyNode?.(node);\n\t\t\t\t\tif (node !== hostElement) return;\n\t\t\t\t\tinternalDestroyNode(node, null);\n\t\t\t\t};\n\t\t\t\tObject.assign(delegateRenderer.destroyNode, {\n\t\t\t\t\t[NGT_DELEGATE_RENDERER_DESTROY_NODE_PATCHED_FLAG]: true,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn delegateRenderer;\n\t\t}\n\n\t\tthis.rendererMap.set(\n\t\t\ttype.id,\n\t\t\t(renderer = new NgtRenderer2(delegateRenderer, this.catalogue, this.document, this.options)),\n\t\t);\n\t\treturn renderer;\n\t}\n}\n\nexport class NgtRenderer2 implements Renderer2 {\n\tprivate argsInjectors: Array<Injector> = [];\n\tprivate parentInjectors: Array<Injector> = [];\n\tprivate portalInjectors: Array<Injector> = [];\n\n\tconstructor(\n\t\tpublic delegateRenderer: Renderer2,\n\t\tprivate catalogue: Record<string, NgtConstructorRepresentation>,\n\t\tprivate document: Document,\n\t\tprivate options: NgtRendererFactory2Options,\n\t\tpublic count = 1,\n\t) {\n\t\tif (!this.options.verbose) {\n\t\t\tthis.options.verbose = false;\n\t\t}\n\t}\n\n\tget data(): { [key: string]: any } {\n\t\treturn { ...this.delegateRenderer.data, __ngt_renderer__: true };\n\t}\n\n\tdestroy(): void {\n\t\tif (this.count > 1) {\n\t\t\tthis.count -= 1;\n\t\t\treturn;\n\t\t}\n\n\t\t// this is the last instance of the same NgtRenderer2\n\t\tthis.count = 0;\n\t\tthis.argsInjectors = [];\n\t\tthis.parentInjectors = [];\n\t\tthis.portalInjectors = [];\n\t}\n\n\tcreateElement(name: string, namespace?: string | null) {\n\t\tconst platformElement = this.delegateRenderer.createElement(name, namespace);\n\n\t\tif (name === 'ngt-portal') {\n\t\t\treturn createRendererNode('portal', platformElement, this.document);\n\t\t}\n\n\t\tif (name === 'ngt-value') {\n\t\t\treturn createRendererNode('three', prepare(platformElement, 'ngt-value'), this.document);\n\t\t}\n\n\t\tconst [injectedArgs, injectedParent] = [\n\t\t\tthis.getNgtDirective(NgtArgs, this.argsInjectors)?.value || [],\n\t\t\tthis.getNgtDirective(NgtParent, this.parentInjectors)?.value,\n\t\t];\n\n\t\tif (name === 'ngt-primitive') {\n\t\t\tif (!injectedArgs[0]) throw new Error(`[NGT] ngt-primitive without args is invalid`);\n\t\t\tconst object = injectedArgs[0];\n\t\t\tlet instanceState = getInstanceState(object);\n\t\t\tif (!instanceState || instanceState.type !== 'ngt-primitive') {\n\t\t\t\t// if an object isn't already \"prepared\", we'll prepare it\n\t\t\t\tprepare(object, 'ngt-primitive', instanceState);\n\t\t\t}\n\n\t\t\tconst primitiveRendererNode = createRendererNode('three', object, this.document);\n\t\t\tif (injectedParent) {\n\t\t\t\tprimitiveRendererNode.__ngt_renderer__[NgtRendererClassId.parent] =\n\t\t\t\t\tinjectedParent as unknown as NgtRendererNode<'three'>;\n\t\t\t}\n\n\t\t\treturn primitiveRendererNode;\n\t\t}\n\n\t\tconst threeName = kebabToPascal(name.startsWith('ngt-') ? name.slice(4) : name);\n\t\tconst threeTarget = this.catalogue[threeName];\n\n\t\tif (threeTarget) {\n\t\t\tconst threeInstance = prepare(new threeTarget(...injectedArgs), name);\n\t\t\tconst rendererNode = createRendererNode('three', threeInstance, this.document);\n\t\t\t// assert type here because it is just created so we don't have to null check it\n\t\t\tconst instanceState = getInstanceState(threeInstance) as NgtInstanceState;\n\n\t\t\t// auto-attach for geometry and material\n\t\t\tif (is.three<THREE.BufferGeometry>(threeInstance, 'isBufferGeometry')) {\n\t\t\t\tinstanceState.attach = ['geometry'];\n\t\t\t} else if (is.three<THREE.Material>(threeInstance, 'isMaterial')) {\n\t\t\t\tinstanceState.attach = ['material'];\n\t\t\t}\n\n\t\t\tif (injectedParent) {\n\t\t\t\trendererNode.__ngt_renderer__[NgtRendererClassId.parent] =\n\t\t\t\t\tinjectedParent as unknown as NgtRendererNode<'three'>;\n\t\t\t}\n\n\t\t\treturn rendererNode;\n\t\t}\n\n\t\treturn createRendererNode('platform', platformElement, this.document);\n\t}\n\n\tcreateComment(value: string) {\n\t\tconst commentNode = this.delegateRenderer.createComment(value);\n\n\t\tconst commentRendererNode = createRendererNode('comment', commentNode, this.document);\n\n\t\t// NOTE: we attach an arrow function to the Comment node\n\t\t// In our directives, we can call this function to then start tracking the RendererNode\n\t\t// this is done to limit the amount of Nodes we need to process for getCreationState\n\t\tObject.assign(commentRendererNode, {\n\t\t\t[NGT_INTERNAL_ADD_COMMENT_FLAG]: (type: 'args' | 'parent' | 'portal', injector: Injector) => {\n\t\t\t\tif (type === 'args') {\n\t\t\t\t\tthis.argsInjectors.push(injector);\n\t\t\t\t} else if (type === 'parent') {\n\t\t\t\t\tObject.assign(commentRendererNode, {\n\t\t\t\t\t\t[NGT_INTERNAL_SET_PARENT_COMMENT_FLAG]: (ngtParent: NgtRendererNode<'three'>) => {\n\t\t\t\t\t\t\tcommentRendererNode.__ngt_renderer__[NgtRendererClassId.parent] = ngtParent;\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tthis.parentInjectors.push(injector);\n\t\t\t\t} else if (type === 'portal') {\n\t\t\t\t\tthis.portalInjectors.push(injector);\n\t\t\t\t}\n\n\t\t\t\tcommentRendererNode.__ngt_renderer__[NgtRendererClassId.injector] = injector;\n\t\t\t},\n\t\t});\n\n\t\treturn commentRendererNode;\n\t}\n\n\tcreateText(value: string) {\n\t\tconst textNode = this.delegateRenderer.createText(value);\n\t\treturn createRendererNode('text', textNode, this.document);\n\t}\n\n\tdestroyNode: (node: NgtRendererNode) => void = (node) => {\n\t\tinternalDestroyNode(node, this.removeChild.bind(this));\n\t};\n\n\tappendChild(\n\t\tparent: NgtRendererNode,\n\t\tnewChild: NgtRendererNode,\n\t\trefChild?: NgtRendererNode,\n\t\tisMove?: boolean,\n\t): void {\n\t\tconst delegatedFn = refChild\n\t\t\t? this.delegateRenderer.insertBefore.bind(this.delegateRenderer, parent, newChild, refChild, isMove)\n\t\t\t: this.delegateRenderer.appendChild.bind(this.delegateRenderer, parent, newChild);\n\n\t\tconst pRS = parent.__ngt_renderer__;\n\t\tconst cRS = newChild.__ngt_renderer__;\n\n\t\tif (!pRS || !cRS) {\n\t\t\tthis.options.verbose &&\n\t\t\t\tconsole.warn('[NGT dev mode] One of parent or child is not a renderer node.', { parent, newChild });\n\t\t\treturn delegatedFn();\n\t\t}\n\n\t\tif (cRS[NgtRendererClassId.type] === 'comment') {\n\t\t\t// if child is a comment, we'll set the parent then bail.\n\t\t\t// comment usually means it's part of a templateRef ViewContainerRef or structural directive\n\t\t\tsetRendererParentNode(newChild, parent);\n\n\t\t\t// if parent is not three, we'll delegate to the renderer\n\t\t\tif (pRS[NgtRendererClassId.type] !== 'three') {\n\t\t\t\tdelegatedFn();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'platform' && cRS[NgtRendererClassId.type] === 'platform') {\n\t\t\tif (newChild[NGT_DOM_PARENT_FLAG] && newChild[NGT_DOM_PARENT_FLAG] instanceof HTMLElement) {\n\t\t\t\treturn this.delegateRenderer.appendChild(newChild[NGT_DOM_PARENT_FLAG], newChild);\n\t\t\t}\n\n\t\t\tif (pRS[NgtRendererClassId.parent] && !cRS[NgtRendererClassId.parent]) {\n\t\t\t\treturn this.appendChild(pRS[NgtRendererClassId.parent], newChild);\n\t\t\t}\n\n\t\t\treturn delegatedFn();\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'three' && cRS[NgtRendererClassId.type] === 'three') {\n\t\t\treturn this.appendThreeRendererNodes(parent, newChild);\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'platform' && cRS[NgtRendererClassId.type] === 'three') {\n\t\t\t// if platform has parent, delegate to that parent\n\t\t\tif (pRS[NgtRendererClassId.parent]) {\n\t\t\t\t// but track the child for this parent as well\n\t\t\t\taddRendererChildNode(parent, newChild);\n\t\t\t\treturn this.appendChild(pRS[NgtRendererClassId.parent], newChild);\n\t\t\t}\n\n\t\t\t// platform can also have normal parentNode\n\t\t\tconst platformParentNode = this.delegateRenderer.parentNode(parent);\n\t\t\tif (platformParentNode) {\n\t\t\t\treturn this.appendChild(platformParentNode, newChild);\n\t\t\t}\n\n\t\t\t// if not, set up parent and child relationship for this pair then bail\n\t\t\tthis.setNodeRelationship(parent, newChild);\n\t\t\treturn;\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'three' && cRS[NgtRendererClassId.type] === 'platform') {\n\t\t\tif (!cRS[NgtRendererClassId.parent]) {\n\t\t\t\tsetRendererParentNode(newChild, parent);\n\t\t\t}\n\n\t\t\tfor (const child of cRS[NgtRendererClassId.children]) {\n\t\t\t\tthis.appendChild(parent, child);\n\t\t\t}\n\n\t\t\tfor (const platformChildNode of newChild['childNodes'] || []) {\n\t\t\t\tif (\n\t\t\t\t\t!isRendererNode(platformChildNode) ||\n\t\t\t\t\tplatformChildNode.__ngt_renderer__[NgtRendererClassId.type] !== 'platform'\n\t\t\t\t)\n\t\t\t\t\tcontinue;\n\t\t\t\tthis.appendChild(parent, platformChildNode);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'portal' && cRS[NgtRendererClassId.type] === 'three') {\n\t\t\tif (!cRS[NgtRendererClassId.parent] && pRS[NgtRendererClassId.portalContainer]) {\n\t\t\t\treturn this.appendChild(pRS[NgtRendererClassId.portalContainer], newChild);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'platform' && cRS[NgtRendererClassId.type] === 'portal') {\n\t\t\treturn this.delegateRenderer.appendChild(parent, newChild);\n\t\t}\n\n\t\treturn delegatedFn();\n\t}\n\n\tinsertBefore(\n\t\tparent: NgtRendererNode,\n\t\tnewChild: NgtRendererNode,\n\t\trefChild: NgtRendererNode,\n\t\tisMove?: boolean,\n\t): void {\n\t\t// if both are comments and the reference child is NgtCanvasContent, we'll assign the same flag to the newChild\n\t\t// this means that the NgtCanvas component is embedding. This flag allows the Renderer to get the root scene\n\t\t// when it tries to attach the template under `ng-template[canvasContent]`\n\t\tif (\n\t\t\trefChild &&\n\t\t\trefChild[NGT_CANVAS_CONTENT_FLAG] &&\n\t\t\trefChild instanceof Comment &&\n\t\t\tnewChild instanceof Comment\n\t\t) {\n\t\t\tObject.assign(newChild, { [NGT_CANVAS_CONTENT_FLAG]: refChild[NGT_CANVAS_CONTENT_FLAG] });\n\t\t}\n\n\t\t// if there is no parent, we delegate\n\t\tif (!parent) {\n\t\t\treturn this.delegateRenderer.insertBefore(parent, newChild, refChild, isMove);\n\t\t}\n\n\t\treturn this.appendChild(parent, newChild, refChild, isMove);\n\t}\n\n\tremoveChild(parent: NgtRendererNode, oldChild: NgtRendererNode, isHostElement?: boolean): void {\n\t\tif (parent === null) {\n\t\t\tparent = this.parentNode(oldChild);\n\t\t}\n\n\t\tconst cRS = oldChild.__ngt_renderer__;\n\n\t\tif (!cRS) {\n\t\t\ttry {\n\t\t\t\treturn this.delegateRenderer.removeChild(parent, oldChild, isHostElement);\n\t\t\t} catch {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// disassociate things from oldChild\n\t\tcRS[NgtRendererClassId.parent] = null;\n\n\t\t// if parent is still undefined\n\t\tif (parent == null) {\n\t\t\tif (cRS[NgtRendererClassId.destroyed]) {\n\t\t\t\t// if the child is already destroyed, just skip\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.options.verbose &&\n\t\t\t\tconsole.warn('[NGT dev mode] parent is not found when remove child', { parent, oldChild });\n\t\t\treturn;\n\t\t}\n\n\t\tconst pRS = parent.__ngt_renderer__;\n\n\t\tif (!pRS) {\n\t\t\treturn this.delegateRenderer.removeChild(parent, oldChild, isHostElement);\n\t\t}\n\n\t\tconst childIndex = pRS[NgtRendererClassId.children].indexOf(oldChild);\n\t\tif (childIndex >= 0) {\n\t\t\t// disassociate oldChild from parent children\n\t\t\tpRS[NgtRendererClassId.children].splice(childIndex, 1);\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'three' && cRS[NgtRendererClassId.type] === 'three') {\n\t\t\treturn removeThreeChild(oldChild as unknown as NgtInstanceNode, parent as unknown as NgtInstanceNode, true);\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'platform' && cRS[NgtRendererClassId.type] === 'platform') {\n\t\t\treturn this.delegateRenderer.removeChild(parent, oldChild, isHostElement);\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'three' && cRS[NgtRendererClassId.type] === 'platform') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (pRS[NgtRendererClassId.type] === 'platform' && cRS[NgtRendererClassId.type] === 'three') {\n\t\t\tconst childLS = getInstanceState(oldChild);\n\t\t\tif (!childLS) return;\n\n\t\t\tconst threeParent = childLS.parent ? untracked(childLS.parent) : null;\n\t\t\tif (!threeParent) return;\n\n\t\t\treturn this.removeChild(threeParent as unknown as NgtRendererNode, oldChild);\n\t\t}\n\n\t\treturn this.delegateRenderer.removeChild(parent, oldChild, isHostElement);\n\t}\n\n\tparentNode(node: NgtRendererNode) {\n\t\tif (\n\t\t\tnode &&\n\t\t\t(node[NGT_CANVAS_CONTENT_FLAG] || node[NGT_PORTAL_CONTENT_FLAG]) &&\n\t\t\tnode instanceof Comment &&\n\t\t\tisRendererNode(node)\n\t\t) {\n\t\t\tconst store = node[NGT_CANVAS_CONTENT_FLAG] || node[NGT_PORTAL_CONTENT_FLAG];\n\n\t\t\t// this should not happen but if it does, we'll delegate to the renderer\n\t\t\tif (!store) {\n\t\t\t\treturn this.delegateRenderer.parentNode(node);\n\t\t\t}\n\n\t\t\tconst rootScene = store.snapshot.scene;\n\n\t\t\t// if we don't have the scene yet, bail again\n\t\t\tif (!rootScene) {\n\t\t\t\treturn this.delegateRenderer.parentNode(node);\n\t\t\t}\n\n\t\t\t// if root scene is not a renderer node, we'll make it a renderer node here\n\t\t\tif (!(NGT_RENDERER_NODE_FLAG in rootScene)) {\n\t\t\t\tconst sceneRendererNode = createRendererNode('three', rootScene, this.document);\n\t\t\t\t// set parent to the comment too\n\t\t\t\tsetRendererParentNode(node, sceneRendererNode);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tnode[NGT_PORTAL_CONTENT_FLAG] &&\n\t\t\t\tnode[NGT_DOM_PARENT_FLAG] &&\n\t\t\t\tisRendererNode(node[NGT_DOM_PARENT_FLAG])\n\t\t\t) {\n\t\t\t\tconst portalContentParent = node[NGT_DOM_PARENT_FLAG] as NgtRendererNode<'portal'>;\n\t\t\t\tconst portalContentParentRS = portalContentParent.__ngt_renderer__;\n\t\t\t\tif (!portalContentParentRS[NgtRendererClassId.portalContainer]) {\n\t\t\t\t\tportalContentParentRS[NgtRendererClassId.portalContainer] = rootScene;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn rootScene;\n\t\t}\n\n\t\tconst rendererParentNode = node.__ngt_renderer__?.[NgtRendererClassId.parent];\n\t\t// returns the renderer parent node if it exists, otherwise returns the delegateRenderer parentNode\n\t\treturn rendererParentNode ?? this.delegateRenderer.parentNode(node);\n\t}\n\n\tremoveAttribute(el: NgtRendererNode, name: string, namespace?: string | null): void {\n\t\tconst rS = el.__ngt_renderer__;\n\t\tif (!rS || rS[NgtRendererClassId.destroyed]) return this.delegateRenderer.removeAttribute(el, name, namespace);\n\n\t\tif (rS[NgtRendererClassId.type] === 'three') {\n\t\t\treturn;\n\t\t}\n\t\treturn this.delegateRenderer.removeAttribute(el, name, namespace);\n\t}\n\n\tsetAttribute(el: NgtRendererNode, name: string, value: string, namespace?: string | null): void {\n\t\tconst rS = el.__ngt_renderer__;\n\t\tif (!rS) return this.delegateRenderer.setAttribute(el, name, value, namespace);\n\n\t\tif (rS[NgtRendererClassId.destroyed]) {\n\t\t\tthis.options.verbose &&\n\t\t\t\tconsole.warn(`[NGT dev mode] setAttribute is invoked on destroyed renderer node.`, { el, name, value });\n\t\t\treturn;\n\t\t}\n\n\t\tif (rS[NgtRendererClassId.type] === 'three') {\n\t\t\tif (name === 'attach') {\n\t\t\t\tconst paths = value.split('.');\n\t\t\t\tif (paths.length) {\n\t\t\t\t\tconst instanceState = getInstanceState(el);\n\t\t\t\t\tif (instanceState) instanceState.attach = paths;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// coercion for primitive values\n\t\t\tlet maybeCoerced: string | number | boolean = value;\n\n\t\t\tif (maybeCoerced === '' || maybeCoerced === 'true' || maybeCoerced === 'false') {\n\t\t\t\tmaybeCoerced = maybeCoerced === 'true' || maybeCoerced === '';\n\t\t\t} else {\n\t\t\t\tconst maybeNumber = Number(maybeCoerced);\n\t\t\t\tif (!isNaN(maybeNumber)) maybeCoerced = maybeNumber;\n\t\t\t}\n\n\t\t\tif (name === 'rawValue') {\n\t\t\t\trS[NgtRendererClassId.rawValue] = maybeCoerced;\n\t\t\t} else {\n\t\t\t\tapplyProps(el, { [name]: maybeCoerced });\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.delegateRenderer.setAttribute(el, name, value, namespace);\n\t}\n\n\tsetProperty(el: NgtRendererNode, name: string, value: any): void {\n\t\t// NOTE: untrack all signal updates because this is during setProperty which is a reactive context\n\t\t// attaching potentially updates signals which is not allowed\n\n\t\tconst rS = el.__ngt_renderer__;\n\n\t\tif (!rS || rS[NgtRendererClassId.destroyed]) {\n\t\t\tthis.options.verbose &&\n\t\t\t\tconsole.warn('[NGT dev mode] setProperty is invoked on destroyed renderer node.', { el, name, value });\n\t\t\treturn;\n\t\t}\n\n\t\tif (rS[NgtRendererClassId.type] === 'three') {\n\t\t\tconst instanceState = getInstanceState(el);\n\n\t\t\tif (name === 'parameters') {\n\t\t\t\t// NOTE: short-cut for null raycast to prevent upstream from creating a nullRaycast property\n\t\t\t\tif ('raycast' in value && value['raycast'] === null) {\n\t\t\t\t\tvalue['raycast'] = () => null;\n\t\t\t\t}\n\n\t\t\t\tapplyProps(el, value);\n\n\t\t\t\tif ('geometry' in value && is.three<THREE.BufferGeometry>(value['geometry'], 'isBufferGeometry')) {\n\t\t\t\t\tuntracked(() => {\n\t\t\t\t\t\tinstanceState?.updateGeometryStamp();\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst parent = instanceState?.hierarchyStore.snapshot.parent || rS[NgtRendererClassId.parent];\n\n\t\t\t// [rawValue]\n\t\t\tif (instanceState?.type === 'ngt-value' && name === 'rawValue') {\n\t\t\t\trS[NgtRendererClassId.rawValue] = value;\n\t\t\t\tif (parent) {\n\t\t\t\t\tuntracked(() => attachThreeNodes(parent, el as unknown as NgtInstanceNode));\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// [attach]\n\t\t\tif (name === 'attach') {\n\t\t\t\tif (instanceState)\n\t\t\t\t\tinstanceState.attach = Array.isArray(value)\n\t\t\t\t\t\t? value.map((v) => v.toString())\n\t\t\t\t\t\t: typeof value === 'function'\n\t\t\t\t\t\t\t? value\n\t\t\t\t\t\t\t: typeof value === 'string'\n\t\t\t\t\t\t\t\t? value.split('.')\n\t\t\t\t\t\t\t\t: [value];\n\t\t\t\tif (parent) {\n\t\t\t\t\tuntracked(() => attachThreeNodes(parent, el as unknown as NgtInstanceNode));\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// NOTE: short-cut for null raycast to prevent upstream from creating a nullRaycast property\n\t\t\tif (name === 'raycast' && value === null) {\n\t\t\t\tvalue = () => null;\n\t\t\t}\n\n\t\t\tapplyProps(el, { [name]: value });\n\n\t\t\tif (instanceState && name === 'geometry' && is.three<THREE.BufferGeometry>(value, 'isBufferGeometry')) {\n\t\t\t\tuntracked(() => {\n\t\t\t\t\tinstanceState.updateGeometryStamp();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.delegateRenderer.setProperty(el, name, value);\n\t}\n\n\tlisten(\n\t\ttarget: 'window' | 'document' | 'body' | NgtRendererNode,\n\t\teventName: string,\n\t\tcallback: (event: any) => boolean | void,\n\t): () => void {\n\t\tif (typeof target === 'string') {\n\t\t\treturn this.delegateRenderer.listen(target, eventName, callback);\n\t\t}\n\n\t\tconst rS = target.__ngt_renderer__;\n\t\tif (!rS) {\n\t\t\treturn this.delegateRenderer.listen(target, eventName, callback);\n\t\t}\n\n\t\tif (rS[NgtRendererClassId.destroyed]) return () => {};\n\n\t\tif (rS[NgtRendererClassId.type] === 'three') {\n\t\t\tconst iS = getInstanceState(target);\n\t\t\tif (!iS) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'[NGT] instance which has not been prepared cannot have events. Call `prepare()` manually if needed.',\n\t\t\t\t);\n\t\t\t\treturn () => {};\n\t\t\t}\n\n\t\t\tif (eventName === 'created') {\n\t\t\t\tcallback(target);\n\t\t\t\treturn () => {};\n\t\t\t}\n\n\t\t\tif (eventName === 'attached') {\n\t\t\t\tiS.onAttach = callback;\n\t\t\t\tconst parent = iS.parent && untracked(iS.parent);\n\t\t\t\tif (parent) iS.onAttach({ parent, node: target as unknown as NgtInstanceNode });\n\t\t\t\treturn () => {\n\t\t\t\t\tiS.onAttach = undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (eventName === 'updated') {\n\t\t\t\tiS.onUpdate = callback;\n\t\t\t\treturn () => {\n\t\t\t\t\tiS.onUpdate = undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (THREE_NATIVE_EVENTS.includes(eventName) && target instanceof THREE.EventDispatcher) {\n\t\t\t\t// NOTE: rename to dispose because that's the event type, not disposed.\n\t\t\t\tif (eventName === 'disposed') {\n\t\t\t\t\teventName = 'dispose';\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t(target as unknown as THREE.Object3D).parent &&\n\t\t\t\t\t(eventName === 'added' || eventName === 'removed')\n\t\t\t\t) {\n\t\t\t\t\tcallback({ type: eventName, target });\n\t\t\t\t}\n\n\t\t\t\ttarget.addEventListener(eventName, callback);\n\t\t\t\treturn () => {\n\t\t\t\t\ttarget.removeEventListener(eventName, callback);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst cleanup = iS.setPointerEvent?.(eventName as keyof NgtEventHandlers, callback) || (() => {});\n\n\t\t\t// this means the object has already been attached to the parent and has its store propagated\n\t\t\tif (iS.store) {\n\t\t\t\tiS.addInteraction?.(iS.store);\n\t\t\t}\n\n\t\t\treturn cleanup;\n\t\t}\n\n\t\treturn this.delegateRenderer.listen(target, eventName, callback);\n\t}\n\n\tprivate appendThreeRendererNodes(parent: NgtRendererNode, child: NgtRendererNode) {\n\t\t// if parent and child are the same, skip\n\t\tif (parent === child) {\n\t\t\tthis.options.verbose &&\n\t\t\t\tconsole.warn('[NGT dev mode] appending THREE.js parent and child but they are the same', {\n\t\t\t\t\tparent,\n\t\t\t\t\tchild,\n\t\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst cIS = getInstanceState(child);\n\n\t\t// if child is already attached to a parent, skip\n\t\tif (cIS?.hierarchyStore.snapshot.parent) {\n\t\t\tthis.options.verbose &&\n\t\t\t\tconsole.warn('[NGT dev mode] appending THREE.js parent and child but child is already attached', {\n\t\t\t\t\tparent,\n\t\t\t\t\tchild,\n\t\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// set the relationship\n\t\tthis.setNodeRelationship(parent, child);\n\n\t\t// attach THREE child\n\t\tattachThreeNodes(parent as unknown as NgtInstanceNode, child as unknown as NgtInstanceNode);\n\t\treturn;\n\t}\n\n\tprivate setNodeRelationship(parent: NgtRendererNode, child: NgtRendererNode) {\n\t\tsetRendererParentNode(child, parent);\n\t\taddRendererChildNode(parent, child);\n\t}\n\n\tprivate getNgtDirective<TDirective extends NgtCommonDirective<any>>(\n\t\tdirective: Type<TDirective>,\n\t\tinjectors: Array<Injector>,\n\t) {\n\t\tlet directiveInstance: TDirective | undefined;\n\n\t\tlet i = injectors.length - 1;\n\t\twhile (i >= 0) {\n\t\t\tconst injector = injectors[i];\n\t\t\tconst instance = injector.get(directive, null);\n\t\t\tif (instance && typeof instance === 'object' && instance.validate()) {\n\t\t\t\tdirectiveInstance = instance;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ti--;\n\t\t}\n\n\t\treturn directiveInstance;\n\t}\n\n\taddClass = this.delegateRenderer.addClass.bind(this.delegateRenderer);\n\tremoveClass = this.delegateRenderer.removeClass.bind(this.delegateRenderer);\n\tsetStyle = this.delegateRenderer.setStyle.bind(this.delegateRenderer);\n\tremoveStyle = this.delegateRenderer.removeStyle.bind(this.delegateRenderer);\n\tselectRootElement = this.delegateRenderer.selectRootElement.bind(this.delegateRenderer);\n\tnextSibling = this.delegateRenderer.nextSibling.bind(this.delegateRenderer);\n\tsetValue = this.delegateRenderer.setValue.bind(this.delegateRenderer);\n}\n","import { Injector } from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { prepare } from './instance';\nimport { injectLoop, roots } from './loop';\nimport { injectStore } from './store';\nimport type { NgtCanvasElement, NgtCanvasOptions, NgtDisposable, NgtEquConfig, NgtSize, NgtState } from './types';\nimport { applyProps } from './utils/apply-props';\nimport { is } from './utils/is';\nimport { makeCameraInstance, makeDpr, makeRendererInstance } from './utils/make';\nimport { checkNeedsUpdate } from './utils/update';\n\nconst shallowLoose = { objects: 'shallow', strict: false } as NgtEquConfig;\n\nexport function injectCanvasRootInitializer(injector?: Injector) {\n\treturn assertInjector(injectCanvasRootInitializer, injector, () => {\n\t\tconst injectedStore = injectStore();\n\t\tconst loop = injectLoop();\n\n\t\treturn (canvas: NgtCanvasElement) => {\n\t\t\tconst exist = roots.has(canvas);\n\t\t\tlet store = roots.get(canvas);\n\n\t\t\tif (store) {\n\t\t\t\tconsole.warn('[NGT] Same canvas root is being created twice');\n\t\t\t}\n\n\t\t\tstore ||= injectedStore;\n\n\t\t\tif (!store) {\n\t\t\t\tthrow new Error('[NGT] No store initialized');\n\t\t\t}\n\n\t\t\tif (!exist) {\n\t\t\t\troots.set(canvas, store);\n\t\t\t}\n\n\t\t\tlet isConfigured = false;\n\t\t\tlet lastCamera: NgtCanvasOptions['camera'];\n\n\t\t\treturn {\n\t\t\t\tisConfigured,\n\t\t\t\tdestroy: (timeout = 500) => {\n\t\t\t\t\tconst root = roots.get(canvas);\n\t\t\t\t\tif (root) {\n\t\t\t\t\t\troot.update((state) => ({ internal: { ...state.internal, active: false } }));\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst state = root.snapshot;\n\t\t\t\t\t\t\t\tstate.events.disconnect?.();\n\n\t\t\t\t\t\t\t\tstate.gl?.renderLists?.dispose?.();\n\t\t\t\t\t\t\t\tstate.gl?.dispose?.();\n\t\t\t\t\t\t\t\tstate.gl?.forceContextLoss?.();\n\t\t\t\t\t\t\t\tif (state.gl?.xr) state.xr.disconnect();\n\t\t\t\t\t\t\t\tdispose(state.scene);\n\t\t\t\t\t\t\t\troots.delete(canvas);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\tconsole.error('[NGT] Unexpected error while destroying Canvas Root', e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, timeout);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tconfigure: (inputs: NgtCanvasOptions) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tshadows = false,\n\t\t\t\t\t\tlinear = false,\n\t\t\t\t\t\tflat = false,\n\t\t\t\t\t\tlegacy = false,\n\t\t\t\t\t\torthographic = false,\n\t\t\t\t\t\tframeloop = 'always',\n\t\t\t\t\t\tdpr = [1, 2],\n\t\t\t\t\t\tgl: glOptions,\n\t\t\t\t\t\tsize: sizeOptions,\n\t\t\t\t\t\tcamera: cameraOptions,\n\t\t\t\t\t\traycaster: raycasterOptions,\n\t\t\t\t\t\tscene: sceneOptions,\n\t\t\t\t\t\tevents,\n\t\t\t\t\t\tlookAt,\n\t\t\t\t\t\tperformance,\n\t\t\t\t\t} = inputs;\n\n\t\t\t\t\tconst state = store.snapshot;\n\t\t\t\t\tconst stateToUpdate: Partial<NgtState> = {};\n\n\t\t\t\t\t// setup renderer\n\t\t\t\t\tlet gl = state.gl;\n\t\t\t\t\tif (!state.gl) stateToUpdate.gl = gl = makeRendererInstance(glOptions, canvas);\n\n\t\t\t\t\t// setup raycaster\n\t\t\t\t\tlet raycaster = state.raycaster;\n\t\t\t\t\tif (!raycaster) stateToUpdate.raycaster = raycaster = new THREE.Raycaster();\n\n\t\t\t\t\t// set raycaster options\n\t\t\t\t\tconst { params, ...options } = raycasterOptions || {};\n\t\t\t\t\tif (!is.equ(options, raycaster, shallowLoose)) applyProps(raycaster, options);\n\t\t\t\t\tif (!is.equ(params, raycaster.params, shallowLoose)) {\n\t\t\t\t\t\tapplyProps(raycaster, { params: { ...raycaster.params, ...(params || {}) } });\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create default camera, don't overwrite any user-set state\n\t\t\t\t\tif (\n\t\t\t\t\t\t!state.camera ||\n\t\t\t\t\t\t(state.camera === lastCamera && !is.equ(lastCamera, cameraOptions, shallowLoose))\n\t\t\t\t\t) {\n\t\t\t\t\t\tlastCamera = cameraOptions;\n\t\t\t\t\t\tconst isCamera = is.three<THREE.Camera>(cameraOptions, 'isCamera');\n\t\t\t\t\t\tlet camera = isCamera\n\t\t\t\t\t\t\t? cameraOptions\n\t\t\t\t\t\t\t: makeCameraInstance(orthographic, sizeOptions ?? state.size);\n\n\t\t\t\t\t\tif (!isCamera) {\n\t\t\t\t\t\t\tcamera.position.z = 5;\n\t\t\t\t\t\t\tif (cameraOptions) {\n\t\t\t\t\t\t\t\tapplyProps(camera, cameraOptions);\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t'aspect' in cameraOptions ||\n\t\t\t\t\t\t\t\t\t'left' in cameraOptions ||\n\t\t\t\t\t\t\t\t\t'right' in cameraOptions ||\n\t\t\t\t\t\t\t\t\t'top' in cameraOptions ||\n\t\t\t\t\t\t\t\t\t'bottom' in cameraOptions\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tObject.assign(camera, { manual: true });\n\t\t\t\t\t\t\t\t\tcamera?.updateProjectionMatrix();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// always look at center or passed-in lookAt by default\n\t\t\t\t\t\t\tif (!state.camera && !cameraOptions?.rotation && !cameraOptions?.quaternion) {\n\t\t\t\t\t\t\t\tif (Array.isArray(lookAt)) camera.lookAt(lookAt[0], lookAt[1], lookAt[2]);\n\t\t\t\t\t\t\t\telse if (typeof lookAt === 'number') camera.lookAt(lookAt, lookAt, lookAt);\n\t\t\t\t\t\t\t\telse if (lookAt?.isVector3) camera.lookAt(lookAt);\n\t\t\t\t\t\t\t\telse camera.lookAt(0, 0, 0);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// update projection matrix after applyprops\n\t\t\t\t\t\t\tcamera.updateProjectionMatrix?.();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!is.instance(camera)) camera = prepare(camera, '', { store });\n\n\t\t\t\t\t\tstateToUpdate.camera = camera;\n\n\t\t\t\t\t\t// Configure raycaster\n\t\t\t\t\t\t// https://github.com/pmndrs/react-xr/issues/300\n\t\t\t\t\t\traycaster.camera = camera;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set up scene (one time only!)\n\t\t\t\t\tif (!state.scene) {\n\t\t\t\t\t\tlet scene: THREE.Scene;\n\n\t\t\t\t\t\tif (is.three<THREE.Scene>(sceneOptions, 'isScene')) {\n\t\t\t\t\t\t\tscene = sceneOptions;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tscene = new THREE.Scene();\n\t\t\t\t\t\t\tif (sceneOptions) applyProps(scene, sceneOptions);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tapplyProps(scene, {\n\t\t\t\t\t\t\tname: '__ngt_root_scene__',\n\t\t\t\t\t\t\tsetAttribute: (name: string, value: string) => {\n\t\t\t\t\t\t\t\tif (canvas instanceof HTMLCanvasElement) {\n\t\t\t\t\t\t\t\t\tif (canvas.parentElement) {\n\t\t\t\t\t\t\t\t\t\tcanvas.parentElement.setAttribute(name, value);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcanvas.setAttribute(name, value);\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},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tstateToUpdate.scene = prepare(scene, 'ngt-scene', { store });\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set up XR (one time only!)\n\t\t\t\t\tif (!state.xr) {\n\t\t\t\t\t\t// Handle frame behavior in WebXR\n\t\t\t\t\t\tconst handleXRFrame: XRFrameRequestCallback = (timestamp: number, frame?: XRFrame) => {\n\t\t\t\t\t\t\tconst state = store.snapshot;\n\t\t\t\t\t\t\tif (state.frameloop === 'never') return;\n\t\t\t\t\t\t\tloop.advance(timestamp, true, store, frame);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// Toggle render switching on session\n\t\t\t\t\t\tconst handleSessionChange = () => {\n\t\t\t\t\t\t\tconst state = store.snapshot;\n\t\t\t\t\t\t\tstate.gl.xr.enabled = state.gl.xr.isPresenting;\n\t\t\t\t\t\t\tstate.gl.xr.setAnimationLoop(state.gl.xr.isPresenting ? handleXRFrame : null);\n\t\t\t\t\t\t\tif (!state.gl.xr.isPresenting) loop.invalidate(store);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// WebXR session manager\n\t\t\t\t\t\tconst xr = {\n\t\t\t\t\t\t\tconnect: () => {\n\t\t\t\t\t\t\t\tgl.xr.addEventListener('sessionstart', handleSessionChange);\n\t\t\t\t\t\t\t\tgl.xr.addEventListener('sessionend', handleSessionChange);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdisconnect: () => {\n\t\t\t\t\t\t\t\tgl.xr.removeEventListener('sessionstart', handleSessionChange);\n\t\t\t\t\t\t\t\tgl.xr.removeEventListener('sessionend', handleSessionChange);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// Subscribe to WebXR session events\n\t\t\t\t\t\tif (gl.xr && typeof gl.xr.addEventListener === 'function') xr.connect();\n\t\t\t\t\t\tstateToUpdate.xr = xr;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set shadowmap\n\t\t\t\t\tif (gl.shadowMap) {\n\t\t\t\t\t\tconst oldEnabled = gl.shadowMap.enabled;\n\t\t\t\t\t\tconst oldType = gl.shadowMap.type;\n\t\t\t\t\t\tgl.shadowMap.enabled = !!shadows;\n\n\t\t\t\t\t\tif (typeof shadows === 'boolean') {\n\t\t\t\t\t\t\tgl.shadowMap.type = THREE.PCFSoftShadowMap;\n\t\t\t\t\t\t} else if (typeof shadows === 'string') {\n\t\t\t\t\t\t\tconst types = {\n\t\t\t\t\t\t\t\tbasic: THREE.BasicShadowMap,\n\t\t\t\t\t\t\t\tpercentage: THREE.PCFShadowMap,\n\t\t\t\t\t\t\t\tsoft: THREE.PCFSoftShadowMap,\n\t\t\t\t\t\t\t\tvariance: THREE.VSMShadowMap,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tgl.shadowMap.type = types[shadows] ?? THREE.PCFSoftShadowMap;\n\t\t\t\t\t\t} else if (is.obj(shadows)) {\n\t\t\t\t\t\t\tObject.assign(gl.shadowMap, shadows);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (oldEnabled !== gl.shadowMap.enabled || oldType !== gl.shadowMap.type)\n\t\t\t\t\t\t\tcheckNeedsUpdate(gl.shadowMap);\n\t\t\t\t\t}\n\n\t\t\t\t\tTHREE.ColorManagement.enabled = !legacy;\n\n\t\t\t\t\tif (!isConfigured) {\n\t\t\t\t\t\t// set color space and tonemapping preferences once\n\t\t\t\t\t\tapplyProps(gl, {\n\t\t\t\t\t\t\toutputColorSpace: linear ? THREE.LinearSRGBColorSpace : THREE.SRGBColorSpace,\n\t\t\t\t\t\t\ttoneMapping: flat ? THREE.NoToneMapping : THREE.ACESFilmicToneMapping,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update color management state\n\t\t\t\t\tif (state.legacy !== legacy) stateToUpdate.legacy = legacy;\n\t\t\t\t\tif (state.linear !== linear) stateToUpdate.linear = linear;\n\t\t\t\t\tif (state.flat !== flat) stateToUpdate.flat = flat;\n\n\t\t\t\t\t// Set gl props\n\t\t\t\t\tif (gl.setClearAlpha) {\n\t\t\t\t\t\tgl.setClearAlpha(0);\n\t\t\t\t\t}\n\t\t\t\t\tgl.setPixelRatio(makeDpr(state.viewport.dpr));\n\t\t\t\t\tgl.setSize(sizeOptions?.width ?? state.size.width, sizeOptions?.height ?? state.size.height);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tis.obj(glOptions) &&\n\t\t\t\t\t\t!(typeof glOptions === 'function') &&\n\t\t\t\t\t\t!is.renderer(glOptions) &&\n\t\t\t\t\t\t!is.equ(glOptions, gl, shallowLoose)\n\t\t\t\t\t) {\n\t\t\t\t\t\tapplyProps(gl, glOptions);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Store events internally\n\t\t\t\t\tif (events && !state.events.handlers) stateToUpdate.events = events(store);\n\n\t\t\t\t\t// Check performance\n\t\t\t\t\tif (performance && !is.equ(performance, state.performance, shallowLoose)) {\n\t\t\t\t\t\tstateToUpdate.performance = { ...state.performance, ...performance };\n\t\t\t\t\t}\n\n\t\t\t\t\tif (Object.keys(stateToUpdate).length) {\n\t\t\t\t\t\tstore.update(stateToUpdate);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check size, allow it to take on container bounds initially\n\t\t\t\t\tconst size = computeInitialSize(canvas, sizeOptions);\n\t\t\t\t\tif (!is.equ(size, state.size, shallowLoose)) {\n\t\t\t\t\t\tstate.setSize(size.width, size.height, size.top, size.left);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check pixelratio\n\t\t\t\t\tif (dpr && state.viewport.dpr !== makeDpr(dpr)) state.setDpr(dpr);\n\t\t\t\t\t// Check frameloop\n\t\t\t\t\tif (state.frameloop !== frameloop) state.setFrameloop(frameloop);\n\n\t\t\t\t\tisConfigured = true;\n\t\t\t\t},\n\t\t\t};\n\t\t};\n\t});\n}\n\nexport type NgtCanvasConfigurator = ReturnType<ReturnType<typeof injectCanvasRootInitializer>>;\n\nfunction computeInitialSize(canvas: NgtCanvasElement, defaultSize?: NgtSize): NgtSize {\n\tif (defaultSize) return defaultSize;\n\n\tif (typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement && canvas.parentElement) {\n\t\treturn canvas.parentElement.getBoundingClientRect();\n\t}\n\n\tif (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n\t\treturn { width: canvas.width, height: canvas.height, top: 0, left: 0 };\n\t}\n\n\treturn { width: 0, height: 0, top: 0, left: 0 };\n}\n\n// Disposes an object and all its properties\nexport function dispose<T extends NgtDisposable>(obj: T): void {\n\tif (obj.type !== 'Scene') obj.dispose?.();\n\tfor (const p in obj) {\n\t\tconst prop = obj[p] as NgtDisposable | undefined;\n\t\tif (prop?.type !== 'Scene') prop?.dispose?.();\n\t}\n}\n","import { ChangeDetectorRef, Component, effect } from '@angular/core';\nimport { ActivationEnd, Router, RouterOutlet } from '@angular/router';\nimport { filter } from 'rxjs';\n\n@Component({\n\tselector: 'ngt-routed-scene',\n\ttemplate: `\n\t\t<router-outlet />\n\t`,\n\timports: [RouterOutlet],\n})\nexport class NgtRoutedScene {\n\tconstructor(router: Router, cdr: ChangeDetectorRef) {\n\t\teffect((onCleanup) => {\n\t\t\tconst sub = router.events\n\t\t\t\t.pipe(filter((event) => event instanceof ActivationEnd))\n\t\t\t\t.subscribe(cdr.detectChanges.bind(cdr));\n\t\t\tonCleanup(() => sub.unsubscribe());\n\t\t});\n\t}\n}\n","import { DestroyRef, effect, inject, Injector } from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { injectStore } from '../store';\nimport type { NgtBeforeRenderRecord } from '../types';\n\n/**\n * `injectBeforeRender` invokes its callback on every frame. Hence, the notion of tracking\n * changes (i.e: signals) does not really matter since we're getting latest values of the things we need on every frame anyway.\n *\n * If `priority` is a Signal, `injectBeforeRender` will set up an Effect internally and returns the `EffectRef#destroy` instead.\n *\n * @example\n * ```ts\n * const destroy = injectBeforeRender(\n * ({ gl, camera }) => {\n * // before render logic\n * },\n * {\n * priority: this.priority, // this.priority is a Signal<number>\n * }\n * )\n * ```\n */\nexport function injectBeforeRender(\n\tcb: NgtBeforeRenderRecord['callback'],\n\t{ priority = 0, injector }: { priority?: number | (() => number); injector?: Injector } = {},\n) {\n\tif (typeof priority === 'function') {\n\t\tconst effectRef = assertInjector(injectBeforeRender, injector, () => {\n\t\t\tconst store = injectStore();\n\t\t\tconst ref = effect((onCleanup) => {\n\t\t\t\tconst p = priority();\n\t\t\t\tconst sub = store.snapshot.internal.subscribe(cb, p, store);\n\t\t\t\tonCleanup(() => sub());\n\t\t\t});\n\n\t\t\tinject(DestroyRef).onDestroy(() => void ref.destroy());\n\n\t\t\treturn ref;\n\t\t});\n\n\t\treturn effectRef.destroy.bind(effectRef);\n\t}\n\n\treturn assertInjector(injectBeforeRender, injector, () => {\n\t\tconst store = injectStore();\n\t\tconst sub = store.snapshot.internal.subscribe(cb, priority, store);\n\t\tinject(DestroyRef).onDestroy(() => void sub());\n\t\treturn sub;\n\t});\n}\n","import {\n\tcomputed,\n\tDestroyRef,\n\tDirective,\n\teffect,\n\tElementRef,\n\tinject,\n\tInjector,\n\tmodel,\n\toutput,\n\tRenderer2,\n} from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport type * as THREE from 'three';\nimport type { NgtEventHandlers, NgtThreeEvent } from '../types';\nimport { is } from './is';\nimport { resolveRef } from './resolve-ref';\n\n@Directive({ selector: '[ngtObjectEvents]' })\n/**\n * As host directive:\n * - outputs: [\n 'click',\n 'dblclick',\n 'contextmenu',\n 'pointerup',\n 'pointerdown',\n 'pointerover',\n 'pointerout',\n 'pointerenter',\n 'pointerleave',\n 'pointermove',\n 'pointermissed',\n 'pointercancel',\n 'wheel',\n * ]\n * - inputs: [\n * 'ngtObjectEvents'\n * ]\n */\nexport class NgtObjectEvents {\n\tclick = output<NgtThreeEvent<MouseEvent>>();\n\tdblclick = output<NgtThreeEvent<MouseEvent>>();\n\tcontextmenu = output<NgtThreeEvent<MouseEvent>>();\n\tpointerup = output<NgtThreeEvent<PointerEvent>>();\n\tpointerdown = output<NgtThreeEvent<PointerEvent>>();\n\tpointerover = output<NgtThreeEvent<PointerEvent>>();\n\tpointerout = output<NgtThreeEvent<PointerEvent>>();\n\tpointerenter = output<NgtThreeEvent<PointerEvent>>();\n\tpointerleave = output<NgtThreeEvent<PointerEvent>>();\n\tpointermove = output<NgtThreeEvent<PointerEvent>>();\n\tpointermissed = output<NgtThreeEvent<MouseEvent>>();\n\tpointercancel = output<NgtThreeEvent<PointerEvent>>();\n\twheel = output<NgtThreeEvent<WheelEvent>>();\n\n\t// NOTE: we use model here to allow for the hostDirective host to set this value\n\tngtObjectEvents = model<\n\t\t| ElementRef<THREE.Object3D>\n\t\t| THREE.Object3D\n\t\t| null\n\t\t| undefined\n\t\t| (() => ElementRef<THREE.Object3D> | THREE.Object3D | null | undefined)\n\t>();\n\n\tconstructor() {\n\t\tconst obj = computed(() => {\n\t\t\tconst ngtObject = this.ngtObjectEvents();\n\t\t\tif (typeof ngtObject === 'function') return ngtObject();\n\t\t\treturn ngtObject;\n\t\t});\n\n\t\tinjectObjectEvents(obj, {\n\t\t\tclick: this.emitEvent('click'),\n\t\t\tdblclick: this.emitEvent('dblclick'),\n\t\t\tcontextmenu: this.emitEvent('contextmenu'),\n\t\t\tpointerup: this.emitEvent('pointerup'),\n\t\t\tpointerdown: this.emitEvent('pointerdown'),\n\t\t\tpointerover: this.emitEvent('pointerover'),\n\t\t\tpointerout: this.emitEvent('pointerout'),\n\t\t\tpointerenter: this.emitEvent('pointerenter'),\n\t\t\tpointerleave: this.emitEvent('pointerleave'),\n\t\t\tpointermove: this.emitEvent('pointermove'),\n\t\t\tpointermissed: this.emitEvent('pointermissed'),\n\t\t\tpointercancel: this.emitEvent('pointercancel'),\n\t\t\twheel: this.emitEvent('wheel'),\n\t\t});\n\t}\n\n\tprivate emitEvent<TEvent extends keyof NgtEventHandlers>(eventName: TEvent) {\n\t\treturn this[eventName].emit.bind(this[eventName]) as NgtEventHandlers[TEvent];\n\t}\n}\n\nexport function injectObjectEvents(\n\ttarget: () => ElementRef<THREE.Object3D> | THREE.Object3D | null | undefined,\n\tevents: NgtEventHandlers,\n\t{ injector }: { injector?: Injector } = {},\n) {\n\treturn assertInjector(injectObjectEvents, injector, () => {\n\t\tconst renderer = inject(Renderer2);\n\n\t\tconst cleanUps: Array<() => void> = [];\n\n\t\teffect((onCleanup) => {\n\t\t\tconst targetObj = resolveRef(target());\n\n\t\t\tif (!targetObj || !is.instance(targetObj)) return;\n\n\t\t\tObject.entries(events).forEach(([eventName, eventHandler]) => {\n\t\t\t\tcleanUps.push(renderer.listen(targetObj, eventName, eventHandler));\n\t\t\t});\n\n\t\t\tonCleanup(() => {\n\t\t\t\tcleanUps.forEach((cleanUp) => cleanUp());\n\t\t\t});\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tcleanUps.forEach((cleanUp) => cleanUp());\n\t\t});\n\n\t\treturn cleanUps;\n\t});\n}\n","import { OutputEmitterRef } from '@angular/core';\n\nexport function getEmitter<T>(emitterRef: OutputEmitterRef<T> | undefined) {\n\tif (!emitterRef || !emitterRef['listeners'] || emitterRef['destroyed']) return undefined;\n\treturn emitterRef.emit.bind(emitterRef);\n}\n\nexport function hasListener(...emitterRefs: (OutputEmitterRef<unknown> | undefined)[]) {\n\treturn emitterRefs.some(\n\t\t(emitterRef) =>\n\t\t\temitterRef && !emitterRef['destroyed'] && emitterRef['listeners'] && emitterRef['listeners'].length > 0,\n\t);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|