@lovelace_lol/embody 0.0.15 → 0.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../three/annotations/runtime.ts","../three/annotations/runtimeAnnotationSidePreview.ts","../three/annotations/modelObservation.ts","../three/sceneRenderingBinding.ts","../three/modelSkinning.ts","../three/playbackRendering.ts","../three/annotations/modelRenderPreparation.ts","../three/annotations/adapter.ts","../three/annotations/DOMControls.ts","../three/annotations/ThreeAnnotationControls.ts","../three/annotations/ThreeAnnotationRenderer.ts","../three/annotations/markerSurfaceRaycast.ts","../three/annotations/loadFrame.ts","../three/annotations/ThreeAnnotationController.ts","../three/annotations/ThreeAnnotationMarkers.ts","../three/annotations/HtmlAnnotationMarkers.ts","../three/annotations/ThreeAnnotations.ts","../three/annotations/annotationAnchorModel.ts","../three/annotations/lifecycleBridge.ts","../three/annotations/markerVisibilityLifecycle.ts","../three/annotations/runtimeAnnotationPreview.ts","../three/annotations/runtimeAnnotationPreviewSide.ts","../three/annotations/boneResolutionProfile.ts","../three/authoring.ts","../three/reference-pose.ts","../three/clipBindings.ts","../three/nativePlayback.ts","../three/character.ts","../three/sceneInkBackgroundStyle.ts","../three/sceneInkBackground.ts","../three/characterTexturePalette.ts","../three/model.ts","../three/modelMorphLayout.ts","../three/scene.ts","../three/characterHost.ts","../three/editor/SkeletonOverlay.ts","../three/editor/morphVertexPreview.ts","../three/index.ts"],"names":["THREE","requireInitializedEmbodyCore","THREE2","request","point","entry","snapshot","document","target","THREE3","bounds","Quaternion","Vector3","THREE4","THREE5","THREE6","initEmbodyCore","THREE7","Matrix4","bindings","resource","action","json","finite","DEFAULT_HAIR_COLOR_APPEARANCE","PropertyBinding","AdditiveAnimationBlendMode","NormalAnimationBlendMode","progress","LoopOnce","LoopPingPong","THREE8","materials","THREE9","Box3","MathUtils","Mesh","prepare","Color","background","preset","coordinates","PerspectiveCamera","isBone","intensity","THREE11","createNeutralMorphAttribute","BufferAttribute","Euler","InterpolateDiscrete","AnimationClip"],"mappings":"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","file":"index.js","sourcesContent":["import { requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport type { AnnotationAnchoredRegion, AnnotationCharacterConfig, CameraState, ExpandedRegionState, MarkerStyle, MarkerStyleOverrides, LineConfig } from './types';\n\nexport function annotationQuery<T>(operation: string, payload: unknown): T {\n return JSON.parse(requireInitializedEmbodyCore().annotation_query(operation, JSON.stringify(payload))) as T;\n}\nexport type NativeAnnotationRuntime = InstanceType<ReturnType<typeof requireInitializedEmbodyCore>['AnnotationRuntime']>;\nexport interface MarkerDescriptor {\n id: number;\n name: string;\n label: string;\n title: string;\n htmlText: string;\n style: Required<Omit<MarkerStyleOverrides, 'line'>> & { line: Required<LineConfig> };\n radius: number;\n arrowLength: number;\n arrowRadius: number;\n}\nexport interface AnnotationSnapshot {\n generation: number;\n revision: number;\n descriptorRevision: number;\n configRevision: number;\n disposed: boolean;\n loaded: boolean;\n visible: boolean;\n style: MarkerStyle;\n currentRegion: string | null;\n solo: string | null;\n regions: AnnotationAnchoredRegion[];\n config: AnnotationCharacterConfig;\n descriptors: MarkerDescriptor[];\n camera: CameraState;\n expanded: ExpandedRegionState[];\n}\nexport interface SurfaceQuery { id: number; generation: number; phase: number; origin: [number, number, number]; direction: [number, number, number]; far: number; }\n\n/** Only annotation contract data crosses Wasm; host resources/metadata stay borrowed. */\nexport function annotationConfigInput(config: AnnotationCharacterConfig): Record<string, unknown> {\n const keys = ['characterId', 'characterName', 'regions', 'annotationRegions', 'disabledRegions', 'markerStyle', 'playIntroOnLoad', 'defaultRegion', 'boneNodes', 'bonePrefix', 'boneSuffix', 'suffixPattern', 'auToMorphs', 'auToBones', 'morphToMesh', 'markerGroups', 'lineDefaults', 'markerDefaults'] as const;\n const result: Record<string, unknown> = {};\n for (const key of keys) if (config[key] !== undefined) result[key] = config[key];\n if (config.profile) result.profile = Object.fromEntries(keys.filter(key => config.profile?.[key] !== undefined).map(key => [key, config.profile![key]]));\n return result;\n}\n\n/** Profile transport selects contract fields without traversing host metadata. */\nexport function annotationProfileInput(profile: unknown): unknown {\n if (typeof profile !== 'object' || profile === null || Array.isArray(profile)) return undefined;\n const source = profile as Record<string, unknown>;\n const fields = ['auToBones', 'auToMorphs', 'morphToMesh', 'boneNodes', 'bonePrefix', 'boneSuffix', 'suffixPattern'];\n const result = Object.fromEntries(fields.filter(key => source[key] !== undefined).map(key => [key, source[key]]));\n const nested = source.profile;\n if (typeof nested === 'object' && nested !== null && !Array.isArray(nested)) {\n const value = nested as Record<string, unknown>;\n result.profile = Object.fromEntries(fields.filter(key => value[key] !== undefined).map(key => [key, value[key]]));\n }\n return result;\n}\n","import * as THREE from 'three';\nimport { requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport type { AnnotationAnchoredRegion, RuntimeAnnotationSide } from './types';\nimport { annotationQuery } from './runtime';\nimport { readAttribute } from './modelObservation';\nexport function getRuntimeAnnotationSide(region: AnnotationAnchoredRegion): RuntimeAnnotationSide | null { return annotationQuery('side', { region }); }\nexport function getRuntimeAUMeshSideOffset(region: AnnotationAnchoredRegion, sideSign: number, modelSize: THREE.Vector3): THREE.Vector3 | null { const value = annotationQuery<{x:number;y:number;z:number} | null>('meshSideOffset', { region, sideSign, size: modelSize }); return value ? new THREE.Vector3(value.x, value.y, value.z) : null; }\n/** Reads native attributes; both candidate selection and anchor reduction run in Rust. */\nexport function getRuntimeAUMorphAnchorPoint(region: AnnotationAnchoredRegion, mesh: THREE.Mesh): THREE.Vector3 | null {\n const core = requireInitializedEmbodyCore();\n const names = annotationQuery<string[]>('morphNames', { region });\n const positions = mesh.geometry.getAttribute('position');\n if (!positions) return null;\n const attributes = names.flatMap(name => { const index = mesh.morphTargetDictionary?.[name]; const attribute = index == null ? undefined : mesh.geometry.morphAttributes.position?.[index]; return attribute ? [attribute] : []; });\n const base = readAttribute(positions);\n const morphs = new Float32Array(attributes.length * base.length);\n attributes.forEach((attribute, index) => morphs.set(readAttribute(attribute), index * base.length));\n const candidates = core.annotation_morph_candidates(base, morphs, mesh.geometry.morphTargetsRelative);\n mesh.updateWorldMatrix(true, false);\n const skinned = mesh as THREE.SkinnedMesh;\n if (skinned.isSkinnedMesh) skinned.skeleton.update();\n const samples = new Float32Array(candidates.length / 2 * 4);\n const vertex = new THREE.Vector3();\n for (let offset = 0; offset < candidates.length; offset += 2) { mesh.getVertexPosition(candidates[offset], vertex).applyMatrix4(mesh.matrixWorld); samples.set([vertex.x, vertex.y, vertex.z, candidates[offset + 1]], offset * 2); }\n const value = core.annotation_morph_center(JSON.stringify(region), samples);\n return value.length === 3 ? new THREE.Vector3().fromArray(value) : null;\n}\n","import * as THREE from 'three';\nimport { requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport type { NativeAnnotationRuntime } from './runtime';\nimport type { AnnotationAnchoredRegion } from './types';\nimport { getRuntimeAUMorphAnchorPoint } from './runtimeAnnotationSidePreview';\n\ntype Bounds = { min: number[]; max: number[] };\nexport interface AnnotationModelObservation {\n bounds: Bounds;\n quaternion: number[];\n inverse: number[];\n objects: { id: number; name: string; kind: string; parent: number | null; position: number[]; bounds: Bounds | null; matrix: number[]; inverse: number[]; morphNames: string[] }[];\n}\nexport function readAttribute(attribute: THREE.BufferAttribute | THREE.InterleavedBufferAttribute): Float32Array {\n const values = new Float32Array(attribute.count * attribute.itemSize);\n for (let index = 0; index < attribute.count; index++) for (let axis = 0; axis < attribute.itemSize; axis++) values[index * attribute.itemSize + axis] = attribute.getComponent(index, axis);\n return values;\n}\nconst bounds = (box: THREE.Box3): Bounds | null => box.isEmpty() ? null : { min: box.min.toArray(), max: box.max.toArray() };\n\n/** Stable native handle table. No region matching or anchor policy lives here. */\nexport class AnnotationModelObserver {\n readonly objects = new Map<number, THREE.Object3D>();\n readonly meshes: THREE.Mesh[] = [];\n private readonly ids = new Map<THREE.Object3D, number>();\n constructor(readonly model: THREE.Object3D) {\n model.traverse(object => {\n const id = this.objects.size + 1;\n this.ids.set(object, id); this.objects.set(id, object);\n if ((object as THREE.Mesh).isMesh) this.meshes.push(object as THREE.Mesh);\n });\n }\n id(object: THREE.Object3D): number | undefined { return this.ids.get(object); }\n capture(): AnnotationModelObservation {\n this.model.updateWorldMatrix(true, true);\n const modelBox = new THREE.Box3().setFromObject(this.model);\n if (modelBox.isEmpty()) modelBox.setFromCenterAndSize(this.model.getWorldPosition(new THREE.Vector3()), new THREE.Vector3());\n return {\n bounds: bounds(modelBox)!, quaternion: this.model.getWorldQuaternion(new THREE.Quaternion()).toArray(), inverse: this.model.matrixWorld.clone().invert().toArray(),\n objects: [...this.objects].map(([id, object]) => {\n const mesh = object as THREE.Mesh;\n const bone = (object as THREE.Bone).isBone;\n return { id, name: object.name, kind: mesh.isMesh ? 'Mesh' : bone ? 'Bone' : object.type, parent: object.parent ? this.ids.get(object.parent) ?? null : null,\n position: object.getWorldPosition(new THREE.Vector3()).toArray(), bounds: bone ? null : bounds(new THREE.Box3().setFromObject(object)), matrix: object.matrixWorld.toArray(), inverse: object.matrixWorld.clone().invert().toArray(), morphNames: Object.keys(mesh.morphTargetDictionary ?? {}) };\n }),\n };\n }\n observe(runtime: NativeAnnotationRuntime): void { runtime.observe_model(JSON.stringify(this.capture())); }\n transforms(runtime: NativeAnnotationRuntime): Float32Array {\n const ids = runtime.tracked_objects();\n if (!ids.length) return new Float32Array();\n this.model.updateWorldMatrix(true, true);\n const values = new Float32Array(ids.length * 17);\n ids.forEach((id, index) => { const object = this.objects.get(id); if (object) { values[index * 17] = id; values.set(object.matrixWorld.elements, index * 17 + 1); } });\n return values;\n }\n morphAnchors(runtime: NativeAnnotationRuntime): Record<string, { x: number; y: number; z: number }> {\n const requests = JSON.parse(runtime.command('morphRequests', '{}', performance.now())) as { objectId: number; region: AnnotationAnchoredRegion }[];\n const anchors: Record<string, { x: number; y: number; z: number }> = {};\n for (const request of requests) {\n const mesh = this.objects.get(request.objectId) as THREE.Mesh | undefined;\n if (!mesh?.isMesh) continue;\n const point = getRuntimeAUMorphAnchorPoint(request.region, mesh);\n if (point) anchors[request.region.name] = { x: point.x, y: point.y, z: point.z };\n }\n return anchors;\n }\n /** Rust selects influenced vertices; Three evaluates the current native pose. */\n observeFocus(runtime: NativeAnnotationRuntime, request: unknown): void {\n const observation = this.capture();\n runtime.observe_model(JSON.stringify(observation));\n const ids = JSON.parse(runtime.command('focusObjects', JSON.stringify(request), performance.now())) as number[];\n const core = requireInitializedEmbodyCore();\n for (const id of ids) {\n const object = this.objects.get(id);\n if (!(object as THREE.Bone | undefined)?.isBone) continue;\n const points: number[] = [];\n for (const nativeMesh of this.meshes) {\n const mesh = nativeMesh as THREE.SkinnedMesh;\n if (!mesh.isSkinnedMesh) continue;\n const index = mesh.skeleton.bones.indexOf(object as THREE.Bone);\n const skinIndices = mesh.geometry.getAttribute('skinIndex');\n const skinWeights = mesh.geometry.getAttribute('skinWeight');\n if (index < 0 || !skinIndices || !skinWeights) continue;\n mesh.skeleton.update();\n const selected = core.annotation_bone_vertices(readAttribute(skinIndices), readAttribute(skinWeights), new Uint32Array([index]));\n const vertex = new THREE.Vector3();\n for (const selectedIndex of selected) { mesh.getVertexPosition(selectedIndex, vertex).applyMatrix4(mesh.matrixWorld); points.push(vertex.x, vertex.y, vertex.z); }\n }\n const measured = core.annotation_point_bounds(new Float32Array(points));\n const entry = observation.objects.find(entry => entry.id === id);\n if (entry && measured.length === 6) entry.bounds = { min: Array.from(measured.slice(0, 3)), max: Array.from(measured.slice(3, 6)) };\n }\n runtime.observe_model(JSON.stringify(observation));\n }\n}\n\nexport function observeAnnotationModel(model: THREE.Object3D): AnnotationModelObservation { return new AnnotationModelObserver(model).capture(); }\n","import type { PerspectiveCamera, Scene } from 'three';\nimport type { CharacterSceneRenderer, CharacterSceneRenderingController } from './scene';\n\n/** Adapter-private binding. Applications pass config.rendering to the camera controller. */\nexport type SceneRenderingBinding = {\n suspend(): Promise<void>;\n prepare(renderer: CharacterSceneRenderer): Promise<void>;\n commit(renderer: CharacterSceneRenderer): Promise<void>;\n onError(error: unknown): void;\n};\n\ntype Owner = {\n scene: Scene;\n camera: PerspectiveCamera;\n binding: SceneRenderingBinding | null;\n disposed: boolean;\n drain: Promise<void> | null;\n settled: () => Promise<unknown> | null;\n reportFailure: (error: unknown, renderer?: CharacterSceneRenderer | null) => void;\n};\nconst owners = new WeakMap<CharacterSceneRenderingController, Owner>();\n\nexport function registerSceneRendering(controller: CharacterSceneRenderingController, scene: Scene, camera: PerspectiveCamera, settled: () => Promise<unknown> | null, reportFailure: (error: unknown, renderer?: CharacterSceneRenderer | null) => void) {\n const owner: Owner = { scene, camera, binding: null, disposed: false, drain: null, settled, reportFailure };\n owners.set(controller, owner);\n return owner;\n}\n\nexport function bindSceneRendering(controller: CharacterSceneRenderingController, scene: Scene, camera: PerspectiveCamera, binding: SceneRenderingBinding) {\n const owner = owners.get(controller);\n if (!owner || owner.disposed) throw new Error('Character scene rendering has been disposed or is not owned by Embody.');\n if (owner.scene !== scene || owner.camera !== camera) throw new Error('Rendering and camera controllers must share their scene and camera.');\n if (owner.binding) throw new Error('Character scene rendering already has a camera controller.');\n owner.binding = binding;\n const snapshot = controller.getSnapshot();\n if (snapshot.renderer) void binding.commit(snapshot.renderer).catch(binding.onError);\n if (snapshot.status !== 'ready' && snapshot.status !== 'error') void binding.suspend().catch(binding.onError);\n return () => {\n if (owner.binding === binding) {\n owner.drain = binding.suspend();\n void owner.drain.catch(() => undefined);\n owner.binding = null;\n return Promise.allSettled([owner.drain, owner.settled()]).then(() => undefined);\n }\n return null;\n };\n}\n\nexport function reportSceneRenderingFailure(controller: CharacterSceneRenderingController, error: unknown, renderer?: CharacterSceneRenderer | null) {\n const owner = owners.get(controller);\n if (owner && !owner.disposed) owner.reportFailure(error, renderer);\n}\n","import { Float32BufferAttribute, FloatType } from 'three';\nimport type { BufferAttribute, BufferGeometry, InterleavedBufferAttribute, Object3D, SkinnedMesh } from 'three';\n\n/** Keep joint indices compatible with both native WebGPU and WebGL skinning. */\nexport function prepareModelSkinning(model: Object3D): () => void {\n const replacements: { geometry: BufferGeometry; original: BufferAttribute | InterleavedBufferAttribute; prepared: BufferAttribute }[] = [];\n model.traverse(object => {\n const mesh = object as SkinnedMesh;\n if (!mesh.isSkinnedMesh) return;\n const geometry = mesh.geometry;\n const original = geometry.getAttribute('skinIndex');\n if (!original) return;\n if (original.array instanceof Float32Array && (!('gpuType' in original) || original.gpuType === FloatType)) return;\n\n // Three's native backend widens Uint8/Uint16 attributes in place to Uint32.\n // WebGL then uses vertexAttribIPointer, but its skinIndex shader input is\n // vec4. Float32 preserves every glTF joint index and avoids that mutation.\n // Read components so interleaved indices do not copy adjacent attributes.\n const prepared = new Float32BufferAttribute(original.count * original.itemSize, original.itemSize);\n for (let vertex = 0; vertex < original.count; vertex++) {\n for (let component = 0; component < original.itemSize; component++) {\n prepared.setComponent(vertex, component, original.getComponent(vertex, component));\n }\n }\n prepared.name = original.name;\n prepared.setUsage('data' in original ? original.data.usage : original.usage);\n geometry.setAttribute('skinIndex', prepared);\n replacements.push({ geometry, original, prepared });\n });\n // A replacement renderer may fail after compilation. The old native pipeline\n // still expects its original attribute format, so restore its exact objects.\n return () => {\n for (const { geometry, original, prepared } of replacements) {\n if (geometry.getAttribute('skinIndex') === prepared) geometry.setAttribute('skinIndex', original);\n }\n };\n}\n","import { Timer } from 'three';\nimport type { AnimationMixer, Object3D } from 'three';\n\ntype Binding = { mixer: AnimationMixer; enabled: boolean; afterFrame: () => void };\nconst bindings = new WeakMap<Object3D, Set<Binding>>();\n\n/** Register native playback with the existing scene renderer; never starts a loop. */\nexport function bindPlaybackRendering(model: Object3D, mixer: AnimationMixer, afterFrame: () => void) {\n const binding: Binding = { mixer, enabled: true, afterFrame };\n const entries = bindings.get(model) ?? new Set<Binding>();\n entries.add(binding);\n bindings.set(model, entries);\n return {\n setEnabled(enabled: boolean) { binding.enabled = enabled; },\n dispose() {\n entries.delete(binding);\n if (!entries.size) bindings.delete(model);\n },\n };\n}\n\n/** Called once by the Three render integration, using its native Timer. */\nexport function renderScenePlayback(scene: Object3D, timer: Timer): void {\n const mixers = new Set<AnimationMixer>();\n const active: Binding[] = [];\n scene.traverse((object) => {\n for (const binding of bindings.get(object) ?? []) {\n if (binding.enabled) { active.push(binding); mixers.add(binding.mixer); }\n }\n });\n for (const mixer of mixers) mixer.update(timer.getDelta());\n // Native finished callbacks run inside mixer iteration. Resource release and\n // observers must wait until every mixer has finished sampling this frame.\n for (const binding of active) binding.afterFrame();\n}\n\n/** Frame hook for an existing Three/R3F renderer. Does not create a render loop. */\nexport function createScenePlaybackFrame(scene: Object3D, document?: Document) {\n const timer = new Timer();\n if (document) timer.connect(document);\n let disposed = false;\n let initialized = false;\n return {\n onFrame(timestamp?: number) {\n if (disposed) return;\n timer.update(timestamp);\n // The first render establishes this renderer's timestamp origin.\n if (!initialized) { initialized = true; return; }\n renderScenePlayback(scene, timer);\n },\n dispose() { if (!disposed) { disposed = true; timer.dispose(); } },\n };\n}\n","import * as THREE from 'three';\nimport type { CharacterSceneRenderer } from '../scene';\nimport { prepareModelSkinning } from '../modelSkinning';\n\nfunction captureRenderTarget(renderer: CharacterSceneRenderer): () => void {\n const face = renderer.getActiveCubeFace();\n const mip = renderer.getActiveMipmapLevel();\n if ('isWebGPURenderer' in renderer) {\n const target = renderer.getRenderTarget();\n return () => renderer.setRenderTarget(target, face, mip);\n }\n const target = renderer.getRenderTarget();\n return () => renderer.setRenderTarget(target, face, mip);\n}\n\n/** Match the lazy bounds used by Three's Frustum.intersectsObject. */\nfunction initializeModelCullingBounds(model: THREE.Object3D): void {\n model.traverseVisible((object) => {\n if (!object.frustumCulled) return;\n const drawable = object as THREE.Mesh & THREE.Line & THREE.Points;\n if (!(drawable.isMesh || drawable.isLine || drawable.isPoints)) return;\n if ('boundingSphere' in drawable) {\n if (drawable.boundingSphere === null && 'computeBoundingSphere' in drawable\n && typeof drawable.computeBoundingSphere === 'function') drawable.computeBoundingSphere();\n } else if (drawable.geometry.boundingSphere === null) drawable.geometry.computeBoundingSphere();\n });\n}\n\n/** Only the model root is exposed; authored child visibility and layers are retained. */\nfunction withPreparedModel<T>(\n scene: THREE.Scene, model: THREE.Object3D, operation: () => T,\n options: { initializeBounds?: boolean } = {},\n): T {\n if (model === scene) throw new Error('Render preparation requires a model, not the controller scene.');\n let ancestor = model;\n while (ancestor.parent) {\n ancestor = ancestor.parent;\n if (!ancestor.visible) throw new Error('Render preparation requires visible model ancestors.');\n }\n if (model.parent && ancestor !== scene) throw new Error('Render preparation requires a detached model or a model in the controller scene.');\n const detached = !model.parent;\n const visible = model.visible;\n const culling = new Map<THREE.Object3D, boolean>();\n try {\n if (detached) scene.add(model);\n model.visible = true;\n if (options.initializeBounds) {\n // Skin bounds use bone.matrixWorld and current morph weights, not the\n // uploaded skeleton buffer. Refresh the same hierarchy the draw will use.\n scene.updateMatrixWorld(true);\n initializeModelCullingBounds(model);\n }\n model.traverseVisible((object) => {\n culling.set(object, object.frustumCulled);\n object.frustumCulled = false;\n });\n return operation();\n } finally {\n culling.forEach((value, object) => { object.frustumCulled = value; });\n model.visible = visible;\n if (detached) scene.remove(model);\n }\n}\n\n/** Three collects visible surfaces before yielding; no shared mutations span the await. */\nexport function compileModelForRender(\n renderer: CharacterSceneRenderer, scene: THREE.Scene, camera: THREE.Camera, model: THREE.Object3D,\n): Promise<unknown> {\n if ('isWebGPURenderer' in renderer && !renderer.hasInitialized()) {\n throw new Error('Model render preparation requires an initialized WebGPU renderer.');\n }\n // Only the caller-owned model is retained across asynchronous compilation.\n // Controller markers may still be replaced/disposed while this is pending.\n return withPreparedModel(scene, model, () => {\n prepareModelSkinning(model);\n return renderer.compileAsync(model, camera, scene);\n });\n}\n\n/** One complete scene draw initializes native geometry/textures and real shadow variants. */\nexport function drawModelForRender(\n renderer: CharacterSceneRenderer, scene: THREE.Scene, camera: THREE.Camera, model: THREE.Object3D,\n): () => void {\n const viewport = renderer.getViewport(new THREE.Vector4());\n const scissor = renderer.getScissor(new THREE.Vector4());\n const scissorTest = renderer.getScissorTest();\n const restoreRenderTarget = captureRenderTarget(renderer);\n const autoClear = renderer.autoClear;\n const clearColor = renderer.getClearColor(Object.assign(new THREE.Color(), { a: 1 }));\n const clearAlpha = renderer.getClearAlpha();\n const native = 'isWebGPURenderer' in renderer ? renderer : null;\n const renderObject = native?.getRenderObjectFunction();\n const mrt = native?.getMRT();\n const background = scene.background;\n const hasBackgroundNode = 'backgroundNode' in scene;\n const backgroundNode = hasBackgroundNode ? scene.backgroundNode : undefined;\n const overrideMaterial = scene.overrideMaterial;\n const sceneName = scene.name;\n const globalShadow = 'autoUpdate' in renderer.shadowMap ? renderer.shadowMap : null;\n const globalAutoUpdate = globalShadow?.autoUpdate;\n const globalNeedsUpdate = globalShadow?.needsUpdate;\n const shadows: { shadow: THREE.LightShadow; layers: number; autoUpdate: boolean; needsUpdate: boolean; remainingUpdate?: boolean }[] = [];\n let rendered = false;\n try {\n withPreparedModel(scene, model, () => {\n if (renderer.shadowMap.enabled) {\n scene.traverseVisible((object) => {\n const light = object as THREE.Light & { shadow?: THREE.LightShadow };\n if (light.isLight && light.castShadow && light.shadow && light.layers.test(camera.layers)) {\n const shadow = light.shadow;\n shadows.push({ shadow, layers: shadow.camera.layers.mask, autoUpdate: shadow.autoUpdate, needsUpdate: shadow.needsUpdate });\n shadow.needsUpdate = true;\n }\n });\n if (globalShadow) globalShadow.needsUpdate = true;\n }\n renderer.autoClear = false;\n // Color backgrounds force a framebuffer clear even with autoClear=false;\n // viewport clipping alone cannot keep that clear off the visible canvas.\n if (scene.background && 'isColor' in scene.background) scene.background = null;\n renderer.setViewport(0, 0, 0, 0);\n renderer.render(scene, camera);\n rendered = true;\n for (const state of shadows) state.remainingUpdate = state.shadow.needsUpdate;\n }, { initializeBounds: true });\n } finally {\n // Restore public state even when a native nested shadow draw throws before\n // Three's own restoration. The draw never changes authored layers/materials.\n restoreRenderTarget();\n renderer.setViewport(viewport);\n renderer.setScissor(scissor);\n renderer.setScissorTest(scissorTest);\n renderer.setClearColor(clearColor, clearAlpha);\n renderer.autoClear = autoClear;\n if (native) { native.setRenderObjectFunction(renderObject ?? null); native.setMRT(mrt ?? null); }\n scene.background = background;\n if (hasBackgroundNode) Object.assign(scene, { backgroundNode });\n else Reflect.deleteProperty(scene, 'backgroundNode');\n scene.overrideMaterial = overrideMaterial;\n scene.name = sceneName;\n for (const { shadow, layers, autoUpdate, needsUpdate, remainingUpdate } of shadows) {\n shadow.camera.layers.mask = layers;\n shadow.autoUpdate = autoUpdate;\n shadow.needsUpdate = rendered ? needsUpdate || !!remainingUpdate : true;\n }\n if (globalShadow) {\n globalShadow.autoUpdate = globalAutoUpdate!;\n globalShadow.needsUpdate = rendered ? globalNeedsUpdate! : true;\n }\n }\n // Cancellation can arrive between this synchronous draw and readiness\n // settlement. The host will not reveal that model, so its static maps expire.\n return () => {\n for (const { shadow } of shadows) shadow.needsUpdate = true;\n if (globalShadow && renderer.shadowMap.enabled) globalShadow.needsUpdate = true;\n };\n}\n","import { annotationConfigInput, annotationQuery } from './runtime';\nimport { observeAnnotationModel } from './modelObservation';\nimport { Quaternion, Vector3, type Object3D } from 'three';\nimport { initEmbodyCore, requireInitializedEmbodyCore, type EmbodyCore, type CameraFlight, type CameraOrbit } from '@lovelace_lol/embody/wasm';\nimport type { AnnotationCharacterConfig, AnnotationLaterality, BoneResolutionProfile, Region } from './types';\nexport { initEmbodyCore } from '@lovelace_lol/embody/wasm';\nexport type { AnnotationLaterality, BoneResolutionProfile } from './types';\n\ntype Point = { x: number; y: number; z: number };\ntype Rotation = Point & { w: number };\ntype Bounds = { center: Point; size: Point };\nconst vec = (v: Point) => new Float32Array([v.x, v.y, v.z]);\nconst quat = (q?: Rotation | null) => new Float32Array(q ? [q.x, q.y, q.z, q.w] : []);\nconst bounds = (b?: Bounds | null) => new Float32Array(b ? [b.center.x, b.center.y, b.center.z, b.size.x, b.size.y, b.size.z] : []);\nconst point = (values: ArrayLike<number>, offset = 0): Point => ({ x: values[offset], y: values[offset + 1], z: values[offset + 2] });\nconst framing = (v: ArrayLike<number>) => ({ position: point(v), target: point(v, 3), distance: v[6] });\n\n/** Typed, allocation-only bridge to the canonical Rust camera and marker algorithms. */\nexport class RustAnnotationCameraCore {\n constructor(private readonly core: EmbodyCore) {}\n static async create() { return new RustAnnotationCameraCore(await initEmbodyCore()); }\n normalizeCameraAngle(angle: number) { return this.core.normalize_camera_angle_degrees(angle); }\n worldDirectionForCameraAngle(q: Rotation | undefined, angle: number) { return point(this.core.world_direction_for_camera_angle(quat(q), angle)); }\n resolveFocusCameraDirection(q: Rotation | undefined, effectiveAngle: number, cameraAngle?: number, angleSpace = 'model') {\n return point(this.core.resolve_focus_camera_direction(quat(q), effectiveAngle, cameraAngle != null, angleSpace === 'world'));\n }\n resolveAutoCloseupAngle(offset: number, focusSize: Point, modelSize: Point) { return this.core.resolve_auto_closeup_angle(offset, vec(focusSize), vec(modelSize)); }\n focusPaddingFactor(size: number, closeUp: number, zoom: number, fullBody: number) { return this.core.focus_padding_factor(size, closeUp, zoom, fullBody); }\n solveFocusFraming(o: { focusBounds?: Bounds; modelBounds?: Bounds | null; modelQuaternion?: Rotation; fovDegrees: number; aspect: number; minDistance: number; closeUpPaddingFactor: number; zoomPaddingFactor: number; fullBodyPaddingFactor: number; overridePadding?: number; cameraAngle?: number; angleSpace?: string }) {\n return framing(this.core.solve_focus_framing(bounds(o.focusBounds), bounds(o.modelBounds), quat(o.modelQuaternion), o.fovDegrees, o.aspect, o.minDistance, o.closeUpPaddingFactor, o.zoomPaddingFactor, o.fullBodyPaddingFactor, o.overridePadding, o.cameraAngle, o.angleSpace === 'world'));\n }\n solveFullBodyFraming(o: { boxMin: Point; boxMax: Point; modelQuaternion?: Rotation; fovDegrees: number; aspect: number; minDistance: number; fullBodyPaddingFactor: number; overridePadding?: number; cameraAngle?: number; angleSpace?: string }) {\n return framing(this.core.solve_full_body_framing(vec(o.boxMin), vec(o.boxMax), quat(o.modelQuaternion), o.fovDegrees, o.aspect, o.minDistance, o.fullBodyPaddingFactor, o.overridePadding, o.cameraAngle, o.angleSpace === 'world'));\n }\n passesMarkerCameraAngleGate(o: { markerAngle?: number; currentCameraAngle?: number; rangeDegrees?: number }) { return this.core.passes_marker_camera_angle_gate(o.markerAngle, o.currentCameraAngle, o.rangeDegrees); }\n shouldShowMarker(o: { hiddenChild: boolean; solo: 'none' | 'soloed' | 'other-soloed'; markerAngle?: number; currentCameraAngle?: number }) {\n return this.core.should_show_marker(o.hiddenChild, o.solo === 'soloed' ? 1 : o.solo === 'other-soloed' ? 2 : 0, o.markerAngle, o.currentCameraAngle);\n }\n resolveViewportConstrainedLineScale(o: { startClip: ArrayLike<number>; endClip: ArrayLike<number>; safeX: number; safeY: number; minLengthRatio?: number }) {\n const v = this.core.resolve_viewport_constrained_line_scale(new Float32Array(o.startClip), new Float32Array(o.endClip), o.safeX, o.safeY, o.minLengthRatio);\n return { visible: v[0] >= 1, lineScale: v[1] };\n }\n resolveViewportSafeBounds(o: { labelScaleX: number; labelScaleY: number; projectionXScale: number; projectionYScale: number; viewportWidth: number; viewportHeight: number; edgePaddingPx?: number }) {\n const v = this.core.resolve_viewport_safe_bounds(o.labelScaleX, o.labelScaleY, o.projectionXScale, o.projectionYScale, o.viewportWidth, o.viewportHeight, o.edgePaddingPx);\n return { safeX: v[0], safeY: v[1] };\n }\n sampleMarkerBezierCurve(start: Point, end: Point, segments = 16) { return this.core.sample_marker_bezier_curve(vec(start), vec(end), segments); }\n sampleMarkerArcCurve(start: Point, end: Point, segments = 16) { return this.core.sample_marker_arc_curve(vec(start), vec(end), segments); }\n markerVisibilityAnimationFactors(visible: boolean, t: number) {\n const v = this.core.marker_visibility_animation_factors(visible, t);\n return { itemOpacityFactor: v[0], labelScaleFactor: v[1], lineOpacityFactor: v[2] };\n }\n separateOverlappingMarkerEndpoints(o: { starts: ArrayLike<number>; ends: ArrayLike<number>; modelCenter: Point; modelHeight: number }) { return this.core.separate_overlapping_marker_endpoints(new Float32Array(o.starts), new Float32Array(o.ends), vec(o.modelCenter), o.modelHeight); }\n createCameraFlight(start: Point, startTarget: Point, end: Point, endTarget: Point, duration: number) { return animationHandle(new this.core.CameraFlight(vec(start), vec(startTarget), vec(end), vec(endTarget), duration)); }\n createCameraOrbit(center: Point, radius: number, height: number, duration: number) { return animationHandle(new this.core.CameraOrbit(vec(center), radius, height, duration)); }\n}\n\nfunction animationHandle(handle: CameraFlight | CameraOrbit) {\n let disposed = false;\n return {\n sample(elapsed: number) {\n const v = handle.sample(elapsed);\n return { position: point(v), target: point(v, 3), done: v[6] >= 1 };\n },\n get durationMs() { return handle.duration_ms(); },\n dispose() { if (!disposed) { disposed = true; handle.free(); } },\n };\n}\nexport const createRustAnnotationCameraCore = () => RustAnnotationCameraCore.create();\n\nfunction request<T>(op: string, payload: unknown): T {\n return JSON.parse(requireInitializedEmbodyCore().embody_request(JSON.stringify({ op, payload }))) as T;\n}\n\n/** Resolve only annotation/profile inputs, preserving host-only data by reference. */\nexport async function resolveAnnotationCharacterConfig<T extends AnnotationCharacterConfig>(config: T): Promise<T> {\n await initEmbodyCore();\n const keys = ['profilePresetId', 'presetId', 'baseProfileId', 'auPresetType', 'annotationRegions', 'regions', 'disabledRegions', 'boneNodes', 'bonePrefix', 'boneSuffix', 'suffixPattern', 'auToMorphs', 'auToBones', 'morphToMesh', 'markerGroups', 'lineDefaults', 'markerDefaults'] as const;\n const input: Record<string, unknown> = {};\n for (const key of keys) if (config[key] !== undefined) input[key] = config[key];\n if (config.profile) {\n input.profile = Object.fromEntries(keys.filter(k => config.profile?.[k] !== undefined).map(k => [k, config.profile![k]]));\n }\n const extended = request<Record<string, unknown>>('profile.extendConfig', { config: input });\n const resolved = { ...config };\n for (const key of keys) if (extended[key] !== undefined) (resolved as Record<string, unknown>)[key] = extended[key];\n resolved.regions = annotationQuery('regions', { config: annotationConfigInput(resolved) });\n return resolved;\n}\n\nexport function resolveBoneNames(names: string[] | undefined, profile?: BoneResolutionProfile | null): string[] {\n return request('profile.resolveBoneNames', { profile: profile ?? {}, names: names ?? [] });\n}\nexport function fuzzyNameMatch(objectName: string, targetName: string, suffixPattern?: string): boolean { return request('name.fuzzyMatch', { objectName, targetName, suffixPattern }); }\nexport function getDefaultAnnotationLaterality(): AnnotationLaterality { return annotationQuery('defaultLaterality', {}); }\nexport function getSemanticHorizontalSignForSide(side: 'left' | 'right', laterality: AnnotationLaterality): 1 | -1 { return annotationQuery('sideSign', { side, laterality }); }\nexport function getSemanticHorizontalSign(name: string, laterality: AnnotationLaterality): 1 | -1 | null { return annotationQuery('semanticSign', { name, laterality }); }\nexport function resolveRegionCameraAngle(region: Region, laterality: AnnotationLaterality): number | undefined { return annotationQuery<number | null>('cameraAngle', { region, laterality }) ?? undefined; }\nexport function resolveRegionVisibilityCameraAngle(region: Region, laterality: AnnotationLaterality): number | undefined { return annotationQuery<number | null>('visibilityAngle', { region, laterality }) ?? undefined; }\nexport function toWorldDirection(model: Object3D | null, direction: Vector3): Vector3 { const value = annotationQuery<Point>('worldDirection', { quaternion: model?.getWorldQuaternion(new Quaternion()).toArray(), direction }); return new Vector3(value.x, value.y, value.z); }\nexport function getWorldDirectionForCameraAngle(model: Object3D | null, angle: number): Vector3 { const v = requireInitializedEmbodyCore().world_direction_for_camera_angle(quat(model?.getWorldQuaternion(new Quaternion())), angle); return new Vector3(v[0], v[1], v[2]); }\nexport function getModelLocalOrbitAngle(model: Object3D | null, center: Vector3, position: Vector3): number { return annotationQuery('orbitAngle', { quaternion: model?.getWorldQuaternion(new Quaternion()).toArray(), center, position }); }\nexport function passesMarkerCameraAngleGate(o: { markerAngle?: number; currentCameraAngle?: number; rangeDegrees?: number }): boolean { return requireInitializedEmbodyCore().passes_marker_camera_angle_gate(o.markerAngle, o.currentCameraAngle, o.rangeDegrees); }\nexport function resolveFaceCenter(model: Object3D, region: Region, profile?: BoneResolutionProfile | null): { center: Vector3; headBonePosition?: Vector3; method: string; debugInfo: string[] } {\n const result = annotationQuery<{ center: Point; headBonePosition: Point | null; method: string; debugInfo: string[] }>('faceCenter', { model: observeAnnotationModel(model), region, profile });\n return { ...result, center: new Vector3(result.center.x, result.center.y, result.center.z), headBonePosition: result.headBonePosition ? new Vector3(result.headBonePosition.x, result.headBonePosition.y, result.headBonePosition.z) : undefined };\n}\nexport function detectAnnotationLaterality(model: Object3D | null, regions: Region[], profile: BoneResolutionProfile | null): AnnotationLaterality { return model ? annotationQuery('laterality', { model: observeAnnotationModel(model), regions, profile }) : getDefaultAnnotationLaterality(); }\n","import { annotationQuery } from './runtime';\n/**\n * Self-contained DOM controls for ThreeAnnotationController\n * No React dependencies - vanilla DOM manipulation\n */\nexport interface DOMControlRegion {\n name: string;\n parent?: string;\n children?: string[];\n}\n\nexport interface DOMControlsConfig {\n /** Container element to append controls to */\n container: HTMLElement;\n /** Callback when user selects a region */\n onRegionSelect: (name: string) => void;\n /** Initial list of regions */\n regions: DOMControlRegion[];\n /** Currently selected region */\n currentRegion?: string;\n /** Initial annotation-marker visibility */\n markersVisible?: boolean;\n /** Callback when the Markers checkbox is toggled */\n onMarkersVisibleChange?: (visible: boolean) => void;\n}\n\n/** Temporary AU preview regions must never appear in the View dropdown. */\nexport const RUNTIME_ANNOTATION_REGION_PREFIX = 'runtime:annotation:';\n\nexport function isRuntimeAnnotationRegionName(name: string): boolean { return annotationQuery('isRuntimeName', { name }); }\nexport function filterCameraViewRegions<T extends { name: string }>(regions: T[]): T[] { return annotationQuery<number[]>('viewRegionIndices', { regions: regions.map(({ name }) => ({ name })) }).map(index => regions[index]); }\n\n/**\n * CSS styles for the DOM controls\n * Scoped with unique class prefix to avoid conflicts\n */\nconst STYLES = `\n.acc-controls {\n position: absolute;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 1000;\n display: flex;\n gap: 8px;\n padding: 8px 12px;\n background: rgba(0, 0, 0, 0.7);\n border-radius: 8px;\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n.acc-select {\n background: rgba(255, 255, 255, 0.1);\n color: white;\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 4px;\n padding: 6px 12px;\n font-size: 14px;\n cursor: pointer;\n outline: none;\n width: 160px;\n max-width: 160px;\n min-width: 160px;\n appearance: none;\n -webkit-appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='white' d='M6 8L2 4h8z'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 8px center;\n padding-right: 28px;\n}\n\n.acc-markers {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-left: 4px;\n padding-left: 10px;\n border-left: 1px solid rgba(255, 255, 255, 0.15);\n color: rgba(255, 255, 255, 0.85);\n font-size: 12px;\n user-select: none;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.acc-markers input {\n margin: 0;\n cursor: pointer;\n accent-color: #3182ce;\n}\n\n.acc-select:hover {\n background-color: rgba(255, 255, 255, 0.15);\n border-color: rgba(255, 255, 255, 0.3);\n}\n\n.acc-select:focus {\n border-color: #3182ce;\n box-shadow: 0 0 0 2px rgba(49, 130, 206, 0.3);\n}\n\n.acc-select option {\n background: #1a202c;\n color: white;\n padding: 8px;\n}\n\n.acc-label {\n color: rgba(255, 255, 255, 0.7);\n font-size: 12px;\n display: flex;\n align-items: center;\n margin-right: 4px;\n}\n`;\n\n// Track if styles have been injected\nlet stylesInjected = false;\n\nfunction injectStyles(): void {\n if (stylesInjected || typeof document === 'undefined') return;\n const style = document.createElement('style');\n style.setAttribute('data-acc-styles', 'true');\n style.textContent = STYLES;\n document.head.appendChild(style);\n stylesInjected = true;\n}\n\n/**\n * Format region name for display\n * Converts snake_case to Title Case\n */\nexport function buildRegionDisplayOptions(regions: DOMControlRegion[]): Array<{ name: string; label: string }> { return annotationQuery('displayOptions', { regions }); }\n\n/**\n * CameraDOMControls - Self-contained DOM UI for region selection\n */\nexport class CameraDOMControls {\n private container: HTMLElement;\n private wrapper: HTMLDivElement;\n private select: HTMLSelectElement;\n private markersCheckbox: HTMLInputElement | null = null;\n private onRegionSelect: (name: string) => void;\n private onMarkersVisibleChange?: (visible: boolean) => void;\n\n constructor(config: DOMControlsConfig) {\n // Inject styles once\n injectStyles();\n\n this.container = config.container;\n this.onRegionSelect = config.onRegionSelect;\n this.onMarkersVisibleChange = config.onMarkersVisibleChange;\n\n // Create wrapper\n this.wrapper = document.createElement('div');\n this.wrapper.className = 'acc-controls';\n\n // Create label\n const label = document.createElement('span');\n label.className = 'acc-label';\n label.textContent = 'View:';\n this.wrapper.appendChild(label);\n\n // Create select\n this.select = document.createElement('select');\n this.select.className = 'acc-select';\n this.populateSelect(config.regions, config.currentRegion);\n\n // Handle selection changes\n this.select.addEventListener('change', () => {\n this.onRegionSelect(this.select.value);\n });\n\n this.wrapper.appendChild(this.select);\n\n if (this.onMarkersVisibleChange) {\n const markersLabel = document.createElement('label');\n markersLabel.className = 'acc-markers';\n\n this.markersCheckbox = document.createElement('input');\n this.markersCheckbox.type = 'checkbox';\n this.markersCheckbox.checked = Boolean(config.markersVisible);\n this.markersCheckbox.setAttribute('aria-label', 'Show annotation markers');\n this.markersCheckbox.addEventListener('change', () => {\n this.onMarkersVisibleChange?.(this.markersCheckbox!.checked);\n });\n\n const markersText = document.createElement('span');\n markersText.textContent = 'Markers';\n\n markersLabel.appendChild(this.markersCheckbox);\n markersLabel.appendChild(markersText);\n this.wrapper.appendChild(markersLabel);\n }\n\n // Append to container\n // Ensure container has relative positioning for absolute positioning to work\n const containerStyle = window.getComputedStyle(this.container);\n if (containerStyle.position === 'static') {\n this.container.style.position = 'relative';\n }\n\n this.container.appendChild(this.wrapper);\n }\n\n /**\n * Populate select options\n */\n private populateSelect(regions: DOMControlRegion[], current?: string): void {\n this.select.innerHTML = '';\n\n const viewRegions = filterCameraViewRegions(regions);\n\n if (viewRegions.length === 0) {\n const option = document.createElement('option');\n option.value = '';\n option.textContent = 'No regions';\n option.disabled = true;\n this.select.appendChild(option);\n return;\n }\n\n buildRegionDisplayOptions(viewRegions).forEach(({ name, label }) => {\n const option = document.createElement('option');\n option.value = name;\n option.textContent = label;\n if (name === current) {\n option.selected = true;\n }\n this.select.appendChild(option);\n });\n }\n\n /**\n * Update available regions\n */\n updateRegions(regions: DOMControlRegion[], current?: string): void {\n this.populateSelect(regions, current);\n }\n\n /**\n * Sync Markers checkbox with controller visibility state.\n */\n setMarkersVisible(visible: boolean): void {\n if (!this.markersCheckbox || this.markersCheckbox.checked === visible) return;\n this.markersCheckbox.checked = visible;\n }\n\n /**\n * Set current region (updates select value)\n */\n setCurrentRegion(name: string): void {\n if (this.select.value !== name) {\n this.select.value = name;\n }\n }\n\n /**\n * Show/hide controls\n */\n setVisible(visible: boolean): void {\n this.wrapper.style.display = visible ? 'flex' : 'none';\n }\n\n /**\n * Check if controls are visible\n */\n isVisible(): boolean {\n return this.wrapper.style.display !== 'none';\n }\n\n /**\n * Cleanup and remove from DOM\n */\n dispose(): void {\n this.wrapper.remove();\n }\n}\n","import * as THREE from 'three';\nimport type { NativeAnnotationRuntime } from './runtime';\n\n/** Native event capture and pose observation. Rust integrates every gesture. */\nexport class ThreeAnnotationControls extends THREE.EventDispatcher<{ change: {}; start: {}; end: {} }> {\n readonly target = new THREE.Vector3();\n private disposed = false;\n private previousTouchAction = '';\n private connected = false;\n constructor(public domElement: HTMLElement, private readonly runtime: NativeAnnotationRuntime, private readonly advance: () => void, private readonly captureInput = true) {\n super();\n this.connect(domElement);\n }\n connect(element: HTMLElement): void {\n if (this.disposed || (this.connected && this.domElement === element)) return;\n this.disconnect();\n this.domElement = element;\n if (!this.captureInput) return;\n this.previousTouchAction = element.style.touchAction;\n element.style.touchAction = 'none';\n element.addEventListener('pointerdown', this.down);\n element.addEventListener('pointermove', this.move);\n element.addEventListener('pointerup', this.up);\n element.addEventListener('pointercancel', this.cancel);\n element.addEventListener('lostpointercapture', this.cancel);\n element.addEventListener('wheel', this.wheel, { passive: false });\n element.addEventListener('contextmenu', this.contextMenu);\n this.connected = true;\n }\n disconnect(): void {\n if (!this.connected) return;\n this.connected = false;\n this.domElement.removeEventListener('pointerdown', this.down);\n this.domElement.removeEventListener('pointermove', this.move);\n this.domElement.removeEventListener('pointerup', this.up);\n this.domElement.removeEventListener('pointercancel', this.cancel);\n this.domElement.removeEventListener('lostpointercapture', this.cancel);\n this.domElement.removeEventListener('wheel', this.wheel);\n this.domElement.removeEventListener('contextmenu', this.contextMenu);\n this.domElement.style.touchAction = this.previousTouchAction;\n this.runtime.command('input', '{\"kind\":\"disconnect\"}', performance.now());\n }\n get enabled(): boolean { return this.read().enabled; }\n set enabled(enabled: boolean) { this.settings({ enabled }); }\n get enableDamping(): boolean { return this.read().enableDamping; }\n set enableDamping(enableDamping: boolean) { this.settings({ enableDamping }); }\n get dampingFactor(): number { return this.read().dampingFactor; }\n set dampingFactor(dampingFactor: number) { this.settings({ dampingFactor }); }\n get minDistance(): number { return this.read().minDistance; }\n set minDistance(minDistance: number) { this.settings({ minDistance }); }\n get maxDistance(): number { return this.read().maxDistance; }\n set maxDistance(maxDistance: number) { this.settings({ maxDistance }); }\n private read(): { enabled: boolean; enableDamping: boolean; dampingFactor: number; minDistance: number; maxDistance: number } { if (this.disposed) throw new Error('Annotation controls are disposed.'); return JSON.parse(this.runtime.command('controls', '{}', performance.now())); }\n private settings(value: unknown): void { if (!this.disposed) this.runtime.command('settings', JSON.stringify(value), performance.now()); }\n update(): void { if (!this.disposed) this.advance(); }\n notifyChange(): void { this.dispatchEvent({ type: 'change' }); }\n private send(kind: string, event: PointerEvent): void {\n const rect = this.domElement.getBoundingClientRect();\n this.runtime.command('input', JSON.stringify({ kind, id: event.pointerId, button: event.button, x: event.clientX, y: event.clientY, width: rect.width, height: rect.height, modifier: event.ctrlKey || event.metaKey || event.shiftKey }), performance.now());\n this.advance();\n }\n private readonly down = (event: PointerEvent): void => { this.domElement.setPointerCapture?.(event.pointerId); this.send('down', event); this.dispatchEvent({ type: 'start' }); };\n private readonly move = (event: PointerEvent): void => { this.send('move', event); };\n private readonly up = (event: PointerEvent): void => { this.send('up', event); if (this.domElement.hasPointerCapture?.(event.pointerId)) this.domElement.releasePointerCapture(event.pointerId); this.dispatchEvent({ type: 'end' }); };\n private readonly cancel = (event: PointerEvent): void => { this.send('cancel', event); this.dispatchEvent({ type: 'end' }); };\n private readonly wheel = (event: WheelEvent): void => {\n event.preventDefault();\n this.runtime.command('input', JSON.stringify({ kind: 'wheel', deltaY: event.deltaY, deltaMode: event.deltaMode, width: this.domElement.clientWidth, height: this.domElement.clientHeight }), performance.now());\n this.advance();\n };\n private readonly contextMenu = (event: Event): void => { event.preventDefault(); };\n dispose(): void {\n if (this.disposed) return;\n this.disconnect();\n this.disposed = true;\n }\n}\n","import * as THREE from 'three';\nimport { requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport type { AnnotationSnapshot, MarkerDescriptor, NativeAnnotationRuntime } from './runtime';\n\ninterface Objects {\n descriptor: string;\n sphere: THREE.Mesh<THREE.SphereGeometry, THREE.MeshBasicMaterial>;\n line: THREE.Line<THREE.BufferGeometry, THREE.LineBasicMaterial>;\n label: THREE.Sprite;\n texture: THREE.CanvasTexture;\n arrow: THREE.Mesh<THREE.ConeGeometry, THREE.MeshBasicMaterial> | null;\n element: HTMLDivElement | null;\n}\n\ntype ParentPosition = { users: number; original: string; priority: string };\nconst positionedParents = new WeakMap<HTMLElement, ParentPosition>();\n\n/** Several annotation views can borrow the same static canvas container. */\nfunction positionOverlayParent(parent: HTMLElement): () => void {\n let position = positionedParents.get(parent);\n if (position) position.users++;\n else {\n const computed = parent.ownerDocument?.defaultView?.getComputedStyle(parent).position ?? parent.style.position;\n if (computed && computed !== 'static') return () => {};\n position = { users: 1, original: parent.style.position ?? '', priority: parent.style.getPropertyPriority?.('position') ?? '' };\n positionedParents.set(parent, position);\n parent.style.position = 'relative';\n }\n const borrowed = position;\n return () => {\n if (--borrowed.users > 0) return;\n positionedParents.delete(parent);\n // A later host edit owns this property; never restore over it.\n if (parent.style.position !== 'relative' || (parent.style.getPropertyPriority?.('position') ?? '') !== '') return;\n if (parent.style.setProperty) parent.style.setProperty('position', borrowed.original, borrowed.priority);\n else parent.style.position = borrowed.original;\n };\n}\n\n/** Applies Rust frame records to native objects. No annotation state machine. */\nexport class ThreeAnnotationRenderer {\n private readonly group = new THREE.Group();\n private readonly objects = new Map<number, Objects>();\n private readonly overlay: HTMLDivElement;\n private readonly raycaster = new THREE.Raycaster();\n private readonly pointer = new THREE.Vector2();\n private readonly viewProjection = new THREE.Matrix4();\n private overlayParent: HTMLElement | null = null;\n private releaseParentPosition: (() => void) | null = null;\n private readonly overlayResizeObserver: ResizeObserver | null;\n private style = '';\n private revision = -1;\n private meshes: THREE.Mesh[] = [];\n setMeshes(meshes: THREE.Mesh[]): void { this.meshes = meshes; }\n\n constructor(\n private readonly runtime: NativeAnnotationRuntime,\n private readonly scene: THREE.Scene,\n private readonly camera: THREE.PerspectiveCamera,\n private domElement: HTMLElement,\n private readonly onPick: (ids: number[]) => void,\n private readonly onHover: (id: number | null) => void,\n ) {\n this.scene.add(this.group);\n this.overlay = document.createElement('div');\n this.overlay.style.cssText = 'position:absolute;pointer-events:none;overflow:hidden;';\n this.overlayResizeObserver = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => this.layoutOverlay());\n this.attachOverlay();\n domElement.addEventListener('click', this.click);\n }\n private attachOverlay(): void {\n const parent = this.domElement.parentElement ?? this.domElement;\n if (parent !== this.overlayParent) {\n this.releaseParentPosition?.();\n this.releaseParentPosition = positionOverlayParent(parent);\n this.overlayParent = parent;\n parent.appendChild(this.overlay);\n }\n this.overlayResizeObserver?.disconnect();\n this.overlayResizeObserver?.observe(this.domElement);\n if (parent !== this.domElement) this.overlayResizeObserver?.observe(parent);\n this.layoutOverlay();\n }\n private layoutOverlay(): DOMRect {\n const rect = this.domElement.getBoundingClientRect();\n // offsetParent can change if the host edits its positioning while attached.\n const parent = (this.overlay.offsetParent as HTMLElement | null) ?? this.overlayParent;\n const origin = parent?.getBoundingClientRect();\n this.overlay.style.left = `${rect.left - (origin?.left ?? 0) - (parent?.clientLeft ?? 0) + (parent?.scrollLeft ?? 0)}px`;\n this.overlay.style.top = `${rect.top - (origin?.top ?? 0) - (parent?.clientTop ?? 0) + (parent?.scrollTop ?? 0)}px`;\n this.overlay.style.width = `${rect.width}px`;\n this.overlay.style.height = `${rect.height}px`;\n return rect;\n }\n setDomElement(element: HTMLElement): void {\n if (element === this.domElement) { this.attachOverlay(); return; }\n this.domElement.removeEventListener('click', this.click);\n this.domElement = element;\n this.attachOverlay();\n element.addEventListener('click', this.click);\n }\n sync(snapshot: AnnotationSnapshot): void {\n if (this.revision === snapshot.descriptorRevision && this.style === snapshot.style) return;\n if (this.style !== snapshot.style) this.clear();\n this.style = snapshot.style;\n const ids = new Set(snapshot.descriptors.map(descriptor => descriptor.id));\n for (const id of this.objects.keys()) if (!ids.has(id)) this.remove(id);\n for (const descriptor of snapshot.descriptors) {\n const signature = JSON.stringify(descriptor);\n if (this.objects.get(descriptor.id)?.descriptor === signature) continue;\n this.remove(descriptor.id);\n this.objects.set(descriptor.id, this.create(descriptor, signature));\n }\n this.revision = snapshot.descriptorRevision;\n }\n private create(descriptor: MarkerDescriptor, signature: string): Objects {\n const { style } = descriptor;\n const sphere = new THREE.Mesh(new THREE.SphereGeometry(descriptor.radius, 12, 12), new THREE.MeshBasicMaterial({ color: style.markerColor, transparent: true }));\n const dashed = style.line.style === 'dashed' || style.line.style === 'dotted';\n const material = dashed\n ? new THREE.LineDashedMaterial({ color: style.lineColor, transparent: true, dashSize: style.line.style === 'dotted' ? 0.005 : 0.02, gapSize: 0.01, linewidth: style.line.thickness })\n : new THREE.LineBasicMaterial({ color: style.lineColor, transparent: true, linewidth: style.line.thickness });\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute('position', new THREE.BufferAttribute(new Float32Array(51), 3));\n const line = new THREE.Line(geometry, material);\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (!context) { sphere.geometry.dispose(); sphere.material.dispose(); geometry.dispose(); material.dispose(); throw new Error('Annotation labels require a 2D canvas context.'); }\n const font = `${style.labelFontSize}px Arial, sans-serif`;\n context.font = font;\n canvas.width = Math.ceil(context.measureText(descriptor.label).width) + 24;\n canvas.height = Math.ceil(style.labelFontSize * 1.5) + 12;\n context.font = font; context.textAlign = 'center'; context.textBaseline = 'middle';\n context.fillStyle = style.labelBackground; context.fillRect(0, 0, canvas.width, canvas.height);\n context.fillStyle = style.labelColor; context.fillText(descriptor.label, canvas.width / 2, canvas.height / 2);\n const texture = new THREE.CanvasTexture(canvas);\n const label = new THREE.Sprite(new THREE.SpriteMaterial({ map: texture, transparent: true, depthTest: true, depthWrite: false, sizeAttenuation: false }));\n const arrow = style.line.arrowHead ? new THREE.Mesh(new THREE.ConeGeometry(descriptor.arrowRadius, descriptor.arrowLength, 8), new THREE.MeshBasicMaterial({ color: style.lineColor, transparent: true })) : null;\n let element: HTMLDivElement | null = null;\n if (this.style === 'html') {\n element = document.createElement('div');\n element.className = 'annotation-html-marker'; element.dataset.annotation = descriptor.name;\n element.textContent = descriptor.htmlText; element.title = descriptor.title; element.setAttribute('aria-label', descriptor.title);\n element.style.cssText = 'position:absolute;pointer-events:auto;transform:translate(-50%,-50%);width:24px;height:24px;border-radius:50%;border:2px solid white;display:none;align-items:center;justify-content:center;cursor:pointer;font: bold 12px Arial,sans-serif;box-shadow:0 2px 8px rgba(0,0,0,.3);';\n element.style.color = style.labelColor;\n element.addEventListener('mouseenter', () => this.onHover(descriptor.id));\n element.addEventListener('mouseleave', () => this.onHover(null));\n element.addEventListener('click', event => { event.stopPropagation(); this.onPick([descriptor.id]); });\n this.overlay.appendChild(element);\n }\n for (const object of [sphere, line, label, arrow]) if (object) { object.userData.annotationId = descriptor.id; object.visible = false; this.group.add(object); }\n this.runtime.label_metrics(descriptor.id, canvas.width, canvas.height);\n return { descriptor: signature, sphere, line, label, texture, arrow, element };\n }\n update(now: number): void {\n this.camera.updateMatrixWorld();\n this.viewProjection.multiplyMatrices(this.camera.projectionMatrix, this.camera.matrixWorldInverse);\n if ((this.domElement.parentElement ?? this.domElement) !== this.overlayParent) this.attachOverlay();\n const rect = this.layoutOverlay();\n const rays = this.runtime.occlusion_queries();\n const hits = new Float32Array(rays.length / 8 * 2);\n for (let offset = 0; offset < rays.length; offset += 8) {\n this.raycaster.set(new THREE.Vector3().fromArray(rays, offset + 1), new THREE.Vector3().fromArray(rays, offset + 4));\n this.raycaster.near = 0; this.raycaster.far = rays[offset + 7];\n const intersection = this.raycaster.intersectObjects(this.meshes, false)[0];\n hits[offset / 4] = rays[offset]; hits[offset / 4 + 1] = intersection?.distance ?? Infinity;\n }\n this.runtime.observe_occlusion(hits);\n const values = this.runtime.marker_frame(now, new Float32Array(this.camera.projectionMatrix.elements), new Float32Array(this.viewProjection.elements), rect.width, rect.height);\n const stride = requireInitializedEmbodyCore().annotation_marker_frame_stride();\n for (let offset = 0; offset < values.length; offset += stride) {\n const objects = this.objects.get(values[offset]);\n if (!objects) continue;\n const visible = values[offset + 1] === 1;\n const nativeVisible = visible && !objects.element;\n objects.sphere.visible = objects.line.visible = objects.label.visible = nativeVisible;\n if (objects.arrow) objects.arrow.visible = nativeVisible;\n objects.sphere.position.fromArray(values, offset + 2);\n objects.sphere.scale.setScalar(values[offset + 8]);\n objects.sphere.material.opacity = values[offset + 11]; objects.sphere.material.color.setHex(values[offset + 13]);\n objects.line.material.opacity = values[offset + 12]; objects.line.material.color.setHex(values[offset + 14]);\n const positions = objects.line.geometry.getAttribute('position') as THREE.BufferAttribute;\n (positions.array as Float32Array).set(values.subarray(offset + 19, offset + 70)); positions.needsUpdate = true;\n objects.line.geometry.computeBoundingSphere();\n if (objects.line.material instanceof THREE.LineDashedMaterial) objects.line.computeLineDistances();\n objects.label.position.fromArray(values, offset + 5); objects.label.scale.set(values[offset + 9], values[offset + 10], 1);\n objects.label.material.opacity = values[offset + 11];\n if (objects.arrow) { objects.arrow.position.fromArray(values, offset + 5); objects.arrow.quaternion.fromArray(values, offset + 15); objects.arrow.material.opacity = values[offset + 12]; objects.arrow.material.color.setHex(values[offset + 14]); }\n if (objects.element) { objects.element.style.display = visible ? 'flex' : 'none'; objects.element.style.transform = `translate(-50%,-50%) scale(${values[offset + 72]})`; objects.element.style.background = `#${Math.round(values[offset + 13]).toString(16).padStart(6, '0')}`; objects.element.style.left = `${values[offset + 70]}px`; objects.element.style.top = `${values[offset + 71]}px`; objects.element.style.opacity = String(values[offset + 11]); }\n }\n }\n private readonly click = (event: MouseEvent): void => {\n const rect = this.domElement.getBoundingClientRect();\n this.pointer.set((event.clientX - rect.left) / rect.width * 2 - 1, -(event.clientY - rect.top) / rect.height * 2 + 1);\n this.raycaster.near = 0; this.raycaster.far = Infinity;\n this.raycaster.setFromCamera(this.pointer, this.camera);\n // Raycaster reports native hits. Rust decides which annotation is selectable.\n this.onPick(this.raycaster.intersectObjects([...this.objects.values()].flatMap(objects => [objects.sphere, objects.label]), false).map(hit => hit.object.userData.annotationId as number));\n };\n private remove(id: number): void {\n const objects = this.objects.get(id); if (!objects) return;\n for (const object of [objects.sphere, objects.line, objects.arrow]) if (object) { this.group.remove(object); object.geometry.dispose(); object.material.dispose(); }\n this.group.remove(objects.label); objects.label.material.dispose(); objects.texture.dispose(); objects.element?.remove(); this.objects.delete(id);\n }\n clear(): void { for (const id of this.objects.keys()) this.remove(id); this.revision = -1; }\n dispose(): void {\n this.domElement.removeEventListener('click', this.click); this.clear(); this.group.removeFromParent();\n this.overlayResizeObserver?.disconnect(); this.overlay.remove(); this.releaseParentPosition?.();\n this.releaseParentPosition = null; this.overlayParent = null; this.meshes = [];\n }\n}\n","import type * as THREE from 'three';\n\nconst SLICE_BUDGET_MS = 4;\n\n/**\n * Keep Three's native per-mesh raycast, including skinning, morphs and material\n * sides. Yield between meshes once a slice is spent; one mesh is indivisible.\n * A null result means the owning model/region load was replaced or disposed.\n */\nexport async function intersectMeshesInSlices(\n raycaster: THREE.Raycaster,\n meshes: readonly THREE.Mesh[],\n options: { isCurrent: () => boolean; yieldToPaint: () => Promise<void>; now?: () => number },\n): Promise<THREE.Intersection[] | null> {\n const now = options.now ?? (() => performance.now());\n let sliceStart = now();\n const hits: THREE.Intersection[] = [];\n for (const [index, mesh] of meshes.entries()) {\n if (!options.isCurrent()) return null;\n // Let Raycaster apply its native layer checks and Mesh/SkinnedMesh logic.\n // Accumulate separately so earlier meshes' hits aren't sorted repeatedly.\n for (const hit of raycaster.intersectObject(mesh, false)) hits.push(hit);\n if (!options.isCurrent()) return null;\n if (index < meshes.length - 1 && now() - sliceStart >= SLICE_BUDGET_MS) {\n await options.yieldToPaint();\n if (!options.isCurrent()) return null;\n sliceStart = now();\n }\n }\n if (!options.isCurrent()) return null;\n // Same stable distance ordering as Raycaster.intersectObjects(meshes, false).\n return hits.sort((left, right) => left.distance - right.distance);\n}\n","/** Continue in a task after paint, rather than in the animation-frame microtask. */\nexport function waitForCharacterLoadPaint(): Promise<void> {\n return new Promise((resolve) => {\n let frame: number | undefined;\n let task: ReturnType<typeof setTimeout> | undefined;\n const finish = () => {\n clearTimeout(fallback);\n if (task !== undefined) clearTimeout(task);\n if (frame !== undefined && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(frame);\n resolve();\n };\n // Hidden tabs can suspend rAF, including after the visibility check.\n const fallback = setTimeout(finish, 100);\n if (typeof requestAnimationFrame === 'function' &&\n (typeof document === 'undefined' || document.visibilityState !== 'hidden')) {\n frame = requestAnimationFrame(() => { task = setTimeout(finish, 0); });\n } else {\n task = setTimeout(finish, 0);\n }\n });\n}\n","import * as THREE from 'three';\nimport { initEmbodyCore, requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport type { CharacterSceneRenderer } from '../scene';\nimport { bindSceneRendering, reportSceneRenderingFailure } from '../sceneRenderingBinding';\nimport { prepareModelSkinning } from '../modelSkinning';\nimport { renderScenePlayback } from '../playbackRendering';\nimport { compileModelForRender, drawModelForRender } from './modelRenderPreparation';\nimport { resolveAnnotationCharacterConfig } from './adapter';\nimport { CameraDOMControls } from './DOMControls';\nimport { ThreeAnnotationControls } from './ThreeAnnotationControls';\nimport { ThreeAnnotationRenderer } from './ThreeAnnotationRenderer';\nimport { AnnotationModelObserver } from './modelObservation';\nimport { intersectMeshesInSlices } from './markerSurfaceRaycast';\nimport { waitForCharacterLoadPaint } from './loadFrame';\nimport { annotationConfigInput, annotationProfileInput, type AnnotationSnapshot, type NativeAnnotationRuntime, type SurfaceQuery } from './runtime';\nimport type { ThreeAnnotationControllerConfig, CharacterConfig, AnnotationAnchoredRegion, CameraState, MarkerStyle, MarkerStyleOverrides, LineConfig, ExpandedRegionState, RuntimeAnnotationOptions, RuntimeAnnotationRegionSummary, RegionChangeCallback } from './types';\n\nexport interface MarkerStateSnapshot { visible: boolean; style: MarkerStyle; }\ninterface ModelRenderPreparation { promise: Promise<void>; draw: (() => void) | null; cancel: (reason: Error) => void; }\nfunction renderPreparationAborted(): Error { const error = new Error('Model render preparation was cancelled.'); error.name = 'AbortError'; return error; }\n\n/** Native resource owner for one Rust AnnotationRuntime. Await create() or initialize Wasm before construction. */\nexport class ThreeAnnotationController {\n readonly camera: THREE.PerspectiveCamera;\n readonly scene: THREE.Scene;\n readonly controls: ThreeAnnotationControls;\n private readonly runtime: NativeAnnotationRuntime;\n private readonly markerRenderer: ThreeAnnotationRenderer;\n private readonly resolveCharacterConfig: NonNullable<ThreeAnnotationControllerConfig['resolveCharacterConfig']>;\n private readonly selectRegion?: (name: string) => void;\n private domElement: HTMLElement;\n private readonly manageCamera: boolean;\n private observer: AnnotationModelObserver | null = null;\n private hostConfig: CharacterConfig | null = null;\n private configSnapshot: CharacterConfig | null = null;\n private configSnapshotRevision = -1;\n private configSnapshotHost: CharacterConfig | null = null;\n private state: AnnotationSnapshot;\n private domControls: CameraDOMControls | null = null;\n private disposed = false;\n private fallbackFrame: number | null = null;\n private readonly flights = new Map<number, () => void>();\n private readonly markerStateListeners = new Set<(state: MarkerStateSnapshot) => void>();\n private readonly regionListeners = new Set<RegionChangeCallback>();\n private renderer: CharacterSceneRenderer | null = null;\n private readonly playbackTimer = new THREE.Timer();\n private renderFrame: ThreeAnnotationControllerConfig['renderFrame'];\n private resizeRenderer: ThreeAnnotationControllerConfig['resizeRenderer'];\n private onRenderError: ThreeAnnotationControllerConfig['onRenderError'];\n private renderingSuspended = false;\n private unbindRendering: (() => Promise<void> | null) | null = null;\n private renderingFailure: ((error: unknown) => void) | null = null;\n private framePending = false;\n private frameCompletion: Promise<void> | null = null;\n private modelPreparation: ModelRenderPreparation | null = null;\n private renderFailed = false;\n private resizeObserver: ResizeObserver | null = null;\n private boundResizeHandler: (() => void) | null = null;\n\n static async create(config: ThreeAnnotationControllerConfig): Promise<ThreeAnnotationController> { await initEmbodyCore(); return new ThreeAnnotationController(config); }\n constructor(config: ThreeAnnotationControllerConfig, nativeOptions: { captureInput?: boolean; manageCamera?: boolean; markerDefaults?: unknown } = {}) {\n const core = requireInitializedEmbodyCore();\n const settings = Object.fromEntries(['enableDamping', 'dampingFactor', 'minDistance', 'maxDistance', 'transitionDuration', 'zoomPaddingFactor', 'closeUpPaddingFactor', 'fullBodyPaddingFactor'].map(key => [key, config[key as keyof ThreeAnnotationControllerConfig]]));\n this.runtime = new core.AnnotationRuntime(JSON.stringify({ ...settings, markerDefaults: nativeOptions.markerDefaults }));\n this.camera = config.camera; this.scene = config.scene; this.domElement = config.domElement;\n this.manageCamera = nativeOptions.manageCamera ?? true;\n this.resolveCharacterConfig = config.resolveCharacterConfig ?? resolveAnnotationCharacterConfig;\n this.selectRegion = config.onRegionSelect;\n this.controls = new ThreeAnnotationControls(config.domElement, this.runtime, () => { this.update(); this.requestFrame(); }, nativeOptions.captureInput);\n this.state = this.readState();\n if (this.manageCamera) this.applyCameraState(this.state.camera);\n else this.controls.target.copy(this.camera.getWorldDirection(new THREE.Vector3()).add(this.camera.position));\n this.markerRenderer = new ThreeAnnotationRenderer(this.runtime, this.scene, this.camera, this.domElement, ids => this.pick(ids), id => { if (!this.disposed) { this.call('hover', { id }); this.update(); } });\n if (config.showDOMControls ?? true) this.domControls = new CameraDOMControls({ container: config.controlsContainer ?? (config.rendering && config.domElement.tagName === 'CANVAS' ? config.domElement.parentElement ?? config.domElement : config.domElement), regions: [], markersVisible: this.state.visible, onRegionSelect: name => this.select(name), onMarkersVisibleChange: visible => this.setMarkersVisible(visible) });\n this.update();\n this.renderFrame = config.renderFrame;\n this.resizeRenderer = config.resizeRenderer;\n this.onRenderError = config.onRenderError;\n if (config.rendering) {\n const rendering = config.rendering;\n this.renderingFailure = (error) => reportSceneRenderingFailure(rendering, error, this.renderer);\n this.unbindRendering = bindSceneRendering(config.rendering, this.scene, this.camera, {\n suspend: async () => {\n this.renderingSuspended = true;\n const preparation = this.modelPreparation;\n this.cancelModelPreparation();\n // A lost device can reject loop shutdown. Still drain every borrower\n // before allowing the scene owner to release its model resources.\n let stopping: Promise<void>;\n try { stopping = Promise.resolve(this.renderer?.setAnimationLoop(null)); }\n catch (failure) { stopping = Promise.reject(failure); }\n const [stopped] = await Promise.allSettled([\n stopping,\n this.frameCompletion,\n preparation?.promise,\n ]);\n if (stopped.status === 'rejected') throw stopped.reason;\n },\n prepare: async (renderer) => {\n if (this.disposed) throw renderPreparationAborted();\n const model = this.observer?.model;\n if (model) {\n await compileModelForRender(renderer, this.scene, this.camera, model);\n if (this.disposed || model !== this.observer?.model) throw renderPreparationAborted();\n drawModelForRender(renderer, this.scene, this.camera, model);\n } else renderer.render(this.scene, this.camera);\n },\n commit: async (renderer) => {\n if (this.disposed) throw renderPreparationAborted();\n this.cleanupResizeHandling();\n this.controls.disconnect();\n this.controls.connect(renderer.domElement);\n this.domElement = renderer.domElement;\n this.markerRenderer.setDomElement(renderer.domElement);\n this.renderer = renderer;\n this.renderFailed = false;\n this.renderingSuspended = false;\n this.setupResizeHandling();\n this.boundResizeHandler?.();\n await this.startRenderLoop(true);\n if (this.disposed) { this.stopRenderLoop(); throw renderPreparationAborted(); }\n },\n onError: (error) => this.handleRenderError(error),\n });\n } else if (config.renderer) {\n this.renderer = config.renderer;\n void this.startRenderLoop();\n this.setupResizeHandling();\n }\n\n }\n private readState(): AnnotationSnapshot { return JSON.parse(this.runtime.snapshot()) as AnnotationSnapshot; }\n private call<T = void>(operation: string, payload: unknown = {}): T { if (this.disposed) throw new Error('Annotation controller is disposed.'); return JSON.parse(this.runtime.command(operation, JSON.stringify(payload), performance.now())) as T; }\n private sync(): void {\n if (this.disposed || this.runtime.revision() === this.state.revision) return;\n const previous = this.state; this.state = this.readState();\n this.markerRenderer.sync(this.state);\n this.domControls?.updateRegions(this.state.regions, this.state.currentRegion ?? undefined);\n this.domControls?.setMarkersVisible(this.state.visible);\n if (previous.currentRegion !== this.state.currentRegion && this.state.currentRegion) for (const listener of this.regionListeners) listener(this.state.currentRegion);\n if (previous.visible !== this.state.visible || previous.style !== this.state.style) for (const listener of this.markerStateListeners) listener({ visible: this.state.visible, style: this.state.style });\n }\n private applyCameraState(state: CameraState): void { this.camera.position.fromArray(state.position); this.controls.target.fromArray(state.target); this.camera.lookAt(this.controls.target); this.camera.updateMatrixWorld(); }\n private isCurrent(generation: number): boolean { return !this.disposed && this.runtime.is_current(generation); }\n private requestFrame(): void {\n if (this.disposed || this.renderer || this.fallbackFrame !== null || !this.runtime.needs_frame()) return;\n this.fallbackFrame = requestAnimationFrame(() => { this.fallbackFrame = null; this.update(); this.requestFrame(); });\n }\n private settleFlights(): void {\n const completed = this.runtime.completed_camera_request();\n for (const [id, resolve] of this.flights) if (id <= completed) { this.flights.delete(id); resolve(); }\n }\n private waitForFlight(id: number | null): Promise<void> {\n if (id === null || this.disposed) return Promise.resolve();\n if (this.manageCamera) this.applyCameraState(this.readState().camera); this.sync(); this.settleFlights();\n if (id <= this.runtime.completed_camera_request()) return Promise.resolve();\n const promise = new Promise<void>(resolve => this.flights.set(id, resolve)); this.requestFrame(); return promise;\n }\n private select(name: string): void { if (this.selectRegion) this.selectRegion(name); else void this.focusRegion(name); }\n private pick(ids: number[]): void { if (this.disposed) return; const name = this.call<string | null>('pick', { ids }); this.sync(); this.requestFrame(); if (name) this.select(name); }\n setModel(model: THREE.Object3D): void {\n if (this.disposed) return;\n prepareModelSkinning(model);\n this.cancelModelPreparation();\n const observer = new AnnotationModelObserver(model);\n this.runtime.set_model(JSON.stringify(observer.capture())); this.observer = observer; this.markerRenderer.setMeshes(observer.meshes); this.hostConfig = null; this.configSnapshot = null; this.configSnapshotHost = null;\n this.settleFlights(); this.sync();\n }\n /** Drop native and Rust model observations before the host releases its model under a rendering lease. */\n clearModel(): void {\n if (this.disposed) return;\n this.cancelModelPreparation(); this.call('clearModel');\n this.observer = null; this.hostConfig = null; this.configSnapshot = null; this.configSnapshotHost = null; this.markerRenderer.setMeshes([]);\n this.settleFlights(); this.sync();\n }\n getModel(): THREE.Object3D | null { return this.observer?.model ?? null; }\n async loadRegions(config: CharacterConfig): Promise<void> {\n if (this.disposed) return;\n const generation = this.call<number>('beginLoad'); this.settleFlights();\n const resolved = await this.resolveCharacterConfig(config);\n if (!this.isCurrent(generation)) return;\n await this.prepareRegionsAndMarkersForReveal(resolved);\n }\n private configure(config: CharacterConfig): void {\n this.cancelModelPreparation(); this.call('configure', { config: annotationConfigInput(config) }); this.hostConfig = config; this.settleFlights(); this.sync();\n }\n prepareRegionsForReveal(config: CharacterConfig): void { if (this.disposed) return; this.configure(config); this.startConfiguredCamera(); }\n async prepareRegionsAndMarkersForReveal(config: CharacterConfig, beforeReveal?: () => Promise<boolean>): Promise<void> {\n if (this.disposed) return; this.configure(config); const generation = this.runtime.generation();\n await this.loadMarkersForCurrentRegions(true);\n if (!this.isCurrent(generation)) return;\n if (beforeReveal && !await beforeReveal()) return;\n if (this.isCurrent(generation)) this.startConfiguredCamera();\n }\n private startConfiguredCamera(): void { this.update(); this.observer?.observeFocus(this.runtime, { configured: true }); void this.waitForFlight(this.call<number | null>('startConfigured')); }\n async loadMarkersForCurrentRegions(sliceSurfaceQueries = false): Promise<void> {\n if (this.disposed || !this.observer) return;\n const observer = this.observer; const generation = this.runtime.generation();\n observer.observe(this.runtime);\n const queries = JSON.parse(this.runtime.plan_markers(JSON.stringify(observer.morphAnchors(this.runtime)))) as SurfaceQuery[];\n for (const initial of queries) {\n let query: SurfaceQuery | null = initial;\n while (query && this.isCurrent(generation)) {\n const raycaster = new THREE.Raycaster(new THREE.Vector3().fromArray(query.origin), new THREE.Vector3().fromArray(query.direction), 0, query.far);\n const hits = sliceSurfaceQueries\n ? await intersectMeshesInSlices(raycaster, observer.meshes, { isCurrent: () => this.isCurrent(generation), yieldToPaint: waitForCharacterLoadPaint })\n : raycaster.intersectObjects(observer.meshes, false);\n if (!hits || !this.isCurrent(generation)) return;\n query = JSON.parse(this.runtime.surface_result(query.generation, query.id, query.phase, new Float32Array(hits.flatMap(hit => hit.point.toArray())))) as SurfaceQuery | null;\n if (sliceSurfaceQueries && query) await waitForCharacterLoadPaint();\n }\n }\n if (!this.isCurrent(generation)) return;\n this.runtime.finish_markers(generation); this.sync(); this.update(); this.requestFrame();\n }\n private rebuild(): void { void this.loadMarkersForCurrentRegions().catch(error => this.handleRenderError(error)); }\n focusRegion(name: string, duration?: number): Promise<void> { return this.focus({ name, duration }); }\n focusBones(bones: string[], duration?: number): Promise<void> { return this.focus({ region: { bones }, duration }); }\n focusMeshes(meshes: string[], duration?: number): Promise<void> { return this.focus({ region: { meshes }, duration }); }\n focusFullBody(duration?: number): Promise<void> { return this.focus({ region: { objects: ['*'] }, duration }); }\n focusObjects(objects: THREE.Object3D[], duration?: number): Promise<void> { return this.focus({ region: { objectIds: objects.flatMap(object => { const id = this.observer?.id(object); return id === undefined ? [] : [id]; }) }, duration }); }\n private focus(request: unknown): Promise<void> { if (this.disposed) return Promise.resolve(); this.update(); this.observer?.observeFocus(this.runtime, request); return this.waitForFlight(this.call<number | null>('focus', request)); }\n playIntroAnimation(orbitDuration = 3000, zoomDuration = 1500): Promise<void> { if (this.disposed) return Promise.resolve(); this.update(); this.observer?.observeFocus(this.runtime, { intro: true }); return this.waitForFlight(this.call<number | null>('intro', { orbitDuration, zoomDuration })); }\n animateToCameraState(state: CameraState, duration?: number): Promise<void> { if (this.disposed) return Promise.resolve(); return this.waitForFlight(this.call<number>('animateCamera', { ...state, duration })); }\n getCameraState(): CameraState { return { position: this.camera.position.toArray(), target: this.controls.target.toArray() }; }\n setCameraState(state: CameraState): void { if (this.disposed) return; this.call('setCamera', state); this.applyCameraState(this.readState().camera); this.settleFlights(); this.sync(); this.controls.notifyChange(); }\n getRegionNames(): string[] { return this.getAnnotationRegions().map(region => region.name); }\n getCurrentRegion(): string | null { return this.state.currentRegion; }\n getCharacterConfig(): CharacterConfig | null {\n if (!this.hostConfig) return null;\n // React consumers observe this snapshot. Camera/hover frames must not create\n // a new profile identity or trigger another round of editor effects.\n if (this.configSnapshotRevision !== this.state.configRevision || this.configSnapshotHost !== this.hostConfig) {\n this.configSnapshot = { ...this.hostConfig, ...this.state.config };\n this.configSnapshotRevision = this.state.configRevision;\n this.configSnapshotHost = this.hostConfig;\n }\n return this.configSnapshot;\n }\n getAnnotationRegions(): AnnotationAnchoredRegion[] { return structuredClone(this.state.regions); }\n getAnnotationRegion(name: string): AnnotationAnchoredRegion | undefined { return this.getAnnotationRegions().find(region => region.name === name); }\n setCurrentRegion(name: string | null): void { if (this.disposed) return; this.call('select', { name }); this.sync(); }\n getMarkersVisible(): boolean { return this.state.visible; }\n setMarkersVisible(visible: boolean): void {\n if (this.disposed) return;\n this.call('visibility', { visible });\n this.sync();\n // Region preparation defers native marker construction until the first\n // reveal. Rust's loaded state prevents rebuilding on later visibility edits.\n if (visible && !this.state.loaded && this.hostConfig) this.rebuild();\n this.update(); this.requestFrame();\n }\n getMarkerStyle(): MarkerStyle { return this.state.style; }\n setMarkerStyle(style: MarkerStyle): void { if (this.disposed) return; this.call('style', { style }); this.sync(); this.update(); }\n clearMarkers(): void { if (this.disposed) return; this.cancelModelPreparation(); this.call('clear'); this.hostConfig = null; this.configSnapshot = null; this.configSnapshotHost = null; this.settleFlights(); this.sync(); }\n subscribeMarkerState(listener: (state: MarkerStateSnapshot) => void): () => void { this.markerStateListeners.add(listener); listener({ visible: this.state.visible, style: this.state.style }); return () => { this.markerStateListeners.delete(listener); }; }\n onRegionChange(listener: RegionChangeCallback): () => void { this.regionListeners.add(listener); return () => { this.regionListeners.delete(listener); }; }\n soloMarker(name: string | null): void { if (this.disposed) return; this.call('solo', { name }); this.sync(); this.update(); }\n getSoloedMarker(): string | null { return this.state.solo; }\n expandRegion(name: string, duration?: number): void { this.expandCommand('expand', name, duration); }\n setRegionExpansion(name: string, expanded: boolean, animation: 'outward' | 'staggered' = 'outward', duration?: number): void { this.expandCommand(expanded ? 'expand' : 'collapse', name, duration, animation); }\n collapseRegion(name: string, duration?: number): void { this.expandCommand('collapse', name, duration); }\n toggleRegion(name: string, animation: 'outward' | 'staggered' = 'outward', duration?: number): void { this.expandCommand('toggle', name, duration, animation); }\n private expandCommand(operation: string, name: string, duration?: number, animation?: string): void { if (this.disposed) return; this.call(operation, { name, duration, animation }); this.sync(); this.update(); this.requestFrame(); }\n getExpandedRegions(): ExpandedRegionState[] { return structuredClone(this.state.expanded); }\n setRegionLineStyle(name: string, line: Partial<LineConfig>): void { this.updateAnnotationRegion(name, { style: { line } }); }\n setRegionStyle(name: string, style: Partial<MarkerStyleOverrides>): void { this.updateAnnotationRegion(name, { style }); }\n updateRegionMeshes(name: string, meshes: string[]): void { this.updateAnnotationRegion(name, { meshes }); }\n repositionMarker(name: string, position: { x: number; y: number; z: number }): void { this.updateAnnotationRegion(name, { markerAnchor: { type: 'point', position } }); }\n getMarkerPosition(name: string): { x: number; y: number; z: number } | null { return this.disposed ? null : this.call('markerPosition', { name }); }\n updateAnnotationRegion(name: string, update: Partial<AnnotationAnchoredRegion>): void { if (this.disposed) return; this.call('updateRegion', { name, update: JSON.parse(JSON.stringify(update, (_key, value) => value === undefined ? null : value)) }); this.sync(); this.rebuild(); }\n removeAnnotationRegion(name: string): void { if (this.disposed) return; this.call('removeRegion', { name }); this.sync(); this.rebuild(); }\n showRuntimeBoneAnnotation(boneName: string, options: RuntimeAnnotationOptions = {}): RuntimeAnnotationRegionSummary { const result = this.call<RuntimeAnnotationRegionSummary>('runtimeBone', { target: boneName, options }); this.sync(); this.rebuild(); return result; }\n showRuntimeAUAnnotations(auId: string | number, profile?: unknown, options: RuntimeAnnotationOptions = {}, morphTargetsByMesh?: unknown): RuntimeAnnotationRegionSummary[] { const result = this.call<RuntimeAnnotationRegionSummary[]>('runtimeAU', { target: String(auId), profile: annotationProfileInput(profile), options, meshes: morphTargetsByMesh }); this.sync(); this.rebuild(); return result; }\n clearRuntimeAnnotations(): string[] { if (this.disposed) return []; const names = this.call<string[]>('clearRuntime'); this.sync(); this.rebuild(); return names; }\n setDOMControlsVisible(visible: boolean): void { this.domControls?.setVisible(visible); }\n updateDOMControls(): void { this.domControls?.updateRegions(this.state.regions, this.state.currentRegion ?? undefined); this.domControls?.setMarkersVisible(this.state.visible); }\n update(): void {\n if (this.disposed) return;\n const rect = this.domElement.getBoundingClientRect(); const now = performance.now();\n const pose = this.runtime.camera_frame(now, new Float32Array([...this.camera.position.toArray(), ...this.controls.target.toArray(), this.camera.fov, this.camera.aspect, rect.width, rect.height]));\n if (this.manageCamera && pose.length >= 6) { this.camera.position.fromArray(pose); this.controls.target.fromArray(pose, 3); this.camera.lookAt(this.controls.target); }\n if (this.observer) this.runtime.observe_transforms(this.observer.transforms(this.runtime));\n this.sync(); this.markerRenderer.update(now); this.settleFlights();\n if (pose[9] === 1) this.controls.notifyChange();\n }\n dispose(): void {\n if (this.disposed) return; this.disposed = true; this.cancelModelPreparation(); this.stopRenderLoop(); this.cleanupResizeHandling();\n this.playbackTimer.dispose();\n const renderingSettled = this.unbindRendering?.(); this.unbindRendering = null;\n if (this.fallbackFrame !== null) cancelAnimationFrame(this.fallbackFrame); this.fallbackFrame = null;\n this.controls.dispose();\n // A candidate renderer may still be compiling these borrowed marker resources.\n if (renderingSettled) void renderingSettled.then(() => this.markerRenderer.dispose());\n else this.markerRenderer.dispose();\n this.domControls?.dispose(); this.domControls = null;\n this.runtime.dispose(); this.runtime.free(); this.observer = null; this.hostConfig = null; this.configSnapshot = null; this.configSnapshotHost = null;\n for (const resolve of this.flights.values()) resolve(); this.flights.clear(); this.markerStateListeners.clear(); this.regionListeners.clear();\n }\n private startRenderLoop(propagateFailure = false): void | Promise<void> {\n if (!this.renderer) return;\n const renderer = this.renderer;\n this.playbackTimer.disconnect();\n const ownerDocument = renderer.domElement?.ownerDocument;\n if (ownerDocument) this.playbackTimer.connect(ownerDocument);\n this.playbackTimer.reset();\n let playbackStarted = false;\n try {\n const started = renderer.setAnimationLoop((timestamp?: number) => {\n if (this.disposed || renderer !== this.renderer) return;\n this.playbackTimer.update(timestamp);\n const samplePlayback = playbackStarted;\n playbackStarted = true;\n if (this.renderFailed || this.renderingSuspended || this.framePending) return;\n try {\n // Native shadows are updated once per camera/frame. Prepare the full\n // scene first and leave its pixels untouched until the next frame.\n const preparationDraw = this.modelPreparation?.draw;\n if (preparationDraw) { preparationDraw(); return; }\n if (samplePlayback) renderScenePlayback(this.scene, this.playbackTimer);\n this.update();\n const frame = this.renderFrame\n ? this.renderFrame(this.renderer!, this.scene, this.camera)\n : this.renderer!.render(this.scene, this.camera);\n if (frame) {\n this.framePending = true;\n this.frameCompletion = Promise.resolve(frame).then(\n () => { this.framePending = false; },\n (error) => { this.framePending = false; this.handleRenderError(error); },\n );\n }\n } catch (error) { this.handleRenderError(error); }\n });\n if (started) return started.catch((error) => {\n if (propagateFailure) throw error;\n if (renderer === this.renderer) this.handleRenderError(error);\n });\n } catch (error) {\n if (propagateFailure) throw error;\n this.handleRenderError(error);\n }\n }\n\n private handleRenderError(error: unknown): void {\n if (this.disposed || this.renderFailed) return;\n this.renderFailed = true;\n this.cancelModelPreparation(error instanceof Error ? error : new Error(String(error)));\n this.stopRenderLoop();\n const failure = error instanceof Error ? error : new Error(String(error));\n if (this.renderingFailure) { this.renderingFailure(failure); return; }\n try {\n if (this.onRenderError) this.onRenderError(failure);\n else console.error('Character camera render loop failed.', failure);\n } catch (callbackError) {\n console.error('Character camera render-error callback failed.', callbackError);\n }\n }\n\n /**\n * Stop the render loop\n */\n private stopRenderLoop(): void {\n this.playbackTimer.reset();\n try {\n const stopped = this.renderer?.setAnimationLoop(null);\n if (stopped) void stopped.catch((error) => console.error('Character camera render loop stop failed.', error));\n } catch (error) { console.error('Character camera render loop stop failed.', error); }\n }\n\n private setupResizeHandling(): void {\n if (!this.renderer) return;\n\n const container = this.domElement.parentElement || this.domElement;\n\n // Create resize handler\n this.boundResizeHandler = () => {\n const width = container.clientWidth || window.innerWidth;\n const height = container.clientHeight || window.innerHeight;\n\n this.camera.aspect = width / height;\n this.camera.updateProjectionMatrix();\n\n if (this.renderer) {\n if (this.resizeRenderer) {\n this.resizeRenderer(this.renderer, width, height);\n } else {\n this.renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 2));\n this.renderer.setSize(width, height, false);\n }\n }\n };\n\n // Use ResizeObserver for container size changes\n this.resizeObserver = new ResizeObserver(this.boundResizeHandler);\n this.resizeObserver.observe(container);\n\n // Also listen to window resize as fallback\n window.addEventListener('resize', this.boundResizeHandler);\n }\n\n /**\n * Clean up resize handling\n */\n private cleanupResizeHandling(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n if (this.boundResizeHandler) {\n window.removeEventListener('resize', this.boundResizeHandler);\n this.boundResizeHandler = null;\n }\n }\n\n // ====== CORE PUBLIC METHODS ======\n\n /**\n * Prepare the currently visible material variants before first reveal.\n * Borrows model/renderer; callers retain them until this promise settles,\n * including after cancellation or controller disposal.\n */\n prepareModelForRender(model: THREE.Object3D, options: { signal?: AbortSignal } = {}): Promise<void> {\n if (this.disposed || options.signal?.aborted) return Promise.reject(renderPreparationAborted());\n if (this.renderingSuspended) return Promise.reject(new Error('Model render preparation is unavailable during renderer replacement.'));\n if (!this.renderer || this.renderFailed) return Promise.reject(new Error('Model render preparation requires an active controller-owned renderer.'));\n const renderer = this.renderer;\n const previous = this.modelPreparation;\n previous?.cancel(renderPreparationAborted());\n let cancelled: Error | null = null;\n let invalidatePreparedShadows: (() => void) | null = null;\n let rejectDraw: ((error: Error) => void) | null = null;\n let resolve!: () => void;\n let reject!: (error: unknown) => void;\n const promise = new Promise<void>((yes, no) => { resolve = yes; reject = no; });\n const request: ModelRenderPreparation = {\n promise, draw: null,\n cancel: (reason) => {\n cancelled ??= reason;\n invalidatePreparedShadows?.();\n request.draw = null;\n rejectDraw?.(cancelled);\n },\n };\n this.modelPreparation = request;\n const abort = () => request.cancel(renderPreparationAborted());\n options.signal?.addEventListener('abort', abort, { once: true });\n const checkCancelled = () => { if (cancelled) throw cancelled; };\n void (async () => {\n try {\n // Supersession never compiles over a predecessor's borrowed objects.\n if (previous) await previous.promise.catch(() => undefined);\n // A host callback may have started while the predecessor was settling.\n // Read its current completion here, immediately before acquiring state.\n if (this.framePending && this.frameCompletion) await this.frameCompletion;\n checkCancelled();\n const compilation = compileModelForRender(renderer, this.scene, this.camera, model);\n try { await compilation; }\n catch (error) { throw cancelled ?? error; }\n checkCancelled();\n await new Promise<void>((done, failed) => {\n rejectDraw = failed;\n request.draw = () => {\n request.draw = null;\n try {\n checkCancelled();\n invalidatePreparedShadows = drawModelForRender(renderer, this.scene, this.camera, model);\n checkCancelled();\n done();\n } catch (error) { invalidatePreparedShadows?.(); failed(cancelled ?? error); }\n };\n });\n checkCancelled();\n } finally {\n options.signal?.removeEventListener('abort', abort);\n if (this.modelPreparation === request) this.modelPreparation = null;\n }\n })().then(resolve, reject);\n return promise;\n }\n\n private cancelModelPreparation(reason = renderPreparationAborted()): void {\n this.modelPreparation?.cancel(reason);\n }\n\n /**\n * Set the model to use for bone/mesh lookups\n * Must be called after model loads\n */\n\n}\n","import * as THREE from 'three';\nimport { ThreeAnnotationController } from './ThreeAnnotationController';\nimport type { AnnotationAnchoredRegion, CharacterConfig, MarkerStyle, MarkerStyleOverrides, LineConfig, ExpandAnimation } from './types';\nexport interface AnnotationMarkersConfig { scene: THREE.Scene; camera: THREE.PerspectiveCamera; domElement: HTMLElement; onSelect: (name: string) => void; config?: Partial<MarkerStyleOverrides> & { lineLength?: number; labelScale?: number }; }\n/** Marker-only native view of the same Rust runtime used by the controller. */\nexport class ThreeAnnotationMarkers {\n protected readonly controller: ThreeAnnotationController;\n constructor(private readonly options: AnnotationMarkersConfig, private readonly style: MarkerStyle = '3d') {\n this.controller = new ThreeAnnotationController({ ...options, onRegionSelect: options.onSelect, showDOMControls: false }, { captureInput: false, manageCamera: false, markerDefaults: options.config });\n this.controller.setMarkersVisible(true);\n }\n setModel(model: THREE.Object3D): void { this.controller.setModel(model); }\n loadRegions(config: CharacterConfig, options: { sliceSurfaceQueries?: boolean } = {}): Promise<void> {\n this.controller.prepareRegionsForReveal({ ...config, markerStyle: this.style, playIntroOnLoad: false, defaultRegion: undefined });\n return this.controller.loadMarkersForCurrentRegions(options.sliceSurfaceQueries);\n }\n setCurrentRegion(name: string | null): void { this.controller.setCurrentRegion(name); }\n updateRegion(name: string, update: Partial<AnnotationAnchoredRegion>): void { this.controller.updateAnnotationRegion(name, update); }\n removeRegion(name: string): void { this.controller.removeAnnotationRegion(name); }\n updateRegionMeshes(name: string, meshes: string[]): void { this.controller.updateRegionMeshes(name, meshes); }\n repositionMarker(name: string, position: THREE.Vector3): void { this.controller.repositionMarker(name, position); }\n getMarkerPosition(name: string): THREE.Vector3 | null { const p = this.controller.getMarkerPosition(name); return p ? new THREE.Vector3(p.x, p.y, p.z) : null; }\n updateLineStyle(name: string, line: Partial<LineConfig>): void { this.controller.setRegionLineStyle(name, line); }\n updateMarkerStyle(name: string, style: Partial<MarkerStyleOverrides>): void { this.controller.setRegionStyle(name, style); }\n setSoloMarker(name: string | null): void { this.controller.soloMarker(name); }\n getSoloedMarker(): string | null { return this.controller.getSoloedMarker(); }\n expandRegion(name: string, animation: ExpandAnimation = 'outward', duration?: number): void { this.controller.setRegionExpansion(name, true, animation, duration); }\n collapseRegion(name: string, duration?: number): void { this.controller.collapseRegion(name, duration); }\n toggleRegion(name: string, animation: ExpandAnimation = 'outward', duration?: number): void { this.controller.toggleRegion(name, animation, duration); }\n getExpandedRegions() { return this.controller.getExpandedRegions(); }\n update(): void { this.controller.update(); }\n setVisible(visible: boolean): void { this.controller.setMarkersVisible(visible); }\n clear(): void { this.controller.clearMarkers(); }\n dispose(): void { this.controller.dispose(); }\n}\n","import { ThreeAnnotationMarkers, type AnnotationMarkersConfig } from './ThreeAnnotationMarkers';\n/** HTML rendering of the same Rust annotation state and layout. */\nexport class HtmlAnnotationMarkers extends ThreeAnnotationMarkers { constructor(options: AnnotationMarkersConfig) { super(options, 'html'); } }\n","import { initEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport { annotationQuery } from './runtime';\nimport { observeAnnotationModel } from './modelObservation';\nimport * as THREE from 'three';\nimport { ThreeAnnotationController } from './ThreeAnnotationController';\nimport { ThreeAnnotationMarkers } from './ThreeAnnotationMarkers';\nimport { HtmlAnnotationMarkers } from './HtmlAnnotationMarkers';\nimport { CameraDOMControls } from './DOMControls';\nimport type {\n CharacterConfig,\n ThreeAnnotationControllerConfig,\n MarkerStyle,\n LineConfig,\n MarkerStyleOverrides,\n ExpandAnimation,\n ExpandedRegionState,\n} from './types';\n\n/**\n * ThreeAnnotations Configuration\n */\nexport interface ThreeAnnotationsConfig {\n /** Three.js scene */\n scene: THREE.Scene;\n /** Three.js camera */\n camera: THREE.PerspectiveCamera;\n /** Canvas or container element */\n domElement: HTMLElement;\n /** Marker style: '3d' (default) or 'html' */\n markerStyle?: MarkerStyle;\n /** Show DOM controls dropdown. Default: false */\n showControls?: boolean;\n /** Callback when a region is selected */\n onRegionSelect?: (name: string) => void;\n /** Camera controller options */\n cameraOptions?: Partial<ThreeAnnotationControllerConfig>;\n}\n\n/**\n * ThreeAnnotations - Camera & Marker System for Three.js\n *\n * Factory class that creates and manages camera controller and markers.\n *\n * @example\n * ```typescript\n * const annotations = await ThreeAnnotations.create({\n * scene,\n * camera,\n * domElement: canvas,\n * markerStyle: '3d',\n * });\n *\n * annotations.setModel(model);\n * await annotations.loadCharacter(config);\n * annotations.focus('head');\n *\n * // In render loop\n * annotations.update();\n * ```\n */\nexport class ThreeAnnotations {\n private readonly cameraController: ThreeAnnotationController;\n private model: THREE.Object3D | null = null;\n\n static async create(options: ThreeAnnotationsConfig): Promise<ThreeAnnotations> { await initEmbodyCore(); return new ThreeAnnotations(options); }\n\n constructor(options: ThreeAnnotationsConfig) {\n this.cameraController = new ThreeAnnotationController({\n scene: options.scene,\n camera: options.camera,\n domElement: options.domElement,\n showDOMControls: options.showControls ?? false,\n onRegionSelect: options.onRegionSelect,\n ...options.cameraOptions,\n });\n this.cameraController.setMarkersVisible(true);\n if (options.markerStyle) this.cameraController.setMarkerStyle(options.markerStyle);\n }\n\n setModel(model: THREE.Object3D): this {\n this.model = model;\n this.cameraController.setModel(model);\n return this;\n }\n\n async loadCharacter(config: CharacterConfig): Promise<this> {\n await this.cameraController.loadRegions(config);\n return this;\n }\n\n focus(regionName: string, duration?: number): Promise<void> { return this.cameraController.focusRegion(regionName, duration); }\n getRegions(): string[] { return this.cameraController.getRegionNames(); }\n getCurrentRegion(): string | null { return this.cameraController.getCurrentRegion(); }\n setMarkerStyle(style: MarkerStyle): this { this.cameraController.setMarkerStyle(style); return this; }\n setMarkersVisible(visible: boolean): this { this.cameraController.setMarkersVisible(visible); return this; }\n setControlsVisible(visible: boolean): this { this.cameraController.setDOMControlsVisible(visible); return this; }\n getCameraState() { return this.cameraController.getCameraState(); }\n setCameraState(position: [number, number, number], target: [number, number, number], _animate?: boolean): this {\n this.cameraController.setCameraState({ position, target }); return this;\n }\n get controller(): ThreeAnnotationController { return this.cameraController; }\n update(): void { this.cameraController.update(); }\n expandRegion(name: string, duration?: number): this { this.cameraController.expandRegion(name, duration); return this; }\n collapseRegion(name: string, duration?: number): this { this.cameraController.collapseRegion(name, duration); return this; }\n toggleRegion(name: string, animation: ExpandAnimation = 'outward', duration?: number): this { this.cameraController.toggleRegion(name, animation, duration); return this; }\n getExpandedRegions(): ExpandedRegionState[] { return this.cameraController.getExpandedRegions(); }\n soloMarker(name: string | null): this { this.cameraController.soloMarker(name); return this; }\n getSoloedMarker(): string | null { return this.cameraController.getSoloedMarker(); }\n setRegionLineStyle(name: string, line: Partial<LineConfig>): this { this.cameraController.setRegionLineStyle(name, line); return this; }\n setRegionStyle(name: string, style: Partial<MarkerStyleOverrides>): this { this.cameraController.setRegionStyle(name, style); return this; }\n dispose(): void { this.cameraController.dispose(); this.model = null; }\n\n // ============ CHARACTER VALIDATION ============\n\n /**\n * Validate a loaded character model against expected bone/morph mappings\n * @param expectedBones - Map of semantic bone names to actual bone names\n * @param expectedMorphs - List of expected morph target names\n * @returns Validation result with found/missing bones and morphs\n */\n validateCharacter(expectedBones?: Record<string, string>, expectedMorphs?: string[]): CharacterValidationResult {\n return annotationQuery('validateCharacter', { model: this.model ? observeAnnotationModel(this.model) : null, expectedBones, expectedMorphs });\n }\n getBoneNames(): string[] { return annotationQuery('modelNames', { model: this.model ? observeAnnotationModel(this.model) : null, kind: 'bones' }); }\n getMorphNames(): string[] { return annotationQuery('modelNames', { model: this.model ? observeAnnotationModel(this.model) : null, kind: 'morphs' }); }\n getMeshNames(): string[] { return annotationQuery('modelNames', { model: this.model ? observeAnnotationModel(this.model) : null, kind: 'meshes' }); }\n}\n\n// ============ VALIDATION TYPES ============\n\nexport interface ValidationItem {\n name: string;\n semantic?: string;\n}\n\nexport interface ValidationCategory {\n found: ValidationItem[];\n missing: ValidationItem[];\n unexpected: ValidationItem[];\n}\n\nexport interface CharacterValidationResult {\n valid: boolean;\n bones: ValidationCategory;\n morphs: ValidationCategory;\n meshes: { found: string[]; total: number };\n summary: string;\n}\n\n// Re-export for convenience\nexport { ThreeAnnotationController as CameraController } from './ThreeAnnotationController';\nexport { ThreeAnnotationMarkers as Markers3D } from './ThreeAnnotationMarkers';\nexport { HtmlAnnotationMarkers as MarkersHTML } from './HtmlAnnotationMarkers';\nexport { CameraDOMControls as Controls } from './DOMControls';\n","import type { AnnotationAnchoredRegion, AnnotationMarkerAnchor, Region } from './types';\nimport { annotationQuery } from './runtime';\nexport type MarkerAnchorProjectionMode = 'legacy' | 'project' | 'skip';\nexport interface ResolvedMarkerAnchorRegion { region: AnnotationAnchoredRegion; anchor: AnnotationMarkerAnchor | null; source: 'legacy-region' | 'marker-anchor'; projection: MarkerAnchorProjectionMode; useLegacyRegionSemantics: boolean; }\nexport function resolveMarkerAnchorRegion(region: Region): ResolvedMarkerAnchorRegion { return annotationQuery('anchor', { region }); }\nexport function shouldUseFaceCenterForMarkerAnchor(resolved: ResolvedMarkerAnchorRegion): boolean { return annotationQuery('faceAnchor', { resolved }); }\nexport function shouldProjectMarkerAnchorToSurface(resolved: ResolvedMarkerAnchorRegion, legacyDefault: boolean): boolean { return annotationQuery('projectAnchor', { resolved, legacyDefault }); }\n","import { initEmbodyCore, requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\n\ntype Lifecycle = InstanceType<ReturnType<typeof requireInitializedEmbodyCore>['AnnotationLifecycle']>;\nexport type LifecycleEffect = { kind: 'visibility' | 'style' | 'previewStart' | 'previewEnd'; visible?: boolean; style?: '3d' | 'html' };\n/** Clock/queue transport only. All deadline and effect decisions belong to Rust. */\nexport class AnnotationLifecycleBridge {\n private readiness: Promise<void> = Promise.resolve();\n private initializing: Promise<void> | null = null;\n private core: Lifecycle | null = null;\n private timer: ReturnType<typeof setTimeout> | null = null;\n private pending: { operation: string; options: unknown; time: number }[] = [];\n private initialized = false;\n private commandRevision = 0;\n constructor(private readonly mode: 'preview' | 'visibility', private readonly duration: number, private readonly apply: (effects: LifecycleEffect[]) => void) {\n this.initialize();\n }\n /** The current attempt; dispatching after a failed attempt can start a retry. */\n get ready(): Promise<void> { return this.readiness; }\n private initialize(): void {\n if (this.initialized) return;\n // Another scene may have retried the shared loader after our earlier failure.\n try { requireInitializedEmbodyCore(); this.initialized = true; }\n catch { /* Queue native calls until the shared loader is ready. */ }\n if (this.initialized) {\n this.readiness = Promise.resolve();\n this.drainPending();\n return;\n }\n if (this.initializing) return;\n this.initializing = initEmbodyCore().then(() => {\n this.initializing = null;\n this.initialized = true;\n this.drainPending();\n }, error => {\n this.initializing = null;\n this.pending = [];\n throw error;\n });\n this.readiness = this.initializing;\n void this.readiness.catch(error => { console.error('Annotation lifecycle initialization failed.', error); });\n }\n private drainPending(): void {\n // Consume the live queue so cleanup from a callback can cancel its tail.\n while (this.pending.length) {\n const entry = this.pending.shift()!;\n this.execute(entry.operation, entry.options, entry.time);\n }\n }\n dispatch(operation: string, options: unknown = {}): void {\n const time = performance.now();\n if (operation === 'dispose') {\n this.pending = [];\n if (!this.initialized) return;\n }\n if (!this.initialized) { this.pending.push({ operation, options, time }); this.initialize(); return; }\n this.execute(operation, options, time);\n }\n private execute(operation: string, options: unknown, time: number): void {\n const revision = ++this.commandRevision;\n if (this.timer !== null) clearTimeout(this.timer); this.timer = null;\n // dispose is reusable host cleanup (including React effect replay). Release\n // the Wasm allocation and create a fresh runtime on the next native call.\n const core = this.core ??= new (requireInitializedEmbodyCore().AnnotationLifecycle)(this.mode, this.duration);\n const effects = JSON.parse(core.command(operation, JSON.stringify(options), time)) as LifecycleEffect[];\n if (operation === 'dispose') { this.core = null; core.free(); }\n this.apply(effects);\n // A callback can dispose/reuse the lifecycle; its newer command owns timers.\n if (operation === 'dispose' || revision !== this.commandRevision) return;\n const deadline = core.deadline();\n if (deadline !== undefined) this.timer = setTimeout(() => this.dispatch('tick'), Math.max(0, deadline - performance.now()));\n }\n isActive(): boolean { return this.core?.is_active() ?? false; }\n}\n","import type { ThreeAnnotationController } from './ThreeAnnotationController';\nimport type { MarkerStyle } from './types';\nimport { AnnotationLifecycleBridge } from './lifecycleBridge';\nimport { annotationQuery } from './runtime';\nexport const DEFAULT_MARKER_AUTO_HIDE_MS = 5000;\nexport type MarkerLifecycleRevealOptions = { durationMs?: number; markerStyle?: MarkerStyle; revealDelayMs?: number };\nexport type MarkerLifecycleRevealSource = { markerStyle?: MarkerStyle; playIntroOnLoad?: boolean };\ntype Controller = Pick<ThreeAnnotationController, 'setMarkersVisible' | 'setMarkerStyle'>;\nexport function createMarkerLifecycleRevealOptions(config: MarkerLifecycleRevealSource | null | undefined): MarkerLifecycleRevealOptions { return annotationQuery('revealOptions', { config }); }\nexport function createMarkerVisibilityLifecycle(getController: () => Controller | null, defaultDurationMs = DEFAULT_MARKER_AUTO_HIDE_MS) {\n let owner: Controller | null = null;\n const bridge = new AnnotationLifecycleBridge('visibility', defaultDurationMs, effects => {\n // Controller identity is a borrowed native resource, never serialized state.\n if (getController() !== owner) return;\n for (const effect of effects) { if (effect.kind === 'visibility') owner?.setMarkersVisible(effect.visible!); if (effect.kind === 'style') owner?.setMarkerStyle(effect.style!); }\n });\n const dispatch = (operation: string, options: unknown = {}) => { owner = getController(); bridge.dispatch(operation, options); };\n return { get ready() { return bridge.ready; }, setManualVisibility: (visible: boolean) => dispatch('manual', { visible }), prepareForCharacterLoad: () => dispatch('prepare'), showForCharacterLoad: (options: MarkerLifecycleRevealOptions = {}) => dispatch('reveal', options), dispose: () => bridge.dispatch('dispose') };\n}\n","import { AnnotationLifecycleBridge } from './lifecycleBridge';\nexport const DEFAULT_PREVIEW_AUTO_CLEAR_MS = 1200;\nexport interface RuntimeAnnotationPreviewLifecycleOptions { getDisabled?: () => boolean; getAutoClearMs?: () => number | undefined; onPreviewStart?: () => void; onPreviewEnd?: () => void; }\nexport function createRuntimeAnnotationPreviewLifecycle(options: RuntimeAnnotationPreviewLifecycleOptions) {\n const bridge = new AnnotationLifecycleBridge('preview', DEFAULT_PREVIEW_AUTO_CLEAR_MS, effects => {\n for (const effect of effects) { if (effect.kind === 'previewStart') options.onPreviewStart?.(); if (effect.kind === 'previewEnd') options.onPreviewEnd?.(); }\n });\n return { get ready() { return bridge.ready; },\n start: (forceRefresh = false) => bridge.dispatch('start', { forceRefresh, disabled: options.getDisabled?.(), durationMs: options.getAutoClearMs?.() }),\n end: () => bridge.dispatch('end'), scheduleEnd: () => bridge.dispatch('scheduleEnd', { durationMs: options.getAutoClearMs?.() }),\n isActive: () => bridge.isActive(), dispose: () => bridge.dispatch('dispose'),\n };\n}\n","import type { RuntimeAnnotationSide } from './types';\nimport { annotationProfileInput, annotationQuery } from './runtime';\nexport function inferRuntimeAnnotationPreviewSide(auId: number, profile: { auToMorphs?: unknown; auToBones?: unknown } | null | undefined): RuntimeAnnotationSide | undefined { return annotationQuery<RuntimeAnnotationSide | null>('inferPreviewSide', { au: auId, profile: annotationProfileInput(profile) }) ?? undefined; }\nexport function pickContinuumAnnotationAuId(value: number, negId: number, posId: number, stickyId: number | null): number { return annotationQuery('continuumTarget', { value, negId, posId, stickyId }); }\n","import type { BoneResolutionProfile } from './adapter';\n\n/**\n * Embody serializes bone-resolution inputs into Wasm. Passing a complete\n * character profile also serializes authored vertex deltas and saved clips\n * for every annotation lookup, even though the resolver cannot use them.\n */\nexport function boneResolutionProfile(\n profile: BoneResolutionProfile | null | undefined,\n): BoneResolutionProfile | null {\n if (!profile) return null;\n return {\n bonePrefix: profile.bonePrefix,\n boneSuffix: profile.boneSuffix,\n boneNodes: profile.boneNodes,\n suffixPattern: profile.suffixPattern,\n };\n}\n","import type { AnimationClip, Mesh, Object3D } from 'three';\nimport type { GLTF } from 'three/examples/jsm/loaders/GLTFLoader.js';\nimport { requireInitializedEmbodyCore, CC4_HUMANOID_SKELETON_TEMPLATE, HUMANOID_SKELETON_TEMPLATES, DEFAULT_HAIR_COLOR_APPEARANCE } from '@lovelace_lol/embody/wasm';\nimport { ThreeModelInspector, serializeAnimationClips } from './index';\nimport type { Region } from './annotations/types';\nimport type * as Types from './authoringTypes';\n\nexport * from './authoringTypes';\nexport { resolveBoneNames, fuzzyNameMatch } from './annotations/adapter';\nexport {\n DEFAULT_AXIS_TO_CHANNEL, DEFAULT_BONE_MAX_DEGREES, JOINT_CONTROL_SECTION,\n VISEME_KEYS, HAIR_COLOR_PRESETS, DEFAULT_HAIR_COLOR_APPEARANCE, getAUDescriptors, LEGACY_BODY_CONTROL_AUS,\n HUMANOID_SKELETON_TEMPLATES, CC4_HUMANOID_SKELETON_TEMPLATE,\n} from '@lovelace_lol/embody/wasm';\n\nconst json = (value: unknown) => JSON.stringify(value ?? {});\nfunction request<T>(op: string, payload: unknown = {}): T {\n return JSON.parse(requireInitializedEmbodyCore().embody_request(json({ op, payload }))) as T;\n}\n\nexport const getPreset = (id: Types.PresetType): Types.Profile => request('preset.get', { id });\nexport const extendCharacterConfigWithPreset = <T extends Types.ProfileRuntimeConfig>(config: T): T => request('profile.extendConfig', { config });\nexport const extractProfileOverrides = (config: Types.ProfileRuntimeConfig): Partial<Types.Profile> => request('profile.extractOverrides', { config });\nexport const mergeCharacterRegionsByName = (base?: Region[], override?: Region[]): Region[] => request('profile.mergeRegions', { base, override });\nexport const getMeshNamesForAUProfile = (profile: Types.Profile, auId: number): string[] => request('profile.getMeshNamesForAU', { profile, auId });\n/** Resolve routing and legacy mesh aliases once for an editor inventory. */\nexport const resolveMorphMeshSelections = (\n profile: Partial<Pick<Types.Profile, 'morphToMesh' | 'visemeMeshCategory'>>,\n categories: string[], availableNames: string[],\n): Record<string, Types.MorphMeshSelection> => request('profile.resolveMorphMeshSelections', { profile, categories, availableNames });\nexport const getHumanoidSpecification = (): Types.HumanoidSpecification => request('humanoid.getSpecification');\nexport const setAUMorphTargets = (profile: Types.Profile, auId: number, side: 'left' | 'right' | 'center', targets: Types.MorphTargetRef[]): Types.Profile => request('profile.setAUMorphTargets', { profile, auId, side, targets });\nexport const setHumanoidRoleBinding = (profile: Types.Profile, role: Types.VRMHumanoidRole, boneName: string | null): Types.Profile => request('profile.setHumanoidRoleBinding', { profile, role, boneName });\nexport const resolveHumanoidCharacterization = (profile: Types.Profile): Types.HumanoidCharacterizationResolution => request('profile.resolveHumanoidCharacterization', { profile });\n\nexport const hasLeftRightMorphs = (profile: Types.Profile, auId: number): boolean => request('profile.hasLeftRightMorphs', { profile, auId });\nexport const isMixedAU = (profile: Types.Profile, auId: number): boolean => request('profile.isMixedAU', { profile, auId });\nexport const resolveVisemeProfile = (profile: Partial<Types.Profile>): Types.ResolvedVisemeProfile => request('profile.resolveVisemes', { profile });\n\nexport const isMaxDegreesOnlyAxisBindingUpdate = (update: Types.BoneAxisBindingUpdate): boolean => request('bone.isMaxDegreesOnlyUpdate', { update });\nexport const findNodeKeyForBone = (boneName: string, profile: Types.Profile | null): string | null => profile ? request('bone.findNodeKey', { profile, boneName }) : null;\nexport const ensureBoneNodeKey = (profile: Types.Profile, boneName: string): { nodeKey: string; boneNodes: Record<string, string> } => request('bone.ensureNodeKey', { profile, boneName });\nexport const ensureBilateralBoneNodeKeys = (profile: Types.Profile, leftBoneName: string, rightBoneName: string): Types.Profile => request('bone.ensureBilateralNodeKeys', { profile, leftBoneName, rightBoneName });\nexport const resolveBoneNameForNodeKey = (profile: Types.Profile, nodeKey: string): string | null => request('bone.resolveBoneName', { profile, nodeKey });\nexport const stripConfiguredBoneAffixes = (profile: Pick<Types.Profile, 'bonePrefix' | 'boneSuffix'> | null | undefined, boneName: string): string => request('bone.stripAffixes', { profile: profile ?? {}, boneName });\nexport const inferChiralBoneNamePair = (boneNames: string[], selectedBoneName: string): Types.ChiralBoneNamePair | null => request('bone.inferChiralPair', { boneNames, selectedBoneName });\nexport const formatAxisLabel = (axis: Types.BoneAxisKey): string => request('bone.formatAxisLabel', { axis });\nexport const formatAxisDirectionLabel = (axis: Types.BoneAxisKey, direction: Types.BoneAxisDirection): string => request('bone.formatDirectionLabel', { axis, direction });\nexport const getAxisFromChannel = (channel?: string): Types.BoneAxisKey | null => channel ? request('bone.getAxisFromChannel', { channel }) : null;\nexport const getBoneAxisBindingState = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey): Types.BoneAxisBindingState | null => request('bone.getAxisState', { profile, boneName, axis });\nexport const resolveBoneAxisChannel = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey): Types.RotationChannel => request('bone.resolveAxisChannel', { profile, boneName, axis });\nexport const getBilateralAxisBindingState = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey): Types.BilateralAxisBindingState | null => request('bone.getBilateralAxisState', { profile, boneName, axis });\nexport const getAUBoneBindingState = (profile: Types.Profile, auId: number): Types.AUBoneBindingState => request('bone.getAUBindingState', { profile, auId });\n/** Resolve a panel's bone links without repeatedly serializing its full character. */\nexport const getAUBoneBindingStates = (\n profile: Partial<Pick<Types.Profile, 'auToBones' | 'boneNodes' | 'bonePrefix' | 'boneSuffix' | 'suffixPattern' | 'compositeRotations' | 'continuumPairs' | 'humanoidCharacterization'>>,\n auIds: readonly number[],\n): Record<number, Types.AUBoneBindingState> => request('bone.getAUBindingStates', {\n profile: {\n auToBones: profile.auToBones, boneNodes: profile.boneNodes,\n bonePrefix: profile.bonePrefix, boneSuffix: profile.boneSuffix, suffixPattern: profile.suffixPattern,\n compositeRotations: profile.compositeRotations, continuumPairs: profile.continuumPairs,\n humanoidCharacterization: profile.humanoidCharacterization,\n },\n auIds,\n});\nexport const inferEyeControlScope = (profile: Pick<Types.Profile, 'auToBones'>, binding: Pick<Types.BoneAxisBindingState, 'nodeKey' | 'negativeAuId' | 'positiveAuId'>): Types.BoneControlScope | null => request('bone.inferEyeScope', { profile, binding });\nexport const inferEyeControlFamily = (binding: Pick<Types.BoneAxisBindingState, 'nodeKey' | 'axis'>): Types.BoneControlFamily | null => request('bone.inferEyeFamily', { binding });\nexport const applyBoneAxisBindingUpdate = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey, update: Types.BoneAxisBindingUpdate): Types.Profile => request('bone.applyAxisUpdate', { profile, boneName, axis, update });\nexport const applyBilateralAxisBindingUpdate = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey, scope: Types.BilateralBoneAxisScope, update: Types.BoneAxisBindingUpdate): Types.Profile => request('bone.applyBilateralAxisUpdate', { profile, boneName, axis, scope, update });\nexport const applyAUBoneBindingUpdate = (profile: Types.Profile, auId: number, update: { boneName: string | null; axis: Types.BoneAxisKey; direction: Types.BoneAxisDirection; maxDegrees: number | null }): Types.Profile => request('bone.applyAUBindingUpdate', { profile, auId, update });\nexport const createBoneAxisAu = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey, direction: Types.BoneAxisDirection, options: { name?: string } = {}): Types.CreatedBoneAxisAu => request('bone.createAxisAU', { profile, boneName, axis, direction, name: options.name });\nexport const createBilateralBoneAxisAu = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey, scope: Types.BilateralBoneAxisScope, direction: Types.BoneAxisDirection, options: { name?: string } = {}): Types.CreatedBoneAxisAu => request('bone.createBilateralAxisAU', { profile, boneName, axis, scope, direction, name: options.name });\nexport const buildBoneAuOptions = (profile: Types.Profile): Array<{ value: string; label: string; detail?: string }> => request('bone.buildAUOptions', { profile });\nexport const isJointControlAuInfo = (info?: Pick<Types.AUInfo, 'facePart'> | null): boolean => request('bone.isJointControlInfo', { info });\nexport const classifyAuAsJointControl = (profile: Types.Profile, auId: number, options: { boneName?: string | null; nodeKey?: string | null } = {}): Types.Profile => request('bone.classifyJointControl', { profile, auId, boneName: options.boneName, nodeKey: options.nodeKey });\nexport const resolveContinuumDisplayLabel = (profile: Pick<Types.Profile, 'continuumPairs' | 'continuumLabels' | 'auInfo' | 'boneNodes' | 'bonePrefix' | 'boneSuffix'>, negativeAuId: number, positiveAuId: number): string => request<string | null>('bone.resolveContinuumLabel', { profile, negativeAuId, positiveAuId }) ?? `AU ${negativeAuId} <-> AU ${positiveAuId}`;\n\nfunction inspectModel(model: Object3D, meshes?: Mesh[], profile?: Types.Profile) {\n return new ThreeModelInspector().inspectModel(model, { meshes, profile });\n}\n\nexport function extractModelData(model: Object3D, meshes?: Mesh[], animations: AnimationClip[] = []): Types.ModelData {\n const inspection = inspectModel(model, meshes);\n return JSON.parse(requireInitializedEmbodyCore().extract_model_data_json(json(inspection.descriptor), json(serializeAnimationClips(model, animations, inspection))));\n}\nexport async function analyzeModel(options: {\n source: { type: 'gltf'; gltf: GLTF } | { type: 'runtime'; model: Object3D; meshes?: Mesh[]; animations?: AnimationClip[] };\n preset?: Types.Profile; suggestCorrections?: boolean;\n}): Promise<Types.ModelAnalysisReport> {\n const source = options.source;\n const model = source.type === 'gltf' ? source.gltf.scene ?? source.gltf.scenes[0] : source.model;\n const animations = source.type === 'gltf' ? source.gltf.animations : source.animations ?? [];\n const inspection = inspectModel(model, source.type === 'runtime' ? source.meshes : undefined);\n return JSON.parse(requireInitializedEmbodyCore().analyze_model_descriptor(json(inspection.descriptor), json(serializeAnimationClips(model, animations, inspection)), options.preset ? json(options.preset) : '', json({ suggestCorrections: Boolean(options.suggestCorrections) })));\n}\ntype ValidationMesh = { name?: string; morphTargetDictionary?: Record<string, number>; geometry?: { morphTargetDictionary?: Record<string, number> } };\nexport function validateMappings(meshes: unknown[], skeleton: unknown, profile: Partial<Types.Profile>, options: Record<string, unknown> = {}): Types.ValidationResult {\n let nextMorphId = 1;\n const morphTargets: Array<{ id: number; meshId: number; name: string; hostIndex: number }> = [];\n const descriptorMeshes = (meshes ?? []).map((value, index) => {\n const mesh = value as ValidationMesh;\n const id = index + 1;\n const morphTargetIds = Object.entries(mesh.morphTargetDictionary ?? mesh.geometry?.morphTargetDictionary ?? {}).map(([name, hostIndex]) => {\n const morphId = nextMorphId++;\n morphTargets.push({ id: morphId, meshId: id, name, hostIndex });\n return morphId;\n });\n return { id, name: mesh.name ?? '', morphTargetIds, visible: true };\n });\n const bones = ((skeleton as { bones?: Array<string | { name?: string }> } | null)?.bones ?? []).map((bone, index) => ({ id: index + 1, name: typeof bone === 'string' ? bone : bone.name ?? '' }));\n return JSON.parse(requireInitializedEmbodyCore().validate_profile_model(json(profile), json({ meshes: descriptorMeshes, morphTargets, bones, objects: [] }), json(options)));\n}\nexport function validateHumanoidCharacterization(model: Object3D, profile: Types.Profile): Types.HumanoidCharacterizationResolution {\n return JSON.parse(requireInitializedEmbodyCore().validate_humanoid_characterization(json(profile), json(inspectModel(model, undefined, profile).descriptor)));\n}\nexport function normalizeHairColorAppearance(value: Types.HairColorAppearance | string, fallback: Types.HairColorAppearance = DEFAULT_HAIR_COLOR_APPEARANCE): Types.HairColorAppearance {\n return JSON.parse(requireInitializedEmbodyCore().normalize_hair_color_appearance_json(json(value), json(fallback)));\n}\nexport const getHumanoidSkeletonTemplate = (id: string): Types.HumanoidSkeletonTemplate | null => (HUMANOID_SKELETON_TEMPLATES.find(template => template.id === id) ?? null) as unknown as Types.HumanoidSkeletonTemplate | null;\nexport function getHumanoidSkeletonTemplateBoneNames(template: Types.HumanoidSkeletonTemplate = CC4_HUMANOID_SKELETON_TEMPLATE as unknown as Types.HumanoidSkeletonTemplate): string[] {\n return JSON.parse(requireInitializedEmbodyCore().humanoid_skeleton_template_bone_names(json(template)));\n}\nexport function createValidationSkeletonFromHumanoidTemplate(template: Types.HumanoidSkeletonTemplate = CC4_HUMANOID_SKELETON_TEMPLATE as unknown as Types.HumanoidSkeletonTemplate): { bones: Array<{ name: string }> } {\n return JSON.parse(requireInitializedEmbodyCore().create_validation_skeleton_json(json(template)));\n}\nexport function computeHumanoidSkeletonTemplateRestBounds(template: Types.HumanoidSkeletonTemplate): Types.HumanoidSkeletonTemplateBounds {\n return Array.from(requireInitializedEmbodyCore().compute_humanoid_skeleton_template_rest_bounds(json(template))) as unknown as Types.HumanoidSkeletonTemplateBounds;\n}\nexport function extractHumanoidSkeletonTemplateFromModel(model: Object3D, options: { id: string; sourceCharacterId: string; sourceAsset?: string; sourceSkinName?: string }): Types.HumanoidSkeletonTemplate {\n return JSON.parse(requireInitializedEmbodyCore().extract_humanoid_skeleton_template_json(json(inspectModel(model).descriptor), json(options)));\n}\n\nexport type { AUDescriptor } from '@lovelace_lol/embody/wasm';\n","import { Matrix4, Quaternion, Vector3 } from 'three';\nimport type { Object3D } from 'three';\n\ntype ReferenceVector3 = Readonly<{ x: number; y: number; z: number }>;\ntype ReferenceQuaternion = Readonly<{ x: number; y: number; z: number; w: number }>;\n\nexport type ThreeReferencePoseNode = Readonly<{\n /** Child-index path relative to the captured model. The model itself has path ''. */\n path: string;\n parentPath: string | null;\n name: string;\n type: string;\n isBone: boolean;\n rotationOrder: Object3D['rotation']['order'];\n /** Authored Euler values for automatic TRS, including rotations beyond one turn. */\n rotationEuler?: ReferenceVector3;\n childCount: number;\n /** For manual matrices, this is a decomposition; matrices remain authoritative for shear. */\n transform: Readonly<{\n position: ReferenceVector3;\n rotation: ReferenceQuaternion;\n scale: ReferenceVector3;\n }>;\n /** Column-major local and world matrices, including shear and non-bone ancestors. */\n localMatrix: readonly number[];\n worldMatrix: readonly number[];\n worldPosition: ReferenceVector3;\n /** Optional morph baseline captured independently from later live influences. */\n morphInfluences?: readonly number[];\n}>;\n\nexport type ThreeModelReferencePose = Readonly<{\n version: 1;\n /** Captured transform above the model root; identity for an unparented model. */\n parentWorldMatrix: readonly number[];\n nodes: readonly ThreeReferencePoseNode[];\n}>;\n\nconst isBone = (object: Object3D) => !!((object as Object3D & { isBone?: boolean }).isBone || object.type === 'Bone');\n\nconst finite = (values: readonly number[], description: string) => {\n if (!values.every(Number.isFinite)) {\n throw new Error(`Cannot capture reference pose: ${description} contains non-finite values`);\n }\n};\n\nconst matrixValues = (matrix: Matrix4, description: string): readonly number[] => {\n const values = matrix.elements.slice();\n finite(values, description);\n return Object.freeze(values);\n};\n\nconst localMatrix = (object: Object3D) => object.matrixAutoUpdate\n ? new Matrix4().compose(object.position, object.quaternion, object.scale)\n : object.matrix.clone();\n\nconst referenceTransform = (object: Object3D, matrix: Matrix4): ThreeReferencePoseNode['transform'] => {\n // Manual matrices can contain shear that TRS cannot represent exactly. Retain the\n // original matrix independently and expose a decomposition only for TRS consumers.\n const position = object.matrixAutoUpdate ? object.position : new Vector3();\n const rotation = object.matrixAutoUpdate ? object.quaternion : new Quaternion();\n const scale = object.matrixAutoUpdate ? object.scale : new Vector3();\n if (!object.matrixAutoUpdate) {\n // r184 substitutes identity TRS for singular matrices. Keep rejecting a\n // missing basis axis instead of inventing its authored rotation and scale.\n const elements = matrix.elements;\n if ([0, 4, 8].some((start) => Math.hypot(elements[start], elements[start + 1], elements[start + 2]) === 0)) {\n throw new Error(`Cannot capture reference pose: manual transform for ${JSON.stringify(object.name)} has a zero-length basis axis`);\n }\n matrix.decompose(position, rotation, scale);\n }\n finite([...position.toArray(), ...rotation.toArray(), ...scale.toArray()], `transform for ${JSON.stringify(object.name)}`);\n return Object.freeze({\n position: Object.freeze({ x: position.x, y: position.y, z: position.z }),\n rotation: Object.freeze({ x: rotation.x, y: rotation.y, z: rotation.z, w: rotation.w }),\n scale: Object.freeze({ x: scale.x, y: scale.y, z: scale.z }),\n });\n};\n\nconst captureSubtree = (\n object: Object3D,\n path: string,\n parentPath: string | null,\n parentMatrix: Matrix4,\n nodes: ThreeReferencePoseNode[],\n) => {\n const local = localMatrix(object);\n const localValues = matrixValues(local, `local matrix at ${JSON.stringify(path)}`);\n const world = new Matrix4().multiplyMatrices(parentMatrix, local);\n const worldValues = matrixValues(world, `world matrix at ${JSON.stringify(path)}`);\n const influences = (object as Object3D & { morphTargetInfluences?: readonly number[] }).morphTargetInfluences;\n const morphInfluences = influences === undefined ? undefined : Array.from(influences);\n if (morphInfluences) finite(morphInfluences, `morph influences at ${JSON.stringify(path)}`);\n const rotationEuler = object.matrixAutoUpdate\n ? { x: object.rotation.x, y: object.rotation.y, z: object.rotation.z }\n : undefined;\n if (rotationEuler) finite(Object.values(rotationEuler), `Euler rotation at ${JSON.stringify(path)}`);\n nodes.push(Object.freeze({\n path,\n parentPath,\n name: object.name,\n type: object.type,\n isBone: isBone(object),\n rotationOrder: object.rotation.order,\n ...(rotationEuler ? { rotationEuler: Object.freeze(rotationEuler) } : {}),\n childCount: object.children.length,\n transform: referenceTransform(object, local),\n localMatrix: localValues,\n worldMatrix: worldValues,\n worldPosition: Object.freeze({ x: worldValues[12], y: worldValues[13], z: worldValues[14] }),\n ...(morphInfluences ? { morphInfluences: Object.freeze(morphInfluences) } : {}),\n }));\n object.children.forEach((child, index) => captureSubtree(child, `${path}/${index}`, path, world, nodes));\n};\n\nconst matchesNode = (object: Object3D, node: ThreeReferencePoseNode | undefined, path: string, parentPath: string | null) =>\n node !== undefined\n && node.path === path\n && node.parentPath === parentPath\n && node.name === object.name\n && node.type === object.type\n && node.isBone === isBone(object);\n\nconst incompatible = (object: Object3D, path: string) =>\n new Error(`Incompatible reference pose hierarchy at ${JSON.stringify(path)} (${JSON.stringify(object.name)})`);\n\n/**\n * Explicitly capture the authored reference pose before starting animation.\n * This does not infer a skin bind pose or animation frame zero: it snapshots the\n * transforms supplied by the caller, without updating or otherwise mutating the scene.\n * World matrices are calculated from the full ancestor chain's local transforms,\n * not potentially stale matrixWorld values. All returned data is deeply frozen and\n * JSON-serializable; no object, UUID, or live transform references are retained.\n * Existing morph influences are copied as an optional baseline. Non-finite data\n * or manual matrices with a zero-length basis axis/non-finite TRS decomposition throw.\n */\nexport function captureModelReferencePose(model: Object3D): ThreeModelReferencePose {\n const ancestors: Object3D[] = [];\n for (let ancestor = model.parent; ancestor; ancestor = ancestor.parent) ancestors.push(ancestor);\n const parentWorld = new Matrix4();\n for (const ancestor of ancestors.reverse()) parentWorld.multiply(localMatrix(ancestor));\n const parentWorldMatrix = matrixValues(parentWorld, 'parent world matrix');\n const nodes: ThreeReferencePoseNode[] = [];\n\n captureSubtree(model, '', null, parentWorld, nodes);\n return Object.freeze({ version: 1, parentWorldMatrix, nodes: Object.freeze(nodes) });\n}\n\n/**\n * Explicitly extend a reference after appending children, such as a generated\n * skeleton. Existing structural paths, names, kinds and child order must match;\n * removing or inserting before an existing child is incompatible. Existing\n * captured data remains unchanged except child counts. Newly appended subtrees\n * use their current local transforms beneath the CAPTURED parent world matrix,\n * so playback and later scene placement never become the old rig's reference.\n * Returns a new deeply frozen snapshot without mutating the model or previous\n * data. Identical sibling swaps cannot be distinguished by structural identity.\n */\nexport function extendModelReferencePose(\n model: Object3D,\n previous: ThreeModelReferencePose,\n): ThreeModelReferencePose {\n if (previous.version !== 1) throw new Error('Unsupported model reference pose version');\n const nodes: ThreeReferencePoseNode[] = [];\n let index = 0;\n const extend = (object: Object3D, path: string, parentPath: string | null) => {\n const node = previous.nodes[index++];\n if (!matchesNode(object, node, path, parentPath) || object.children.length < node.childCount) {\n throw incompatible(object, path);\n }\n // Copy even a deserialized snapshot into frozen data; never freeze or mutate\n // the caller's input, or reuse any current transform/morph values here.\n nodes.push(Object.freeze({\n ...node,\n childCount: object.children.length,\n transform: Object.freeze({\n position: Object.freeze({ ...node.transform.position }),\n rotation: Object.freeze({ ...node.transform.rotation }),\n scale: Object.freeze({ ...node.transform.scale }),\n }),\n localMatrix: Object.freeze([...node.localMatrix]),\n worldMatrix: Object.freeze([...node.worldMatrix]),\n worldPosition: Object.freeze({ ...node.worldPosition }),\n ...(node.rotationEuler ? { rotationEuler: Object.freeze({ ...node.rotationEuler }) } : {}),\n ...(node.morphInfluences ? { morphInfluences: Object.freeze([...node.morphInfluences]) } : {}),\n }));\n for (let childIndex = 0; childIndex < node.childCount; childIndex += 1) {\n extend(object.children[childIndex], `${path}/${childIndex}`, path);\n }\n const parentWorld = new Matrix4().fromArray(node.worldMatrix);\n for (let childIndex = node.childCount; childIndex < object.children.length; childIndex += 1) {\n captureSubtree(object.children[childIndex], `${path}/${childIndex}`, path, parentWorld, nodes);\n }\n };\n extend(model, '', null);\n if (index !== previous.nodes.length) throw new Error('Incompatible reference pose hierarchy: extra captured nodes');\n return Object.freeze({\n version: 1,\n parentWorldMatrix: Object.freeze([...previous.parentWorldMatrix]),\n nodes: Object.freeze(nodes),\n });\n}\n\n/**\n * Resolve captured data against an identically structured model, including a fresh\n * clone/load with new UUIDs. Names, types, bone flags, and child ordering must match;\n * duplicate names are distinguished by structural path, never name lookup.\n * Current transforms and the model's external scene parent are deliberately ignored.\n * An incompatible hierarchy throws before a binding map is returned.\n */\nexport function bindModelReferencePose(\n model: Object3D,\n referencePose: ThreeModelReferencePose,\n): ReadonlyMap<Object3D, ThreeReferencePoseNode> {\n if (referencePose.version !== 1) throw new Error('Unsupported model reference pose version');\n const bindings = new Map<Object3D, ThreeReferencePoseNode>();\n let index = 0;\n const bind = (object: Object3D, path: string, parentPath: string | null) => {\n const node = referencePose.nodes[index++];\n if (!matchesNode(object, node, path, parentPath) || node.childCount !== object.children.length) {\n throw incompatible(object, path);\n }\n bindings.set(object, node);\n object.children.forEach((child, childIndex) => bind(child, `${path}/${childIndex}`, path));\n };\n bind(model, '', null);\n if (index !== referencePose.nodes.length) throw new Error('Incompatible reference pose hierarchy: extra captured nodes');\n return bindings;\n}\n","import { PropertyBinding } from 'three';\nimport type { AnimationClip, KeyframeTrack } from 'three';\nimport type { ClipIRTrack, ThreeModelInspection } from './index';\n\n/**\n * Packed morphs must share PropertyMixers with indexed compiled tracks. Euler\n * components avoid Euler.fromArray's incompatible mixer-buffer offset/order.\n */\nexport function withComponentTracks(clip: AnimationClip): AnimationClip {\n let expanded = false;\n const tracks = clip.tracks.flatMap((track) => {\n const parsed = PropertyBinding.parseTrackName(track.name);\n const euler = parsed.propertyName === 'rotation';\n if ((!euler && !['morphTargetInfluences', 'weights'].includes(parsed.propertyName)) || parsed.propertyIndex !== undefined) return [track];\n const cubic = (track as KeyframeTrack & {\n createInterpolant: { isInterpolantFactoryMethodGLTFCubicSpline?: boolean };\n }).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true;\n const parts = cubic ? 3 : 1;\n const width = track.getValueSize() / parts;\n if (!Number.isInteger(width) || width < 1 || (euler && width !== 3)) throw new Error(`Invalid component track ${JSON.stringify(track.name)}.`);\n expanded = true;\n return Array.from({ length: width }, (_, component) => {\n // Cloning the packed track first copies every morph's samples once per\n // component. Allocate only this component, including cubic tangents.\n const values = track.values.slice(0, track.times.length * parts);\n for (let sample = 0; sample < values.length; sample += 1) values[sample] = track.values[sample * width + component];\n const Track = track.constructor as typeof KeyframeTrack;\n const scalar = new Track(`${track.name}[${euler ? ['x', 'y', 'z'][component] : component}]`, track.times.slice(), values);\n // Match Three's clone contract: preserve the native interpolation factory.\n (scalar as KeyframeTrack & { createInterpolant: unknown }).createInterpolant =\n (track as KeyframeTrack & { createInterpolant: unknown }).createInterpolant;\n return scalar;\n });\n });\n if (!expanded) return clip;\n // The component tracks are already prepared; clip.clone() would clone the\n // original packed buffers again only to discard those cloned tracks.\n const Clip = clip.constructor as typeof AnimationClip;\n const indexed = new Clip(clip.name, clip.duration, tracks, clip.blendMode);\n indexed.userData = JSON.parse(JSON.stringify(clip.userData));\n return indexed;\n}\n\n/** One PropertyMixer cache key for every concrete renderer destination. */\nexport function concreteTrackName(target: ClipIRTrack['target'] | undefined, inspection: ThreeModelInspection): string | undefined {\n if (!target) return undefined;\n if (target.kind === 'morphTarget') {\n const binding = inspection.morphBindings.get(Number(target.morphTargetId));\n return binding && `${binding.mesh.uuid}.morphTargetInfluences[${binding.index}]`;\n }\n if (target.kind === 'boneTransform' || target.kind === 'objectTransform') {\n const object = target.kind === 'boneTransform'\n ? inspection.boneBindings.get(Number(target.boneId))\n : inspection.objectBindings.get(Number(target.objectId));\n const property = target.property ?? 'rotation';\n if (!object) return undefined;\n if (property === 'rotation' || property === 'quaternion') return `${object.uuid}.quaternion`;\n if (property === 'eulerX' || property === 'eulerY' || property === 'eulerZ') return `${object.uuid}.rotation[${property.slice(-1).toLowerCase()}]`;\n if (property === 'position' || property === 'scale') return `${object.uuid}.${property}`;\n }\n if (target.kind === 'meshVisibility') {\n const mesh = inspection.meshBindings.get(Number(target.meshId));\n return mesh && `${mesh.uuid}.visible`;\n }\n return undefined;\n}\n\n/** Retain authored samples and interpolants; normalize only cloned binding names. */\nexport function cloneWithConcreteTrackNames(clip: AnimationClip, tracks: readonly ClipIRTrack[], inspection: ThreeModelInspection): AnimationClip {\n const native = clip.clone();\n for (let index = 0; index < tracks.length; index += 1) {\n const name = concreteTrackName(tracks[index].target, inspection);\n if (!name) throw new Error('Every native playback track must resolve on the bound model.');\n native.tracks[index].name = name;\n }\n return native;\n}\n","import {\n AdditiveAnimationBlendMode,\n AnimationMixer,\n LoopOnce,\n LoopPingPong,\n LoopRepeat,\n NormalAnimationBlendMode,\n} from 'three';\nimport type { AnimationAction, AnimationClip, KeyframeTrack, Object3D } from 'three';\nimport type { NativePlaybackSession } from '../wasm/index';\nimport { createAnimationClipFromClipIR, serializeAnimationClips } from './index';\nimport type { ClipIR, ThreeModelInspection } from './index';\nimport { bindPlaybackRendering } from './playbackRendering';\nimport { cloneWithConcreteTrackNames, withComponentTracks } from './clipBindings';\n\nexport type ThreeNativeLoop = { mode: 'once' | 'repeat' | 'pingPong'; count?: number | null };\nexport type ThreeNativePlaybackOptions = {\n replace?: string;\n startSeconds?: number;\n speed?: number;\n /** Native contribution only; semantic intensity belongs in the compiled clip. */\n weight?: number;\n blendMode?: 'normal' | 'additive';\n loop?: ThreeNativeLoop;\n finalPose?: 'release' | 'hold';\n};\nexport type ThreeNativePlaybackControl =\n | { type: 'pause' | 'resume' | 'stop' }\n | { type: 'seek'; seconds: number }\n | { type: 'setSpeed'; speed: number }\n | { type: 'setWeight'; weight: number }\n | { type: 'setBlendMode'; blendMode: 'normal' | 'additive' }\n | { type: 'setLoop'; loop: ThreeNativeLoop }\n | { type: 'setFinalPose'; finalPose: 'release' | 'hold' }\n | { type: 'fadeIn' | 'fadeOut'; seconds: number };\nexport type ThreeNativePlaybackEvent =\n | { type: 'completed'; handle: string }\n | { type: 'cancelled'; handle: string; reason: string }\n | { type: 'error'; handle: string; message: string };\nexport type ThreeNativePlaybackBinding = {\n model: Object3D;\n inspection: ThreeModelInspection;\n /** Optional existing native mixer. Otherwise the connector owns one. */\n mixer?: AnimationMixer;\n};\ntype BoundPlayback = ThreeNativePlaybackBinding & { mixer: AnimationMixer };\n\ntype Settings = Required<Omit<ThreeNativePlaybackOptions, 'replace'>>;\ntype Command =\n | { type: 'play'; handle: string; clip: ClipIR; settings: Settings }\n | { type: 'replaceClip'; handle: string; clip: ClipIR }\n | { type: 'control'; handle: string; control: ThreeNativePlaybackControl }\n | { type: 'release'; handle: string };\ntype Batch = { handle?: string; commands: Command[]; events: ThreeNativePlaybackEvent[] };\ntype NativeNotification = { type: 'completed' | 'cancelled' | 'error'; handle: string; message?: string };\ntype PausedFade = { seconds: number; from: number; to: number; weight: number };\ntype Resource = { clip: AnimationClip; action?: AnimationAction; binding: BoundPlayback; fadingOut?: boolean; pausedFade?: PausedFade; explicitlyPaused?: boolean; suspendedPaused?: boolean };\ntype PendingBatch = { batch: Batch; nextCommand: number; clip?: AnimationClip; afterCommands?: () => void };\ntype NativeInterpolant = { resultBuffer: unknown; settings?: unknown; valueSize: number };\ntype NativeTrack = KeyframeTrack & { createInterpolant: ((buffer: unknown) => NativeInterpolant) & { isInterpolantFactoryMethodGLTFCubicSpline?: boolean } };\ntype FadeInterpolant = { parameterPositions: ArrayLike<number>; sampleValues: { [index: number]: number }; evaluate(time: number): ArrayLike<number> };\ntype EditableAction = AnimationAction & { _interpolants: NativeInterpolant[]; _interpolantSettings: unknown; _weightInterpolant: FadeInterpolant | null };\nconst sampleSize = (track: KeyframeTrack) => track.getValueSize() / ((track as NativeTrack).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ? 3 : 1);\n\nconst asError = (error: unknown): Error => error instanceof Error ? error : new Error(String(error));\nconst blendMode = (mode: 'normal' | 'additive') => mode === 'additive' ? AdditiveAnimationBlendMode : NormalAnimationBlendMode;\nconst loopMode = (mode: ThreeNativeLoop['mode']) => mode === 'once' ? LoopOnce : mode === 'repeat' ? LoopRepeat : LoopPingPong;\n\nfunction validateBinding(binding: ThreeNativePlaybackBinding): void {\n if (!binding.model?.isObject3D || (binding.mixer && binding.mixer.getRoot() !== binding.model)) {\n throw new Error('Native playback requires a Three model and its render integration mixer.');\n }\n const objects = new Set<Object3D>();\n binding.model.traverse((object) => objects.add(object));\n const { inspection } = binding;\n for (const object of [\n ...inspection.meshBindings.values(), ...inspection.boneBindings.values(),\n ...inspection.objectBindings.values(), ...Array.from(inspection.morphBindings.values(), (entry) => entry.mesh),\n ]) {\n if (!objects.has(object)) throw new Error('Native playback inspection contains an object outside the bound model.');\n }\n}\n\n/**\n * Execute validated Rust commands on the native mixer. There is no\n * clock or update API. Each play owns a unique clip/action; other mixer users\n * remain untouched by stop, replacement, rebind and disposal.\n *\n * The connector owns the supplied Wasm session and frees it after successful\n * disposal. A failed release retains ownership and can be retried by dispose.\n */\nexport class ThreeNativePlaybackConnector {\n private binding: BoundPlayback;\n private rendering: ReturnType<typeof bindPlaybackRendering>;\n private renderingEnabled = true;\n private readonly resources = new Map<string, Resource>();\n private readonly actionHandles = new Map<AnimationAction, string>();\n private readonly listeners = new Set<(event: ThreeNativePlaybackEvent) => void>();\n private readonly pending: PendingBatch[] = [];\n private readonly notifications: NativeNotification[] = [];\n private depth = 0;\n private flushingNotifications = false;\n private notificationScheduled = false;\n private sessionDisposed = false;\n private disposed = false;\n private readonly onError?: (error: Error) => void;\n private readonly onRelease?: (handle: string) => void;\n\n constructor(\n private readonly session: NativePlaybackSession,\n binding: ThreeNativePlaybackBinding & { onError?: (error: Error) => void; onRelease?: (handle: string) => void },\n ) {\n validateBinding(binding);\n this.binding = { ...binding, mixer: binding.mixer ?? new AnimationMixer(binding.model) };\n this.onError = binding.onError;\n this.onRelease = binding.onRelease;\n this.binding.mixer.addEventListener('finished', this.finished);\n this.rendering = bindPlaybackRendering(binding.model, this.binding.mixer, () => this.flushEvents());\n }\n\n /** Prepare bindings first; old actions are released before the new binding is exposed. */\n rebind(modelKey: string, profileKey: string, binding: ThreeNativePlaybackBinding = this.binding): void {\n validateBinding(binding);\n this.beforeOperation();\n this.dispatch(this.session.rebind(modelKey, profileKey), undefined, () => {\n this.binding.mixer.removeEventListener('finished', this.finished);\n this.rendering.dispose();\n this.binding = { ...binding, mixer: binding.mixer ?? new AnimationMixer(binding.model) };\n this.binding.mixer.addEventListener('finished', this.finished);\n this.rendering = bindPlaybackRendering(binding.model, this.binding.mixer, () => this.flushEvents());\n this.rendering.setEnabled(this.renderingEnabled);\n });\n }\n\n play(clip: ClipIR, options: ThreeNativePlaybackOptions = {}): string {\n this.beforeOperation();\n const native = createAnimationClipFromClipIR(clip, this.binding.inspection);\n if (native.tracks.length !== clip.tracks.length) {\n throw new Error('Every playback track must resolve on the bound model.');\n }\n return this.dispatch(this.session.play(JSON.stringify(clip), JSON.stringify(options)), native).handle!;\n }\n\n /**\n * Validate native track bindings through the existing serializer, then retain\n * the native clone's interpolants and authored/additive sample values. Concrete\n * binding names match compiled tracks so Three shares their PropertyMixer.\n */\n playNativeClip(clip: AnimationClip, options: ThreeNativePlaybackOptions = {}): string {\n this.beforeOperation();\n clip = withComponentTracks(clip);\n const [ir] = serializeAnimationClips(this.binding.model, [clip], this.binding.inspection);\n if (ir.tracks.length !== clip.tracks.length) {\n throw new Error('Every native playback track must serialize against the bound model.');\n }\n const native = cloneWithConcreteTrackNames(clip, ir.tracks, this.binding.inspection);\n const settings = {\n ...options,\n blendMode: options.blendMode ?? (clip.blendMode === AdditiveAnimationBlendMode ? 'additive' : 'normal'),\n };\n return this.dispatch(this.session.play(JSON.stringify(ir), JSON.stringify(settings)), native).handle!;\n }\n\n control(handle: string, control: ThreeNativePlaybackControl): void {\n this.beforeOperation();\n this.dispatch(this.session.control(handle, JSON.stringify(control)));\n }\n\n setRendering(enabled: boolean): void {\n this.beforeOperation();\n if (enabled === this.renderingEnabled) return;\n this.renderingEnabled = enabled;\n this.rendering.setEnabled(enabled);\n for (const resource of this.resources.values()) {\n if (!resource.action) continue;\n if (!enabled) {\n resource.suspendedPaused = resource.action.paused;\n this.pauseFade(resource);\n resource.action.paused = true;\n } else if (resource.suspendedPaused !== undefined) {\n resource.action.paused = resource.suspendedPaused;\n if (!resource.explicitlyPaused) this.resumeFade(resource);\n resource.suspendedPaused = undefined;\n }\n }\n }\n\n setTimeScale(value: number): void {\n this.beforeOperation();\n if (!Number.isFinite(value)) throw new Error('Native mixer speed must be finite.');\n this.binding.mixer.timeScale = value;\n }\n\n fadeIn(handle: string, seconds: number): void { this.control(handle, { type: 'fadeIn', seconds }); }\n fadeOut(handle: string, seconds: number): void { this.control(handle, { type: 'fadeOut', seconds }); }\n\n /** Edit authored samples, retaining the native action and its loop/fade progress. */\n replaceClip(handle: string, clip: AnimationClip): void {\n this.beforeOperation();\n clip = withComponentTracks(clip);\n const resource = this.resources.get(handle);\n if (!resource) throw new Error('Unknown, foreign or stale playback handle.');\n const [ir] = serializeAnimationClips(this.binding.model, [clip], this.binding.inspection);\n if (ir.tracks.length !== clip.tracks.length) throw new Error('Every edited track must resolve on the bound model.');\n const native = cloneWithConcreteTrackNames(clip, ir.tracks, this.binding.inspection);\n if (native.tracks.length !== resource.clip.tracks.length || native.tracks.some((track, index) => {\n const old = resource.clip.tracks[index];\n return track.name !== old.name || track.ValueTypeName !== old.ValueTypeName || sampleSize(track) !== sampleSize(old);\n })) throw new Error('Editing samples must preserve track bindings; play a new clip to change its bindings.');\n const editable = resource.action as EditableAction | undefined;\n if (!editable || !Array.isArray(editable._interpolants) || editable._interpolants.length !== native.tracks.length) {\n throw new Error('This Three version does not support editing native action samples.');\n }\n this.dispatch(this.session.replace_clip(handle, JSON.stringify(ir)), native);\n }\n\n /** Native state for the owning adapter; never exposed through Polymer. */\n getAction(handle: string): AnimationAction | undefined {\n return this.resources.get(handle)?.action;\n }\n\n /** Deliver native completion after the borrowed mixer has finished sampling. */\n flushEvents(): void {\n if (this.disposed) return;\n this.notificationScheduled = false;\n for (const [handle, resource] of this.resources) {\n // Three evaluates fade weights on its mixer clock. Observe completion;\n // do not calculate a deadline or interpolate another weight here.\n if (resource.fadingOut && resource.action?.getEffectiveWeight() === 0) {\n resource.fadingOut = false;\n this.notifications.push({ type: 'cancelled', handle });\n }\n }\n this.flushNotifications();\n }\n\n subscribe(listener: (event: ThreeNativePlaybackEvent) => void): () => void {\n if (this.disposed) throw new Error('Native playback connector is disposed.');\n this.listeners.add(listener);\n return () => { this.listeners.delete(listener); };\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.retryPending();\n if (!this.sessionDisposed) {\n const batch = this.session.dispose();\n this.sessionDisposed = true;\n this.dispatch(batch);\n }\n // A failed release throws above, leaving listeners, resources and session\n // owned until a later dispose successfully retries the remaining effects.\n this.binding.mixer.removeEventListener('finished', this.finished);\n this.rendering.dispose();\n this.notifications.length = 0;\n this.listeners.clear();\n this.session.free();\n this.disposed = true;\n }\n\n private pauseFade(resource: Resource): void {\n const action = resource.action as EditableAction | undefined;\n const fade = action?._weightInterpolant;\n if (!action || !fade) return;\n // Preserve Three's own fade segment. Mixer time remains its only clock.\n resource.pausedFade = {\n seconds: Math.max(0, fade.parameterPositions[1] - resource.binding.mixer.time),\n from: fade.evaluate(resource.binding.mixer.time)[0], to: fade.sampleValues[1], weight: action.weight,\n };\n action.stopFading();\n action.setEffectiveWeight(resource.pausedFade.weight * resource.pausedFade.from);\n }\n\n private resumeFade(resource: Resource): void {\n const action = resource.action as EditableAction | undefined;\n const fade = resource.pausedFade;\n if (!action || !fade) return;\n resource.pausedFade = undefined;\n action.setEffectiveWeight(fade.weight);\n action.fadeIn(fade.seconds);\n const interpolant = action._weightInterpolant!;\n interpolant.sampleValues[0] = fade.from;\n interpolant.sampleValues[1] = fade.to;\n }\n\n private beforeOperation(): void {\n if (this.disposed || this.sessionDisposed) throw new Error('Native playback connector is disposed.');\n this.retryPending();\n }\n\n private retryPending(): void {\n if (this.pending.length) this.drain();\n }\n\n private dispatch(serialized: string, clip?: AnimationClip, afterCommands?: () => void): Batch {\n const batch = JSON.parse(serialized) as Batch;\n this.pending.push({ batch, nextCommand: 0, clip, afterCommands });\n this.drain();\n return batch;\n }\n\n private drain(): void {\n const errors: Error[] = [];\n this.depth += 1;\n try {\n while (this.pending.length) {\n const pending = this.pending[0];\n while (pending.nextCommand < pending.batch.commands.length) {\n const command = pending.batch.commands[pending.nextCommand];\n try {\n this.execute(command, pending.clip);\n } catch (error) {\n // A release failure cannot be represented by a late terminal event.\n // Keep this command and its undelivered events available for retry.\n if (command.type === 'release') throw asError(error);\n const failure = asError(error);\n errors.push(failure);\n this.notifications.push({ type: 'error', handle: command.handle, message: failure.message || 'Native operation failed.' });\n }\n pending.nextCommand += 1;\n }\n pending.afterCommands?.();\n this.pending.shift();\n // Commands have finished before any observer may reenter playback.\n for (const event of pending.batch.events) {\n for (const listener of [...this.listeners]) {\n // An observer failure must not make a successful play look like an\n // allocation failure to its caller and orphan the new handle.\n try { listener(event); } catch (error) {\n const failure = asError(error);\n queueMicrotask(() => { if (this.onError) this.onError(failure); else throw failure; });\n }\n }\n }\n }\n } finally {\n this.depth -= 1;\n }\n if (this.depth === 0 && !this.flushingNotifications) this.flushNotifications();\n if (errors.length) throw errors[0];\n }\n\n private execute(command: Command, preparedClip?: AnimationClip): void {\n if (command.type === 'release') {\n const resource = this.resources.get(command.handle);\n if (!resource) return;\n resource.action?.stop();\n resource.binding.mixer.uncacheAction(resource.clip, resource.binding.model);\n resource.binding.mixer.uncacheClip(resource.clip);\n if (resource.action) this.actionHandles.delete(resource.action);\n this.resources.delete(command.handle);\n // Releasing a completed held pose is not a second terminal event. The\n // owning facade still needs to retire its resource bookkeeping.\n try { this.onRelease?.(command.handle); } catch (error) {\n const failure = asError(error);\n queueMicrotask(() => { if (this.onError) this.onError(failure); else throw failure; });\n }\n return;\n }\n if (command.type === 'replaceClip') {\n const resource = this.resources.get(command.handle);\n if (!resource || !preparedClip) throw new Error('Native clip edit has no owned resource.');\n // Three has no public action sample-edit method. Keep this adapter access\n // isolated: rebuild native interpolants with the existing PropertyMixer\n // result buffers, without reading or changing time, loop counters or fades.\n const action = resource.action as EditableAction;\n const tracks = preparedClip.tracks.map((track) => track.clone());\n const interpolants = tracks.map((track, index) => {\n const interpolant = (track as NativeTrack).createInterpolant(action._interpolants[index].resultBuffer);\n if (interpolant.settings) Object.assign(action._interpolantSettings as object, interpolant.settings);\n interpolant.settings = action._interpolantSettings;\n return interpolant;\n });\n resource.clip.tracks = tracks;\n action._interpolants = interpolants;\n return;\n }\n if (command.type === 'play') {\n if (!preparedClip) throw new Error('Native playback has no prepared clip.');\n const resource: Resource = { clip: preparedClip, binding: this.binding };\n this.resources.set(command.handle, resource);\n const settings = command.settings;\n const action = this.binding.mixer.clipAction(preparedClip, this.binding.model, blendMode(settings.blendMode));\n resource.action = action;\n this.actionHandles.set(action, command.handle);\n action.setLoop(loopMode(settings.loop.mode), settings.loop.count ?? Infinity);\n action.clampWhenFinished = settings.finalPose === 'hold';\n action.setEffectiveTimeScale(settings.speed);\n action.setEffectiveWeight(settings.weight);\n action.time = settings.startSeconds;\n if (!this.renderingEnabled) { resource.suspendedPaused = false; action.paused = true; }\n action.play();\n return;\n }\n const resource = this.resources.get(command.handle);\n const action = resource?.action;\n if (!resource || !action) throw new Error('Native playback action is unavailable.');\n const control = command.control;\n switch (control.type) {\n case 'pause':\n resource.explicitlyPaused = true;\n this.pauseFade(resource);\n action.paused = true;\n if (!this.renderingEnabled) this.resources.get(command.handle)!.suspendedPaused = true;\n break;\n case 'resume':\n resource.explicitlyPaused = false;\n if (this.renderingEnabled) { action.paused = false; this.resumeFade(resource); }\n else this.resources.get(command.handle)!.suspendedPaused = false;\n break;\n case 'seek': action.time = control.seconds; break;\n case 'setSpeed': action.setEffectiveTimeScale(control.speed); break;\n case 'setWeight':\n resource.pausedFade = undefined;\n action.setEffectiveWeight(control.weight);\n this.resources.get(command.handle)!.fadingOut = false;\n break;\n case 'setBlendMode': action.blendMode = blendMode(control.blendMode); break;\n case 'setLoop': action.setLoop(loopMode(control.loop.mode), control.loop.count ?? Infinity); break;\n case 'setFinalPose': action.clampWhenFinished = control.finalPose === 'hold'; break;\n case 'fadeIn':\n resource.pausedFade = undefined;\n action.fadeIn(control.seconds); resource.fadingOut = false;\n if (resource.explicitlyPaused || !this.renderingEnabled) this.pauseFade(resource);\n break;\n case 'fadeOut':\n resource.pausedFade = undefined;\n if (control.seconds === 0) this.notifications.push({ type: 'cancelled', handle: command.handle });\n else { action.fadeOut(control.seconds); resource.fadingOut = true; if (resource.explicitlyPaused || !this.renderingEnabled) this.pauseFade(resource); }\n break;\n case 'stop': throw new Error('Rust must translate stop into a resource release.');\n }\n }\n\n private readonly finished = (event: { action: AnimationAction }): void => {\n const handle = this.actionHandles.get(event.action);\n if (!handle || this.disposed) return;\n this.notifications.push({ type: this.resources.get(handle)?.fadingOut ? 'cancelled' : 'completed', handle });\n // Three dispatches finished while iterating its active action arrays.\n // Releasing/uncaching an action there would mutate that iteration.\n if (this.notificationScheduled) return;\n this.notificationScheduled = true;\n queueMicrotask(() => {\n this.notificationScheduled = false;\n if (this.disposed) return;\n try { this.flushNotifications(); } catch (error) {\n const failure = asError(error);\n if (this.onError) this.onError(failure);\n else throw failure;\n }\n });\n };\n\n private flushNotifications(): void {\n if (this.flushingNotifications || this.depth > 0 || this.disposed || this.notificationScheduled) return;\n this.flushingNotifications = true;\n try {\n while (this.notifications.length) {\n const event = this.notifications.shift()!;\n this.dispatch(this.session.notify(JSON.stringify(event)));\n }\n } finally {\n this.flushingNotifications = false;\n }\n }\n}\n","import {\n AdditiveAnimationBlendMode, AnimationClip, AnimationUtils, LoopOnce, LoopPingPong,\n NormalAnimationBlendMode, PropertyBinding, Quaternion, Euler, InterpolateDiscrete, InterpolateLinear,\n} from 'three';\nimport type { KeyframeTrack, Mesh, Object3D } from 'three';\nimport type { AUDescriptor } from '@lovelace_lol/embody/wasm';\nimport { initEmbodyCore, requireInitializedEmbodyCore, DEFAULT_HAIR_COLOR_APPEARANCE } from '@lovelace_lol/embody/wasm';\nimport type { RuntimeCore } from '@lovelace_lol/embody/wasm';\nimport {\n ThreeFrameApplier, ThreeModelInspector, createAnimationClipFromClipIR,\n serializeAnimationClips,\n} from './index';\nimport type { ClipIR, ClipIRTrack, ThreeModelInspection } from './index';\nimport {\n bindModelReferencePose, captureModelReferencePose, extendModelReferencePose,\n} from './reference-pose';\nimport type { ThreeModelReferencePose, ThreeReferencePoseNode } from './reference-pose';\nimport { ThreeNativePlaybackConnector } from './nativePlayback';\nimport { withComponentTracks } from './clipBindings';\nimport type { ThreeNativePlaybackControl, ThreeNativePlaybackEvent, ThreeNativePlaybackOptions } from './nativePlayback';\n\ntype JsonObject = Record<string, any>;\ntype NativeTrack = KeyframeTrack & { createInterpolant: ((result?: Float32Array) => { evaluate(time: number): ArrayLike<number> }) & { isInterpolantFactoryMethodGLTFCubicSpline?: boolean } };\nexport type RustEmbodyHostConfig = {\n profileMode?: 'preset' | 'profile';\n presetId?: string;\n presetType?: string;\n profile?: JsonObject;\n meshes?: Mesh[];\n referencePose?: ThreeModelReferencePose;\n};\nexport type CharacterPlaybackOptions = JsonObject;\nexport type CharacterPlaybackEvent = ThreeNativePlaybackEvent & { actionId: string; clipName: string };\nexport interface CharacterPlaybackHandle {\n readonly name: string;\n actionId?: string;\n promise: Promise<CharacterPlaybackEvent>;\n readonly finished: Promise<CharacterPlaybackEvent>;\n play(): CharacterPlaybackHandle;\n stop(): CharacterPlaybackHandle;\n cancel(): CharacterPlaybackHandle;\n pause(): CharacterPlaybackHandle;\n resume(): CharacterPlaybackHandle;\n setWeight(value: number): CharacterPlaybackHandle;\n setIntensity(value: number): CharacterPlaybackHandle;\n setSpeed(value: number): CharacterPlaybackHandle;\n setPlaybackRate(value: number): CharacterPlaybackHandle;\n setTime(value: number): CharacterPlaybackHandle;\n seek(value: number): CharacterPlaybackHandle;\n updateParams(value: CharacterPlaybackOptions): CharacterPlaybackHandle;\n setParams(value: CharacterPlaybackOptions): CharacterPlaybackHandle;\n subscribe(listener: ((event: CharacterPlaybackEvent) => void) | { next(event: CharacterPlaybackEvent): void }): () => void;\n}\nexport interface CharacterTransitionHandle {\n promise: Promise<void>;\n pause(): void;\n resume(): void;\n cancel(): void;\n}\n\ntype Source =\n | { name: string; kind: 'native'; clip: AnimationClip }\n | { name: string; kind: 'curves' | 'typed'; input: any; options: CharacterPlaybackOptions }\n | { name: string; kind: 'compiled'; clip: ClipIR };\ntype Playback = {\n id: string;\n source: Source;\n options: CharacterPlaybackOptions;\n connector: ThreeNativePlaybackConnector;\n terminal: boolean;\n inheritedStarts: Map<string, number[]>;\n replay(options: CharacterPlaybackOptions): CharacterPlaybackHandle;\n notify(event: CharacterPlaybackEvent): void;\n};\nconst json = (value: unknown): string => JSON.stringify(value ?? {});\nconst targetKey = (target: ClipIRTrack['target']): string => JSON.stringify([target.kind, target.meshId, target.morphTargetId, target.boneId, target.objectId, target.property]);\nconst copy = <T>(value: T): T => JSON.parse(JSON.stringify(value));\nconst parse = <T = any>(value: string): T => JSON.parse(value);\nconst finite = (value: unknown): value is number => typeof value === 'number' && Number.isFinite(value);\nconst intensity = (options: CharacterPlaybackOptions, fallback = 1): number => {\n const value = options.intensityScale ?? options.intensity ?? options.weight;\n return finite(value) ? Math.max(0, Math.min(2, value)) : fallback;\n};\nconst presetId = (value?: string): string => value?.trim().toLowerCase() || 'cc4';\n\nexport function supportsRustEmbodyPreset(value?: string): boolean {\n return requireInitializedEmbodyCore().has_preset(presetId(value));\n}\n\n/** Character commands compile in Rust and play exclusively on the native connector. */\nexport class Embody {\n readonly meshes: Mesh[] = [];\n meshByName = new Map<string, Mesh>();\n bones: ThreeModelInspection['bones'] = {};\n private readonly wasm = requireInitializedEmbodyCore();\n private core: RuntimeCore;\n private readonly inspector = new ThreeModelInspector();\n private readonly applier = new ThreeFrameApplier();\n private readonly references = new WeakMap<Object3D, ThreeModelReferencePose>();\n private referenceBindings: ReadonlyMap<Object3D, ThreeReferencePoseNode> = new Map();\n private boundModel?: Object3D;\n get model(): Object3D | undefined { return this.boundModel; }\n private inspection?: ThreeModelInspection;\n private connector?: ThreeNativePlaybackConnector;\n private profile: JsonObject;\n private profileSource: JsonObject;\n private readonly profileMode: 'preset' | 'profile';\n private readonly preset: string;\n private readonly sources = new Map<string, Source>();\n private readonly playbacks = new Map<string, Playback>();\n private readonly current = new Map<string, Playback>();\n private playDepth = 0;\n private readonly pendingEvents: ThreeNativePlaybackEvent[] = [];\n private bindingGeneration = 0;\n private disposed = false;\n private rendering = true;\n private timeScale = 1;\n private nextLiveTarget = 0;\n private readonly liveTargets = new Map<string, { track: ClipIRTrack; handle: CharacterPlaybackHandle; releasing: boolean }>();\n private readonly hairObjects = new Map<string, Mesh>();\n private hairConfig: JsonObject = {};\n private hairAppearance: JsonObject = {\n hairColor: copy(DEFAULT_HAIR_COLOR_APPEARANCE),\n eyebrowColor: copy(DEFAULT_HAIR_COLOR_APPEARANCE),\n showOutline: false, outlineColor: '#000000', outlineOpacity: 1,\n };\n\n constructor(private readonly config: RustEmbodyHostConfig = {}) {\n const mode = config.profileMode ?? 'preset';\n if (mode !== 'profile' && mode !== 'preset') throw new Error(`Unknown profile mode: ${mode}`);\n if (mode === 'profile' && !config.profile) throw new Error('Resolved profile mode requires a profile object.');\n this.profileMode = mode;\n this.preset = presetId(config.presetId ?? config.presetType);\n if (mode === 'preset' && !this.wasm.has_preset(this.preset)) throw new Error(`Unknown Embody preset: ${this.preset}`);\n this.profileSource = this.validateProfile(config.profile ?? {});\n this.profile = this.resolveProfile(this.profileSource);\n this.core = new this.wasm.RuntimeCore(0);\n }\n\n static async create(config: RustEmbodyHostConfig = {}): Promise<Embody> {\n await initEmbodyCore();\n return new Embody(config);\n }\n\n private assertAlive(): void { if (this.disposed) throw new Error('Character is disposed.'); }\n private requireModel(): Object3D {\n this.assertAlive();\n if (!this.boundModel) throw new Error('Bind a character model with onReady before using this operation.');\n return this.boundModel;\n }\n private requireConnector(): ThreeNativePlaybackConnector {\n this.requireModel();\n if (!this.connector) throw new Error('Character playback is not bound.');\n return this.connector;\n }\n private validateProfile(value: JsonObject): JsonObject {\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error('Embody profile must be a JSON object.');\n return copy(value);\n }\n private resolveProfile(value: JsonObject): JsonObject {\n return this.profileMode === 'profile' ? copy(value) : parse(this.wasm.merge_embedded_preset(this.preset, json(value)));\n }\n\n onReady(options: { model: Object3D; meshes?: Mesh[]; animations?: AnimationClip[]; referencePose?: ThreeModelReferencePose }): void {\n this.assertAlive();\n const model = options.model;\n if (!model?.isObject3D) throw new Error('onReady requires a Three Object3D model.');\n const reference = this.references.get(model) ?? options.referencePose ?? (!this.boundModel ? this.config.referencePose : undefined) ?? captureModelReferencePose(model);\n const inspection = this.inspector.inspectModel(model, { meshes: options.meshes, profile: this.profile, referencePose: reference });\n this.bind(model, reference, inspection, this.profileSource, this.profile);\n if (options.animations) this.loadAnimationClips(options.animations);\n }\n\n private bind(model: Object3D, reference: ThreeModelReferencePose, inspection: ThreeModelInspection, source: JsonObject, profile: JsonObject, preserveLiveState = true): void {\n // Prepare every fallible profile/reference operation before releasing the old binding.\n const referenceBindings = bindModelReferencePose(model, reference);\n // Inspection stays live; release clips need the separately captured baseline.\n const runtimeDescriptor = {\n ...inspection.descriptor,\n morphTargets: inspection.descriptor.morphTargets.map((morph) => {\n const binding = inspection.morphBindings.get(morph.id);\n const baseline = binding && referenceBindings.get(binding.mesh)?.morphInfluences?.[binding.index];\n return { ...morph, initialValue: baseline ?? morph.initialValue };\n }),\n };\n const replacingModel = !!this.boundModel && this.boundModel !== model;\n const core = new this.wasm.RuntimeCore(0);\n try {\n if (this.profileMode === 'profile') core.configure_with_profile(json(source), json(runtimeDescriptor));\n else core.configure_with_preset(this.preset, json(source), json(runtimeDescriptor));\n if (preserveLiveState && this.boundModel) core.copy_live_state_from(this.core);\n for (const registered of replacingModel ? [] : this.sources.values()) {\n if (registered.kind === 'native') {\n const [clip] = serializeAnimationClips(model, [registered.clip], inspection);\n core.register_animation_clip(json(clip), 'baked');\n }\n }\n } catch (error) { core.free(); throw error; }\n try { this.connector?.dispose(); }\n catch (error) { core.free(); throw error; }\n this.core.free();\n this.core = core;\n if (replacingModel) this.sources.clear();\n this.boundModel = model;\n this.inspection = inspection;\n this.referenceBindings = referenceBindings;\n this.references.set(model, reference);\n this.profileSource = source;\n this.profile = profile;\n this.bindingGeneration += 1;\n this.playbacks.clear();\n this.current.clear();\n this.liveTargets.clear();\n this.meshes.splice(0, this.meshes.length, ...(inspection.morphMeshes.length ? inspection.morphMeshes : inspection.allMeshes));\n this.meshByName = inspection.meshByName;\n this.bones = inspection.bones;\n this.applier.setBindings(inspection);\n this.applier.applyMeshMaterialConfigs(model, profile.meshes ?? {});\n const session = new this.wasm.NativePlaybackSession();\n try {\n this.connector = new ThreeNativePlaybackConnector(session, {\n model, inspection,\n onRelease: (id) => {\n const playback = this.playbacks.get(id);\n if (playback?.terminal) this.forget(playback);\n },\n });\n }\n catch (error) { session.free(); throw error; }\n this.connector.rebind(model.uuid, String(this.bindingGeneration));\n this.connector.setRendering(this.rendering);\n this.connector.setTimeScale(this.timeScale);\n this.connector.subscribe((event) => this.onPlaybackEvent(event));\n this.hairConfig = parse(this.core.get_hair_config_json());\n this.registerHairObjects(inspection.allMeshes.filter((mesh) => ['hair', 'eyebrow'].includes(this.meshCategory(mesh))));\n if (preserveLiveState) this.commitLive();\n }\n\n bindModel(meshes?: Mesh[]): void {\n const model = this.requireModel();\n const reference = this.references.get(model)!;\n const inspection = this.inspector.inspectModel(model, { meshes, profile: this.profile, referencePose: reference });\n this.bind(model, reference, inspection, this.profileSource, this.profile);\n }\n extendReferencePose(): ThreeModelReferencePose {\n const model = this.requireModel();\n const reference = extendModelReferencePose(model, this.references.get(model)!);\n const inspection = this.inspector.inspectModel(model, { profile: this.profile, referencePose: reference });\n this.bind(model, reference, inspection, this.profileSource, this.profile);\n return reference;\n }\n setProfile(value: JsonObject): void {\n this.assertAlive();\n const source = this.validateProfile(value);\n const profile = this.resolveProfile(source);\n if (!this.boundModel) { this.profileSource = source; this.profile = profile; return; }\n const reference = this.references.get(this.boundModel)!;\n const inspection = this.inspector.inspectModel(this.boundModel, { profile, referencePose: reference });\n this.bind(this.boundModel, reference, inspection, source, profile, false);\n }\n getProfile(): JsonObject { return this.profile; }\n getProfileMode(): 'preset' | 'profile' { return this.profileMode; }\n getPresetId(): string | null { return this.profileMode === 'preset' ? this.preset : null; }\n supportsPreset(value?: string): boolean { return supportsRustEmbodyPreset(value); }\n\n private onPlaybackEvent(event: ThreeNativePlaybackEvent): void {\n if (this.playDepth) { this.pendingEvents.push(event); return; }\n const playback = this.playbacks.get(event.handle);\n if (!playback) return;\n playback.terminal = true;\n if (!playback.connector.getAction(playback.id)) {\n this.playbacks.delete(playback.id);\n if (this.current.get(playback.source.name) === playback) this.current.delete(playback.source.name);\n }\n playback.notify({ ...event, actionId: event.handle, clipName: playback.source.name });\n }\n private compile(source: Source, options: CharacterPlaybackOptions): ClipIR {\n const buildOptions = { ...('options' in source ? source.options : {}), ...options, intensityScale: intensity(options) };\n switch (source.kind) {\n case 'curves': return parse(this.core.build_clip(source.name, json(source.input), json(buildOptions)));\n case 'typed': return parse(this.core.build_typed_clip(source.name, json(source.input), json(buildOptions)));\n case 'compiled': return source.clip;\n case 'native': throw new Error('Native animation sources do not require AU compilation.');\n }\n }\n\n private restValues(track: KeyframeTrack): number[] | undefined {\n const model = this.requireModel();\n const parsed = PropertyBinding.parseTrackName(track.name);\n let object = PropertyBinding.findNode(model, parsed.nodeName) as Object3D | undefined;\n if (parsed.objectName === 'bones' && object) {\n const skeleton = (object as Object3D & { skeleton?: { bones: Object3D[] } }).skeleton;\n object = skeleton?.bones.find((bone) => bone.name === String(parsed.objectIndex)) ??\n skeleton?.bones[Number(parsed.objectIndex)];\n }\n if (!object) return undefined;\n const reference = this.referenceBindings.get(object);\n if (!reference) return undefined;\n switch (parsed.propertyName) {\n case 'quaternion': return Object.values(reference.transform.rotation);\n case 'rotation': {\n const rotation = reference.transform.rotation;\n const euler = reference.rotationEuler ?? new Euler().setFromQuaternion(new Quaternion(rotation.x, rotation.y, rotation.z, rotation.w), reference.rotationOrder);\n const axis = parsed.propertyIndex;\n return axis === 'x' || axis === 'y' || axis === 'z' ? [euler[axis]] : [euler.x, euler.y, euler.z];\n }\n case 'position': return Object.values(reference.transform.position);\n case 'scale': return Object.values(reference.transform.scale);\n case 'weights':\n case 'morphTargetInfluences': {\n const mesh = object as Mesh;\n const index = typeof parsed.propertyIndex === 'string' && !/^\\d+$/.test(parsed.propertyIndex)\n ? mesh.morphTargetDictionary?.[parsed.propertyIndex] : Number(parsed.propertyIndex);\n return [reference.morphInfluences?.[index ?? -1] ?? 0];\n }\n default: return undefined;\n }\n }\n\n private materialize(source: Source, options: CharacterPlaybackOptions, inheritedStarts = new Map<string, number[]>()): AnimationClip {\n if (!this.inspection) throw new Error('Character has no model inspection.');\n const nativeSource = source.kind === 'native';\n let ir: ClipIR | undefined;\n if (!nativeSource) {\n ir = this.compile(source, options);\n }\n const clip = nativeSource ? withComponentTracks(source.clip).clone() : createAnimationClipFromClipIR(ir!, this.inspection);\n if (ir) {\n const predecessor = this.current.get(source.name);\n const outgoing = predecessor?.connector.getAction(predecessor.id);\n for (let index = 0; index < ir.tracks.length; index += 1) {\n if (!ir.tracks[index].inheritStart) continue;\n const track = clip.tracks[index];\n if (!track) throw new Error('Every inherited track must bind to the character.');\n const startKey = `${index}:${track.name}`;\n let previous = inheritedStarts.get(startKey);\n if (!previous && options.blendMode === 'additive') {\n // Additive inheritance belongs to this request's contribution, not\n // the full mixed pose containing baked clips and other controls.\n const rest = this.restValues(track);\n const candidates = outgoing?.getClip().tracks;\n const oldTrack = candidates?.[index]?.name === track.name ? candidates[index] : candidates?.find((candidate) => candidate.name === track.name);\n if (oldTrack && outgoing) {\n previous = Array.from((oldTrack as NativeTrack).createInterpolant().evaluate(outgoing.time));\n if (outgoing.blendMode === AdditiveAnimationBlendMode && rest) {\n previous = track.ValueTypeName === 'quaternion'\n ? new Quaternion().fromArray(rest).multiply(new Quaternion().fromArray(previous)).toArray()\n : previous.map((value, axis) => value + rest[axis]);\n }\n } else if (rest) previous = rest;\n }\n if (previous) track.values.set(previous, 0);\n inheritedStarts.set(startKey, previous ?? Array.from(track.values.subarray(0, track.getValueSize())));\n }\n }\n const authoredAdditive = clip.blendMode === AdditiveAnimationBlendMode;\n const scale = intensity(options);\n const additive = options.blendMode === 'additive' || (options.blendMode === undefined && authoredAdditive);\n // Native custom curves remain exact at their authored settings. Editing\n // strength/blend/easing materializes their native interpolant once into\n // ordinary keyframes; no custom sampling occurs during rendering.\n this.applyEasing(clip, options.easing ?? 'linear', nativeSource && (scale !== 1 || additive !== authoredAdditive));\n if (nativeSource && scale !== 1) {\n for (const track of clip.tracks) {\n const rest = authoredAdditive ? (track.ValueTypeName === 'quaternion' ? [0, 0, 0, 1] : Array(track.getValueSize()).fill(0)) : this.restValues(track);\n if (!rest) continue;\n const stride = track.getValueSize();\n const cubic = (track as NativeTrack).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true;\n const width = cubic ? stride / 3 : stride;\n for (let offset = 0; offset < track.values.length; offset += stride) {\n const sample = offset + (cubic ? width : 0);\n if (track.ValueTypeName === 'quaternion') {\n const neutral = new Quaternion().fromArray(rest);\n const value = new Quaternion().fromArray(track.values, sample);\n neutral.slerp(value, scale).toArray(track.values, sample);\n } else {\n for (let axis = 0; axis < width; axis += 1) {\n track.values[sample + axis] = rest[axis] + (track.values[sample + axis] - rest[axis]) * scale;\n if (cubic) {\n track.values[offset + axis] *= scale;\n track.values[offset + 2 * width + axis] *= scale;\n }\n }\n }\n }\n }\n }\n if (additive && !authoredAdditive) {\n const reference = clip.clone();\n for (const track of reference.tracks) {\n const rest = this.restValues(track);\n if (!rest) continue;\n const width = track.getValueSize();\n for (let offset = 0; offset < track.values.length; offset += width) track.values.set(rest, offset);\n }\n const explicitReference = options.additiveReferenceTimeSec;\n if (finite(explicitReference)) AnimationUtils.makeClipAdditive(clip, explicitReference * 30, clip.clone(), 30);\n else AnimationUtils.makeClipAdditive(clip, 0, reference, 30);\n }\n if (!additive && authoredAdditive) {\n // Native additive clips contain offsets; restore captured reference values.\n for (const track of clip.tracks) {\n const rest = this.restValues(track);\n if (!rest) continue;\n const width = track.getValueSize();\n for (let offset = 0; offset < track.values.length; offset += width) {\n if (track.ValueTypeName === 'quaternion') new Quaternion().fromArray(rest).multiply(new Quaternion().fromArray(track.values, offset)).toArray(track.values, offset);\n else for (let axis = 0; axis < width; axis += 1) track.values[offset + axis] += rest[axis];\n }\n }\n }\n clip.blendMode = additive ? AdditiveAnimationBlendMode : NormalAnimationBlendMode;\n return clip;\n }\n\n private applyEasing(clip: AnimationClip, easing: string, resampleCustom = false): void {\n if (easing === 'linear' && !resampleCustom) return;\n const curve = (progress: number): number => {\n switch (easing) {\n case 'easeIn': return progress * progress;\n case 'easeOut': return 1 - (1 - progress) ** 2;\n case 'easeInOut': return progress < 0.5 ? 2 * progress * progress : 1 - (-2 * progress + 2) ** 2 / 2;\n case 'easeInOutCubic': return progress < 0.5 ? 4 * progress ** 3 : 1 - (-2 * progress + 2) ** 3 / 2;\n default: return progress;\n }\n };\n for (const track of clip.tracks) {\n if (track.getInterpolation() === InterpolateDiscrete || track.times.length === 0) continue;\n const customInterpolant = (track as NativeTrack).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true;\n if (track.times.length === 1) {\n if (customInterpolant && resampleCustom) {\n track.values = new Float32Array((track as NativeTrack).createInterpolant().evaluate(track.times[0]));\n track.setInterpolation(InterpolateLinear);\n }\n continue;\n }\n if ((customInterpolant || track.getInterpolation() !== InterpolateLinear) && easing === 'linear' && !resampleCustom) continue;\n const stride = track.getValueSize();\n const width = customInterpolant ? stride / 3 : stride;\n const interpolant = (track as NativeTrack).createInterpolant();\n const times: number[] = [];\n const values: number[] = [];\n const append = (time: number, value: ArrayLike<number>) => { times.push(time); for (let axis = 0; axis < width; axis += 1) values.push(value[axis]); };\n for (let index = 0; index < track.times.length - 1; index += 1) {\n const start = track.times[index];\n const end = track.times[index + 1];\n // Retain duplicate keyframe times and their authored values verbatim.\n const offset = index * stride + (customInterpolant ? width : 0);\n append(start, track.values.subarray(offset, offset + width));\n if (end <= start) continue;\n for (let part = 1; part < 16; part += 1) {\n const progress = part / 16;\n append(start + (end - start) * progress, interpolant.evaluate(start + (end - start) * curve(progress)));\n }\n }\n const lastOffset = (track.times.length - 1) * stride + (customInterpolant ? width : 0);\n append(track.times[track.times.length - 1], track.values.subarray(lastOffset, lastOffset + width));\n track.times = new Float32Array(times);\n track.values = new Float32Array(values);\n if (customInterpolant || track.getInterpolation() !== InterpolateLinear) track.setInterpolation(InterpolateLinear);\n }\n }\n\n private nativeOptions(options: CharacterPlaybackOptions, clip: AnimationClip): ThreeNativePlaybackOptions {\n const mode = clip.duration === 0 ? 'once' : options.loopMode ?? (options.loop === true ? 'repeat' : 'once');\n const count = finite(options.repeatCount) && options.repeatCount > 0 ? options.repeatCount : null;\n let speed = options.speed ?? options.playbackRate ?? options.rate ?? options.timeScale ?? 1;\n if (options.reverse === true) speed = -Math.abs(speed);\n return {\n startSeconds: finite(options.time) ? options.time : finite(options.offsetSec) ? options.offsetSec : speed < 0 ? clip.duration : 0,\n speed,\n weight: finite(options.mixerWeight) ? options.mixerWeight : 1,\n blendMode: clip.blendMode === AdditiveAnimationBlendMode ? 'additive' : 'normal',\n loop: { mode: mode === 'once' ? 'once' : mode === 'pingpong' || mode === 'pingPong' ? 'pingPong' : 'repeat', count: mode === 'once' ? 1 : count },\n finalPose: options.finalPose === 'release' || options.clampWhenFinished === false ? 'release' : 'hold',\n };\n }\n private validateEasing(options: CharacterPlaybackOptions): void {\n if (options.easing !== undefined && !['linear', 'easeIn', 'easeOut', 'easeInOut', 'easeInOutCubic'].includes(options.easing)) throw new Error(`Unknown playback easing: ${options.easing}`);\n }\n\n private handle(source: Source, options: CharacterPlaybackOptions, autoPlay: boolean): CharacterPlaybackHandle {\n options = { ...('options' in source ? source.options : {}), ...options };\n const listeners = new Set<(event: CharacterPlaybackEvent) => void>();\n const generation = this.bindingGeneration;\n let current: Playback | undefined;\n let resolvePromise: (event: CharacterPlaybackEvent) => void = () => {};\n const result = { name: source.name } as CharacterPlaybackHandle;\n Object.defineProperty(result, 'finished', { get: () => result.promise, enumerable: true });\n const newPromise = () => { result.promise = new Promise((resolve) => { resolvePromise = resolve; }); };\n newPromise();\n result.subscribe = (listener) => {\n const callback = typeof listener === 'function' ? listener : (event: CharacterPlaybackEvent) => listener.next(event);\n listeners.add(callback);\n return () => { listeners.delete(callback); };\n };\n const start = (): CharacterPlaybackHandle => {\n if (generation !== this.bindingGeneration) throw new Error('Playback handle belongs to an obsolete model binding.');\n this.validateEasing(options);\n const connector = this.requireConnector();\n const inheritedStarts = new Map<string, number[]>();\n const clip = this.materialize(source, options, inheritedStarts);\n const hairMotion = this.authoredHeadMotion(clip);\n const previous = this.current.get(source.name);\n const settings = this.nativeOptions(options, clip);\n if (previous && connector.getAction(previous.id)) settings.replace = previous.id;\n if (current) newPromise();\n const resolve = resolvePromise;\n let settled = false;\n this.playDepth += 1;\n let id: string;\n try { id = connector.playNativeClip(clip, settings); }\n catch (error) {\n this.playDepth -= 1;\n while (!this.playDepth && this.pendingEvents.length) this.onPlaybackEvent(this.pendingEvents.shift()!);\n throw error;\n }\n const playback: Playback = {\n id, source, options: { ...options, intensityScale: intensity(options) }, connector, terminal: false, inheritedStarts,\n replay: (next) => { options = next; return start(); },\n notify: (event) => {\n if (settled) return;\n settled = true;\n resolve(event);\n for (const listener of [...listeners]) {\n try { listener(event); }\n catch (error) { queueMicrotask(() => { throw error; }); }\n }\n },\n };\n current = playback;\n result.actionId = id;\n this.playbacks.set(id, playback);\n this.current.set(source.name, playback);\n const ensure = () => {\n this.assertAlive();\n if (this.connector !== connector || !connector.getAction(id)) throw new Error('Unknown, released or obsolete playback handle.');\n };\n const control = (command: ThreeNativePlaybackControl): CharacterPlaybackHandle => {\n ensure();\n connector.control(id, command);\n if (command.type === 'stop') this.forget(playback);\n return result;\n };\n result.stop = result.cancel = () => {\n if (this.connector !== connector || !connector.getAction(id)) return result;\n ensure();\n const seconds = finite(playback.options.fadeOutSec) ? playback.options.fadeOutSec : 0;\n if (seconds > 0 && !playback.terminal) connector.fadeOut(id, seconds);\n else control({ type: 'stop' });\n return result;\n };\n result.pause = () => control({ type: 'pause' });\n result.resume = () => {\n ensure();\n if (playback.terminal) {\n options = { ...playback.options, time: connector.getAction(id)!.time };\n return start();\n }\n return control({ type: 'resume' });\n };\n result.setSpeed = result.setPlaybackRate = (speed) => { ensure(); this.updatePlayback(playback, { speed }); return result; };\n result.setTime = result.seek = (seconds) => control({ type: 'seek', seconds });\n result.setWeight = result.setIntensity = (value) => {\n ensure();\n this.updatePlayback(playback, { intensityScale: value });\n return result;\n };\n result.updateParams = result.setParams = (value) => { ensure(); this.updatePlayback(playback, value); return result; };\n try {\n const fade = options.fadeInSec ?? options.crossfadeDuration;\n if (finite(fade) && fade > 0) connector.fadeIn(id, fade);\n } finally {\n this.playDepth -= 1;\n while (!this.playDepth && this.pendingEvents.length) this.onPlaybackEvent(this.pendingEvents.shift()!);\n }\n if (hairMotion && connector.getAction(id)) {\n this.playHairImpulse(hairMotion.horizontal, hairMotion.vertical);\n this.setHairGravity(hairMotion.pitch, clip.duration);\n }\n return result;\n };\n result.play = () => { if (current) options = { ...current.options }; return start(); };\n const beforePlay = () => { throw new Error('Play this compiled clip before changing playback.'); };\n // A prepared clip has options but owns no native action to stop or pause.\n result.stop = result.cancel = () => result;\n result.pause = result.resume = beforePlay;\n result.updateParams = result.setParams = (patch) => {\n this.assertAlive();\n this.validateEasing(patch);\n options = { ...options, ...patch };\n if ('finalPose' in patch && !('clampWhenFinished' in patch)) options.clampWhenFinished = patch.finalPose !== 'release';\n if ('clampWhenFinished' in patch && !('finalPose' in patch)) options.finalPose = patch.clampWhenFinished === false ? 'release' : 'hold';\n if ('loop' in patch && !('loopMode' in patch)) options.loopMode = patch.loop ? 'repeat' : 'once';\n if ('loopMode' in patch && !('repeatCount' in patch)) delete options.repeatCount;\n if ('weight' in patch || 'intensity' in patch || 'intensityScale' in patch) options.intensityScale = intensity(patch);\n if ('time' in patch || 'offsetSec' in patch) options.time = patch.time ?? patch.offsetSec;\n if ('speed' in patch || 'playbackRate' in patch || 'rate' in patch || 'timeScale' in patch || 'reverse' in patch) {\n let speed = patch.speed ?? patch.playbackRate ?? patch.rate ?? patch.timeScale ?? options.speed ?? options.playbackRate ?? options.rate ?? options.timeScale ?? 1;\n if ('reverse' in patch) speed = Math.abs(speed) * (patch.reverse ? -1 : 1);\n options.speed = speed;\n delete options.reverse;\n }\n return result;\n };\n result.setWeight = result.setIntensity = (value) => result.updateParams({ intensityScale: value });\n result.setSpeed = result.setPlaybackRate = (speed) => result.updateParams({ speed });\n result.setTime = result.seek = (time) => result.updateParams({ time });\n return autoPlay ? start() : result;\n }\n\n private forget(playback: Playback): void {\n this.playbacks.delete(playback.id);\n if (this.current.get(playback.source.name) === playback) this.current.delete(playback.source.name);\n }\n private updatePlayback(playback: Playback, patch: CharacterPlaybackOptions): void {\n this.validateEasing(patch);\n const connector = playback.connector;\n const action = connector.getAction(playback.id);\n if (connector !== this.connector || !action) throw new Error('Unknown, released or obsolete playback handle.');\n const options = { ...playback.options, ...patch };\n if ('finalPose' in patch && !('clampWhenFinished' in patch)) options.clampWhenFinished = patch.finalPose !== 'release';\n if ('clampWhenFinished' in patch && !('finalPose' in patch)) options.finalPose = patch.clampWhenFinished === false ? 'release' : 'hold';\n if ('loop' in patch && !('loopMode' in patch)) options.loopMode = patch.loop ? 'repeat' : 'once';\n if ('loopMode' in patch && !('repeatCount' in patch)) delete options.repeatCount;\n if ('weight' in patch || 'intensity' in patch || 'intensityScale' in patch) options.intensityScale = intensity(patch);\n if (['weight', 'intensity', 'intensityScale', 'blendMode', 'easing', 'balance', 'balanceMap', 'mixWeights'].some((key) => key in patch)) {\n const clip = this.materialize(playback.source, options, playback.inheritedStarts);\n connector.replaceClip(playback.id, clip);\n if ('blendMode' in patch) connector.control(playback.id, { type: 'setBlendMode', blendMode: clip.blendMode === AdditiveAnimationBlendMode ? 'additive' : 'normal' });\n }\n if ('mixerWeight' in patch) connector.control(playback.id, { type: 'setWeight', weight: patch.mixerWeight });\n if ('speed' in patch || 'playbackRate' in patch || 'rate' in patch || 'timeScale' in patch || 'reverse' in patch) {\n let speed = patch.speed ?? patch.playbackRate ?? patch.rate ?? patch.timeScale ?? action.timeScale;\n if ('reverse' in patch) speed = Math.abs(speed) * (patch.reverse ? -1 : 1);\n connector.control(playback.id, { type: 'setSpeed', speed });\n options.speed = speed;\n delete options.reverse;\n }\n if ('time' in patch || 'offsetSec' in patch) {\n options.time = patch.time ?? patch.offsetSec;\n connector.control(playback.id, { type: 'seek', seconds: options.time });\n }\n if ('loopMode' in patch || 'loop' in patch || 'repeatCount' in patch) {\n if (playback.terminal) {\n playback.replay({ ...options, time: action.time });\n return;\n }\n connector.control(playback.id, { type: 'setLoop', loop: this.nativeOptions(options, action.getClip()).loop! });\n }\n if ('clampWhenFinished' in patch || 'finalPose' in patch) connector.control(playback.id, { type: 'setFinalPose', finalPose: this.nativeOptions(options, action.getClip()).finalPose! });\n playback.options = options;\n if (!connector.getAction(playback.id)) this.forget(playback);\n }\n\n registerAnimationClips(clips: AnimationClip[]): void {\n const model = this.requireModel();\n for (const clip of clips) {\n if (this.sources.get(clip.name)?.kind === 'native' && (this.sources.get(clip.name) as { clip: AnimationClip }).clip === clip) continue;\n const [ir] = serializeAnimationClips(model, [clip], this.inspection!);\n this.core.register_animation_clip(json(ir), 'baked');\n this.sources.set(clip.name, { name: clip.name, kind: 'native', clip });\n }\n }\n loadAnimationClips(clips: AnimationClip[]): void {\n this.stopAllAnimations();\n for (const source of [...this.sources.values()]) if (source.kind === 'native') {\n this.sources.delete(source.name);\n this.core.remove_animation_clip(source.name);\n }\n this.registerAnimationClips(clips ?? []);\n this.restartHair();\n }\n removeAnimationClip(name: string): boolean {\n this.stopAnimation(name);\n this.sources.delete(name);\n return this.core.remove_animation_clip(name);\n }\n getAnimationClips(): any[] { return parse(this.core.get_animation_clips()); }\n playAnimation(name: string, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n const source = this.sources.get(name);\n if (!source) throw new Error(`Unknown animation clip: ${name}`);\n return this.handle(source, options, true);\n }\n private build(source: Source, options: CharacterPlaybackOptions, play: boolean): CharacterPlaybackHandle {\n this.requireModel();\n this.validateEasing(options);\n this.compile(source, options);\n this.sources.set(source.name, source);\n return this.handle(source, options, play);\n }\n buildClip(name: string, curves: JsonObject, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n if (options.semanticAnimation) throw new Error('Decode legacy named animation tracks to numeric AU curves before building a clip.');\n return this.build({ name, kind: 'curves', input: copy(curves), options: copy(options) }, options, false);\n }\n snippetToClip(name: string, curves: JsonObject, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle { return this.buildClip(name, curves, options); }\n buildTypedClip(name: string, channels: any[], options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n return this.build({ name, kind: 'typed', input: copy(channels), options: copy(options) }, options, false);\n }\n typedSnippetToClip(name: string, channels: any[], options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle { return this.buildTypedClip(name, channels, options); }\n playSnippet(snippet: string | { name: string; curves: JsonObject }, curvesOrOptions: JsonObject = {}, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n return typeof snippet === 'string' ? this.buildClip(snippet, curvesOrOptions, options).play() : this.buildClip(snippet.name, snippet.curves, curvesOrOptions).play();\n }\n playTypedSnippet(snippet: { name: string; channels: any[] }, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle { return this.buildTypedClip(snippet.name, snippet.channels, options).play(); }\n playClip(value: string | CharacterPlaybackHandle): CharacterPlaybackHandle { return typeof value === 'string' ? this.playAnimation(value) : value.play(); }\n supportsClipCurves(): boolean { return true; }\n cleanupSnippet(name: string): void { this.stopAnimation(name); this.sources.delete(name); this.core.cleanup_snippet(name); }\n crossfadeTo(name: string, seconds: number, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n const outgoing = [...this.current.values()].filter((playback) => !playback.source.name.startsWith('__embody_'));\n const handle = this.playAnimation(name, { ...options, fadeInSec: seconds });\n for (const playback of outgoing) if (playback.connector.getAction(playback.id)) playback.connector.fadeOut(playback.id, seconds);\n return handle;\n }\n stopAnimation(name: string): void {\n const playback = this.current.get(name);\n if (!playback) return;\n if (playback.connector.getAction(playback.id)) playback.connector.control(playback.id, { type: 'stop' });\n this.forget(playback);\n }\n stopAllAnimations(): void {\n for (const playback of [...this.playbacks.values()]) {\n if (playback.source.kind === 'compiled') continue;\n if (playback.connector.getAction(playback.id)) playback.connector.control(playback.id, { type: 'stop' });\n this.forget(playback);\n }\n }\n pauseAnimation(name: string): void { const p = this.current.get(name); if (p) p.connector.control(p.id, { type: 'pause' }); }\n resumeAnimation(name: string): void {\n const p = this.current.get(name);\n if (!p) return;\n if (p.terminal) p.replay({ ...p.options, time: p.connector.getAction(p.id)?.time ?? 0 });\n else p.connector.control(p.id, { type: 'resume' });\n }\n pauseAllAnimations(): void { for (const p of this.playbacks.values()) if (!p.terminal) p.connector.control(p.id, { type: 'pause' }); }\n resumeAllAnimations(): void { for (const name of [...this.current.keys()]) this.resumeAnimation(name); }\n updateClipParams(name: string, options: CharacterPlaybackOptions): void { const p = this.current.get(name); if (p) this.updatePlayback(p, options); }\n setAnimationSpeed(name: string, value: number): void { this.updateClipParams(name, { speed: value }); }\n setAnimationIntensity(name: string, value: number): void { this.updateClipParams(name, { intensityScale: value }); }\n setAnimationLoop(name: string, value: boolean): void { this.updateClipParams(name, { loopMode: value ? 'repeat' : 'once' }); }\n setAnimationLoopMode(name: string, value: string): void { this.updateClipParams(name, { loopMode: value }); }\n setAnimationRepeatCount(name: string, value: number | null): void { this.updateClipParams(name, { loopMode: 'repeat', repeatCount: value }); }\n setAnimationReverse(name: string, value: boolean): void { this.updateClipParams(name, { reverse: value }); }\n setAnimationBlendMode(name: string, value: string): void { this.updateClipParams(name, { blendMode: value }); }\n setAnimationEasing(name: string, value: string): void { this.validateEasing({ easing: value }); this.updateClipParams(name, { easing: value }); }\n seekAnimation(name: string, value: number): void { this.updateClipParams(name, { time: value }); }\n setAnimationTime(name: string, value: number): void { this.seekAnimation(name, value); }\n setSnippetTime(name: string, value: number): void { this.seekAnimation(name, value); }\n seekSnippet(name: string, value: number): void { this.seekAnimation(name, value); }\n seek(name: string, value: number): void { this.seekAnimation(name, value); }\n setAnimationTimeScale(value: number): void { this.requireConnector().setTimeScale(value); this.timeScale = value; }\n getAnimationState(name: string): JsonObject {\n const p = this.current.get(name);\n const action = p?.connector.getAction(p.id);\n if (!action || !p) { if (p) this.forget(p); return { name, playing: false, isPlaying: false }; }\n const playing = action.isRunning();\n return { name, actionId: p.id, playing, isPlaying: playing, paused: action.paused, completed: p.terminal,\n time: action.time, duration: action.getClip().duration, speed: action.timeScale,\n intensityScale: intensity(p.options), mixerWeight: action.getEffectiveWeight(),\n loopMode: action.loop === LoopOnce ? 'once' : action.loop === LoopPingPong ? 'pingpong' : 'repeat',\n repeatCount: Number.isFinite(action.repetitions) ? action.repetitions : null,\n blendMode: action.blendMode === AdditiveAnimationBlendMode ? 'additive' : 'replace' };\n }\n getPlayingAnimations(): string[] { return [...this.current.keys()].filter((name) => this.getAnimationState(name).playing); }\n\n private commitLive(durationMs = 0): CharacterPlaybackHandle[] {\n const connector = this.requireConnector();\n const duration = Math.max(0, durationMs) / 1000;\n const clip = parse<ClipIR>(this.core.build_live_clip('__embody_live', duration));\n const touched = new Set(parse<ClipIRTrack['target'][]>(this.core.live_command_targets_json()).map(targetKey));\n const tracks = new Map<string, ClipIRTrack>(clip.tracks.map((track) => [targetKey(track.target), track]));\n const handles: CharacterPlaybackHandle[] = [];\n for (const [key, previous] of this.liveTargets) {\n if (tracks.has(key)) continue;\n if (previous.releasing && !touched.has(key)) continue;\n const action = previous.handle.actionId && connector.getAction(previous.handle.actionId);\n if (!action || duration === 0) {\n previous.handle.stop();\n this.liveTargets.delete(key);\n continue;\n }\n // Fade this action's own contribution. Inheriting the already mixed pose\n // would blend it a second time and jump when the released track disappears.\n const nativeTrack = action.getClip().tracks[0] as NativeTrack;\n const sample = Array.from(nativeTrack.createInterpolant().evaluate(action.time));\n const released: ClipIRTrack = { ...previous.track, times: [0, duration], values: [...sample, ...sample], inheritStart: false };\n const releaseClip = { ...clip, name: previous.handle.name, tracks: [released] };\n const handle = this.handle({ name: releaseClip.name, kind: 'compiled', clip: releaseClip },\n { loopMode: 'once', finalPose: 'release', mixerWeight: action.getEffectiveWeight() }, true);\n connector.fadeOut(handle.actionId!, duration);\n const record = { track: released, handle, releasing: true };\n this.liveTargets.set(key, record);\n void handle.promise.then(() => { if (this.liveTargets.get(key) === record) this.liveTargets.delete(key); });\n handles.push(handle);\n }\n for (const [key, track] of tracks) {\n const previous = this.liveTargets.get(key);\n const endpoint = (value: ClipIRTrack) => value.values.slice(value.values.length / value.times.length * (value.times.length - 1));\n // Rust identifies semantic command destinations. Concrete targets outside\n // that command keep their native action, including an intentionally cancelled one.\n if (previous && !previous.releasing && !touched.has(key) && json(endpoint(previous.track)) === json(endpoint(track))) continue;\n const name = previous?.handle.name ?? `__embody_live_${this.nextLiveTarget++}`;\n const outgoing = previous?.handle.actionId && connector.getAction(previous.handle.actionId);\n let nativeTrack = track;\n if (duration > 0 && outgoing) {\n const start = Array.from((outgoing.getClip().tracks[0] as NativeTrack).createInterpolant().evaluate(outgoing.time));\n nativeTrack = { ...track, values: [...start, ...endpoint(track)], inheritStart: false };\n }\n const targetClip = { ...clip, name, tracks: [nativeTrack] };\n const handle = this.handle({ name, kind: 'compiled', clip: targetClip }, { loopMode: 'once', finalPose: 'hold' }, true);\n this.liveTargets.set(key, { track, handle, releasing: false });\n handles.push(handle);\n }\n return handles;\n }\n private mutateLive(mutate: () => void, durationMs = 0): CharacterPlaybackHandle[] {\n this.requireModel();\n this.core.begin_live_command();\n mutate();\n return this.commitLive(durationMs);\n }\n private transition(handles: CharacterPlaybackHandle[]): CharacterTransitionHandle {\n // A single control may own several concrete tracks. Replacement of one\n // shared target must not settle or cancel its other independent targets.\n let settled = handles.length === 0;\n const promise = Promise.all(handles.map((handle) => handle.promise)).then(() => { settled = true; });\n const control = (command: 'pause' | 'resume' | 'cancel') => {\n if (settled) return;\n for (const handle of handles) {\n const playback = handle.actionId && this.playbacks.get(handle.actionId);\n if (!playback || !playback.connector.getAction(playback.id)) continue;\n if (command === 'cancel' || !playback.terminal) handle[command]();\n }\n };\n return { promise, pause: () => control('pause'), resume: () => control('resume'), cancel: () => control('cancel') };\n }\n setAU(id: number, value: number, balance = this.core.get_au_balance(id)): void { this.mutateLive(() => this.core.set_au_signed(id, value, balance)); }\n getAU(id: number): number { return this.core.get_au(id); }\n getAUBalance(id: number): number { return this.core.get_au_balance(id); }\n getAUDescriptors(): AUDescriptor[] { return parse(this.core.get_au_descriptors_json()); }\n setContinuum(negative: number, positive: number, value: number, balance = NaN): void { this.mutateLive(() => this.core.set_continuum(negative, positive, value, balance)); }\n getContinuum(negative: number, positive: number): number { return this.core.get_continuum(negative, positive); }\n transitionAU(id: number, value: number, durationMs = 200, balance = this.core.get_au_balance(id)): CharacterTransitionHandle { return this.transition(this.mutateLive(() => this.core.set_au_signed(id, value, balance), durationMs)); }\n setViseme(index: number, value: number, jawScale = 1): void { this.mutateLive(() => { this.core.set_viseme(index, value); this.core.set_viseme_jaw_scale(index, jawScale); }); }\n getViseme(index: number): number { return this.core.get_viseme(index); }\n getVisemeJawScale(index: number): number { return this.core.get_viseme_jaw_scale(index); }\n setVisemeById(id: string, value: number, jawScale = 1): void { const index = this.core.viseme_slot_index(id); if (index < 0) throw new Error(`Unknown viseme: ${id}`); this.setViseme(index, value, jawScale); }\n transitionViseme(index: number, value: number, durationMs = 80, jawScale = 1): CharacterTransitionHandle { return this.transition(this.mutateLive(() => { this.core.set_viseme(index, value); this.core.set_viseme_jaw_scale(index, jawScale); }, durationMs)); }\n transitionVisemeById(id: string, value: number, durationMs = 80, jawScale = 1): CharacterTransitionHandle { const index = this.core.viseme_slot_index(id); if (index < 0) return this.transition([]); return this.transitionViseme(index, value, durationMs, jawScale); }\n setAUMixWeight(id: number, value: number): void {\n const weight = Math.max(0, Math.min(1, value));\n this.mutateLive(() => this.core.set_au_mix_weight(id, weight));\n (this.profile.auMixDefaults ??= {})[id] = weight;\n (this.profileSource.auMixDefaults ??= {})[id] = weight;\n }\n getAUMixWeight(id: number): number { return this.core.get_au_mix_weight(id); }\n hasLeftRightBones(id: number): boolean { return this.core.has_left_right_bones(id); }\n setMorph(key: string | number, value: number, meshNames: string[] = []): void { this.mutateLive(() => { if (typeof key === 'number') this.core.set_morph_index(key, value, json(meshNames)); else this.core.set_morph(key, value, json(meshNames)); }); }\n setMorphOnMeshes(meshNames: string[], key: string | number, value: number): void { this.setMorph(key, value, meshNames); }\n releaseMorph(key: string | number, meshNames: string[] = []): void { this.mutateLive(() => { if (typeof key === 'number') this.core.release_morph_index(key, json(meshNames)); else this.core.release_morph(key, json(meshNames)); }); }\n transitionMorph(key: string | number, value: number, durationMs = 120, meshNames: string[] = []): CharacterTransitionHandle { return this.transition(this.mutateLive(() => { if (typeof key === 'number') this.core.set_morph_index(key, value, json(meshNames)); else this.core.set_morph(key, value, json(meshNames)); }, durationMs)); }\n\n getMorphTargets(): Record<string, string[]> { return Object.fromEntries(this.meshes.map((mesh) => [mesh.name, Object.keys(mesh.morphTargetDictionary ?? {}).sort()])); }\n getMorphTargetIndices(): Record<string, { name: string; index: number }[]> { return Object.fromEntries(this.meshes.map((mesh) => [mesh.name, Object.entries(mesh.morphTargetDictionary ?? {}).map(([name, index]) => ({ name, index })).sort((a, b) => a.index - b.index)])); }\n addMorphTarget(target: Parameters<ThreeFrameApplier['addMorphTarget']>[1], options?: Parameters<ThreeFrameApplier['addMorphTarget']>[2]): number { const index = this.applier.addMorphTarget(this.requireModel(), target, options); this.bindModel(); return index; }\n addMorphTargets(targets: Parameters<ThreeFrameApplier['addMorphTargets']>[1], options?: Parameters<ThreeFrameApplier['addMorphTargets']>[2]): Record<string, number> { const result = this.applier.addMorphTargets(this.requireModel(), targets, options); this.bindModel(); return result; }\n private meshCategory(mesh: Object3D): string { return this.profile.meshes?.[mesh.name]?.category ?? 'other'; }\n getMeshList(): JsonObject[] { return (this.inspection?.allMeshes ?? []).map((mesh) => ({ name: mesh.name, visible: mesh.visible, morphCount: mesh.morphTargetInfluences?.length ?? 0, category: this.meshCategory(mesh) })); }\n getBones(): ThreeModelInspection['bones'] { return this.bones; }\n private meshProfile(name: string): JsonObject { return (this.profile.meshes ??= {})[name] ??= { category: 'other' }; }\n setMeshVisible(name: string, visible: boolean): void { this.applier.setMeshVisible(this.requireModel(), name, visible); this.meshProfile(name).visible = visible; }\n highlightMesh(name: string | null, color?: number, value?: number): void { this.applier.highlightMesh(this.requireModel(), name, color, value); }\n getMeshMaterialConfig(name: string): Record<string, unknown> | null { return this.applier.getMeshMaterialConfig(this.requireModel(), name); }\n setMeshMaterialConfig(name: string, value: Parameters<ThreeFrameApplier['setMeshMaterialConfig']>[2]): void { this.applier.setMeshMaterialConfig(this.requireModel(), name, value); const entry = this.meshProfile(name); entry.material = { ...entry.material, ...value }; }\n\n registerHairObjects(objects: Object3D[]): { name: string; isMesh: boolean; isEyebrow: boolean }[] {\n this.hairObjects.clear();\n for (const object of objects) if ((object as Mesh).isMesh) this.hairObjects.set(object.name, object as Mesh);\n for (const category of ['hair', 'eyebrow']) {\n const mesh = [...this.hairObjects.values()].find((object) => this.meshCategory(object) === category);\n const material: any = mesh && (Array.isArray(mesh.material) ? mesh.material[0] : mesh.material);\n if (material) this.hairAppearance[`${category}Color`] = { ...this.hairAppearance[`${category}Color`], baseColor: material.color ? `#${material.color.getHexString()}` : '#000000', emissive: material.emissive ? `#${material.emissive.getHexString()}` : '#000000', emissiveIntensity: material.emissiveIntensity ?? 0 };\n }\n this.restartHair();\n return [...this.hairObjects.values()].map((mesh) => ({ name: mesh.name, isMesh: true, isEyebrow: this.meshCategory(mesh) === 'eyebrow' }));\n }\n getRegisteredHairObjects(): Object3D[] { return [...this.hairObjects.values()]; }\n getHairMorphTargets(name?: string): string[] { const meshes = name ? [this.hairObjects.get(name)] : [...this.hairObjects.values()]; return [...new Set(meshes.flatMap((mesh) => Object.keys(mesh?.morphTargetDictionary ?? {})))].sort(); }\n getHairAppearance(): JsonObject { return copy(this.hairAppearance); }\n private setHairAppearance(category: 'hair' | 'eyebrow', value: string | JsonObject): void {\n const key = `${category}Color`;\n const next = parse(this.wasm.normalize_hair_color_appearance_json(json(value), json(this.hairAppearance[key])));\n this.hairAppearance[key] = next;\n this.applier.applyHairAppearance([...this.hairObjects.values()].filter((mesh) => this.meshCategory(mesh) === category), next);\n }\n setHairColor(value: string | JsonObject): void { this.setHairAppearance('hair', value); }\n setEyebrowColor(value: string | JsonObject): void { this.setHairAppearance('eyebrow', value); }\n setHairBaseColor(value: string): void { this.setHairColor({ baseColor: value }); }\n setEyebrowBaseColor(value: string): void { this.setEyebrowColor({ baseColor: value }); }\n setHairGlow(color: string, value: number): void { this.setHairColor({ emissive: color, emissiveIntensity: value }); }\n setEyebrowGlow(color: string, value: number): void { this.setEyebrowColor({ emissive: color, emissiveIntensity: value }); }\n setHairOutline(value: { show: boolean; color?: string; opacity?: number }): void { Object.assign(this.hairAppearance, { showOutline: value.show }, value.color ? { outlineColor: value.color } : {}, value.opacity !== undefined ? { outlineOpacity: value.opacity } : {}); }\n private restartHair(): void {\n for (const name of [...this.current.keys()]) if (name.startsWith('__embody_hair')) this.stopAnimation(name);\n if (!this.hairConfig.enabled || !this.hairObjects.size || !this.connector) return;\n if (this.hairConfig.idleSwayAmount > 0 || this.hairConfig.windStrength > 0) {\n const curves = parse(this.wasm.build_hair_idle_curves(json(this.hairConfig), this.hairConfig.idleClipDuration));\n if (Object.keys(curves).length) this.playSnippet('__embody_hair_idle', curves, { loopMode: 'repeat', meshNames: [...this.hairObjects.keys()], source: 'hair', blendMode: 'additive' });\n }\n }\n setHairPhysicsEnabled(value: boolean): void { this.setHairPhysicsConfig({ enabled: value }); }\n isHairPhysicsEnabled(): boolean { return !!this.hairConfig.enabled; }\n setHairPhysicsConfig(value: JsonObject): void { this.hairConfig = parse(this.core.set_hair_config_json(json(value))); this.restartHair(); }\n getHairPhysicsConfig(): JsonObject { return copy(this.hairConfig); }\n validateHairMorphTargets(): string[] {\n return parse(this.core.get_missing_hair_morph_targets_json(json(this.getHairMorphTargets())));\n }\n applyHairStateToObject(name: string, state: JsonObject): void {\n const mesh = this.hairObjects.get(name);\n if (!mesh) return;\n if (state.visible !== undefined) mesh.visible = state.visible;\n if (state.scale) mesh.scale.set(state.scale.x, state.scale.y, state.scale.z);\n if (state.position) mesh.position.set(state.position.x, state.position.y, state.position.z);\n if (state.color) this.applier.applyHairAppearance([mesh], state.color);\n }\n private authoredHeadMotion(clip: AnimationClip): { horizontal: number; vertical: number; pitch: number } | undefined {\n if (!this.hairConfig.enabled || clip.name.startsWith('__embody_hair') || !this.hairObjects.size) return undefined;\n // Serialize native bindings and sample storage only. The core resolves the\n // character's head role and compiles its configured hair response.\n const tracks: Array<{ boneName: string; current: number[]; reference: number[]; samples: number[][] }> = [];\n for (const track of clip.tracks) {\n if (track.ValueTypeName !== 'quaternion') continue;\n const parsed = PropertyBinding.parseTrackName(track.name);\n let object = PropertyBinding.findNode(this.requireModel(), parsed.nodeName) as Object3D | undefined;\n if (parsed.objectName === 'bones' && object) {\n const skeleton = (object as Object3D & { skeleton?: { bones: Object3D[] } }).skeleton;\n object = skeleton?.bones.find((bone) => bone.name === String(parsed.objectIndex)) ?? skeleton?.bones[Number(parsed.objectIndex)];\n }\n if (!object) continue;\n const cubic = (track as NativeTrack).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true;\n const stride = track.getValueSize();\n const reference = this.restValues(track);\n if (!reference) continue;\n const samples: number[][] = [];\n for (let index = 0; index < track.times.length; index += 1) {\n const offset = index * stride + (cubic ? 4 : 0);\n samples.push(Array.from(track.values.subarray(offset, offset + 4)));\n }\n tracks.push({ boneName: object.name, current: object.quaternion.toArray(), reference, samples });\n }\n return parse(this.core.resolve_hair_motion_json(json(tracks), clip.blendMode === AdditiveAnimationBlendMode)) ?? undefined;\n }\n private setHairGravity(pitch: number, durationSeconds: number): void {\n const clip = parse<ClipIR>(this.core.build_hair_gravity_clip('__embody_hair_gravity', pitch, durationSeconds, json({ meshNames: [...this.hairObjects.keys()], source: 'hair' })));\n if (!clip.tracks.length) return;\n this.handle({ name: clip.name, kind: 'compiled', clip }, { loopMode: 'once', finalPose: 'hold', blendMode: 'additive' }, true);\n }\n playHairImpulse(horizontal: number, vertical: number): CharacterPlaybackHandle | undefined {\n if (!this.hairConfig.enabled || !this.hairObjects.size) return undefined;\n const curves = parse(this.wasm.build_hair_impulse_curves(json(this.hairConfig), this.hairConfig.impulseClipDuration, horizontal, vertical));\n if (!Object.keys(curves).length) return undefined;\n return this.playSnippet('__embody_hair_impulse', curves, { loopMode: 'once', finalPose: 'release', meshNames: [...this.hairObjects.keys()], source: 'hair', blendMode: 'additive' });\n }\n start(): void { this.assertAlive(); this.rendering = true; this.connector?.setRendering(true); }\n stop(): void { this.assertAlive(); this.rendering = false; this.connector?.setRendering(false); }\n clear(): void { this.mutateLive(() => this.core.clear()); }\n resetToNeutral(): void { this.clear(); }\n dispose(): void {\n if (this.disposed) return;\n this.connector?.dispose();\n this.core.free();\n this.playbacks.clear();\n this.current.clear();\n this.sources.clear();\n this.hairObjects.clear();\n this.meshes.length = 0;\n this.meshByName.clear();\n this.bones = {};\n this.liveTargets.clear();\n this.connector = undefined;\n this.inspection = undefined;\n this.boundModel = undefined;\n this.disposed = true;\n }\n}\n\nexport function createRustEmbodyHostUnbound(config: RustEmbodyHostConfig = {}): Embody { return new Embody(config); }\nexport async function createRustEmbodyHost(model: Object3D, config: RustEmbodyHostConfig = {}): Promise<Embody> {\n const character = await Embody.create(config);\n try { character.onReady({ model, meshes: config.meshes, referencePose: config.referencePose }); return character; }\n catch (error) { character.dispose(); throw error; }\n}\n","// CSS gradients need no extra renderer resources or animation loop.\nexport const SCENE_INK_BASE_COLOR = '#29333b';\nexport const SCENE_INK_BASE_GRADIENT =\n 'radial-gradient(ellipse at 50% 42%, #46535c 0%, #35414a 42%, #29333b 76%, #252e35 100%)';\n\nexport type SceneInkCssPalette = readonly [string, string, string];\n\nconst DEFAULT_PALETTE: SceneInkCssPalette = ['#7cb8b2', '#627888', '#8b989f'];\n\nexport function createSceneInkBackgroundCss(palette: SceneInkCssPalette = DEFAULT_PALETTE): string {\n const [a, b, c] = palette;\n // Overlapping soft ellipses give the ink irregular edges without a noise\n // shader, blur filter, canvas, pointer listener or frame-by-frame repaint.\n return [\n `radial-gradient(ellipse 46% 62% at calc(20% + var(--scene-ink-shift-x, 0%)) 30%, color-mix(in srgb, ${a} 24%, transparent), transparent 78%)`,\n `radial-gradient(ellipse 32% 44% at 34% calc(52% + var(--scene-ink-shift-y, 0%)), color-mix(in srgb, ${a} 12%, transparent), transparent 82%)`,\n `radial-gradient(ellipse 48% 60% at calc(82% - var(--scene-ink-shift-x, 0%)) 62%, color-mix(in srgb, ${b} 22%, transparent), transparent 80%)`,\n `radial-gradient(ellipse 28% 38% at 68% calc(26% - var(--scene-ink-shift-y, 0%)), color-mix(in srgb, ${b} 10%, transparent), transparent 82%)`,\n `radial-gradient(ellipse 50% 38% at 38% calc(78% + var(--scene-ink-shift-y, 0%)), color-mix(in srgb, ${c} 18%, transparent), transparent 82%)`,\n SCENE_INK_BASE_GRADIENT,\n ].join(', ');\n}\n\nexport const DEFAULT_SCENE_INK_BACKGROUND = createSceneInkBackgroundCss();\n","import * as THREE from 'three';\nimport { createSceneInkBackgroundCss, type SceneInkCssPalette } from './sceneInkBackgroundStyle';\n\nexport type SceneInkBackgroundPalette = readonly [\n THREE.ColorRepresentation,\n THREE.ColorRepresentation,\n THREE.ColorRepresentation,\n];\n\nexport type SceneInkBackground = {\n setPalette: (palette?: SceneInkBackgroundPalette | null) => void;\n dispose: () => void;\n};\n\nconst toCssColor = (tone: THREE.ColorRepresentation) => `#${new THREE.Color(tone).getHexString()}`;\n\nexport function createSceneInkBackground(\n onBackgroundChange?: (background: string) => void,\n): SceneInkBackground {\n let currentBackground = '';\n let disposed = false;\n\n const applyBackground = (palette?: SceneInkBackgroundPalette | null) => {\n if (disposed) return;\n const colors: SceneInkCssPalette | undefined = palette\n ? [toCssColor(palette[0]), toCssColor(palette[1]), toCssColor(palette[2])]\n : undefined;\n const background = createSceneInkBackgroundCss(colors);\n if (background === currentBackground) return;\n currentBackground = background;\n onBackgroundChange?.(background);\n };\n\n applyBackground();\n\n return {\n setPalette: applyBackground,\n dispose: () => {\n if (disposed) return;\n disposed = true;\n },\n };\n}\n","import * as THREE from 'three';\nimport type { SceneInkBackgroundPalette } from './sceneInkBackground';\n\ntype PaletteMaterial = THREE.Material & {\n color?: THREE.Color;\n emissive?: THREE.Color;\n map?: THREE.Texture | null;\n emissiveMap?: THREE.Texture | null;\n};\n\ntype WeightedColor = {\n color: THREE.Color;\n score: number;\n};\n\ntype CachedPalette = {\n materialPalette?: SceneInkBackgroundPalette | null;\n texturePalette?: SceneInkBackgroundPalette | null;\n texturePalettePromise?: Promise<SceneInkBackgroundPalette | null>;\n};\n\nconst paletteCache = new Map<string, CachedPalette>();\nconst MAX_TEXTURE_SAMPLE_SIZE = 10;\nconst MIN_SAMPLE_SATURATION = 0.04;\nconst MIN_CANDIDATE_DISTANCE = 0.12;\n\n/** Reuse the finished palette on character switches without resampling textures. */\nexport function readCachedCharacterPalette(cacheKey: string): SceneInkBackgroundPalette | null {\n const cached = paletteCache.get(cacheKey);\n return cached?.texturePalette ?? cached?.materialPalette ?? null;\n}\n\nexport function resolveCharacterMaterialPalette(\n model: THREE.Object3D,\n cacheKey: string,\n): SceneInkBackgroundPalette | null {\n const cached = getCachedPalette(cacheKey);\n if (cached.materialPalette !== undefined) {\n return cached.materialPalette;\n }\n\n const samples = collectPaletteSamples(model, false);\n const palette = buildPalette(samples);\n cached.materialPalette = palette;\n return palette;\n}\n\nexport function resolveCharacterTexturePalette(\n model: THREE.Object3D,\n cacheKey: string,\n): Promise<SceneInkBackgroundPalette | null> {\n const cached = getCachedPalette(cacheKey);\n if (cached.texturePalette !== undefined) {\n return Promise.resolve(cached.texturePalette);\n }\n if (cached.texturePalettePromise) {\n return cached.texturePalettePromise;\n }\n\n cached.texturePalettePromise = schedulePaletteExtraction(() => {\n const samples = collectPaletteSamples(model, true);\n const palette = buildPalette(samples);\n cached.texturePalette = palette;\n return palette;\n });\n\n return cached.texturePalettePromise;\n}\n\nfunction getCachedPalette(cacheKey: string): CachedPalette {\n const cached = paletteCache.get(cacheKey) ?? {};\n paletteCache.set(cacheKey, cached);\n return cached;\n}\n\nfunction schedulePaletteExtraction(\n extractPalette: () => SceneInkBackgroundPalette | null,\n): Promise<SceneInkBackgroundPalette | null> {\n return new Promise((resolve) => {\n const run = () => resolve(extractPalette());\n\n if (typeof window !== 'undefined' && 'requestIdleCallback' in window) {\n window.requestIdleCallback(run, { timeout: 700 });\n return;\n }\n\n globalThis.setTimeout(run, 0);\n });\n}\n\nfunction collectPaletteSamples(model: THREE.Object3D, includeTextures: boolean): WeightedColor[] {\n const samples: WeightedColor[] = [];\n const seenMaterials = new Set<string>();\n const seenTextures = new Set<string>();\n\n model.traverse((object) => {\n const mesh = object as THREE.Mesh;\n if (!mesh.isMesh || !mesh.material) {\n return;\n }\n\n const materials = Array.isArray(mesh.material) ? mesh.material : [mesh.material];\n for (const material of materials) {\n if (!material || seenMaterials.has(material.uuid)) {\n continue;\n }\n seenMaterials.add(material.uuid);\n collectMaterialSamples(material as PaletteMaterial, samples, seenTextures, includeTextures);\n }\n });\n\n return samples;\n}\n\nfunction collectMaterialSamples(\n material: PaletteMaterial,\n samples: WeightedColor[],\n seenTextures: Set<string>,\n includeTextures: boolean,\n): void {\n pushColorSample(samples, material.color, 1.25);\n pushColorSample(samples, material.emissive, 0.8);\n\n if (!includeTextures) {\n return;\n }\n\n if (material.map && !seenTextures.has(material.map.uuid)) {\n seenTextures.add(material.map.uuid);\n samples.push(...sampleTexture(material.map));\n }\n\n if (material.emissiveMap && !seenTextures.has(material.emissiveMap.uuid)) {\n seenTextures.add(material.emissiveMap.uuid);\n samples.push(...sampleTexture(material.emissiveMap).map(({ color, score }) => ({\n color,\n score: score * 0.65,\n })));\n }\n}\n\nfunction pushColorSample(samples: WeightedColor[], color: THREE.Color | undefined, score: number): void {\n if (!color || !isUsableColor(color)) {\n return;\n }\n\n samples.push({\n color: color.clone(),\n score,\n });\n}\n\nfunction sampleTexture(texture: THREE.Texture): WeightedColor[] {\n if (typeof document === 'undefined') {\n return [];\n }\n\n const image = texture.image as CanvasImageSource | undefined;\n const imageSize = getImageSize(image);\n if (!image || !imageSize) {\n return [];\n }\n\n const canvas = document.createElement('canvas');\n const width = Math.min(MAX_TEXTURE_SAMPLE_SIZE, imageSize.width);\n const height = Math.min(MAX_TEXTURE_SAMPLE_SIZE, imageSize.height);\n canvas.width = width;\n canvas.height = height;\n\n const context = canvas.getContext('2d', { willReadFrequently: true });\n if (!context) {\n return [];\n }\n\n try {\n context.drawImage(image, 0, 0, width, height);\n const data = context.getImageData(0, 0, width, height).data;\n const samples: WeightedColor[] = [];\n\n for (let index = 0; index < data.length; index += 4) {\n const alpha = data[index + 3] / 255;\n if (alpha < 0.18) {\n continue;\n }\n\n const color = new THREE.Color(\n data[index] / 255,\n data[index + 1] / 255,\n data[index + 2] / 255,\n );\n if (!isUsableColor(color)) {\n continue;\n }\n\n const hsl = { h: 0, s: 0, l: 0 };\n color.getHSL(hsl);\n samples.push({\n color,\n score: alpha * (0.4 + hsl.s * 1.3),\n });\n }\n\n return samples;\n } catch {\n return [];\n }\n}\n\nfunction getImageSize(image: CanvasImageSource | undefined): { width: number; height: number } | null {\n if (!image || !('width' in image) || !('height' in image)) {\n return null;\n }\n\n const width = Number(image.width);\n const height = Number(image.height);\n if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) {\n return null;\n }\n\n return { width, height };\n}\n\nfunction isUsableColor(color: THREE.Color): boolean {\n const hsl = { h: 0, s: 0, l: 0 };\n color.getHSL(hsl);\n return hsl.l > 0.05 && hsl.l < 0.94 && hsl.s >= MIN_SAMPLE_SATURATION;\n}\n\nfunction buildPalette(samples: WeightedColor[]): SceneInkBackgroundPalette | null {\n if (samples.length === 0) {\n return null;\n }\n\n const buckets = new Map<number, { color: THREE.Color; score: number }>();\n for (const sample of samples) {\n const hsl = { h: 0, s: 0, l: 0 };\n sample.color.getHSL(hsl);\n const bucketId = Math.floor(hsl.h * 18);\n const bucket = buckets.get(bucketId) ?? { color: new THREE.Color(0, 0, 0), score: 0 };\n bucket.color.r += sample.color.r * sample.score;\n bucket.color.g += sample.color.g * sample.score;\n bucket.color.b += sample.color.b * sample.score;\n bucket.score += sample.score;\n buckets.set(bucketId, bucket);\n }\n\n const candidates = Array.from(buckets.values())\n .filter((bucket) => bucket.score > 0)\n .map((bucket) => ({\n color: massageBackgroundTone(bucket.color.multiplyScalar(1 / bucket.score)),\n score: bucket.score,\n }))\n .sort((a, b) => b.score - a.score);\n\n const selected: THREE.Color[] = [];\n for (const candidate of candidates) {\n const distinctEnough = selected.every((color) => colorDistance(color, candidate.color) >= MIN_CANDIDATE_DISTANCE);\n if (!distinctEnough) {\n continue;\n }\n\n selected.push(candidate.color);\n if (selected.length === 3) {\n break;\n }\n }\n\n if (selected.length === 0) {\n return null;\n }\n\n while (selected.length < 3) {\n selected.push(createCompanionTone(selected[0], selected.length));\n }\n\n return [selected[0], selected[1], selected[2]];\n}\n\nfunction massageBackgroundTone(color: THREE.Color): THREE.Color {\n const hsl = { h: 0, s: 0, l: 0 };\n color.getHSL(hsl);\n const saturation = THREE.MathUtils.clamp(Math.max(hsl.s * 1.35, 0.46), 0.46, 0.82);\n const lightness = THREE.MathUtils.clamp(hsl.l + 0.08, 0.42, 0.66);\n return new THREE.Color().setHSL(hsl.h, saturation, lightness);\n}\n\nfunction createCompanionTone(source: THREE.Color, index: number): THREE.Color {\n const hsl = { h: 0, s: 0, l: 0 };\n source.getHSL(hsl);\n const hueOffset = index === 1 ? 0.075 : -0.065;\n return new THREE.Color().setHSL(\n THREE.MathUtils.euclideanModulo(hsl.h + hueOffset, 1),\n THREE.MathUtils.clamp(hsl.s * (index === 1 ? 0.92 : 0.82), 0.38, 0.76),\n THREE.MathUtils.clamp(hsl.l + (index === 1 ? 0.04 : -0.03), 0.38, 0.68),\n );\n}\n\nfunction colorDistance(a: THREE.Color, b: THREE.Color): number {\n const dr = a.r - b.r;\n const dg = a.g - b.g;\n const db = a.b - b.b;\n return Math.sqrt(dr * dr + dg * dg + db * db);\n}\n","import { Box3 } from 'three';\nimport type { AnimationClip, Mesh, Object3D, Scene } from 'three';\nimport { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';\nimport { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\nimport type { GLTF } from 'three/examples/jsm/loaders/GLTFLoader.js';\n\nexport type CharacterModelLoadResult = { model: Object3D; meshes: Mesh[]; animations: AnimationClip[]; gltf: GLTF | null };\nexport type CharacterModelLoadOptions = { onProgress?: (progress: number) => void; castShadows?: boolean; dracoDecoderPath?: string };\nexport type CharacterModelTransform = { modelOffset?: { x?: number; y?: number; z?: number }; modelRotation?: { x?: number; y?: number; z?: number }; modelScale?: number; modelGroundClearance?: number };\n\nlet draco: DRACOLoader | null = null;\nlet dracoPath = '';\nlet gltfLoader: GLTFLoader | null = null;\nlet gltfLoaderUsesDraco = false;\nlet fbxLoader: FBXLoader | null = null;\n\nconst getGltfLoader = (dracoDecoderPath?: string) => {\n const wantsDraco = typeof dracoDecoderPath === 'string' && dracoDecoderPath.length > 0;\n const normalizedPath = wantsDraco\n ? (dracoDecoderPath!.endsWith('/') ? dracoDecoderPath! : `${dracoDecoderPath!}/`)\n : '';\n\n // Rebuild only when Draco enablement/path changes. Non-Draco assets must not\n // pay for constructing/attaching DRACOLoader at all.\n if (!gltfLoader || gltfLoaderUsesDraco !== wantsDraco || (wantsDraco && normalizedPath !== dracoPath)) {\n draco?.dispose();\n draco = null;\n dracoPath = normalizedPath;\n gltfLoaderUsesDraco = wantsDraco;\n gltfLoader = new GLTFLoader();\n if (wantsDraco) {\n draco = new DRACOLoader().setDecoderPath(normalizedPath).setDecoderConfig({ type: 'wasm' });\n gltfLoader.setDRACOLoader(draco);\n }\n }\n return gltfLoader;\n};\n\nconst prepare = (model: Object3D, castShadows = true) => {\n const meshes: Mesh[] = [];\n model.traverse((object: any) => {\n if (!object.isMesh) return;\n if (castShadows) object.castShadow = true;\n if (object.morphTargetInfluences?.length) meshes.push(object);\n });\n return meshes;\n};\n\nconst progress = (listener?: (progress: number) => void) => {\n let last = -1;\n return (event: ProgressEvent) => {\n if (!listener || !event.lengthComputable) return;\n const next = Math.min(100, Math.max(0, Math.round(event.loaded / event.total * 100)));\n if (next !== last) { last = next; listener(next); }\n };\n};\n\nexport function applyCharacterModelTransform(model: Object3D, value: CharacterModelTransform = {}) {\n if (value.modelOffset) model.position.set(value.modelOffset.x ?? 0, value.modelOffset.y ?? 0, value.modelOffset.z ?? 0);\n if (value.modelRotation) model.rotation.set(...(['x', 'y', 'z'] as const).map((axis) => (value.modelRotation?.[axis] ?? 0) * Math.PI / 180) as [number, number, number]);\n if (Number.isFinite(value.modelScale) && (value.modelScale ?? 0) > 0) model.scale.setScalar(value.modelScale!);\n if (Number.isFinite(value.modelGroundClearance)) { model.updateMatrixWorld(true); const min = new Box3().setFromObject(model).min.y; if (Number.isFinite(min) && min < value.modelGroundClearance!) model.position.y += value.modelGroundClearance! - min; }\n}\n\nexport function disposeCharacterModel(scene: Scene | null, model: Object3D) {\n scene?.remove(model);\n model.traverse((object: any) => {\n object.geometry?.dispose?.();\n for (const material of object.material ? (Array.isArray(object.material) ? object.material : [object.material]) : []) {\n for (const value of Object.values(material) as any[]) if (value?.isTexture) value.dispose?.();\n material.dispose?.();\n }\n });\n}\n\nexport function loadCharacterModel(url: string, options: CharacterModelLoadOptions = {}): Promise<CharacterModelLoadResult> {\n const done = (model: Object3D, animations: AnimationClip[], gltf: GLTF | null) => ({ model, meshes: prepare(model, options.castShadows), animations, gltf });\n if (/\\.fbx(?:\\?|$)/i.test(url)) {\n fbxLoader ??= new FBXLoader();\n return new Promise((resolve, reject) => fbxLoader!.load(url, (model) => resolve(done(model, model.animations ?? [], null)), progress(options.onProgress), reject));\n }\n const loader = getGltfLoader(options.dracoDecoderPath);\n return new Promise((resolve, reject) => loader.load(url, (gltf) => resolve(done(gltf.scene, gltf.animations ?? [], gltf)), progress(options.onProgress), reject));\n}\n\nexport function parseCharacterModel(data: ArrayBuffer, resourcePath = '', options: CharacterModelLoadOptions = {}): Promise<CharacterModelLoadResult> {\n const loader = getGltfLoader(options.dracoDecoderPath);\n return new Promise((resolve, reject) => loader.parse(data, resourcePath, (gltf) => resolve({ model: gltf.scene, meshes: prepare(gltf.scene, options.castShadows), animations: gltf.animations ?? [], gltf }), reject));\n}\n","import * as THREE from 'three';\n\nconst THREE_RENDERED_MORPH_SEMANTICS = ['position', 'normal', 'color'] as const;\ntype ThreeRenderedMorphSemantic = typeof THREE_RENDERED_MORPH_SEMANTICS[number];\ntype ThreeMorphAttribute = THREE.BufferAttribute | THREE.InterleavedBufferAttribute;\n\nexport interface CharacterMorphLayoutRepair {\n meshName: string;\n paddedChannels: Partial<Record<ThreeRenderedMorphSemantic, number>>;\n removedEmptyChannels: ThreeRenderedMorphSemantic[];\n paddedInfluences: number;\n}\n\nfunction resolveMorphTargetCount(mesh: THREE.Mesh): number {\n const morphAttributes = mesh.geometry.morphAttributes;\n const attributeCount = THREE_RENDERED_MORPH_SEMANTICS.reduce(\n (count, semantic) => Math.max(count, morphAttributes[semantic]?.length ?? 0),\n 0,\n );\n const influenceCount = mesh.morphTargetInfluences?.length ?? 0;\n const dictionaryCount = Object.values(mesh.morphTargetDictionary ?? {}).reduce((count, index) => {\n if (!Number.isInteger(index) || index < 0) {\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" has an invalid morph target dictionary index: ${index}.`,\n );\n }\n return Math.max(count, index + 1);\n }, 0);\n\n return Math.max(attributeCount, influenceCount, dictionaryCount);\n}\n\nfunction createNeutralMorphAttribute(\n mesh: THREE.Mesh,\n semantic: ThreeRenderedMorphSemantic,\n existingAttributes: ThreeMorphAttribute[],\n targetIndex: number,\n): THREE.BufferAttribute {\n const geometry = mesh.geometry;\n const baseAttribute = geometry.getAttribute(semantic);\n const template = baseAttribute ?? existingAttributes.find(Boolean);\n if (!template) {\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" cannot repair morph ${semantic}[${targetIndex}] `\n + 'because it has no base or existing attribute to copy.',\n );\n }\n\n const neutral = template.clone();\n if (geometry.morphTargetsRelative || !baseAttribute) {\n for (let vertexIndex = 0; vertexIndex < neutral.count; vertexIndex += 1) {\n for (let component = 0; component < neutral.itemSize; component += 1) {\n neutral.setComponent(vertexIndex, component, 0);\n }\n }\n }\n\n const targetName = Object.entries(mesh.morphTargetDictionary ?? {})\n .find(([, index]) => index === targetIndex)?.[0];\n neutral.name = targetName ?? '';\n return neutral;\n}\n\n/** Repair recoverable channel holes before Three.js builds its morph texture. */\nexport function normalizeRenderableCharacterMorphAttributes(\n model: THREE.Object3D,\n): CharacterMorphLayoutRepair[] {\n const repairs: CharacterMorphLayoutRepair[] = [];\n\n model.traverse((object) => {\n const mesh = object as THREE.Mesh;\n if (!mesh.isMesh || !mesh.geometry) return;\n\n const morphAttributes = mesh.geometry.morphAttributes;\n const removedEmptyChannels: ThreeRenderedMorphSemantic[] = [];\n for (const semantic of THREE_RENDERED_MORPH_SEMANTICS) {\n if (semantic !== 'position' && morphAttributes[semantic]?.length === 0) {\n delete morphAttributes[semantic];\n removedEmptyChannels.push(semantic);\n }\n }\n\n const targetCount = resolveMorphTargetCount(mesh);\n if (targetCount === 0) {\n if (morphAttributes.position?.length === 0) {\n delete morphAttributes.position;\n removedEmptyChannels.push('position');\n }\n if (removedEmptyChannels.length > 0) {\n repairs.push({\n meshName: mesh.name || mesh.uuid,\n paddedChannels: {},\n removedEmptyChannels,\n paddedInfluences: 0,\n });\n }\n return;\n }\n\n const positionCount = mesh.geometry.getAttribute('position')?.count;\n if (!positionCount) {\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" has morph targets but no base position attribute.`,\n );\n }\n\n const paddedChannels: Partial<Record<ThreeRenderedMorphSemantic, number>> = {};\n for (const semantic of THREE_RENDERED_MORPH_SEMANTICS) {\n let attributes = morphAttributes[semantic];\n if (!attributes) {\n if (semantic !== 'position') continue;\n attributes = [];\n morphAttributes.position = attributes;\n }\n\n const baseAttribute = mesh.geometry.getAttribute(semantic);\n const referenceAttribute = baseAttribute ?? attributes.find(Boolean);\n const expectedItemSize = referenceAttribute?.itemSize;\n for (let targetIndex = 0; targetIndex < targetCount; targetIndex += 1) {\n const attribute = attributes[targetIndex];\n if (!attribute) {\n attributes[targetIndex] = createNeutralMorphAttribute(\n mesh,\n semantic,\n attributes,\n targetIndex,\n );\n paddedChannels[semantic] = (paddedChannels[semantic] ?? 0) + 1;\n continue;\n }\n\n if (attribute.count !== positionCount || attribute.itemSize !== expectedItemSize) {\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" has an invalid morph ${semantic}[${targetIndex}] `\n + `(count=${attribute.count}, itemSize=${attribute.itemSize}; `\n + `expected count=${positionCount}, itemSize=${expectedItemSize}).`,\n );\n }\n }\n }\n\n const influences = mesh.morphTargetInfluences ?? [];\n const paddedInfluences = targetCount - influences.length;\n while (influences.length < targetCount) {\n influences.push(0);\n }\n mesh.morphTargetInfluences = influences;\n\n if (\n removedEmptyChannels.length > 0\n || Object.keys(paddedChannels).length > 0\n || paddedInfluences > 0\n ) {\n repairs.push({\n meshName: mesh.name || mesh.uuid,\n paddedChannels,\n removedEmptyChannels,\n paddedInfluences,\n });\n }\n });\n\n return repairs;\n}\n\nexport function assertRenderableCharacterMorphAttributes(model: THREE.Object3D): void {\n model.traverse((object) => {\n const mesh = object as THREE.Mesh;\n if (!mesh.isMesh) return;\n\n const morphAttributes = mesh.geometry?.morphAttributes;\n const primary = morphAttributes?.position\n ?? morphAttributes?.normal\n ?? morphAttributes?.color;\n const targetCount = primary?.length ?? 0;\n if (targetCount === 0) return;\n\n const positionCount = mesh.geometry.getAttribute('position')?.count;\n const invalidSemantics = THREE_RENDERED_MORPH_SEMANTICS.filter((semantic) => {\n const attributes = morphAttributes[semantic];\n if (semantic === 'position' && !attributes) return true;\n if (!attributes) return false;\n const expectedItemSize = mesh.geometry.getAttribute(semantic)?.itemSize\n ?? attributes.find(Boolean)?.itemSize;\n return attributes.length !== targetCount\n || Array.from({ length: targetCount }, (_, index) => attributes[index])\n .some((attribute) => (\n !attribute\n || attribute.count !== positionCount\n || attribute.itemSize !== expectedItemSize\n ));\n });\n const influenceCount = mesh.morphTargetInfluences?.length ?? 0;\n\n if (invalidSemantics.length > 0 || influenceCount !== targetCount) {\n const channelCounts = THREE_RENDERED_MORPH_SEMANTICS\n .map((semantic) => `${semantic}=${morphAttributes[semantic]?.length ?? 0}`)\n .join(', ');\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" has an invalid Three.js morph layout `\n + `(${channelCounts}, influences=${influenceCount}, expected=${targetCount}).`,\n );\n }\n });\n}\n\n","import {\n ACESFilmicToneMapping,\n Color,\n DirectionalLight,\n HemisphereLight,\n MathUtils,\n Mesh,\n PCFShadowMap,\n PCFSoftShadowMap,\n PerspectiveCamera,\n PlaneGeometry,\n PMREMGenerator,\n Scene,\n ShadowMaterial,\n SRGBColorSpace,\n WebGLCoordinateSystem,\n WebGLRenderer,\n WebGPUCoordinateSystem,\n} from 'three';\nimport type { ColorRepresentation, CoordinateSystem, Light, LightShadow, OrthographicCamera, RenderTarget, Texture } from 'three';\nimport type { WebGPURenderer } from 'three/webgpu';\nimport { RoomEnvironment } from 'three/examples/jsm/environments/RoomEnvironment.js';\nimport { registerSceneRendering } from './sceneRenderingBinding';\nimport { prepareModelSkinning } from './modelSkinning';\n\nexport type DefaultCharacterLightingSettings = {\n envMapEnabled: boolean;\n environmentIntensity: number;\n environmentBlur: number;\n exposure: number;\n ambientIntensity: number;\n keyIntensity: number;\n fillIntensity: number;\n rimIntensity: number;\n shadowOpacity: number;\n};\n\nexport const DEFAULT_CHARACTER_LIGHTING_PRESETS = {\n cleanStudio: { id: 'cleanStudio', label: 'Soft Studio', settings: { envMapEnabled: true, environmentIntensity: .24, environmentBlur: .04, exposure: 1.08, ambientIntensity: .32, keyIntensity: .52, fillIntensity: .18, rimIntensity: .08, shadowOpacity: .22 } },\n softFill: { id: 'softFill', label: 'Soft Fill', settings: { envMapEnabled: true, environmentIntensity: .3, environmentBlur: .04, exposure: 1.1, ambientIntensity: .38, keyIntensity: .44, fillIntensity: .24, rimIntensity: .1, shadowOpacity: .18 } },\n inspection: { id: 'inspection', label: 'Inspection', settings: { envMapEnabled: true, environmentIntensity: .45, environmentBlur: .035, exposure: 1.18, ambientIntensity: .48, keyIntensity: .58, fillIntensity: .32, rimIntensity: .14, shadowOpacity: .12 } },\n contrast: { id: 'contrast', label: 'Contrast', settings: { envMapEnabled: true, environmentIntensity: .2, environmentBlur: .035, exposure: 1.08, ambientIntensity: .25, keyIntensity: .7, fillIntensity: .12, rimIntensity: .22, shadowOpacity: .28 } },\n} as const;\n\nexport type DefaultCharacterLightingPresetId = keyof typeof DEFAULT_CHARACTER_LIGHTING_PRESETS;\nexport const DEFAULT_CHARACTER_LIGHTING_PRESET_ID: DefaultCharacterLightingPresetId = 'cleanStudio';\nexport const DEFAULT_CHARACTER_LIGHTING_PRESET_IDS = Object.keys(DEFAULT_CHARACTER_LIGHTING_PRESETS) as DefaultCharacterLightingPresetId[];\nexport const DEFAULT_CHARACTER_LIGHTING_SETTINGS: DefaultCharacterLightingSettings = { ...DEFAULT_CHARACTER_LIGHTING_PRESETS.cleanStudio.settings };\n\nexport const CHARACTER_SCENE_TYPES = {\n studio: { id: 'studio', label: 'Studio', description: 'Transparent background, soft studio lighting, ground shadow.', background: null, lightingPreset: 'cleanStudio', shadowPlane: true },\n showcase: { id: 'showcase', label: 'Showcase', description: 'Dark backdrop with contrasty key/rim lighting for presentation shots.', background: 0x101216, lightingPreset: 'contrast', shadowPlane: true },\n inspection: { id: 'inspection', label: 'Inspection', description: 'Bright, even lighting on a light backdrop for close-up review.', background: 0xe8eaed, lightingPreset: 'inspection', shadowPlane: true },\n void: { id: 'void', label: 'Void', description: 'Transparent background, soft fill lighting, no ground shadow.', background: null, lightingPreset: 'softFill', shadowPlane: false },\n} as const;\nexport type CharacterSceneTypeId = keyof typeof CHARACTER_SCENE_TYPES;\nexport const CHARACTER_SCENE_TYPE_IDS = Object.keys(CHARACTER_SCENE_TYPES) as CharacterSceneTypeId[];\nexport const DEFAULT_CHARACTER_SCENE_TYPE_ID: CharacterSceneTypeId = 'studio';\n\nexport type DefaultCharacterSceneOptions = {\n type?: CharacterSceneTypeId;\n background?: ColorRepresentation | null;\n cameraFov?: number;\n pixelRatioCap?: number;\n shadows?: boolean;\n lightingPreset?: DefaultCharacterLightingPresetId;\n lighting?: Partial<DefaultCharacterLightingSettings>;\n shadowPlane?: boolean;\n manageResize?: boolean;\n};\n/** Saved per-character appearance; renderer preference and DOM ownership stay separate. */\nexport type CharacterSceneConfiguration = Pick<DefaultCharacterSceneOptions,\n 'type' | 'cameraFov' | 'shadows' | 'lightingPreset' | 'lighting' | 'shadowPlane'> & {\n background?: string | number | null;\n };\n\nexport type DefaultCharacterSceneAsyncOptions = DefaultCharacterSceneOptions & {\n /** Auto (default) tries native WebGPU initialization, then falls back to WebGL. */\n renderer?: CharacterSceneRendererPreference;\n /** Persistent settings take precedence over the legacy renderer option. */\n rendering?: Partial<CharacterSceneRenderingSettings>;\n /** Cancels construction, not ownership of a successfully returned scene. */\n signal?: AbortSignal;\n /** Compatibility notification; rendering snapshots also expose device loss. */\n onDeviceLost?: (error: Error) => void;\n};\n\nexport type CharacterSceneRenderer = WebGLRenderer | WebGPURenderer;\nexport type CharacterSceneBackend = 'webgl' | 'webgpu';\nexport type CharacterSceneRendererPreference = 'auto' | CharacterSceneBackend;\n\ntype CharacterScene<R extends CharacterSceneRenderer> = {\n container: HTMLElement;\n scene: Scene;\n renderer: R;\n camera: PerspectiveCamera;\n lighting: ReturnType<typeof createDefaultCharacterLighting>;\n shadowPlane: ReturnType<typeof createShadowPlane> | null;\n sceneType: CharacterSceneTypeId;\n ownsScene: true;\n resize: () => void;\n setSceneSettings: (settings: CharacterSceneConfiguration) => void;\n dispose: () => void;\n};\n\nexport type DefaultCharacterScene = CharacterScene<WebGLRenderer>;\nexport type CharacterSceneRenderingSettings = { preference: CharacterSceneRendererPreference };\nexport type CharacterSceneRenderingStatus = 'initializing' | 'switching' | 'ready' | 'error' | 'lost' | 'disposed';\nexport type CharacterSceneRenderingSnapshot = {\n readonly settings: CharacterSceneRenderingSettings;\n readonly status: CharacterSceneRenderingStatus;\n readonly error: Error | null;\n} & (\n | { readonly backend: 'webgl'; readonly renderer: WebGLRenderer }\n | { readonly backend: 'webgpu'; readonly renderer: WebGPURenderer }\n | { readonly backend: null; readonly renderer: null }\n);\nexport type CharacterSceneRendererLease = { readonly renderer: CharacterSceneRenderer; release(): void };\nexport interface CharacterSceneRenderingController {\n getSettings(): CharacterSceneRenderingSettings;\n getSnapshot(): CharacterSceneRenderingSnapshot;\n setSettings(patch: Partial<CharacterSceneRenderingSettings>): Promise<CharacterSceneRenderingSnapshot>;\n subscribe(listener: (snapshot: CharacterSceneRenderingSnapshot) => void): () => void;\n /** Borrow for capture/readback; release in finally. Unavailable during switching/loss. */\n acquireRenderer(): CharacterSceneRendererLease;\n /** Drain borrowed work, then synchronously detach/free caller-owned resources, even after loss/disposal. */\n releaseSceneResources(release: () => void): Promise<void>;\n}\nexport type DefaultCharacterSceneRuntimeOptions = DefaultCharacterSceneAsyncOptions;\nexport type DefaultCharacterSceneRuntime = Omit<CharacterScene<CharacterSceneRenderer>, 'renderer' | 'dispose'> & {\n readonly renderer: CharacterSceneRenderer | null;\n readonly backend: CharacterSceneBackend | null;\n dispose(): Promise<void>;\n readonly rendering: CharacterSceneRenderingController;\n readonly ready: Promise<CharacterSceneRenderingSnapshot>;\n};\nexport type ReadyDefaultCharacterScene = (\n | (Omit<DefaultCharacterScene, 'dispose'> & { readonly backend: 'webgl' })\n | (Omit<CharacterScene<WebGPURenderer>, 'dispose'> & { readonly backend: 'webgpu' })\n) & { readonly rendering: CharacterSceneRenderingController; dispose(): Promise<void> };\n\n// Register each resource as it is acquired. A failing disposer must not prevent\n// later resources from being released, and repeated disposal is harmless.\nfunction createDisposer() {\n const callbacks: Array<() => void> = [];\n let disposed = false;\n return {\n add: (callback: () => void) => { callbacks.push(callback); },\n isDisposed: () => disposed,\n dispose: () => {\n if (disposed) return;\n disposed = true;\n let failed = false;\n let firstError: unknown;\n for (const callback of callbacks.reverse()) {\n try { callback(); } catch (error) {\n if (!failed) firstError = error;\n failed = true;\n }\n }\n callbacks.length = 0;\n if (failed) throw firstError;\n },\n };\n}\n\nfunction rollback(dispose: () => void) {\n // Preserve the construction/preparation error after attempting all cleanup.\n try { dispose(); } catch { /* The original failure is more useful to callers. */ }\n}\n\nconst finite = (value: unknown, min: number, max: number, fallback: number) => {\n const number = typeof value === 'number' ? value : Number(value);\n return Number.isFinite(number) ? MathUtils.clamp(number, min, max) : fallback;\n};\n\nconst normalize = (value: Partial<Record<keyof DefaultCharacterLightingSettings, unknown>>): DefaultCharacterLightingSettings => ({\n envMapEnabled: typeof value.envMapEnabled === 'boolean' ? value.envMapEnabled : DEFAULT_CHARACTER_LIGHTING_SETTINGS.envMapEnabled,\n environmentIntensity: finite(value.environmentIntensity, 0, 1.5, DEFAULT_CHARACTER_LIGHTING_SETTINGS.environmentIntensity),\n environmentBlur: finite(value.environmentBlur, 0, .04, DEFAULT_CHARACTER_LIGHTING_SETTINGS.environmentBlur),\n exposure: finite(value.exposure, .6, 2.2, DEFAULT_CHARACTER_LIGHTING_SETTINGS.exposure),\n ambientIntensity: finite(value.ambientIntensity, 0, 1.4, DEFAULT_CHARACTER_LIGHTING_SETTINGS.ambientIntensity),\n keyIntensity: finite(value.keyIntensity, 0, 2.2, DEFAULT_CHARACTER_LIGHTING_SETTINGS.keyIntensity),\n fillIntensity: finite(value.fillIntensity, 0, 1.6, DEFAULT_CHARACTER_LIGHTING_SETTINGS.fillIntensity),\n rimIntensity: finite(value.rimIntensity, 0, 1.6, DEFAULT_CHARACTER_LIGHTING_SETTINGS.rimIntensity),\n shadowOpacity: finite(value.shadowOpacity, 0, .5, DEFAULT_CHARACTER_LIGHTING_SETTINGS.shadowOpacity),\n});\n\nexport const normalizeDefaultCharacterLightingSettings = (value: unknown) =>\n value && typeof value === 'object' && !Array.isArray(value)\n ? normalize(value as Partial<Record<keyof DefaultCharacterLightingSettings, unknown>>)\n : null;\n\nexport function createShadowPlane(scene: Scene, options: { size?: number; opacity?: number; yPosition?: number } = {}) {\n const plane = new Mesh(new PlaneGeometry(options.size ?? 20, options.size ?? 20), new ShadowMaterial({ opacity: options.opacity ?? .3 }));\n plane.rotation.x = -Math.PI / 2;\n plane.position.y = options.yPosition ?? -.01;\n plane.receiveShadow = true;\n plane.name = 'shadowPlane';\n scene.add(plane);\n return plane;\n}\n\nexport function createDefaultCharacterLighting(scene: Scene, renderer: WebGLRenderer, initial: Partial<DefaultCharacterLightingSettings> = {}) {\n return createCharacterLighting(scene, renderer, () => new PMREMGenerator(renderer), initial);\n}\n\ntype ScenePMREM = { fromScene(scene: Scene, sigma?: number): RenderTarget; dispose(): void };\n\ntype LightingRenderer = {\n renderer: CharacterSceneRenderer;\n pmrem: ScenePMREM;\n environment: RenderTarget | null;\n revision: number;\n dispose(): void;\n};\n\nfunction createCharacterLighting(scene: Scene, renderer: CharacterSceneRenderer, createPMREM: () => ScenePMREM, initial: Partial<DefaultCharacterLightingSettings>) {\n const lighting = createMutableCharacterLighting(scene, initial);\n try { lighting.commit(lighting.prepare(renderer, createPMREM)); return lighting.controller; }\n catch (error) { rollback(lighting.controller.dispose); throw error; }\n}\n\n/** Lights/settings stay stable; only backend-specific environment resources move. */\nfunction createMutableCharacterLighting(scene: Scene, initial: Partial<DefaultCharacterLightingSettings>) {\n const lifetime = createDisposer();\n try {\n const ambient = new HemisphereLight(0xf7fbff, 0x6b7280, 0);\n const key = new DirectionalLight(0xfffbf4, 0);\n const fill = new DirectionalLight(0xe8f0ff, 0);\n const rim = new DirectionalLight(0xdde8ff, 0);\n ambient.name = 'embodyCharacterAmbientHemisphereLight'; ambient.position.set(0, 8, 0);\n key.name = 'embodyCharacterKeyLight'; key.position.set(4.5, 7.5, 6.2); key.castShadow = true;\n key.shadow.mapSize.set(2048, 2048); Object.assign(key.shadow.camera, { near: .5, far: 50, left: -10, right: 10, top: 10, bottom: -10 }); key.shadow.bias = -.0001; key.shadow.radius = 4;\n fill.name = 'embodyCharacterFillLight'; fill.position.set(-5.5, 4.2, 4.5);\n rim.name = 'embodyCharacterRimLight'; rim.position.set(-3.5, 4.8, -5.4);\n lifetime.add(() => scene.remove(ambient, key, fill, rim));\n for (const light of [key, fill, rim]) lifetime.add(() => light.dispose());\n scene.add(ambient, key, fill, rim);\n const listeners = new Set<(value: DefaultCharacterLightingSettings) => void>();\n lifetime.add(() => listeners.clear());\n let active: LightingRenderer | null = null;\n let held = false;\n let closed = false;\n let revision = 0;\n let settings = normalize({ ...DEFAULT_CHARACTER_LIGHTING_SETTINGS, ...initial });\n lifetime.add(() => { scene.environment = null; active?.dispose(); active = null; });\n const rebuild = (target: LightingRenderer) => {\n let environment: RenderTarget | null = null;\n if (settings.envMapEnabled) {\n const room = new RoomEnvironment();\n try { environment = target.pmrem.fromScene(room, settings.environmentBlur); } finally { room.dispose(); }\n }\n target.environment?.dispose(); target.environment = environment; target.revision = revision;\n };\n const show = (target: LightingRenderer | null) => {\n if (target) {\n target.renderer.outputColorSpace = SRGBColorSpace;\n target.renderer.toneMapping = ACESFilmicToneMapping;\n target.renderer.toneMappingExposure = settings.exposure;\n }\n scene.environment = target?.environment?.texture ?? null;\n scene.environmentIntensity = settings.envMapEnabled ? settings.environmentIntensity : 0;\n ambient.intensity = settings.ambientIntensity; key.intensity = settings.keyIntensity; fill.intensity = settings.fillIntensity; rim.intensity = settings.rimIntensity;\n const plane = scene.getObjectByName('shadowPlane') as Mesh | undefined;\n for (const material of plane ? (Array.isArray(plane.material) ? plane.material : [plane.material]) : []) if (material instanceof ShadowMaterial) material.opacity = settings.shadowOpacity;\n };\n const prepare = (renderer: CharacterSceneRenderer, createPMREM: () => ScenePMREM): LightingRenderer => {\n const resources = createDisposer();\n try {\n const pmrem = createPMREM(); resources.add(() => pmrem.dispose());\n const target: LightingRenderer = { renderer, pmrem, environment: null, revision, dispose: resources.dispose };\n resources.add(() => { target.environment?.dispose(); target.environment = null; });\n rebuild(target); return target;\n } catch (error) { rollback(resources.dispose); throw error; }\n };\n const setSettings = (patch: Partial<DefaultCharacterLightingSettings>) => {\n if (closed || lifetime.isDisposed()) throw new Error('Character lighting has been disposed.');\n const previous = settings; settings = normalize({ ...settings, ...patch }); revision++;\n if (!held) {\n if (active && (previous.envMapEnabled !== settings.envMapEnabled || previous.environmentBlur !== settings.environmentBlur)) rebuild(active);\n show(active);\n }\n listeners.forEach((listener) => listener({ ...settings })); return { ...settings };\n };\n show(null);\n const controller = {\n getSettings: () => ({ ...settings }), getEnvironmentTexture: (): Texture | null => active?.environment?.texture ?? null,\n setSettings, setPreset: (id: DefaultCharacterLightingPresetId) => setSettings(DEFAULT_CHARACTER_LIGHTING_PRESETS[id]?.settings ?? {}),\n subscribe: (listener: (value: DefaultCharacterLightingSettings) => void) => {\n if (closed || lifetime.isDisposed()) throw new Error('Character lighting has been disposed.');\n listeners.add(listener); listener({ ...settings }); return () => { listeners.delete(listener); };\n },\n dispose: lifetime.dispose,\n };\n return {\n controller, prepare, show, close: () => { closed = true; }, revision: () => revision,\n hold: () => { held = true; },\n restore: () => {\n held = false;\n try { if (active && active.revision !== revision) rebuild(active); } finally { show(active); }\n },\n commit: (target: LightingRenderer) => {\n const previous = active; active = target; held = false; show(active);\n return previous;\n },\n };\n } catch (error) { rollback(lifetime.dispose); throw error; }\n}\n\nfunction constructDefaultCharacterScene<R extends CharacterSceneRenderer>(\n container: HTMLElement,\n options: DefaultCharacterSceneOptions,\n renderer: R,\n disposeRenderer: () => void,\n createLighting: (scene: Scene, settings: Partial<DefaultCharacterLightingSettings>) => ReturnType<typeof createDefaultCharacterLighting>,\n) {\n const lifetime = createDisposer();\n lifetime.add(disposeRenderer);\n try {\n const sceneType = CHARACTER_SCENE_TYPES[options.type as CharacterSceneTypeId] ?? CHARACTER_SCENE_TYPES.studio;\n let currentSceneType = sceneType.id;\n const width = Math.max(1, container.clientWidth || globalThis.innerWidth || 1);\n const height = Math.max(1, container.clientHeight || globalThis.innerHeight || 1);\n const ratio = () => Math.min(globalThis.devicePixelRatio || 1, options.pixelRatioCap ?? 1.5);\n renderer.setPixelRatio(ratio()); renderer.setSize(width, height, true); renderer.shadowMap.enabled = options.shadows ?? true; renderer.shadowMap.type = PCFShadowMap;\n Object.assign(renderer.domElement.style, { display: 'block', width: '100%', height: '100%' });\n const scene = new Scene(); const background = options.background === undefined ? sceneType.background : options.background; scene.background = background == null ? null : new Color(background);\n const camera = new PerspectiveCamera(options.cameraFov ?? 45, width / height, .1, 1000);\n const preset = DEFAULT_CHARACTER_LIGHTING_PRESETS[(options.lightingPreset ?? sceneType.lightingPreset) as DefaultCharacterLightingPresetId]?.settings ?? DEFAULT_CHARACTER_LIGHTING_SETTINGS;\n const lighting = createLighting(scene, { ...preset, ...options.lighting });\n lifetime.add(() => lighting.dispose());\n let shadowPlane: ReturnType<typeof createShadowPlane> | null = null;\n const ensureShadowPlane = () => {\n if (shadowPlane) return shadowPlane;\n const plane = createShadowPlane(scene, { opacity: lighting.getSettings().shadowOpacity });\n lifetime.add(() => plane.material.dispose()); lifetime.add(() => plane.geometry.dispose()); lifetime.add(() => scene.remove(plane));\n shadowPlane = plane;\n return plane;\n };\n if (options.shadowPlane ?? sceneType.shadowPlane) ensureShadowPlane();\n const setSceneSettings = (value: CharacterSceneConfiguration) => {\n if (lifetime.isDisposed()) return;\n const type = CHARACTER_SCENE_TYPES[value.type ?? DEFAULT_CHARACTER_SCENE_TYPE_ID] ?? CHARACTER_SCENE_TYPES[DEFAULT_CHARACTER_SCENE_TYPE_ID];\n currentSceneType = type.id;\n const background = value.background === undefined ? type.background : value.background;\n scene.background = background == null ? null : new Color(background);\n camera.fov = value.cameraFov ?? 45; camera.updateProjectionMatrix();\n const preset = DEFAULT_CHARACTER_LIGHTING_PRESETS[value.lightingPreset ?? type.lightingPreset] ?? DEFAULT_CHARACTER_LIGHTING_PRESETS[DEFAULT_CHARACTER_LIGHTING_PRESET_ID];\n lighting.setSettings({ ...preset.settings, ...value.lighting });\n renderer.shadowMap.enabled = value.shadows ?? true;\n const showPlane = value.shadowPlane ?? type.shadowPlane;\n if (showPlane) ensureShadowPlane();\n if (shadowPlane) shadowPlane.visible = showPlane;\n };\n const resize = () => {\n if (lifetime.isDisposed()) return;\n const w = Math.max(1, container.clientWidth || globalThis.innerWidth || 1);\n const h = Math.max(1, container.clientHeight || globalThis.innerHeight || 1);\n camera.aspect = w / h; camera.updateProjectionMatrix();\n renderer.setPixelRatio(ratio()); renderer.setSize(w, h, false);\n };\n const handle: CharacterScene<R> = { container, scene, renderer, camera, lighting, get shadowPlane() { return shadowPlane; }, get sceneType() { return currentSceneType; }, ownsScene: true, resize, setSceneSettings, dispose: lifetime.dispose };\n const attach = () => {\n lifetime.add(() => { if (renderer.domElement.parentElement === container) container.removeChild(renderer.domElement); });\n container.appendChild(renderer.domElement);\n if (options.manageResize !== false) {\n lifetime.add(() => globalThis.removeEventListener?.('resize', resize));\n globalThis.addEventListener?.('resize', resize);\n }\n };\n return { handle, attach };\n } catch (error) {\n rollback(lifetime.dispose);\n throw error;\n }\n}\n\n/** The existing synchronous WebGL path; it does not wait for shader compilation. */\nexport function createDefaultCharacterScene(container: HTMLElement, options: DefaultCharacterSceneOptions = {}): DefaultCharacterScene {\n const { handle, attach } = constructWebGLScene(container, options);\n try { attach(); return handle; } catch (error) {\n rollback(handle.dispose);\n throw error;\n }\n}\n\nfunction constructWebGLScene(container: HTMLElement, options: DefaultCharacterSceneOptions) {\n const renderer = new WebGLRenderer({ alpha: true, antialias: true, powerPreference: 'high-performance' });\n return constructDefaultCharacterScene(container, options, renderer, () => renderer.dispose(),\n (scene, settings) => createDefaultCharacterLighting(scene, renderer, settings));\n}\n\nfunction throwIfAborted(signal?: AbortSignal) {\n if (signal?.aborted) throw new DOMException('Character scene creation was aborted.', 'AbortError');\n}\n\ntype RendererCandidate = (\n | { backend: 'webgl'; renderer: WebGLRenderer }\n | { backend: 'webgpu'; renderer: WebGPURenderer }\n) & { createPMREM(): ScenePMREM; dispose(): void; lost: Error | null };\n\nfunction acquireWebGLRenderer(): RendererCandidate {\n const renderer = new WebGLRenderer({ alpha: true, antialias: true, powerPreference: 'high-performance' });\n const lifetime = createDisposer(); lifetime.add(() => renderer.dispose());\n return { backend: 'webgl', renderer, createPMREM: () => new PMREMGenerator(renderer), dispose: lifetime.dispose, lost: null };\n}\n\n// @types/three r184 omits this backend capability, which failed init still owns.\nfunction disposeBackend(backend: object) {\n if ('dispose' in backend && typeof backend.dispose === 'function') backend.dispose();\n}\n\nasync function acquireNativeRenderer(check: () => void, onLoss: (candidate: RendererCandidate) => void): Promise<RendererCandidate> {\n const lifetime = createDisposer();\n try {\n if (typeof navigator === 'undefined' || !('gpu' in navigator) || !navigator.gpu) {\n throw new Error('WebGPU is unavailable. Use WebGL or a browser with WebGPU in a secure context.');\n }\n const { WebGPURenderer, PMREMGenerator: WebGPUPMREMGenerator } = await import('three/webgpu');\n check();\n const renderer = new WebGPURenderer({ alpha: true, antialias: true, powerPreference: 'high-performance' });\n const initialBackend = renderer.backend;\n const candidate: RendererCandidate = {\n backend: 'webgpu', renderer, lost: null,\n createPMREM: () => new WebGPUPMREMGenerator(renderer), dispose: lifetime.dispose,\n };\n const originalDeviceLost = renderer.onDeviceLost.bind(renderer);\n renderer.onDeviceLost = (info) => {\n originalDeviceLost(info);\n if (lifetime.isDisposed() || candidate.lost) return;\n candidate.lost = new Error(`WebGPU device lost: ${info.message || 'Unknown reason'}`);\n onLoss(candidate);\n };\n lifetime.add(() => {\n try {\n if (renderer.hasInitialized()) renderer.dispose();\n else disposeBackend(renderer.backend);\n } finally {\n if (renderer.backend !== initialBackend) disposeBackend(initialBackend);\n }\n });\n await renderer.init(); check();\n if (candidate.lost) throw candidate.lost;\n if (!('isWebGPUBackend' in renderer.backend) || renderer.backend.isWebGPUBackend !== true) {\n throw new Error('Native WebGPU initialization failed; Three selected WebGL2. Select WebGL to retry.');\n }\n return candidate;\n } catch (error) { rollback(lifetime.dispose); check(); throw error; }\n}\n\nfunction renderingAborted() { return new DOMException('Character scene renderer request was cancelled.', 'AbortError'); }\nfunction rendererPreference(value: unknown): CharacterSceneRendererPreference {\n if (value === 'auto' || value === 'webgl' || value === 'webgpu') return value;\n throw new Error(`Unsupported character scene renderer: ${String(value)}`);\n}\n\n/** Three's WebGPU renderer changes these cameras; WebGLRenderer does not undo it. */\nfunction prepareCameraCoordinates(scene: Scene, camera: PerspectiveCamera, backend: CharacterSceneBackend): () => void {\n const cameras = new Set<PerspectiveCamera | OrthographicCamera>([camera]);\n const shadows: LightShadow<PerspectiveCamera | OrthographicCamera>[] = [];\n scene.traverse(object => {\n const light = object as Light & { shadow?: LightShadow<PerspectiveCamera | OrthographicCamera> };\n if (light.isLight && light.shadow) {\n cameras.add(light.shadow.camera);\n shadows.push(light.shadow);\n }\n });\n const previous = Array.from(cameras, current => [current, current.coordinateSystem] as const);\n const apply = (current: PerspectiveCamera | OrthographicCamera, coordinates: CoordinateSystem) => {\n current.coordinateSystem = coordinates;\n current.updateProjectionMatrix();\n };\n const coordinates = backend === 'webgpu' ? WebGPUCoordinateSystem : WebGLCoordinateSystem;\n cameras.forEach(current => apply(current, coordinates));\n shadows.forEach(shadow => { shadow.needsUpdate = true; });\n return () => {\n previous.forEach(([current, original]) => apply(current, original));\n shadows.forEach(shadow => { shadow.needsUpdate = true; });\n };\n}\n\n/** Stable scene ownership, including a recoverable initial renderer failure. */\nexport function createDefaultCharacterSceneRuntime(\n container: HTMLElement,\n options: DefaultCharacterSceneRuntimeOptions = {},\n): DefaultCharacterSceneRuntime {\n throwIfAborted(options.signal);\n const lifetime = createDisposer();\n try {\n const sceneType = CHARACTER_SCENE_TYPES[options.type as CharacterSceneTypeId] ?? CHARACTER_SCENE_TYPES.studio;\n let currentSceneType = sceneType.id;\n const scene = new Scene();\n const background = options.background === undefined ? sceneType.background : options.background;\n scene.background = background == null ? null : new Color(background);\n const camera = new PerspectiveCamera(options.cameraFov ?? 45, 1, .1, 1000);\n const preset = DEFAULT_CHARACTER_LIGHTING_PRESETS[(options.lightingPreset ?? sceneType.lightingPreset) as DefaultCharacterLightingPresetId]?.settings ?? DEFAULT_CHARACTER_LIGHTING_SETTINGS;\n const lighting = createMutableCharacterLighting(scene, { ...preset, ...options.lighting });\n lifetime.add(lighting.controller.dispose);\n let shadowsEnabled = options.shadows ?? true;\n let shadowPlane: ReturnType<typeof createShadowPlane> | null = null;\n const ensureShadowPlane = () => {\n if (shadowPlane) return shadowPlane;\n const plane = createShadowPlane(scene, { opacity: lighting.controller.getSettings().shadowOpacity });\n lifetime.add(() => plane.material.dispose()); lifetime.add(() => plane.geometry.dispose()); lifetime.add(() => scene.remove(plane));\n shadowPlane = plane;\n return plane;\n };\n if (options.shadowPlane ?? sceneType.shadowPlane) ensureShadowPlane();\n let settings: CharacterSceneRenderingSettings = { preference: rendererPreference(options.rendering?.preference ?? options.renderer ?? 'auto') };\n let active: RendererCandidate | null = null;\n let candidateInUse: RendererCandidate | null = null;\n let status: CharacterSceneRenderingStatus = 'initializing';\n let error: Error | null = null;\n let disposed = false;\n let disposal: Promise<void> | null = null;\n let generation = 0;\n let pending: Promise<CharacterSceneRenderingSnapshot> | null = null;\n let pendingRendererChange: Promise<CharacterSceneRenderingSnapshot> | null = null;\n let leaseCount = 0;\n let pendingResourceReleases = 0;\n let leasesReleased: (() => void) | null = null;\n let leaseBarrier: Promise<void> | null = null;\n let resizeAttached = false;\n const listeners = new Set<(snapshot: CharacterSceneRenderingSnapshot) => void>();\n const getSnapshot = (): CharacterSceneRenderingSnapshot => {\n const common = { settings: { ...settings }, status, error };\n if (active?.backend === 'webgl') return { ...common, backend: 'webgl', renderer: active.renderer };\n if (active?.backend === 'webgpu') return { ...common, backend: 'webgpu', renderer: active.renderer };\n return { ...common, backend: null, renderer: null };\n };\n const notify = () => {\n const snapshot = getSnapshot();\n for (const listener of listeners) {\n try { listener(snapshot); } catch (failure) { console.error('Character rendering subscriber failed.', failure); }\n }\n };\n const sizeRenderer = (renderer: CharacterSceneRenderer, style = false) => {\n const w = Math.max(1, container.clientWidth || globalThis.innerWidth || 1);\n const h = Math.max(1, container.clientHeight || globalThis.innerHeight || 1);\n camera.aspect = w / h; camera.updateProjectionMatrix();\n renderer.setPixelRatio(Math.min(globalThis.devicePixelRatio || 1, options.pixelRatioCap ?? 1.5));\n renderer.setSize(w, h, style);\n };\n const resize = () => { if (!disposed && active) sizeRenderer(active.renderer); };\n lifetime.add(() => { if (resizeAttached) globalThis.removeEventListener?.('resize', resize); });\n const onLoss = (candidate: RendererCandidate) => {\n if (disposed || candidate !== active) return;\n status = status === 'switching' ? 'switching' : 'lost'; error = candidate.lost;\n void Promise.resolve().then(() => candidate.renderer.setAnimationLoop(null)).catch(() => undefined);\n void owner.binding?.suspend().catch((failure) => console.error('Character renderer suspension failed.', failure));\n notify();\n try { options.onDeviceLost?.(candidate.lost!); } catch (failure) { console.error('Character scene device-loss callback failed.', failure); }\n };\n const setSettings = (patch: Partial<CharacterSceneRenderingSettings>): Promise<CharacterSceneRenderingSnapshot> => {\n if (disposed) return Promise.reject(renderingAborted());\n let preference: CharacterSceneRendererPreference;\n try { preference = patch.preference === undefined ? settings.preference : rendererPreference(patch.preference); }\n catch (failure) { return Promise.reject(failure); }\n if (pendingRendererChange && preference === settings.preference && (status === 'initializing' || status === 'switching')) return pendingRendererChange;\n if (status === 'ready' && preference === settings.preference) return Promise.resolve(getSnapshot());\n settings = { preference };\n const request = ++generation;\n const previous = pending;\n status = active ? 'switching' : 'initializing'; error = null;\n const execute = async (): Promise<CharacterSceneRenderingSnapshot> => {\n let candidate: RendererCandidate | null = null;\n let environment: LightingRenderer | null = null;\n let suspended = false;\n let attached = false;\n let restoreCameraCoordinates = () => {};\n let restoreModelSkinning = () => {};\n const check = () => {\n if (disposed || generation !== request) throw renderingAborted();\n if (!active) throwIfAborted(options.signal);\n if (candidate?.lost) throw candidate.lost;\n };\n try {\n check();\n if (preference === 'webgl') candidate = acquireWebGLRenderer();\n else {\n try { candidate = await acquireNativeRenderer(check, onLoss); }\n catch (failure) {\n check();\n if (preference !== 'auto' || (failure instanceof Error && failure.name === 'AbortError')) throw failure;\n candidate = acquireWebGLRenderer();\n }\n }\n check();\n candidateInUse = candidate;\n const renderer = candidate.renderer;\n sizeRenderer(renderer, true);\n renderer.shadowMap.enabled = shadowsEnabled;\n // WebGL PCF is already soft in supported Three versions; the old\n // constant warns and is replaced on the first draw. Keep native filtering.\n renderer.shadowMap.type = candidate.backend === 'webgl' ? PCFShadowMap : PCFSoftShadowMap;\n Object.assign(renderer.domElement.style, { display: 'block', width: '100%', height: '100%' });\n if (leaseCount) await leaseBarrier;\n check();\n if (owner.drain) await owner.drain;\n check();\n if (owner.binding) { suspended = true; await owner.binding.suspend(); }\n check();\n restoreCameraCoordinates = prepareCameraCoordinates(scene, camera, candidate.backend);\n restoreModelSkinning = prepareModelSkinning(scene);\n lighting.hold();\n // Environment changes during asynchronous compilation are deferred. If\n // authored settings changed meanwhile, prepare that revision before commit.\n do {\n environment?.dispose(); environment = lighting.prepare(renderer, candidate.createPMREM);\n lighting.show(environment);\n if (typeof renderer.compileAsync !== 'function') throw new Error('Async character scenes require Three.js WebGLRenderer.compileAsync.');\n await renderer.compileAsync(scene, camera); check();\n if (owner.binding) await owner.binding.prepare(renderer);\n else if (active) renderer.render(scene, camera);\n check();\n } while (environment.revision !== lighting.revision());\n sizeRenderer(renderer);\n // Stage the new canvas before removing the old one. A failed attach\n // or library binding leaves the old scene/renderer available.\n attached = true; container.appendChild(renderer.domElement);\n if (!resizeAttached && options.manageResize !== false) {\n resizeAttached = true; globalThis.addEventListener?.('resize', resize);\n }\n check();\n await owner.binding?.commit(renderer);\n check();\n const oldRenderer = active;\n const oldEnvironment = lighting.commit(environment); environment = null;\n active = candidate; candidate = null; attached = false;\n rollback(() => { if (oldRenderer?.renderer.domElement.parentElement === container) container.removeChild(oldRenderer.renderer.domElement); });\n rollback(() => oldEnvironment?.dispose());\n rollback(() => oldRenderer?.dispose());\n status = 'ready'; error = null;\n const snapshot = getSnapshot(); notify(); return snapshot;\n } catch (failure) {\n if (suspended) {\n try { await owner.binding?.suspend(); } catch { /* Preserve the switch failure. */ }\n if (owner.drain) await owner.drain.catch(() => undefined);\n }\n if (attached && candidate?.renderer.domElement.parentElement === container) container.removeChild(candidate.renderer.domElement);\n rollback(() => environment?.dispose());\n rollback(() => candidate?.dispose());\n const canceled = disposed || generation !== request || (!active && options.signal?.aborted);\n if (!disposed) {\n rollback(restoreModelSkinning);\n rollback(restoreCameraCoordinates);\n rollback(lighting.restore);\n if (suspended && active && !active.lost) {\n try { await owner.binding?.commit(active.renderer); } catch (resumeError) { owner.reportFailure(resumeError, active.renderer); }\n }\n if (generation === request) {\n status = active?.lost ? 'lost' : 'error';\n error = failure instanceof Error ? failure : new Error(String(failure)); notify();\n }\n }\n if (canceled) throw renderingAborted();\n throw failure;\n } finally { candidateInUse = null; }\n };\n const operation = previous ? previous.catch(() => undefined).then(execute) : Promise.resolve().then(execute);\n pending = operation;\n pendingRendererChange = operation;\n notify();\n const settled = () => {\n if (pending === operation) pending = null;\n if (pendingRendererChange === operation) pendingRendererChange = null;\n };\n void operation.then(settled, settled);\n return operation;\n };\n const rendering: CharacterSceneRenderingController = {\n getSettings: () => ({ ...settings }), getSnapshot, setSettings,\n subscribe: (listener) => {\n if (disposed) throw new Error('Character scene rendering has been disposed.');\n listeners.add(listener);\n try { listener(getSnapshot()); } catch (failure) { console.error('Character rendering subscriber failed.', failure); }\n return () => { listeners.delete(listener); };\n },\n acquireRenderer: () => {\n if (!active || active.lost || disposed || pendingResourceReleases || (status !== 'ready' && status !== 'error')) throw new Error('Character renderer is not available for capture.');\n if (leaseCount++ === 0) leaseBarrier = new Promise<void>((resolve) => { leasesReleased = resolve; });\n let released = false;\n return { renderer: active.renderer, release: () => {\n if (released) return; released = true;\n if (--leaseCount === 0) { leasesReleased?.(); leasesReleased = null; leaseBarrier = null; }\n } };\n },\n releaseSceneResources: (release) => {\n // Disposal already owns the drain. A later caller can free its resources\n // once that completion settles, including when owned cleanup failed.\n if (disposal) return disposal.then(release, release);\n const previous = pending;\n pendingResourceReleases++;\n const operation = Promise.resolve(previous).catch(() => undefined).then(async () => {\n if (leaseCount) await leaseBarrier;\n if (owner.drain) await owner.drain.catch(() => undefined);\n if (owner.binding) {\n await owner.binding.suspend().catch(failure => owner.reportFailure(failure, active?.renderer));\n }\n try {\n release();\n } finally {\n if (!disposed && active && !active.lost) {\n await owner.binding?.commit(active.renderer).catch(failure => owner.reportFailure(failure, active?.renderer));\n }\n }\n return getSnapshot();\n }).finally(() => { pendingResourceReleases--; });\n // Serialize release with replacement so a recovery requested during the\n // drain cannot compile resources that the callback is about to free.\n pending = operation;\n void operation.then(() => { if (pending === operation) pending = null; }, () => { if (pending === operation) pending = null; });\n return operation.then(() => undefined);\n },\n };\n const owner = registerSceneRendering(rendering, scene, camera, () => pending, (failure, renderer) => {\n if (disposed) return;\n const problem = failure instanceof Error ? failure : new Error(String(failure));\n if (candidateInUse && renderer === candidateInUse.renderer && renderer !== active?.renderer) { candidateInUse.lost = problem; return; }\n if (active) active.lost = problem;\n status = active ? 'lost' : 'error'; error = problem;\n void owner.binding?.suspend().catch(() => undefined);\n notify();\n });\n const dispose = (): Promise<void> => {\n if (disposal) return disposal;\n let resolve!: () => void;\n let reject!: (failure: unknown) => void;\n disposal = new Promise<void>((yes, no) => { resolve = yes; reject = no; });\n void disposal.catch(() => undefined);\n disposed = true; owner.disposed = true; generation++; lighting.close();\n status = 'disposed'; notify(); listeners.clear();\n const drain = owner.binding?.suspend() ?? owner.drain;\n const cleanup = () => {\n try {\n if (active?.renderer.domElement.parentElement === container) container.removeChild(active.renderer.domElement);\n try { lifetime.dispose(); } finally { active?.dispose(); }\n resolve();\n } catch (failure) { reject(failure); }\n };\n // Callers await this before releasing borrowed character resources. The\n // same completion also drains captures and a recently disposed camera.\n if (pending || leaseCount || drain) void Promise.allSettled([pending, drain, leaseBarrier]).then(cleanup);\n else cleanup();\n return disposal;\n };\n const setSceneSettings = (value: CharacterSceneConfiguration) => {\n if (disposed) return;\n shadowsEnabled = value.shadows ?? true;\n const type = CHARACTER_SCENE_TYPES[value.type ?? DEFAULT_CHARACTER_SCENE_TYPE_ID] ?? CHARACTER_SCENE_TYPES[DEFAULT_CHARACTER_SCENE_TYPE_ID];\n currentSceneType = type.id;\n const background = value.background === undefined ? type.background : value.background;\n scene.background = background == null ? null : new Color(background);\n camera.fov = value.cameraFov ?? 45; camera.updateProjectionMatrix();\n const preset = DEFAULT_CHARACTER_LIGHTING_PRESETS[value.lightingPreset ?? type.lightingPreset] ?? DEFAULT_CHARACTER_LIGHTING_PRESETS[DEFAULT_CHARACTER_LIGHTING_PRESET_ID];\n lighting.controller.setSettings({ ...preset.settings, ...value.lighting });\n if (active) active.renderer.shadowMap.enabled = value.shadows ?? true;\n const showPlane = value.shadowPlane ?? type.shadowPlane;\n if (showPlane) ensureShadowPlane();\n if (shadowPlane) shadowPlane.visible = showPlane;\n };\n const ready = setSettings(settings);\n return { container, scene, camera, lighting: lighting.controller, get shadowPlane() { return shadowPlane; }, get sceneType() { return currentSceneType; }, ownsScene: true,\n rendering, ready, get renderer() { return active?.renderer ?? null; }, get backend() { return active?.backend ?? null; }, resize, setSceneSettings, dispose };\n } catch (failure) { rollback(lifetime.dispose); throw failure; }\n}\n\n/** Compatibility factory: failure releases all owned resources. Use the runtime factory for initial retry. */\nexport async function createDefaultCharacterSceneAsync(\n container: HTMLElement,\n options: DefaultCharacterSceneAsyncOptions = {},\n): Promise<ReadyDefaultCharacterScene> {\n const runtime = createDefaultCharacterSceneRuntime(container, options);\n try {\n const snapshot = await runtime.ready;\n if (!snapshot.renderer) throw new Error('Character scene renderer was not initialized.');\n const handle: ReadyDefaultCharacterScene = snapshot.backend === 'webgl'\n ? { ...runtime, renderer: snapshot.renderer, backend: 'webgl' }\n : { ...runtime, renderer: snapshot.renderer, backend: 'webgpu' };\n // Existing callers keep their non-null contract after first success. Read\n // rendering.getSnapshot() when an atomic backend/renderer pair is needed.\n Object.defineProperties(handle, {\n renderer: { get: () => runtime.renderer }, backend: { get: () => runtime.backend },\n shadowPlane: { get: () => runtime.shadowPlane }, sceneType: { get: () => runtime.sceneType },\n });\n return handle;\n } catch (failure) {\n try { await runtime.dispose(); } catch { /* Preserve acquisition failure. */ }\n throw failure;\n }\n}\n","import { PerspectiveCamera } from 'three';\nimport { createSceneInkBackground } from './sceneInkBackground';\nimport { resolveCharacterMaterialPalette, resolveCharacterTexturePalette } from './characterTexturePalette';\nimport type { Camera, Scene } from 'three';\nimport { initEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport { Embody } from './character';\nimport type { RustEmbodyHostConfig } from './character';\nimport { loadCharacterModel, applyCharacterModelTransform, disposeCharacterModel } from './model';\nimport type { CharacterModelLoadOptions, CharacterModelLoadResult, CharacterModelTransform } from './model';\nimport { normalizeRenderableCharacterMorphAttributes, assertRenderableCharacterMorphAttributes } from './modelMorphLayout';\nimport { validateMappings } from './authoring';\nimport { createDefaultCharacterSceneAsync } from './scene';\nimport type { CharacterSceneBackend, CharacterSceneConfiguration, CharacterSceneRenderer, CharacterSceneRenderingController, DefaultCharacterSceneAsyncOptions, ReadyDefaultCharacterScene } from './scene';\nimport { ThreeAnnotationController } from './annotations/ThreeAnnotationController';\nimport type { AnnotationCharacterConfig, ThreeAnnotationControllerConfig } from './annotations/types';\nimport type { Profile } from './authoringTypes';\n\nexport interface CharacterHostCharacterOptions extends CharacterModelTransform {\n modelUrl: string;\n presetType?: string;\n profile?: Partial<Profile>;\n annotationConfig?: AnnotationCharacterConfig;\n scene?: CharacterSceneConfiguration;\n}\nexport interface CharacterHostExternalScene {\n scene: Scene;\n renderer: CharacterSceneRenderer;\n backend?: CharacterSceneBackend;\n rendering?: CharacterSceneRenderingController;\n camera: Camera;\n mountCanvas?: boolean;\n manageResize?: boolean;\n setSceneSettings?: (settings: CharacterSceneConfiguration) => void;\n}\nexport type CharacterHostModelLoader = (modelUrl: string, options: CharacterModelLoadOptions & { signal: AbortSignal }) => Promise<CharacterModelLoadResult>;\nexport type CharacterHostPreparation = CharacterModelLoadResult & {\n engine: Embody;\n character: CharacterHostCharacterOptions;\n signal: AbortSignal;\n};\nexport type CharacterHostReady = CharacterHostPreparation & {\n scene: Scene;\n camera: Camera;\n cameraController: ThreeAnnotationController | null;\n rendering: CharacterSceneRenderingController | null;\n};\nexport interface CharacterHostOptions {\n signal?: AbortSignal;\n container: HTMLElement;\n character: CharacterHostCharacterOptions;\n embody?: RustEmbodyHostConfig;\n scene?: Omit<DefaultCharacterSceneAsyncOptions, 'signal'>;\n external?: CharacterHostExternalScene;\n loader?: CharacterModelLoadOptions;\n /** Storage authorization and byte caching remain with the application. */\n loadModel?: CharacterHostModelLoader;\n /** Replays authored mesh edits through the bound engine before GPU preparation. */\n prepareCharacter?: (context: CharacterHostPreparation) => void | Promise<void>;\n onCharacterReady?: (context: CharacterHostReady) => void | Promise<void>;\n /** Default true for compatibility. Editors can retain clips in a lazy catalog. */\n registerEmbeddedAnimations?: boolean;\n camera?: Omit<Partial<ThreeAnnotationControllerConfig>, 'scene' | 'camera' | 'renderer' | 'rendering' | 'domElement'>;\n autoStart?: boolean;\n renderLoop?: boolean;\n autoFrame?: boolean;\n}\nexport interface CharacterHost extends CharacterModelLoadResult {\n engine: Embody;\n scene: Scene;\n readonly renderer: CharacterSceneRenderer | null;\n readonly backend: CharacterSceneBackend | null;\n readonly rendering: CharacterSceneRenderingController | null;\n camera: Camera;\n cameraController: ThreeAnnotationController | null;\n lighting: ReadyDefaultCharacterScene['lighting'] | null;\n ownsScene: boolean;\n container: HTMLElement;\n setCharacter(character: CharacterHostCharacterOptions, loader?: CharacterModelLoadOptions, signal?: AbortSignal): Promise<void>;\n resize(): void;\n dispose(): Promise<void>;\n}\n\n/** Acquire, prepare and reveal a character using the existing native render owner. */\nexport async function createCharacterHost(options: CharacterHostOptions): Promise<CharacterHost> {\n if (!options.container) throw new Error('createCharacterHost requires a container HTMLElement');\n if (!options.character?.modelUrl) throw new Error('createCharacterHost requires character.modelUrl');\n let loaded: CharacterModelLoadResult | undefined;\n let state: ReadyDefaultCharacterScene | CharacterHostExternalScene | undefined;\n let engine: Embody | undefined;\n let controller: ThreeAnnotationController | undefined;\n let host: CharacterHost | undefined;\n let disposed = false;\n let disposal: Promise<void> | undefined;\n let switching: Promise<void> = Promise.resolve();\n let activeChange: AbortController | undefined;\n let request = 0;\n let mountedCanvas: HTMLCanvasElement | undefined;\n const previousBackground = options.container.style?.background ?? '';\n let backgroundRevision = 0;\n const applyCharacterBackground = (value: CharacterModelLoadResult, character: CharacterHostCharacterOptions) => {\n const revision = ++backgroundRevision;\n const settings = sceneSettings(character);\n // Explicit appearance (including transparency) and external scenes remain authoritative.\n const usePalette = !options.external && settings.background === undefined\n && (settings.type === undefined || settings.type === 'studio');\n if (options.container.style) options.container.style.background = previousBackground;\n if (!usePalette) return;\n const background = createSceneInkBackground(css => {\n if (!disposed && revision === backgroundRevision && options.container.style) options.container.style.background = css;\n });\n const key = character.modelUrl;\n const materialPalette = resolveCharacterMaterialPalette(value.model, key);\n background.setPalette(materialPalette);\n void resolveCharacterTexturePalette(value.model, key).then(palette => {\n background.setPalette(palette ?? materialPalette);\n background.dispose();\n });\n };\n const visibility = new WeakMap<CharacterModelLoadResult['model'], boolean>();\n const lifetime = new AbortController();\n const initial = new AbortController();\n activeChange = initial;\n const aborted = () => new DOMException('Character host request was cancelled', 'AbortError');\n const cancel = () => { lifetime.abort(); activeChange?.abort(); };\n const cancelCreation = () => initial.abort();\n options.signal?.addEventListener('abort', cancelCreation, { once: true });\n if (options.signal?.aborted) cancelCreation();\n const check = (signal: AbortSignal) => { if (disposed || lifetime.signal.aborted || signal.aborted) throw aborted(); };\n const releaseModel = async (value: CharacterModelLoadResult) => {\n const release = () => disposeCharacterModel(state?.scene ?? null, value.model);\n if (state?.rendering) await state.rendering.releaseSceneResources(release);\n else release();\n };\n const acquireModel = (character: CharacterHostCharacterOptions, loader: CharacterModelLoadOptions | undefined, signal: AbortSignal) =>\n (options.loadModel ?? loadCharacterModel)(character.modelUrl, { ...loader, signal });\n const sceneSettings = (character: CharacterHostCharacterOptions): CharacterSceneConfiguration => {\n const { background, ...value } = { ...options.scene, ...character.scene };\n // Runtime factory options also accept Three.Color; saved character data does not.\n return { ...value, ...(background === undefined ? {} : {\n background: background && typeof background === 'object' ? background.getHex() : background,\n }) };\n };\n const acquireRenderer = async (signal: AbortSignal) => {\n const rendering = state?.rendering;\n if (!rendering) return undefined;\n try { await rendering.setSettings(rendering.getSettings()); }\n catch (error) { if (!rendering.getSnapshot().renderer) throw error; }\n check(signal);\n return rendering.acquireRenderer();\n };\n const makeEngine = (value: CharacterModelLoadResult, character: CharacterHostCharacterOptions) => {\n let profile = character.profile ?? options.embody?.profile;\n let annotationConfig = character.annotationConfig;\n if (profile) {\n const bones: Array<{ name: string }> = [];\n value.model.traverse(object => { if ((object as { isBone?: boolean }).isBone && object.name) bones.push({ name: object.name }); });\n const validation = validateMappings(value.meshes, { bones }, profile, { suggestCorrections: true, useResolvedNames: true, minConfidence: 0.8 });\n if (validation.suggestedConfig && validation.corrections?.some(correction => correction.applied)) {\n profile = { ...profile, ...validation.suggestedConfig };\n if (annotationConfig) annotationConfig = { ...annotationConfig, ...validation.suggestedConfig };\n }\n }\n const resolvedCharacter = { ...character, profile, annotationConfig };\n const next = new Embody({ ...options.embody, presetType: character.presetType ?? options.embody?.presetType, profile });\n try {\n next.onReady({ model: value.model, meshes: value.meshes,\n ...(options.registerEmbeddedAnimations === false ? {} : { animations: value.animations }) });\n next.stop();\n return { next, character: resolvedCharacter };\n } catch (error) {\n try { next.dispose(); } catch { /* Preserve the binding failure. */ }\n throw error;\n }\n };\n const dispose = (): Promise<void> => {\n if (disposal) return disposal;\n disposed = true;\n backgroundRevision += 1;\n if (options.container.style) options.container.style.background = previousBackground;\n cancel();\n options.signal?.removeEventListener('abort', cancelCreation);\n disposal = (async () => {\n let failure: unknown;\n const attempt = async (release: () => unknown) => { try { await release(); } catch (error) { failure ??= error; } };\n // Cancel a preparation draw before joining an operation waiting on that draw.\n await attempt(() => controller?.dispose());\n await switching.catch(() => {});\n await attempt(() => engine?.dispose());\n const ownedScene = !options.external && state && 'dispose' in state ? state : undefined;\n if (ownedScene) await attempt(() => ownedScene.dispose());\n if (loaded) await attempt(() => releaseModel(loaded!));\n mountedCanvas?.remove();\n if (failure !== undefined) throw failure;\n })();\n return disposal;\n };\n const prepare = async (value: CharacterModelLoadResult, next: Embody, character: CharacterHostCharacterOptions, signal: AbortSignal) => {\n check(signal);\n state?.setSceneSettings?.(sceneSettings(character));\n visibility.set(value.model, value.model.visible);\n value.model.visible = false;\n value.model.userData.embodyCharacterModel = true;\n await options.prepareCharacter?.({ ...value, engine: next, character, signal });\n check(signal);\n normalizeRenderableCharacterMorphAttributes(value.model);\n assertRenderableCharacterMorphAttributes(value.model);\n // Authored morph replay can add meshes/targets. Inspect the final layout.\n if (options.prepareCharacter) next.bindModel();\n value.model.updateMatrixWorld(true);\n state!.scene.add(value.model);\n if (controller) await controller.prepareModelForRender(value.model, { signal });\n check(signal);\n };\n const frameCharacter = async (value: CharacterModelLoadResult, character: CharacterHostCharacterOptions) => {\n if (!controller) return;\n controller.setModel(value.model);\n if (character.annotationConfig) controller.prepareRegionsForReveal(character.annotationConfig);\n else if (options.autoFrame !== false) await controller.focusFullBody(0);\n };\n const ready = async (value: CharacterModelLoadResult, next: Embody, character: CharacterHostCharacterOptions, signal: AbortSignal) => {\n await frameCharacter(value, character);\n check(signal);\n await options.onCharacterReady?.({ ...value, engine: next, character, signal,\n scene: state!.scene, camera: state!.camera, cameraController: controller ?? null, rendering: state!.rendering ?? null });\n check(signal);\n };\n try {\n check(initial.signal);\n loaded = await acquireModel(options.character, options.loader, initial.signal);\n check(initial.signal);\n state = options.external ?? await createDefaultCharacterSceneAsync(options.container, { ...options.scene, ...options.character.scene, signal: initial.signal });\n check(initial.signal);\n await initEmbodyCore();\n check(initial.signal);\n if (options.external?.mountCanvas && !state.renderer.domElement.parentElement) {\n mountedCanvas = state.renderer.domElement;\n options.container.appendChild(mountedCanvas);\n }\n if (options.renderLoop ?? !options.external) {\n if (!(state.camera instanceof PerspectiveCamera)) throw new Error('Character host rendering requires a PerspectiveCamera');\n controller = new ThreeAnnotationController({ ...options.camera,\n scene: state.scene, camera: state.camera, domElement: state.renderer.domElement,\n ...(state.rendering ? { rendering: state.rendering } : { renderer: state.renderer }),\n showDOMControls: options.camera?.showDOMControls ?? false,\n });\n }\n applyCharacterModelTransform(loaded.model, options.character);\n loaded.model.updateMatrixWorld(true);\n const first = makeEngine(loaded, options.character);\n engine = first.next;\n let currentCharacter = first.character;\n const initialLease = await acquireRenderer(initial.signal);\n try {\n await prepare(loaded, engine, first.character, initial.signal);\n await ready(loaded, engine, first.character, initial.signal);\n loaded.model.visible = visibility.get(loaded.model) ?? true;\n applyCharacterBackground(loaded, first.character);\n } finally { initialLease?.release(); }\n if (options.autoStart !== false) engine.start();\n const sceneState = state;\n const rendering = state.rendering ?? null;\n host = {\n engine, scene: state.scene, camera: state.camera, cameraController: controller ?? null,\n get renderer() { return rendering ? rendering.getSnapshot().renderer : sceneState.renderer; },\n get backend() { return rendering ? rendering.getSnapshot().backend : sceneState.backend ?? null; },\n rendering, model: loaded.model, meshes: loaded.meshes, animations: loaded.animations, gltf: loaded.gltf,\n lighting: 'lighting' in state ? state.lighting : null,\n ownsScene: !options.external, container: options.container,\n resize() { if ('resize' in sceneState) sceneState.resize(); },\n setCharacter(character, loader = options.loader, signal) {\n if (disposed || lifetime.signal.aborted) return Promise.reject(aborted());\n if (!character.modelUrl) return Promise.reject(new Error('setCharacter requires character.modelUrl'));\n activeChange?.abort();\n const operation = new AbortController();\n const abort = () => operation.abort();\n signal?.addEventListener('abort', abort, { once: true });\n if (signal?.aborted) abort();\n activeChange = operation;\n const generation = ++request;\n const change = switching.catch(() => {}).then(async () => {\n check(operation.signal);\n if (generation !== request) throw aborted();\n const next = await acquireModel(character, loader, operation.signal);\n let nextEngine: Embody | undefined;\n let lease: Awaited<ReturnType<typeof acquireRenderer>> = undefined;\n let cameraChanged = false;\n let previous: CharacterModelLoadResult | undefined;\n try {\n check(operation.signal);\n lease = await acquireRenderer(operation.signal);\n applyCharacterModelTransform(next.model, character);\n next.model.updateMatrixWorld(true);\n const prepared = makeEngine(next, character);\n nextEngine = prepared.next;\n await prepare(next, nextEngine, prepared.character, operation.signal);\n cameraChanged = true;\n await ready(next, nextEngine, prepared.character, operation.signal);\n check(operation.signal);\n previous = loaded!;\n engine!.dispose();\n engine = nextEngine;\n loaded = next;\n currentCharacter = prepared.character;\n applyCharacterBackground(next, currentCharacter);\n host!.engine = engine;\n host!.model = next.model;\n host!.meshes = next.meshes;\n host!.animations = next.animations;\n host!.gltf = next.gltf;\n previous.model.visible = false;\n next.model.visible = visibility.get(next.model) ?? true;\n if (options.autoStart !== false) engine.start();\n } catch (error) {\n if (loaded !== next) {\n try { state?.setSceneSettings?.(sceneSettings(currentCharacter)); } catch { /* Preserve replacement failure. */ }\n if (cameraChanged && !disposed && controller && loaded) {\n try { await frameCharacter(loaded, currentCharacter); } catch { /* Preserve replacement failure. */ }\n }\n try { nextEngine?.dispose(); } catch { /* Still release the acquired model. */ }\n lease?.release();\n lease = undefined;\n try { await releaseModel(next); } catch { /* Preserve the replacement failure. */ }\n }\n throw error;\n } finally { lease?.release(); }\n if (previous) await releaseModel(previous);\n });\n switching = change.finally(() => signal?.removeEventListener('abort', abort));\n return switching;\n },\n dispose,\n };\n options.signal?.removeEventListener('abort', cancelCreation);\n return host;\n } catch (error) {\n try { await dispose(); } catch { /* Preserve the acquisition error. */ }\n throw error;\n }\n}\n","/**\n * SkeletonOverlay - 3D bone visualization overlay for the Three.js scene.\n *\n * Renders each bone as an elongated octahedral shape (Blender-style armature)\n * stretched from parent joint to child joint. Updates in real-time via\n * onBeforeRender callback, following bone animation.\n */\nimport { fuzzyNameMatch } from '../authoring';\nimport * as THREE from 'three';\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface BoneTreeNode {\n name: string;\n depth: number;\n parent: string | null;\n children: string[];\n isMapped: boolean;\n /** Semantic key if this bone is mapped (e.g., 'HEAD', 'JAW') */\n semanticKey: string | null;\n /** Full semantic-key set for tree badge rendering when a row resolves multiple mappings */\n semanticKeys?: string[];\n /** Live reference to the Three.js bone object */\n boneObject: THREE.Bone;\n}\n\ninterface BoneVisualization {\n mesh: THREE.Mesh;\n parentBone: THREE.Bone;\n childBone: THREE.Bone | null;\n boneName: string;\n isMapped: boolean;\n}\n\nexport interface SkeletonOverlayOptions {\n opacityScale?: number;\n focusSelectedBone?: boolean;\n}\n\ntype OverlayAxisKey = 'pitch' | 'yaw' | 'roll';\nexport type SkeletonOverlayAxisKey = OverlayAxisKey;\ntype SkeletonOverlayRotationChannel = 'rx' | 'ry' | 'rz';\n\nexport interface AxisGizmoPointerData {\n axis: SkeletonOverlayAxisKey;\n channel: SkeletonOverlayRotationChannel;\n boneName: string;\n point: THREE.Vector3;\n origin: THREE.Vector3;\n quaternion: THREE.Quaternion;\n}\n\n// ── Constants ──────────────────────────────────────────────────────────────\n\nconst COLORS = {\n mapped: 0x4a9aaa,\n unmapped: 0x5a6a7a,\n highlighted: 0xd4a040,\n selected: 0x63b3ed,\n} as const;\n\nconst OPACITY = {\n mapped: 0.58,\n unmapped: 0.38,\n highlighted: 0.7,\n selected: 0.8,\n context: 0.46,\n muted: 0.16,\n} as const;\n\nconst AXIS_GIZMO_COLORS: Record<OverlayAxisKey, number> = {\n pitch: 0xff7a5c,\n yaw: 0x61d095,\n roll: 0x69a8ff,\n};\n\nconst AXIS_GIZMO_IDLE_OPACITY = 0.72;\nconst AXIS_GIZMO_MUTED_OPACITY = 0.26;\nconst AXIS_GIZMO_ACTIVE_OPACITY = 0.96;\nconst AXIS_GIZMO_RADIUS_FACTOR = 0.48;\nconst AXIS_GIZMO_MIN_RADIUS = 0.025;\nconst AXIS_GIZMO_MAX_RADIUS = 0.14;\nconst AXIS_GIZMO_SCREEN_RADIUS_PX = 54;\nconst AXIS_GIZMO_ACTIVE_SCALE = 1.05;\nconst AXIS_GIZMO_HIT_TUBE = 0.15;\nconst VISIBILITY_FADE_MS = 180;\nconst VISIBILITY_EPSILON = 0.01;\n\n/** Default length for leaf bones (no children) */\nconst LEAF_BONE_LENGTH = 0.02;\n\n/** Width ratio of octahedron mid-section relative to bone length */\nconst WIDTH_RATIO = 0.1;\n\n/** Position of mid-section along bone axis (0 = parent, 1 = child) */\nconst MID_POSITION = 0.2;\n\n/** Helper/root bones that can introduce non-deforming rig offsets */\nconst ROOT_HELPER_NAME_PATTERN = /armature|bone.?root|rootjoint|(?:^|[_\\W])root(?:$|[_\\W])/i;\nconst HIP_NAME_PATTERN = /(?:^|[_\\W])hip(?:$|[_\\W]|\\d)/i;\nconst PELVIS_NAME_PATTERN = /(?:^|[_\\W])pelvis(?:$|[_\\W]|\\d)/i;\n/** Distance threshold for treating two joints as occupying the same point */\nconst POSITION_EPSILON = 1e-4;\nconst DEFAULT_AXIS_CHANNELS: Record<OverlayAxisKey, SkeletonOverlayRotationChannel> = {\n pitch: 'rx',\n yaw: 'ry',\n roll: 'rz',\n};\n\n// ── Geometry ───────────────────────────────────────────────────────────────\n\n/**\n * Creates a unit octahedral bone geometry (Blender-style).\n * Two pyramids joined at a wider mid-section, extending along +Z axis from 0 to 1.\n *\n * Vertices:\n * root (0,0,0) → mid cross-section at z=0.2 → tip (0,0,1)\n */\nfunction createOctahedralBoneGeometry(): THREE.BufferGeometry {\n const w = WIDTH_RATIO;\n\n // 6 vertices: root, 4 mid-section corners, tip\n const positions = new Float32Array([\n // Face 0: root → mid1 → mid2\n 0, 0, 0, w, w, MID_POSITION, -w, w, MID_POSITION,\n // Face 1: root → mid2 → mid3\n 0, 0, 0, -w, w, MID_POSITION, -w, -w, MID_POSITION,\n // Face 2: root → mid3 → mid4\n 0, 0, 0, -w, -w, MID_POSITION, w, -w, MID_POSITION,\n // Face 3: root → mid4 → mid1\n 0, 0, 0, w, -w, MID_POSITION, w, w, MID_POSITION,\n // Face 4: tip → mid2 → mid1\n 0, 0, 1, -w, w, MID_POSITION, w, w, MID_POSITION,\n // Face 5: tip → mid3 → mid2\n 0, 0, 1, -w, -w, MID_POSITION, -w, w, MID_POSITION,\n // Face 6: tip → mid4 → mid3\n 0, 0, 1, w, -w, MID_POSITION, -w, -w, MID_POSITION,\n // Face 7: tip → mid1 → mid4\n 0, 0, 1, w, w, MID_POSITION, w, -w, MID_POSITION,\n ]);\n\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));\n geometry.computeVertexNormals();\n return geometry;\n}\n\nfunction collectBones(root: THREE.Object3D): THREE.Bone[] {\n const bones = new Set<THREE.Bone>();\n root.traverse((obj) => {\n if ((obj as THREE.Bone).isBone) {\n bones.add(obj as THREE.Bone);\n }\n if ((obj as THREE.SkinnedMesh).isSkinnedMesh) {\n const skinned = obj as THREE.SkinnedMesh;\n skinned.skeleton?.bones?.forEach((bone) => bones.add(bone));\n }\n });\n return Array.from(bones);\n}\n\nfunction isBone(obj: THREE.Object3D | null | undefined): obj is THREE.Bone {\n return !!obj && (obj as THREE.Bone).isBone;\n}\n\nfunction countBoneSubtree(bone: THREE.Bone): number {\n let count = 1;\n for (const child of bone.children) {\n if (isBone(child)) {\n count += countBoneSubtree(child);\n }\n }\n return count;\n}\n\nfunction resolveTopLevelHelperRoot(root: THREE.Object3D): THREE.Bone | null {\n const topLevelBones = collectBones(root).filter((bone) => !isBone(bone.parent));\n if (topLevelBones.length !== 1) return null;\n\n let helperRoot = topLevelBones[0];\n while (ROOT_HELPER_NAME_PATTERN.test(helperRoot.name)) {\n const boneChildren = helperRoot.children.filter(isBone);\n if (boneChildren.length !== 1) break;\n\n const onlyChild = boneChildren[0];\n if (!ROOT_HELPER_NAME_PATTERN.test(onlyChild.name)) break;\n helperRoot = onlyChild;\n }\n\n return ROOT_HELPER_NAME_PATTERN.test(helperRoot.name) ? helperRoot : null;\n}\n\nfunction resolveBodyDisplayRoot(root: THREE.Object3D): THREE.Bone | null {\n const helperRoot = resolveTopLevelHelperRoot(root);\n if (!helperRoot) return null;\n\n const boneChildren = helperRoot.children.filter(isBone);\n if (boneChildren.length === 0) return null;\n if (boneChildren.length === 1) return boneChildren[0];\n\n // Export rigs sometimes hang tiny attachment helpers off the root alongside\n // one real body subtree. Start the overlay at that dominant body child.\n const subtreeSizes = boneChildren\n .map((child) => ({ child, size: countBoneSubtree(child) }))\n .sort((left, right) => right.size - left.size);\n\n const [largest, secondLargest] = subtreeSizes;\n if (!largest || largest.size < 3) return null;\n if (!secondLargest || secondLargest.size <= 2 || largest.size >= secondLargest.size * 3) {\n return largest.child;\n }\n\n return null;\n}\n\nfunction collectBoneChildren(bone: THREE.Object3D): THREE.Bone[] {\n return bone.children.filter(isBone);\n}\n\nfunction hasZeroLengthConnection(parentBone: THREE.Bone, childBone: THREE.Bone): boolean {\n parentBone.getWorldPosition(_parentPos);\n childBone.getWorldPosition(_childPos);\n return _parentPos.distanceToSquared(_childPos) <= POSITION_EPSILON * POSITION_EPSILON;\n}\n\nfunction hasRootHelperAncestor(bone: THREE.Bone): boolean {\n let current: THREE.Object3D | null = bone.parent;\n while (isBone(current)) {\n if (ROOT_HELPER_NAME_PATTERN.test(current.name)) return true;\n current = current.parent;\n }\n return false;\n}\n\nfunction shouldSkipRootHelperConnection(parentBone: THREE.Bone, boneChildren: THREE.Bone[]): boolean {\n if (boneChildren.length !== 1) return false;\n const childBone = boneChildren[0];\n\n if (ROOT_HELPER_NAME_PATTERN.test(parentBone.name)) {\n if (!isBone(parentBone.parent)) return true;\n\n // Nested human rig helpers still produce a useless centerline when the\n // helper feeds into a hip whose pelvis child collapses to the same point.\n return collectBoneChildren(childBone).some((grandChild) => hasZeroLengthConnection(childBone, grandChild));\n }\n\n return (\n hasRootHelperAncestor(parentBone) &&\n HIP_NAME_PATTERN.test(parentBone.name) &&\n PELVIS_NAME_PATTERN.test(childBone.name) &&\n hasZeroLengthConnection(parentBone, childBone)\n );\n}\n\nfunction setRayFromPointer(\n clientX: number,\n clientY: number,\n camera: THREE.Camera,\n domElement: HTMLElement,\n): boolean {\n const rect = domElement.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) return false;\n\n _mouse.x = ((clientX - rect.left) / rect.width) * 2 - 1;\n _mouse.y = -((clientY - rect.top) / rect.height) * 2 + 1;\n _raycaster.setFromCamera(_mouse, camera);\n return true;\n}\n\n// ── Reusable temp objects (avoid GC) ───────────────────────────────────────\n\nconst _parentPos = new THREE.Vector3();\nconst _childPos = new THREE.Vector3();\nconst _direction = new THREE.Vector3();\nconst _zAxis = new THREE.Vector3(0, 0, 1);\nconst _quaternion = new THREE.Quaternion();\nconst _bonePos = new THREE.Vector3();\nconst _boneQuat = new THREE.Quaternion();\nconst _boneEuler = new THREE.Euler();\nconst _mouse = new THREE.Vector2();\nconst _raycaster = new THREE.Raycaster();\nconst _cameraSpacePosition = new THREE.Vector3();\nconst _planeNormal = new THREE.Vector3();\nconst _dragPlane = new THREE.Plane();\nconst _planeHit = new THREE.Vector3();\n\nexport function resolveSkeletonOverlayStartBoneName(\n root: THREE.Object3D,\n): string | null {\n return resolveBodyDisplayRoot(root)?.name ?? null;\n}\n\n// ── SkeletonOverlay Class ──────────────────────────────────────────────────\n\nexport class SkeletonOverlay {\n private scene: THREE.Scene;\n private group: THREE.Group;\n private visualizations: BoneVisualization[] = [];\n private boneTree: BoneTreeNode[] = [];\n private mappedBoneNames: Set<string>;\n private semanticKeyMap: Map<string, string>; // boneName → semanticKey\n private boneLookup = new Map<string, THREE.Bone>();\n\n // Shared geometry and materials\n private sharedGeometry: THREE.BufferGeometry;\n private mappedMaterial: THREE.MeshBasicMaterial;\n private unmappedMaterial: THREE.MeshBasicMaterial;\n private highlightMaterial: THREE.MeshBasicMaterial;\n private selectedMaterial: THREE.MeshBasicMaterial;\n private contextMaterial: THREE.MeshBasicMaterial;\n private mutedMaterial: THREE.MeshBasicMaterial;\n private axisRingGeometry: THREE.TorusGeometry;\n private axisRingHitGeometry: THREE.TorusGeometry;\n private axisCenterGeometry: THREE.SphereGeometry;\n private pitchRingMaterial: THREE.MeshBasicMaterial;\n private yawRingMaterial: THREE.MeshBasicMaterial;\n private rollRingMaterial: THREE.MeshBasicMaterial;\n private axisHitMaterial: THREE.MeshBasicMaterial;\n private axisCenterMaterial: THREE.MeshBasicMaterial;\n private axisGizmoGroup: THREE.Group;\n private axisGizmoMeshes: Record<OverlayAxisKey, THREE.Mesh>;\n private axisGizmoHitMeshes: Record<OverlayAxisKey, THREE.Mesh>;\n\n // Sentinel mesh for per-frame updates (stored for disposal)\n private sentinelMesh: THREE.Mesh | null = null;\n\n // State\n private highlightedBone: string | null = null;\n private selectedBone: string | null = null;\n private activeAxis: OverlayAxisKey | null = null;\n private opacityScale: number;\n private focusSelectedBone: boolean;\n private visibilityAlpha = 0;\n private visibilityTarget = 0;\n private visibilityLastFrameAt = 0;\n\n constructor(\n scene: THREE.Scene,\n mappedBoneNames: Set<string>,\n semanticKeyMap: Map<string, string>,\n options: SkeletonOverlayOptions = {},\n ) {\n this.scene = scene;\n this.mappedBoneNames = mappedBoneNames;\n this.semanticKeyMap = semanticKeyMap;\n this.opacityScale = THREE.MathUtils.clamp(options.opacityScale ?? 1, 0, 1);\n this.focusSelectedBone = options.focusSelectedBone ?? false;\n\n this.group = new THREE.Group();\n this.group.name = 'SkeletonOverlay';\n this.group.renderOrder = 999;\n this.group.visible = false;\n\n this.sharedGeometry = createOctahedralBoneGeometry();\n\n const materialOpts: Partial<THREE.MeshBasicMaterialParameters> = {\n transparent: true,\n depthTest: false,\n depthWrite: false,\n side: THREE.DoubleSide,\n };\n\n this.mappedMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.mapped, opacity: OPACITY.mapped });\n this.unmappedMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.unmapped, opacity: OPACITY.unmapped });\n this.highlightMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.highlighted, opacity: OPACITY.highlighted });\n this.selectedMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.selected, opacity: OPACITY.selected });\n this.contextMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.selected, opacity: OPACITY.context });\n this.mutedMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.unmapped, opacity: OPACITY.muted });\n this.mappedMaterial.forceSinglePass = true;\n this.unmappedMaterial.forceSinglePass = true;\n this.highlightMaterial.forceSinglePass = true;\n this.selectedMaterial.forceSinglePass = true;\n this.contextMaterial.forceSinglePass = true;\n this.mutedMaterial.forceSinglePass = true;\n\n this.axisRingGeometry = new THREE.TorusGeometry(1, 0.032, 10, 120);\n this.axisRingHitGeometry = new THREE.TorusGeometry(1, AXIS_GIZMO_HIT_TUBE, 8, 64);\n this.axisCenterGeometry = new THREE.SphereGeometry(0.082, 12, 8);\n this.pitchRingMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: AXIS_GIZMO_COLORS.pitch, opacity: AXIS_GIZMO_IDLE_OPACITY });\n this.yawRingMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: AXIS_GIZMO_COLORS.yaw, opacity: AXIS_GIZMO_IDLE_OPACITY });\n this.rollRingMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: AXIS_GIZMO_COLORS.roll, opacity: AXIS_GIZMO_IDLE_OPACITY });\n this.axisHitMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, opacity: 0 });\n this.axisHitMaterial.colorWrite = false;\n this.axisCenterMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: 0xf5f7fa, opacity: 0.92 });\n\n this.axisGizmoGroup = new THREE.Group();\n this.axisGizmoGroup.name = 'SelectedBoneAxisGizmo';\n this.axisGizmoGroup.visible = false;\n this.axisGizmoGroup.renderOrder = 1000;\n\n const pitchRing = new THREE.Mesh(this.axisRingGeometry, this.pitchRingMaterial);\n pitchRing.renderOrder = 1000;\n pitchRing.userData.axis = 'pitch';\n const pitchHit = new THREE.Mesh(this.axisRingHitGeometry, this.axisHitMaterial);\n pitchHit.userData.axis = 'pitch';\n\n const yawRing = new THREE.Mesh(this.axisRingGeometry, this.yawRingMaterial);\n yawRing.renderOrder = 1000;\n yawRing.userData.axis = 'yaw';\n const yawHit = new THREE.Mesh(this.axisRingHitGeometry, this.axisHitMaterial);\n yawHit.userData.axis = 'yaw';\n\n const rollRing = new THREE.Mesh(this.axisRingGeometry, this.rollRingMaterial);\n rollRing.renderOrder = 1000;\n rollRing.userData.axis = 'roll';\n const rollHit = new THREE.Mesh(this.axisRingHitGeometry, this.axisHitMaterial);\n rollHit.rotation.copy(rollRing.rotation);\n rollHit.userData.axis = 'roll';\n\n const center = new THREE.Mesh(this.axisCenterGeometry, this.axisCenterMaterial);\n center.renderOrder = 1001;\n\n this.axisGizmoMeshes = {\n pitch: pitchRing,\n yaw: yawRing,\n roll: rollRing,\n };\n this.axisGizmoHitMeshes = {\n pitch: pitchHit,\n yaw: yawHit,\n roll: rollHit,\n };\n\n Object.values(this.axisGizmoMeshes).forEach((mesh) => {\n mesh.frustumCulled = false;\n this.axisGizmoGroup.add(mesh);\n });\n Object.values(this.axisGizmoHitMeshes).forEach((mesh) => {\n mesh.frustumCulled = false;\n this.axisGizmoGroup.add(mesh);\n });\n center.frustumCulled = false;\n this.axisGizmoGroup.add(center);\n this.syncAxisGizmoChannels();\n this.syncVisibilityOpacity();\n this.updateAxisGizmoAppearance();\n }\n\n /**\n * Build the skeleton visualization from a scene root.\n * Traverses to find all THREE.Bone instances and creates octahedral meshes.\n */\n loadSkeleton(root: THREE.Object3D): void {\n this.clear();\n root.updateWorldMatrix(true, true);\n\n // Collect all bones\n const allBones = collectSkeletonBones(root);\n const includedBones = new Set(allBones);\n this.boneLookup = new Map(allBones.map((bone) => [bone.name, bone]));\n\n if (allBones.length === 0) return;\n\n // Build tree data for UI\n this.boneTree = allBones.map((bone) => {\n const isMapped = this.mappedBoneNames.has(bone.name);\n const semanticKey = this.semanticKeyMap.get(bone.name) ?? null;\n const boneChildren = bone.children\n .filter((c): c is THREE.Bone => isBone(c) && includedBones.has(c))\n .map((c) => c.name);\n const parentName = bone.parent && isBone(bone.parent) && includedBones.has(bone.parent)\n ? bone.parent.name\n : null;\n\n // Compute depth by walking up\n let depth = 0;\n let current: THREE.Object3D | null = bone.parent;\n while (current && isBone(current) && includedBones.has(current)) {\n depth++;\n current = current.parent;\n }\n\n return {\n name: bone.name,\n depth,\n parent: parentName,\n children: boneChildren,\n isMapped,\n semanticKey,\n boneObject: bone,\n };\n });\n\n // Create visualization meshes for each bone→child connection\n for (const bone of allBones) {\n const boneChildren = bone.children.filter(\n (c): c is THREE.Bone => isBone(c) && includedBones.has(c),\n );\n\n if (boneChildren.length > 0) {\n // Root/helper bones often exist only for rig transforms and produce\n // a misleading centerline (for example between a character's legs).\n if (shouldSkipRootHelperConnection(bone, boneChildren)) {\n continue;\n }\n\n for (const child of boneChildren) {\n this.createBoneMesh(bone, child);\n }\n } else {\n this.createBoneMesh(bone, null);\n }\n }\n\n this.group.add(this.axisGizmoGroup);\n\n // Attach onBeforeRender to a sentinel mesh for per-frame updates\n const sentinelGeo = new THREE.SphereGeometry(1e-6, 4, 2);\n const sentinelMat = new THREE.MeshBasicMaterial({\n transparent: true,\n opacity: 0,\n depthWrite: false,\n depthTest: false,\n });\n sentinelMat.colorWrite = false;\n const sentinel = new THREE.Mesh(sentinelGeo, sentinelMat);\n sentinel.visible = true;\n sentinel.frustumCulled = false;\n sentinel.onBeforeRender = (renderer, _scene, camera) => this.update(camera, renderer.domElement);\n this.sentinelMesh = sentinel;\n this.group.add(sentinel);\n\n this.scene.add(this.group);\n this.update();\n }\n\n private createBoneMesh(parentBone: THREE.Bone, childBone: THREE.Bone | null): void {\n const isMapped = this.mappedBoneNames.has(parentBone.name);\n const material = isMapped ? this.mappedMaterial : this.unmappedMaterial;\n\n const mesh = new THREE.Mesh(this.sharedGeometry, material);\n mesh.name = `bone_vis_${parentBone.name}${childBone ? `_${childBone.name}` : '_leaf'}`;\n mesh.frustumCulled = false;\n mesh.renderOrder = 999;\n\n // Store bone name for picking\n mesh.userData.boneName = parentBone.name;\n\n this.visualizations.push({\n mesh,\n parentBone,\n childBone,\n boneName: parentBone.name,\n isMapped,\n });\n\n this.group.add(mesh);\n }\n\n /** Called each frame via onBeforeRender. Updates all bone mesh transforms. */\n private update(camera?: THREE.Camera | null, domElement?: HTMLElement | null): void {\n this.advanceVisibility();\n\n for (const vis of this.visualizations) {\n vis.parentBone.getWorldPosition(_parentPos);\n\n if (vis.childBone) {\n vis.childBone.getWorldPosition(_childPos);\n } else {\n // Leaf bone: extend a short distance along bone's local Y axis\n _childPos.set(0, LEAF_BONE_LENGTH, 0);\n vis.parentBone.localToWorld(_childPos);\n }\n\n // Compute direction and length\n _direction.subVectors(_childPos, _parentPos);\n const length = _direction.length();\n\n if (length < 0.0001) {\n vis.mesh.visible = false;\n continue;\n }\n\n vis.mesh.visible = this.visibilityAlpha > VISIBILITY_EPSILON;\n\n // Orient: geometry is authored along +Z, align it with parent→child direction\n _direction.normalize();\n _quaternion.setFromUnitVectors(_zAxis, _direction);\n\n vis.mesh.position.copy(_parentPos);\n vis.mesh.quaternion.copy(_quaternion);\n vis.mesh.scale.set(length, length, length);\n }\n\n this.updateAxisGizmo(camera, domElement);\n }\n\n private syncVisibilityOpacity(): void {\n const alpha = this.visibilityAlpha * this.opacityScale;\n this.mappedMaterial.opacity = OPACITY.mapped * alpha;\n this.unmappedMaterial.opacity = OPACITY.unmapped * alpha;\n this.highlightMaterial.opacity = OPACITY.highlighted * alpha;\n this.selectedMaterial.opacity = OPACITY.selected * alpha;\n this.contextMaterial.opacity = OPACITY.context * alpha;\n this.mutedMaterial.opacity = OPACITY.muted * alpha;\n }\n\n private syncGroupVisibility(): void {\n this.group.visible = this.visualizations.length > 0 && (\n this.visibilityTarget > 0 ||\n this.visibilityAlpha > VISIBILITY_EPSILON ||\n this.selectedBone != null\n );\n }\n\n private advanceVisibility(): void {\n const now = typeof performance !== 'undefined' ? performance.now() : Date.now();\n const deltaMs = this.visibilityLastFrameAt > 0 ? now - this.visibilityLastFrameAt : 16;\n this.visibilityLastFrameAt = now;\n\n if (Math.abs(this.visibilityAlpha - this.visibilityTarget) > VISIBILITY_EPSILON) {\n const step = deltaMs / VISIBILITY_FADE_MS;\n if (this.visibilityTarget > this.visibilityAlpha) {\n this.visibilityAlpha = Math.min(this.visibilityTarget, this.visibilityAlpha + step);\n } else {\n this.visibilityAlpha = Math.max(this.visibilityTarget, this.visibilityAlpha - step);\n }\n } else {\n this.visibilityAlpha = this.visibilityTarget;\n }\n\n if (this.visibilityAlpha <= VISIBILITY_EPSILON && this.visibilityTarget === 0) {\n this.visibilityAlpha = 0;\n }\n\n this.syncVisibilityOpacity();\n this.syncGroupVisibility();\n }\n\n private resolveSelectedBoneObject(): THREE.Bone | null {\n if (!this.selectedBone) return null;\n return this.boneLookup.get(this.selectedBone) ?? null;\n }\n\n private resolveBoneRelativeAxisGizmoRadius(bone: THREE.Bone): number {\n bone.getWorldPosition(_parentPos);\n\n let referenceLength = 0;\n for (const child of bone.children) {\n if (!isBone(child)) continue;\n child.getWorldPosition(_childPos);\n const nextDistance = _parentPos.distanceTo(_childPos);\n if (nextDistance <= 0.0001) continue;\n referenceLength = referenceLength === 0 ? nextDistance : Math.min(referenceLength, nextDistance);\n }\n\n if (referenceLength <= 0.0001 && isBone(bone.parent)) {\n bone.parent.getWorldPosition(_childPos);\n referenceLength = _parentPos.distanceTo(_childPos);\n }\n\n if (referenceLength <= 0.0001) {\n referenceLength = LEAF_BONE_LENGTH;\n }\n\n return THREE.MathUtils.clamp(\n referenceLength * AXIS_GIZMO_RADIUS_FACTOR,\n AXIS_GIZMO_MIN_RADIUS,\n AXIS_GIZMO_MAX_RADIUS,\n );\n }\n\n private resolveScreenSpaceAxisGizmoRadius(\n origin: THREE.Vector3,\n camera?: THREE.Camera | null,\n domElement?: HTMLElement | null,\n ): number | null {\n if (!camera || !domElement) return null;\n\n const rect = domElement.getBoundingClientRect();\n const viewportHeight = domElement.clientHeight || rect.height;\n if (viewportHeight <= 0) return null;\n\n if ((camera as THREE.PerspectiveCamera).isPerspectiveCamera) {\n const perspectiveCamera = camera as THREE.PerspectiveCamera;\n _cameraSpacePosition.copy(origin).applyMatrix4(perspectiveCamera.matrixWorldInverse);\n const depth = -_cameraSpacePosition.z;\n if (!Number.isFinite(depth) || depth <= perspectiveCamera.near) return null;\n\n const visibleWorldHeight = 2\n * depth\n * Math.tan(THREE.MathUtils.degToRad(perspectiveCamera.getEffectiveFOV()) / 2);\n return visibleWorldHeight * (AXIS_GIZMO_SCREEN_RADIUS_PX / viewportHeight);\n }\n\n if ((camera as THREE.OrthographicCamera).isOrthographicCamera) {\n const orthographicCamera = camera as THREE.OrthographicCamera;\n const visibleWorldHeight = (orthographicCamera.top - orthographicCamera.bottom) / orthographicCamera.zoom;\n return visibleWorldHeight * (AXIS_GIZMO_SCREEN_RADIUS_PX / viewportHeight);\n }\n\n return null;\n }\n\n private resolveAxisGizmoRadius(\n bone: THREE.Bone,\n origin: THREE.Vector3,\n camera?: THREE.Camera | null,\n domElement?: HTMLElement | null,\n ): number {\n return this.resolveScreenSpaceAxisGizmoRadius(origin, camera, domElement)\n ?? this.resolveBoneRelativeAxisGizmoRadius(bone);\n }\n\n private updateAxisGizmoAppearance(): void {\n const hasSelection = !!this.selectedBone;\n this.axisGizmoGroup.visible = hasSelection && this.group.visible;\n\n const meshes: Array<[OverlayAxisKey, THREE.Mesh, THREE.Mesh]> = [\n ['pitch', this.axisGizmoMeshes.pitch, this.axisGizmoHitMeshes.pitch],\n ['yaw', this.axisGizmoMeshes.yaw, this.axisGizmoHitMeshes.yaw],\n ['roll', this.axisGizmoMeshes.roll, this.axisGizmoHitMeshes.roll],\n ];\n\n meshes.forEach(([axis, mesh, hitMesh]) => {\n const material = mesh.material as THREE.MeshBasicMaterial;\n const isActive = this.activeAxis === axis;\n const baseOpacity = this.activeAxis == null\n ? AXIS_GIZMO_IDLE_OPACITY\n : isActive\n ? AXIS_GIZMO_ACTIVE_OPACITY\n : AXIS_GIZMO_MUTED_OPACITY;\n material.opacity = hasSelection ? baseOpacity : 0;\n const scale = isActive ? AXIS_GIZMO_ACTIVE_SCALE : 1;\n mesh.scale.setScalar(scale);\n hitMesh.scale.setScalar(scale);\n });\n this.axisCenterMaterial.opacity = hasSelection ? 0.92 : 0;\n }\n\n private updateAxisGizmo(camera?: THREE.Camera | null, domElement?: HTMLElement | null): void {\n const selectedBone = this.resolveSelectedBoneObject();\n if (!selectedBone || !this.group.visible) {\n this.axisGizmoGroup.visible = false;\n return;\n }\n\n selectedBone.getWorldPosition(_bonePos);\n selectedBone.getWorldQuaternion(_boneQuat);\n const radius = this.resolveAxisGizmoRadius(selectedBone, _bonePos, camera, domElement);\n\n this.axisGizmoGroup.visible = true;\n this.axisGizmoGroup.position.copy(_bonePos);\n this.axisGizmoGroup.quaternion.copy(_boneQuat);\n this.axisGizmoGroup.scale.setScalar(radius);\n this.updateAxisGizmoAppearance();\n this.axisGizmoGroup.updateWorldMatrix(true, true);\n }\n\n private applyAxisRingChannel(\n mesh: THREE.Mesh,\n hitMesh: THREE.Mesh,\n axis: SkeletonOverlayAxisKey,\n ): void {\n const channel = DEFAULT_AXIS_CHANNELS[axis];\n mesh.rotation.set(0, 0, 0);\n hitMesh.rotation.set(0, 0, 0);\n\n if (channel === 'rx') {\n mesh.rotation.y = Math.PI / 2;\n hitMesh.rotation.y = Math.PI / 2;\n return;\n }\n\n if (channel === 'ry') {\n mesh.rotation.x = Math.PI / 2;\n hitMesh.rotation.x = Math.PI / 2;\n }\n }\n\n private syncAxisGizmoChannels(): void {\n (Object.keys(this.axisGizmoMeshes) as OverlayAxisKey[]).forEach((axis) => {\n this.applyAxisRingChannel(\n this.axisGizmoMeshes[axis],\n this.axisGizmoHitMeshes[axis],\n axis,\n );\n });\n }\n\n private getSelectedBonePointerData(): Omit<AxisGizmoPointerData, 'axis' | 'point' | 'channel'> | null {\n const bone = this.resolveSelectedBoneObject();\n if (!bone || !this.selectedBone) return null;\n\n bone.getWorldPosition(_bonePos);\n bone.getWorldQuaternion(_boneQuat);\n\n return {\n boneName: this.selectedBone,\n origin: _bonePos.clone(),\n quaternion: _boneQuat.clone(),\n };\n }\n\n private getAxisPlaneNormal(axis: SkeletonOverlayAxisKey, quaternion: THREE.Quaternion): THREE.Vector3 {\n const channel = DEFAULT_AXIS_CHANNELS[axis];\n if (channel === 'rx') {\n return _planeNormal.set(1, 0, 0).applyQuaternion(quaternion).normalize();\n }\n if (channel === 'ry') {\n return _planeNormal.set(0, 1, 0).applyQuaternion(quaternion).normalize();\n }\n return _planeNormal.set(0, 0, 1).applyQuaternion(quaternion).normalize();\n }\n\n // ── Public API ─────────────────────────────────────────────────────────\n\n getBoneTree(): BoneTreeNode[] {\n return this.boneTree;\n }\n\n setVisible(visible: boolean): void {\n this.visibilityTarget = visible ? 1 : 0;\n this.visibilityLastFrameAt = 0;\n this.syncGroupVisibility();\n this.advanceVisibility();\n this.updateAxisGizmoAppearance();\n }\n\n isVisible(): boolean {\n return this.visibilityTarget > 0;\n }\n\n setHighlighted(boneName: string | null): void {\n this.highlightedBone = boneName;\n this.refreshBoneMaterials();\n }\n\n setSelected(boneName: string | null): void {\n this.selectedBone = boneName;\n\n this.refreshBoneMaterials();\n this.syncGroupVisibility();\n this.updateAxisGizmo();\n }\n\n setActiveAxis(axis: OverlayAxisKey | null): void {\n this.activeAxis = axis;\n this.updateAxisGizmoAppearance();\n }\n\n /** Get world position and rotation for a bone by name */\n getBoneTransform(boneName: string): { position: [number, number, number]; rotation: [number, number, number] } | null {\n const node = this.boneTree.find((b) => b.name === boneName);\n if (!node) return null;\n\n const bone = node.boneObject;\n bone.getWorldPosition(_bonePos);\n bone.getWorldQuaternion(_boneQuat);\n _boneEuler.setFromQuaternion(_boneQuat);\n\n return {\n position: [_bonePos.x, _bonePos.y, _bonePos.z],\n rotation: [\n THREE.MathUtils.radToDeg(_boneEuler.x),\n THREE.MathUtils.radToDeg(_boneEuler.y),\n THREE.MathUtils.radToDeg(_boneEuler.z),\n ],\n };\n }\n\n pickBone(clientX: number, clientY: number, camera: THREE.Camera, domElement: HTMLElement): string | null {\n if (!this.group.visible || this.visibilityTarget <= 0 || this.visibilityAlpha <= 0.35) {\n return null;\n }\n if (!setRayFromPointer(clientX, clientY, camera, domElement)) {\n return null;\n }\n const hits = _raycaster.intersectObjects(\n this.visualizations.map((visualization) => visualization.mesh),\n false,\n );\n const hit = hits[0];\n if (!hit) return null;\n\n return typeof hit.object.userData.boneName === 'string'\n ? hit.object.userData.boneName\n : null;\n }\n\n pickAxisGizmo(clientX: number, clientY: number, camera: THREE.Camera, domElement: HTMLElement): AxisGizmoPointerData | null {\n if (!this.axisGizmoGroup.visible || !this.selectedBone) return null;\n this.updateAxisGizmo(camera, domElement);\n if (!this.axisGizmoGroup.visible) return null;\n if (!setRayFromPointer(clientX, clientY, camera, domElement)) {\n return null;\n }\n\n const hits = _raycaster.intersectObjects(Object.values(this.axisGizmoHitMeshes), false);\n const hit = hits[0];\n if (!hit) return null;\n\n const axis: unknown = hit.object.userData.axis;\n if (axis !== 'pitch' && axis !== 'yaw' && axis !== 'roll') {\n return null;\n }\n\n const base = this.getSelectedBonePointerData();\n if (!base) return null;\n\n return {\n ...base,\n axis,\n channel: DEFAULT_AXIS_CHANNELS[axis],\n point: hit.point.clone(),\n };\n }\n\n projectPointerToAxisPlane(\n clientX: number,\n clientY: number,\n camera: THREE.Camera,\n domElement: HTMLElement,\n axis: SkeletonOverlayAxisKey,\n ): AxisGizmoPointerData | null {\n if (!this.axisGizmoGroup.visible || !this.selectedBone) {\n return null;\n }\n this.updateAxisGizmo(camera, domElement);\n if (!this.axisGizmoGroup.visible) return null;\n const base = this.getSelectedBonePointerData();\n if (!base) return null;\n if (!setRayFromPointer(clientX, clientY, camera, domElement)) {\n return null;\n }\n\n const normal = this.getAxisPlaneNormal(axis, base.quaternion);\n _dragPlane.setFromNormalAndCoplanarPoint(normal, base.origin);\n const hit = _raycaster.ray.intersectPlane(_dragPlane, _planeHit);\n if (!hit) return null;\n\n return {\n ...base,\n axis,\n channel: DEFAULT_AXIS_CHANNELS[axis],\n point: hit.clone(),\n };\n }\n\n private isSelectedContextBone(boneName: string): boolean {\n if (!this.selectedBone || boneName === this.selectedBone) return false;\n const selectedBone = this.boneLookup.get(this.selectedBone);\n const bone = this.boneLookup.get(boneName);\n if (!selectedBone || !bone) return false;\n return bone.parent === selectedBone || selectedBone.parent === bone;\n }\n\n private resolveBoneMaterial(boneName: string, isMapped: boolean): THREE.MeshBasicMaterial {\n if (boneName === this.selectedBone) {\n return this.selectedMaterial;\n }\n if (boneName === this.highlightedBone) {\n return this.highlightMaterial;\n }\n if (this.focusSelectedBone && this.selectedBone) {\n return this.isSelectedContextBone(boneName) ? this.contextMaterial : this.mutedMaterial;\n }\n return isMapped ? this.mappedMaterial : this.unmappedMaterial;\n }\n\n private refreshBoneMaterials(): void {\n for (const vis of this.visualizations) {\n vis.mesh.material = this.resolveBoneMaterial(vis.boneName, vis.isMapped);\n }\n }\n\n private clear(): void {\n // Dispose sentinel mesh resources before clearing\n if (this.sentinelMesh) {\n this.sentinelMesh.geometry.dispose();\n (this.sentinelMesh.material as THREE.Material).dispose();\n this.sentinelMesh = null;\n }\n // Remove all children from group\n while (this.group.children.length > 0) {\n this.group.remove(this.group.children[0]);\n }\n this.visualizations = [];\n this.boneTree = [];\n this.boneLookup.clear();\n this.axisGizmoGroup.visible = false;\n this.group.visible = false;\n }\n\n dispose(): void {\n this.scene.remove(this.group);\n this.clear();\n\n this.sharedGeometry.dispose();\n this.mappedMaterial.dispose();\n this.unmappedMaterial.dispose();\n this.highlightMaterial.dispose();\n this.selectedMaterial.dispose();\n this.contextMaterial.dispose();\n this.mutedMaterial.dispose();\n this.axisRingGeometry.dispose();\n this.axisRingHitGeometry.dispose();\n this.axisCenterGeometry.dispose();\n this.pitchRingMaterial.dispose();\n this.yawRingMaterial.dispose();\n this.rollRingMaterial.dispose();\n this.axisHitMaterial.dispose();\n this.axisCenterMaterial.dispose();\n }\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nexport function collectSkeletonBones(root: THREE.Object3D): THREE.Bone[] {\n const startBone = resolveBodyDisplayRoot(root);\n return collectBones(startBone ?? root);\n}\n\n/**\n * Find the model root from a scene by locating the first bone\n * and walking up to the top-level scene child.\n */\nexport function findModelRoot(scene: THREE.Scene): THREE.Object3D | null {\n const roots: {\n tagged?: THREE.Object3D;\n bone?: THREE.Object3D;\n skinned?: THREE.Object3D;\n } = {};\n\n scene.traverse((obj) => {\n if (!roots.tagged && (obj.userData?.embodyCharacterModel === true || obj.userData?.loomlargeCharacterModel === true)) {\n roots.tagged = obj;\n }\n if (!roots.bone && (obj as THREE.Bone).isBone) {\n roots.bone = obj;\n }\n if (!roots.skinned && (obj as THREE.SkinnedMesh).isSkinnedMesh) {\n roots.skinned = obj;\n }\n });\n\n if (roots.tagged) return roots.tagged;\n\n const anchor = roots.bone ?? roots.skinned;\n if (!anchor) return null;\n\n // Walk up to find the direct child of the scene\n let current: THREE.Object3D | null = anchor;\n while (current && current.parent && current.parent !== scene) {\n current = current.parent;\n }\n\n return current;\n}\n\n/**\n * Build a set of mapped bone names and a semantic key lookup\n * from an engine's profile configuration.\n */\nexport function buildMappedBoneInfo(profile: {\n boneNodes?: Record<string, string>;\n bonePrefix?: string;\n boneSuffix?: string;\n suffixPattern?: string;\n}, actualBoneNames: Iterable<string> = []): { mappedNames: Set<string>; semanticKeyMap: Map<string, string>; semanticKeysMap: Map<string, string[]> } {\n const mappedNames = new Set<string>();\n const semanticKeyMap = new Map<string, string>();\n const semanticKeysMap = new Map<string, string[]>();\n const actualNames = Array.from(new Set(actualBoneNames));\n\n const boneNodes = profile.boneNodes || {};\n const prefix = profile.bonePrefix || '';\n const suffix = profile.boneSuffix || '';\n const addSemanticKey = (boneName: string, semanticKey: string) => {\n mappedNames.add(boneName);\n if (!semanticKeyMap.has(boneName)) {\n semanticKeyMap.set(boneName, semanticKey);\n }\n\n const existing = semanticKeysMap.get(boneName) ?? [];\n if (!existing.includes(semanticKey)) {\n semanticKeysMap.set(boneName, [...existing, semanticKey]);\n }\n };\n\n for (const [semanticKey, nodeName] of Object.entries(boneNodes)) {\n const fullName = prefix + nodeName + suffix;\n addSemanticKey(fullName, semanticKey);\n // Also add raw name for fuzzy matching\n if (fullName !== nodeName) {\n addSemanticKey(nodeName, semanticKey);\n }\n actualNames.forEach((actualName) => {\n if (\n fuzzyNameMatch(actualName, fullName, profile.suffixPattern)\n || fuzzyNameMatch(actualName, nodeName, profile.suffixPattern)\n ) {\n addSemanticKey(actualName, semanticKey);\n }\n });\n }\n\n return { mappedNames, semanticKeyMap, semanticKeysMap };\n}\n","import * as THREE from 'three';\n\nconst DEFAULT_THRESHOLD = 1e-4;\nconst DEFAULT_MAX_POINTS = 12000;\n\nconst COLOR_LOW = { r: 1.0, g: 0.78, b: 0.28 };\nconst COLOR_HIGH = { r: 1.0, g: 0.36, b: 0.16 };\n\nexport interface MorphVertexPreviewOptions {\n threshold?: number;\n maxPoints?: number;\n}\n\nexport interface MorphVertexPreviewSample {\n indices: Uint32Array;\n intensities: Float32Array;\n}\n\nexport interface MorphVertexPreviewRenderData {\n positions: Float32Array;\n colors: Float32Array;\n pointCount: number;\n meshCount: number;\n}\n\nfunction getMorphPositionAttribute(\n mesh: THREE.Mesh,\n morphName: string,\n): THREE.BufferAttribute | THREE.InterleavedBufferAttribute | null {\n const morphIndex = mesh.morphTargetDictionary?.[morphName];\n if (morphIndex == null) return null;\n\n const morphPositions = mesh.geometry.morphAttributes.position;\n return morphPositions?.[morphIndex] ?? null;\n}\n\nfunction getDeltaMagnitudeAtIndex(\n mesh: THREE.Mesh,\n morphAttribute: THREE.BufferAttribute | THREE.InterleavedBufferAttribute,\n index: number,\n): number {\n const geometry = mesh.geometry;\n const relative = geometry.morphTargetsRelative;\n const basePositions = geometry.getAttribute('position');\n if (!basePositions) return 0;\n\n const dx = morphAttribute.getX(index) - (relative ? 0 : basePositions.getX(index));\n const dy = morphAttribute.getY(index) - (relative ? 0 : basePositions.getY(index));\n const dz = morphAttribute.getZ(index) - (relative ? 0 : basePositions.getZ(index));\n return Math.hypot(dx, dy, dz);\n}\n\nexport function resolveMorphPreviewMeshes(\n root: THREE.Object3D,\n morphName: string,\n meshNames?: string[],\n): THREE.Mesh[] {\n const nameFilter = meshNames ? new Set(meshNames) : null;\n const meshes: THREE.Mesh[] = [];\n\n root.traverse((obj) => {\n const mesh = obj as THREE.Mesh;\n if (!mesh.isMesh) return;\n if (nameFilter && !nameFilter.has(mesh.name)) return;\n if (mesh.morphTargetDictionary?.[morphName] == null) return;\n meshes.push(mesh);\n });\n\n return meshes;\n}\n\nexport function buildMorphVertexPreviewSample(\n mesh: THREE.Mesh,\n morphName: string,\n options: MorphVertexPreviewOptions = {},\n): MorphVertexPreviewSample | null {\n const threshold = options.threshold ?? DEFAULT_THRESHOLD;\n const maxPoints = options.maxPoints ?? DEFAULT_MAX_POINTS;\n const morphAttribute = getMorphPositionAttribute(mesh, morphName);\n if (!morphAttribute) return null;\n\n const candidateIndices: number[] = [];\n const magnitudes: number[] = [];\n\n for (let index = 0; index < morphAttribute.count; index += 1) {\n const magnitude = getDeltaMagnitudeAtIndex(mesh, morphAttribute, index);\n if (magnitude <= threshold) continue;\n candidateIndices.push(index);\n magnitudes.push(magnitude);\n }\n\n if (candidateIndices.length === 0) return null;\n\n const stride = candidateIndices.length > maxPoints ? Math.ceil(candidateIndices.length / maxPoints) : 1;\n const sampleCount = Math.ceil(candidateIndices.length / stride);\n const indices = new Uint32Array(sampleCount);\n const intensities = new Float32Array(sampleCount);\n\n let maxMagnitude = 0;\n let cursor = 0;\n for (let i = 0; i < candidateIndices.length; i += stride) {\n const magnitude = magnitudes[i] ?? 0;\n indices[cursor] = candidateIndices[i] ?? 0;\n intensities[cursor] = magnitude;\n maxMagnitude = Math.max(maxMagnitude, magnitude);\n cursor += 1;\n }\n\n const normalizer = maxMagnitude > 0 ? 1 / maxMagnitude : 1;\n for (let i = 0; i < intensities.length; i += 1) {\n intensities[i] *= normalizer;\n }\n\n return { indices, intensities };\n}\n\nfunction writePointColor(colors: Float32Array, offset: number, intensity: number): void {\n colors[offset] = COLOR_LOW.r + (COLOR_HIGH.r - COLOR_LOW.r) * intensity;\n colors[offset + 1] = COLOR_LOW.g + (COLOR_HIGH.g - COLOR_LOW.g) * intensity;\n colors[offset + 2] = COLOR_LOW.b + (COLOR_HIGH.b - COLOR_LOW.b) * intensity;\n}\n\nexport function buildMorphVertexPreviewRenderData(\n meshes: THREE.Mesh[],\n morphName: string,\n cache: Map<string, MorphVertexPreviewSample>,\n options: MorphVertexPreviewOptions = {},\n previous: MorphVertexPreviewRenderData | null = null,\n): MorphVertexPreviewRenderData | null {\n const threshold = options.threshold ?? DEFAULT_THRESHOLD;\n const maxPoints = options.maxPoints ?? DEFAULT_MAX_POINTS;\n const sampledMeshes: Array<{ mesh: THREE.Mesh; sample: MorphVertexPreviewSample }> = [];\n let pointCount = 0;\n\n for (const mesh of meshes) {\n const cacheKey = `${mesh.uuid}:${morphName}:${threshold}:${maxPoints}`;\n let sample = cache.get(cacheKey) ?? null;\n if (!sample) {\n sample = buildMorphVertexPreviewSample(mesh, morphName, { threshold, maxPoints });\n if (sample) cache.set(cacheKey, sample);\n }\n if (!sample) continue;\n sampledMeshes.push({ mesh, sample });\n pointCount += sample.indices.length;\n }\n\n if (pointCount === 0) return null;\n\n const positions = previous?.positions.length === pointCount * 3\n ? previous.positions : new Float32Array(pointCount * 3);\n const colors = previous?.colors.length === pointCount * 3\n ? previous.colors : new Float32Array(pointCount * 3);\n const vertex = new THREE.Vector3();\n let cursor = 0;\n\n for (const { mesh, sample } of sampledMeshes) {\n mesh.updateWorldMatrix(true, false);\n const skinnedMesh = mesh as THREE.SkinnedMesh;\n if (skinnedMesh.isSkinnedMesh && skinnedMesh.skeleton) {\n skinnedMesh.skeleton.update();\n }\n\n for (let i = 0; i < sample.indices.length; i += 1) {\n mesh.getVertexPosition(sample.indices[i] ?? 0, vertex);\n vertex.applyMatrix4(mesh.matrixWorld);\n\n const offset = cursor * 3;\n positions[offset] = vertex.x;\n positions[offset + 1] = vertex.y;\n positions[offset + 2] = vertex.z;\n writePointColor(colors, offset, sample.intensities[i] ?? 0);\n cursor += 1;\n }\n }\n\n return {\n positions,\n colors,\n pointCount,\n meshCount: sampledMeshes.length,\n };\n}\n\ntype PreviewRenderBinding = {\n callbacks: Set<() => void>;\n previous: THREE.Scene['onBeforeRender'];\n render: THREE.Scene['onBeforeRender'];\n};\nconst previewRenderBindings = new WeakMap<THREE.Scene, PreviewRenderBinding>();\n\nfunction bindPreviewRender(scene: THREE.Scene, update: () => void): () => void {\n let binding = previewRenderBindings.get(scene);\n if (!binding) {\n const previous = scene.onBeforeRender;\n const callbacks = new Set<() => void>();\n const render: THREE.Scene['onBeforeRender'] = function (...args) {\n previous.apply(scene, args);\n callbacks.forEach(callback => callback());\n };\n binding = { callbacks, previous, render };\n scene.onBeforeRender = render;\n previewRenderBindings.set(scene, binding);\n }\n binding.callbacks.add(update);\n const current = binding;\n return () => {\n current.callbacks.delete(update);\n if (current.callbacks.size > 0) return;\n if (scene.onBeforeRender === current.render) scene.onBeforeRender = current.previous;\n if (previewRenderBindings.get(scene) === current) previewRenderBindings.delete(scene);\n };\n}\n\n/** Editor overlay sampled by the existing Three render loop, without a separate frame timer. */\nexport class MorphVertexPreview {\n private readonly cache = new Map<string, MorphVertexPreviewSample>();\n private points: THREE.Points<THREE.BufferGeometry, THREE.PointsMaterial> | null = null;\n private active: { morphName: string; meshNames?: string[] } | null = null;\n private renderData: MorphVertexPreviewRenderData | null = null;\n private disposed = false;\n private unbindRender: (() => void) | null = null;\n\n constructor(\n private readonly scene: THREE.Scene,\n private readonly options: MorphVertexPreviewOptions = {},\n ) {}\n\n show(morphName: string, meshNames?: string[]): void {\n if (this.disposed) return;\n if (meshNames?.length === 0) {\n this.hide();\n return;\n }\n if (this.active?.morphName !== morphName\n || this.active?.meshNames?.length !== meshNames?.length\n || meshNames?.some((name, index) => name !== this.active?.meshNames?.[index])) {\n this.cache.clear();\n this.renderData = null;\n }\n this.active = { morphName, meshNames: meshNames?.slice() };\n this.unbindRender ??= bindPreviewRender(this.scene, () => this.update());\n this.update();\n }\n\n hide(): void {\n this.active = null;\n this.cache.clear();\n this.renderData = null;\n this.unbindRender?.();\n this.unbindRender = null;\n if (this.points) this.points.visible = false;\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.hide();\n this.cache.clear();\n if (!this.points) return;\n this.points.removeFromParent();\n this.points.geometry.dispose();\n this.points.material.dispose();\n this.points = null;\n }\n\n private createPoints(): THREE.Points<THREE.BufferGeometry, THREE.PointsMaterial> {\n const points = new THREE.Points(new THREE.BufferGeometry(), new THREE.PointsMaterial({\n size: 0.012,\n sizeAttenuation: true,\n transparent: true,\n opacity: 0.9,\n depthWrite: false,\n vertexColors: true,\n toneMapped: false,\n }));\n points.name = 'MorphVertexPreviewPoints';\n points.renderOrder = 500;\n points.frustumCulled = false;\n points.visible = false;\n this.scene.add(points);\n this.points = points;\n return points;\n }\n\n private update(): void {\n if (this.disposed || !this.active) return;\n const { morphName, meshNames } = this.active;\n const meshes = resolveMorphPreviewMeshes(this.scene, morphName, meshNames);\n const data = buildMorphVertexPreviewRenderData(meshes, morphName, this.cache, this.options, this.renderData);\n this.renderData = data;\n if (!data) {\n if (this.points) this.points.visible = false;\n return;\n }\n const points = this.points ?? this.createPoints();\n this.updateGeometry(points.geometry, data);\n points.geometry.computeBoundingSphere();\n points.material.size = data.pointCount > 6000 ? 0.009 : 0.012;\n points.visible = true;\n }\n\n private updateGeometry(\n geometry: THREE.BufferGeometry,\n data: MorphVertexPreviewRenderData,\n ): void {\n const position = geometry.getAttribute('position') as THREE.BufferAttribute | undefined;\n const color = geometry.getAttribute('color') as THREE.BufferAttribute | undefined;\n if (!position || !color || position.count !== data.pointCount || color.count !== data.pointCount) {\n // Let Three release the old GPU attributes before replacing their handles.\n if (position || color) geometry.dispose();\n geometry.setAttribute('position', new THREE.BufferAttribute(data.positions, 3));\n geometry.setAttribute('color', new THREE.BufferAttribute(data.colors, 3));\n return;\n }\n if (position.array !== data.positions) position.array.set(data.positions);\n if (color.array !== data.colors) color.array.set(data.colors);\n position.needsUpdate = true;\n color.needsUpdate = true;\n }\n}\n","import {\n AdditiveBlending,\n AnimationClip,\n BufferAttribute,\n Euler,\n InterpolateDiscrete,\n MultiplyBlending,\n NoBlending,\n NormalBlending,\n NumberKeyframeTrack,\n PropertyBinding,\n Quaternion,\n QuaternionKeyframeTrack,\n SubtractiveBlending,\n VectorKeyframeTrack,\n} from 'three';\nexport * from './annotations/index';\nexport * from './authoring';\nexport * from './character';\nexport * from './characterHost';\nexport { renderScenePlayback, createScenePlaybackFrame } from './playbackRendering';\nimport { bindModelReferencePose } from './reference-pose';\nimport { concreteTrackName, withComponentTracks } from './clipBindings';\nimport type { ThreeModelReferencePose, ThreeReferencePoseNode } from './reference-pose';\n\nexport { captureModelReferencePose, bindModelReferencePose, extendModelReferencePose } from './reference-pose';\nexport type { ThreeModelReferencePose, ThreeReferencePoseNode } from './reference-pose';\nexport { ThreeNativePlaybackConnector } from './nativePlayback';\nexport type {\n ThreeNativeLoop,\n ThreeNativePlaybackOptions,\n ThreeNativePlaybackControl,\n ThreeNativePlaybackEvent,\n ThreeNativePlaybackBinding,\n} from './nativePlayback';\nimport type {\n KeyframeTrack,\n Material,\n Mesh,\n Object3D,\n} from 'three';\n\nexport const THREE_BLENDING_MODES = {\n Normal: NormalBlending,\n Additive: AdditiveBlending,\n Subtractive: SubtractiveBlending,\n Multiply: MultiplyBlending,\n None: NoBlending,\n} as const;\nexport const BLENDING_MODES = THREE_BLENDING_MODES;\n\ntype BoneEntry = {\n obj: Object3D;\n basePos: { x: number; y: number; z: number };\n baseQuat: ReturnType<Object3D['quaternion']['clone']>;\n baseEuler: { x: number; y: number; z: number; order: string };\n};\n\nconst MORPH_ATTRIBUTE_SEMANTICS = ['position', 'normal', 'tangent', 'color'] as const;\ntype MorphAttributeSemantic = typeof MORPH_ATTRIBUTE_SEMANTICS[number];\n\ntype MorphTargetInput = {\n meshName: string;\n name: string;\n relative?: boolean;\n position: ArrayLike<number>;\n normal?: ArrayLike<number>;\n tangent?: ArrayLike<number>;\n color?: ArrayLike<number>;\n};\n\ntype AddMorphTargetOptions = {\n forceGeometryReplacement?: boolean;\n replace?: boolean;\n resetInfluence?: boolean;\n};\n\ntype MorphMutationStage = {\n mesh: Mesh;\n sourceGeometry: Mesh['geometry'];\n geometry: Mesh['geometry'];\n dictionary: Record<string, number>;\n influences: number[];\n};\n\nconst createNeutralMorphAttribute = (\n geometry: Mesh['geometry'],\n semantic: MorphAttributeSemantic,\n name: string,\n) => {\n const base = geometry.getAttribute(semantic);\n if (!base) throw new Error(`Cannot create ${semantic} morph data without a base attribute`);\n\n const values = new Float32Array(base.count * base.itemSize);\n if (!geometry.morphTargetsRelative) {\n for (let vertexIndex = 0; vertexIndex < base.count; vertexIndex += 1) {\n for (let component = 0; component < base.itemSize; component += 1) {\n values[vertexIndex * base.itemSize + component] = base.getComponent(vertexIndex, component);\n }\n }\n }\n\n const attribute = new BufferAttribute(values, base.itemSize);\n attribute.name = name;\n return attribute;\n};\n\nconst createMorphAttribute = (\n geometry: Mesh['geometry'],\n semantic: MorphAttributeSemantic,\n name: string,\n data: ArrayLike<number>,\n sourceIsRelative: boolean,\n) => {\n const base = geometry.getAttribute(semantic);\n if (!base || data.length !== base.count * base.itemSize) {\n throw new Error(`Invalid ${semantic} morph data length`);\n }\n\n const values = new Float32Array(Array.from(data));\n const destinationIsRelative = geometry.morphTargetsRelative;\n if (sourceIsRelative !== destinationIsRelative) {\n for (let vertexIndex = 0; vertexIndex < base.count; vertexIndex += 1) {\n for (let component = 0; component < base.itemSize; component += 1) {\n const offset = vertexIndex * base.itemSize + component;\n const baseValue = base.getComponent(vertexIndex, component);\n values[offset] = destinationIsRelative\n ? values[offset] - baseValue\n : values[offset] + baseValue;\n }\n }\n }\n\n const attribute = new BufferAttribute(values, base.itemSize);\n attribute.name = name;\n return attribute;\n};\n\nexport type ThreeModelInspection = {\n descriptor: Record<string, unknown> & {\n morphTargets: Array<{\n id: number;\n meshId: number | undefined;\n name: string;\n hostIndex: number;\n initialValue: number;\n }>;\n };\n meshByName: Map<string, Mesh>;\n allMeshes: Mesh[];\n morphMeshes: Mesh[];\n bones: Record<string, BoneEntry>;\n meshBindings: Map<number, Mesh>;\n morphBindings: Map<number, { mesh: Mesh; index: number }>;\n boneBindings: Map<number, Object3D>;\n objectBindings: Map<number, Object3D>;\n};\n\nconst transform = (obj: Object3D) => ({\n position: { x: obj.position.x, y: obj.position.y, z: obj.position.z },\n rotation: { x: obj.quaternion.x, y: obj.quaternion.y, z: obj.quaternion.z, w: obj.quaternion.w },\n scale: { x: obj.scale.x, y: obj.scale.y, z: obj.scale.z },\n});\n\nconst snapshot = (obj: Object3D, reference?: ThreeReferencePoseNode): BoneEntry => {\n if (!reference) {\n return {\n obj,\n basePos: { x: obj.position.x, y: obj.position.y, z: obj.position.z },\n baseQuat: obj.quaternion.clone(),\n baseEuler: { x: obj.rotation.x, y: obj.rotation.y, z: obj.rotation.z, order: obj.rotation.order },\n };\n }\n const { position, rotation } = reference.transform;\n const baseQuat = new Quaternion(rotation.x, rotation.y, rotation.z, rotation.w);\n const euler = reference.rotationEuler ?? new Euler().setFromQuaternion(baseQuat, reference.rotationOrder);\n return {\n obj,\n basePos: { ...position },\n baseQuat,\n baseEuler: { x: euler.x, y: euler.y, z: euler.z, order: reference.rotationOrder },\n };\n};\n\nconst boneDepth = (obj: Object3D) => {\n let depth = 0;\n let parent = obj.parent;\n while (parent) {\n if ((parent as any).isBone || parent.type === 'Bone') depth += 1;\n parent = parent.parent;\n }\n return depth;\n};\n\nconst morphEntries = (mesh: Mesh) => {\n const dictionary = mesh.morphTargetDictionary\n ?? (mesh.geometry as unknown as { morphTargetDictionary?: Record<string, number> }).morphTargetDictionary;\n if (dictionary) {\n return Object.entries(dictionary)\n .map(([name, index]) => ({ name, index }))\n .sort((left, right) => left.index - right.index);\n }\n return (mesh.morphTargetInfluences ?? []).map((_, index) => ({ name: `morph_${index}`, index }));\n};\n\nexport class ThreeModelInspector {\n inspectModel(model: Object3D, options: {\n meshes?: Mesh[];\n profile?: any;\n /** Explicit reference captured before playback; omitted keeps legacy current-pose inspection. */\n referencePose?: ThreeModelReferencePose;\n } = {}): ThreeModelInspection {\n const references = options.referencePose ? bindModelReferencePose(model, options.referencePose) : undefined;\n const restTransform = (object: Object3D) => {\n const reference = references?.get(object);\n return reference ? {\n position: { ...reference.transform.position },\n rotation: { ...reference.transform.rotation },\n scale: { ...reference.transform.scale },\n } : transform(object);\n };\n const objects: Object3D[] = [];\n const allMeshes: Mesh[] = [];\n const boneObjects: Object3D[] = [];\n model.traverse((obj: any) => {\n objects.push(obj);\n if (obj.isMesh) allMeshes.push(obj);\n if (obj.isBone || obj.type === 'Bone') boneObjects.push(obj);\n });\n const inputMeshes = options.meshes ?? [];\n const morphMeshes = Array.from(new Set([...inputMeshes, ...allMeshes.filter((mesh) => morphEntries(mesh).length > 0)]));\n const meshByName = new Map(allMeshes.filter((mesh) => mesh.name).map((mesh) => [mesh.name, mesh]));\n const meshBindings = new Map(allMeshes.map((mesh, index) => [index + 1, mesh]));\n const boneBindings = new Map(boneObjects.map((bone, index) => [index + 1, bone]));\n const objectBindings = new Map(objects.map((object, index) => [index + 1, object]));\n const meshIds = new Map(Array.from(meshBindings, ([id, mesh]) => [mesh, id]));\n const boneIds = new Map(Array.from(boneBindings, ([id, bone]) => [bone, id]));\n const objectIds = new Map(Array.from(objectBindings, ([id, object]) => [object, id]));\n const morphBindings = new Map<number, { mesh: Mesh; index: number }>();\n const morphTargets: ThreeModelInspection['descriptor']['morphTargets'] = [];\n const morphIdsByMesh = new Map<Mesh, number[]>();\n let morphId = 1;\n for (const mesh of allMeshes) {\n const ids: number[] = [];\n for (const entry of morphEntries(mesh)) {\n ids.push(morphId);\n morphBindings.set(morphId, { mesh, index: entry.index });\n morphTargets.push({\n id: morphId,\n meshId: meshIds.get(mesh),\n name: entry.name,\n hostIndex: entry.index,\n initialValue: mesh.morphTargetInfluences?.[entry.index] ?? 0,\n });\n morphId += 1;\n }\n morphIdsByMesh.set(mesh, ids);\n }\n const bones: Record<string, BoneEntry> = {};\n for (const bone of boneObjects) {\n if (bone.name) bones[bone.name] = snapshot(bone, references?.get(bone));\n }\n const profile = options.profile;\n if (profile?.boneNodes) {\n for (const [key, base] of Object.entries(profile.boneNodes as Record<string, string>)) {\n const prefix = profile.bonePrefix ?? '';\n const suffix = profile.boneSuffix ?? '';\n const name = `${base.startsWith(prefix) ? '' : prefix}${base}${base.endsWith(suffix) ? '' : suffix}`;\n const object = model.getObjectByName(name) ?? model.getObjectByName(base);\n if (object) bones[key] = bones[object.name] ?? snapshot(object, references?.get(object));\n }\n }\n return {\n descriptor: {\n id: model.uuid,\n name: model.name || undefined,\n meshes: allMeshes.map((mesh) => ({\n id: meshIds.get(mesh),\n name: mesh.name,\n morphTargetIds: morphIdsByMesh.get(mesh) ?? [],\n visible: mesh.visible,\n })),\n morphTargets,\n bones: boneObjects.map((bone) => {\n const world = references?.get(bone)?.worldPosition ?? bone.getWorldPosition(bone.position.clone());\n const parent = bone.parent && ((bone.parent as any).isBone || bone.parent.type === 'Bone')\n ? bone.parent.name || null\n : null;\n return {\n id: boneIds.get(bone),\n name: bone.name,\n parentName: parent,\n worldPosition: { x: world.x, y: world.y, z: world.z },\n depth: boneDepth(bone),\n restTransform: restTransform(bone),\n };\n }),\n objects: objects.map((object) => ({\n id: objectIds.get(object),\n name: object.name,\n isBone: !!((object as any).isBone || object.type === 'Bone'),\n isCamera: !!(object as any).isCamera,\n restTransform: restTransform(object),\n })),\n },\n meshByName,\n allMeshes,\n morphMeshes,\n bones,\n meshBindings,\n morphBindings,\n boneBindings,\n objectBindings,\n };\n }\n}\n\nconst findTrackTarget = (model: Object3D, track: KeyframeTrack) => {\n try {\n const parsed = PropertyBinding.parseTrackName(track.name);\n const key = parsed.objectName === 'bones' && parsed.objectIndex\n ? String(parsed.objectIndex)\n : parsed.nodeName;\n const object = key\n ? model.getObjectByProperty('uuid', key) ?? PropertyBinding.findNode(model, key)\n : model;\n return { parsed, object };\n } catch {\n return null;\n }\n};\n\nexport type ClipIRTrack = {\n id?: number;\n channelId?: number;\n target: {\n kind?: string;\n meshId?: number;\n morphTargetId?: number;\n boneId?: number;\n objectId?: number;\n property?: string;\n };\n valueType: string;\n times: number[];\n values: number[];\n interpolation?: string;\n /** Replace the first sample with the bound property's current value. */\n inheritStart?: boolean;\n sourceName?: string;\n};\n\nexport type ClipIR = {\n name: string;\n durationSeconds?: number;\n channels?: Array<{ id: number; kind: string; name?: string }>;\n tracks: ClipIRTrack[];\n};\n\n/**\n * Convert host-neutral ClipIR (concrete morph/bone tracks) into a Three.js\n * AnimationClip. The host AnimationMixer owns playback and lerping.\n *\n * Inherited starts are captured from the current scene during this call. Cache\n * the ClipIR and call this again immediately before each play/replay, including\n * utterance replacement. Reusing a returned AnimationClip retains its old start.\n * The source ClipIR is never modified. A delayed inherited first key holds the\n * captured pose until that timestamp, matching ordinary Three track sampling.\n */\nexport function createAnimationClipFromClipIR(\n clip: ClipIR,\n inspection: ThreeModelInspection,\n): AnimationClip {\n const tracks: KeyframeTrack[] = [];\n for (const track of clip.tracks ?? []) {\n const kind = track.target?.kind;\n const trackName = concreteTrackName(track.target, inspection);\n if (!trackName) continue;\n const times = Array.from(track.times ?? []);\n const values = Array.from(track.values ?? []);\n if (!times.length || !values.length) continue;\n // Imported step tracks must keep their hold semantics on the host mixer.\n // Omitted/linear interpolation retains the existing Three default.\n const interpolation = track.interpolation === 'step' ? InterpolateDiscrete : undefined;\n\n if (kind === 'morphTarget') {\n const binding = inspection.morphBindings.get(Number(track.target.morphTargetId));\n if (!binding?.mesh) continue;\n if (track.inheritStart) {\n values[0] = binding.mesh.morphTargetInfluences?.[binding.index] ?? 0;\n }\n tracks.push(new NumberKeyframeTrack(trackName, times, values, interpolation));\n continue;\n }\n\n if (kind === 'boneTransform' || kind === 'objectTransform') {\n const object = kind === 'boneTransform'\n ? inspection.boneBindings.get(Number(track.target.boneId))\n : inspection.objectBindings.get(Number(track.target.objectId));\n if (!object) continue;\n const property = track.target.property ?? 'rotation';\n if (property === 'rotation' || property === 'quaternion') {\n if (track.inheritStart) object.quaternion.toArray(values, 0);\n tracks.push(new QuaternionKeyframeTrack(trackName, times, values, interpolation));\n } else if (property === 'eulerX' || property === 'eulerY' || property === 'eulerZ') {\n const axis = property.slice(-1).toLowerCase() as 'x' | 'y' | 'z';\n if (track.inheritStart) values[0] = object.rotation[axis];\n tracks.push(new NumberKeyframeTrack(trackName, times, values, interpolation));\n } else if (property === 'position') {\n if (track.inheritStart) object.position.toArray(values, 0);\n tracks.push(new VectorKeyframeTrack(trackName, times, values, interpolation));\n } else if (property === 'scale') {\n if (track.inheritStart) object.scale.toArray(values, 0);\n tracks.push(new VectorKeyframeTrack(trackName, times, values, interpolation));\n }\n continue;\n }\n\n if (kind === 'meshVisibility') {\n const mesh = inspection.meshBindings.get(Number(track.target.meshId));\n if (!mesh) continue;\n if (track.inheritStart) values[0] = Number(mesh.visible);\n tracks.push(new NumberKeyframeTrack(trackName, times, values, interpolation));\n }\n }\n\n const duration = Number.isFinite(clip.durationSeconds)\n ? Number(clip.durationSeconds)\n : -1;\n return new AnimationClip(clip.name || 'clip', duration, tracks);\n}\n\nexport function serializeAnimationClips(\n model: Object3D,\n clips: readonly AnimationClip[],\n inspection: ThreeModelInspection,\n) {\n const meshIds = new Map(Array.from(inspection.meshBindings, ([id, mesh]) => [mesh, id]));\n const boneIds = new Map<object, number>(Array.from(inspection.boneBindings, ([id, bone]) => [bone, id]));\n const objectIds = new Map<object, number>(Array.from(inspection.objectBindings, ([id, object]) => [object, id]));\n const morphIds = new Map<Mesh, Map<number, number>>();\n for (const [id, { mesh, index }] of inspection.morphBindings) {\n let indices = morphIds.get(mesh);\n if (!indices) { indices = new Map(); morphIds.set(mesh, indices); }\n if (!indices.has(index)) indices.set(index, id);\n }\n // A catalog commonly repeats the same destinations in many clips. Resolve\n // each track name once per call; nothing survives a model/profile rebind.\n const destinations = new Map<string, ReturnType<typeof findTrackTarget>>();\n return clips.map((clip) => {\n const tracks: ClipIRTrack[] = [];\n const channelKinds = new Map<string, number>();\n const channelId = (kind: 'face' | 'body' | 'scene') => {\n const existing = channelKinds.get(kind);\n if (existing) return existing;\n const id = channelKinds.size + 1;\n channelKinds.set(kind, id);\n return id;\n };\n withComponentTracks(clip).tracks.forEach((track, index) => {\n let found = destinations.get(track.name);\n if (found === undefined) {\n found = findTrackTarget(model, track);\n destinations.set(track.name, found);\n }\n if (!found?.object) return;\n const { parsed, object } = found;\n let target: ClipIRTrack['target'] | null = null;\n const property = parsed.propertyName;\n if ((property === 'morphTargetInfluences' || property === 'weights') && (object as any).isMesh) {\n const mesh = object as Mesh;\n const requested = parsed.propertyIndex;\n const indexValue = typeof requested === 'number'\n ? requested\n : Number.isFinite(Number(requested))\n ? Number(requested)\n : mesh.morphTargetDictionary?.[String(requested)];\n if (indexValue === undefined) return;\n const morphTargetId = morphIds.get(mesh)?.get(indexValue);\n if (morphTargetId !== undefined) target = { kind: 'morphTarget', meshId: meshIds.get(mesh), morphTargetId };\n } else if (property === 'visible' && (object as any).isMesh) {\n target = { kind: 'meshVisibility', meshId: meshIds.get(object as Mesh) };\n } else {\n const transformProperty = property === 'rotation' && ['x', 'y', 'z'].includes(String(parsed.propertyIndex))\n ? `euler${String(parsed.propertyIndex).toUpperCase()}`\n : property === 'quaternion'\n ? 'rotation'\n : property === 'position'\n ? 'position'\n : property === 'scale'\n ? 'scale'\n : null;\n if (transformProperty) {\n const boneId = boneIds.get(object);\n target = boneId\n ? { kind: 'boneTransform', boneId, property: transformProperty }\n : { kind: 'objectTransform', objectId: objectIds.get(object), property: transformProperty };\n }\n }\n if (!target) return;\n const kind = target.kind === 'morphTarget'\n ? 'face'\n : target.kind === 'boneTransform'\n ? 'body'\n : 'scene';\n // glTF cubic tracks store in-tangent/value/out-tangent per key. The\n // registry/validation view describes values; native playback retains\n // the original track and its Three interpolant, including its tangents.\n const cubic = !!(track as KeyframeTrack & {\n createInterpolant: { isInterpolantFactoryMethodGLTFCubicSpline?: boolean };\n }).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline;\n const size = track.getValueSize() / (cubic ? 3 : 1);\n if (!track.values.every(Number.isFinite)) {\n throw new Error(`Animation track ${JSON.stringify(track.name)} contains non-finite samples.`);\n }\n const values = cubic\n ? Array.from(track.times).flatMap((_, key) => Array.from(track.values.slice((key * 3 + 1) * size, (key * 3 + 2) * size)))\n : Array.from(track.values);\n tracks.push({\n id: index + 1,\n channelId: channelId(kind),\n target,\n valueType: size === 4 ? 'quat' : size === 3 ? 'vec3' : 'scalar',\n times: Array.from(track.times),\n values,\n interpolation: track.getInterpolation() === InterpolateDiscrete ? 'step' : 'linear',\n sourceName: track.name,\n });\n });\n return {\n name: clip.name,\n durationSeconds: clip.duration,\n channels: Array.from(channelKinds, ([kind, id]) => ({ id, kind, name: kind })),\n tracks,\n };\n });\n}\n\ntype MaterialConfig = {\n renderOrder?: number;\n transparent?: boolean;\n opacity?: number;\n depthWrite?: boolean;\n depthTest?: boolean;\n blending?: keyof typeof THREE_BLENDING_MODES;\n};\n\nconst materials = (value: Material | Material[] | undefined): Material[] =>\n value ? (Array.isArray(value) ? value : [value]) : [];\n\nexport class ThreeFrameApplier {\n private meshes = new Map<number, Mesh>();\n private morphs = new Map<number, { mesh: Mesh; index: number }>();\n private bones = new Map<number, Object3D>();\n private objects = new Map<number, Object3D>();\n private originalEmissive = new Map<string, { color: number; intensity: number }>();\n\n setBindings(inspection: ThreeModelInspection) {\n this.meshes = new Map(inspection.meshBindings);\n this.morphs = new Map(inspection.morphBindings);\n this.bones = new Map(inspection.boneBindings);\n this.objects = new Map(inspection.objectBindings);\n }\n\n applyPackedMorphFrameDelta(values: ArrayLike<number>, stride = 4) {\n for (let offset = 0; offset + stride <= values.length; offset += stride) {\n const binding = this.morphs.get(values[offset + 1]);\n if (binding?.mesh.morphTargetInfluences) {\n binding.mesh.morphTargetInfluences[binding.index] = values[offset + 2] ?? 0;\n }\n }\n }\n\n applyPackedBoneFrameDelta(values: ArrayLike<number>, stride = 9) {\n for (let offset = 0; offset + stride <= values.length; offset += stride) {\n const bone = this.bones.get(values[offset]);\n if (!bone) continue;\n const flags = values[offset + 8] ?? 0;\n if (flags & 1) bone.position.set(values[offset + 1], values[offset + 2], values[offset + 3]);\n if (flags & 2) bone.quaternion.set(values[offset + 4], values[offset + 5], values[offset + 6], values[offset + 7]).normalize();\n bone.updateMatrixWorld(false);\n }\n }\n\n applySceneFrame(frame: string | Record<string, any>) {\n const value = typeof frame === 'string' ? JSON.parse(frame) : frame;\n for (const write of value.boneScales ?? []) this.bones.get(write.boneId)?.scale.fromArray(write.scale);\n for (const write of value.objects ?? []) {\n const object = this.objects.get(write.objectId);\n if (!object) continue;\n if (write.position) object.position.fromArray(write.position);\n if (write.rotation) object.quaternion.fromArray(write.rotation).normalize();\n if (write.scale) object.scale.fromArray(write.scale);\n object.updateMatrixWorld(false);\n }\n for (const write of value.meshes ?? []) {\n const mesh = this.meshes.get(write.meshId);\n if (mesh) mesh.visible = write.visible;\n }\n }\n\n applyMeshMaterialConfigs(root: Object3D, configs: Record<string, { visible?: boolean; material?: MaterialConfig }>) {\n root.traverse((object: any) => {\n if (!object.isMesh || !object.name) return;\n const config = configs[object.name];\n if (!config) return;\n // Profile replay runs when a model binds and when its profile changes.\n // A visibility-only entry is just as authored as a material override.\n if (typeof config.visible === 'boolean') object.visible = config.visible;\n if (config.material) this.applyMaterial(object, config.material);\n });\n }\n\n getMeshMaterialConfig(root: Object3D, name: string) {\n let result: Record<string, unknown> | null = null;\n this.visitMesh(root, name, (mesh) => {\n const material: any = materials((mesh as any).material)[0];\n if (!material) return;\n const blending = Object.entries(THREE_BLENDING_MODES).find(([, value]) => value === material.blending)?.[0] ?? 'Normal';\n result = { renderOrder: mesh.renderOrder, transparent: material.transparent, opacity: material.opacity, depthWrite: material.depthWrite, depthTest: material.depthTest, blending };\n });\n return result;\n }\n\n setMeshMaterialConfig(root: Object3D, name: string, config: MaterialConfig) {\n this.visitMesh(root, name, (mesh) => this.applyMaterial(mesh, config));\n }\n\n setMeshVisible(root: Object3D, name: string, visible: boolean) {\n this.visitMesh(root, name, (mesh) => { mesh.visible = visible; });\n }\n\n highlightMesh(root: Object3D, name: string | null, color = 0x00ffff, intensity = 0.5) {\n root.traverse((object: any) => {\n if (!object.isMesh) return;\n for (const material of materials(object.material) as any[]) {\n if (!material.emissive) continue;\n const key = `${object.uuid}:${material.uuid}`;\n if (name === object.name) {\n if (!this.originalEmissive.has(key)) this.originalEmissive.set(key, { color: material.emissive.getHex(), intensity: material.emissiveIntensity ?? 0 });\n material.emissive.setHex(color);\n material.emissiveIntensity = intensity;\n } else {\n const original = this.originalEmissive.get(key);\n if (original) {\n material.emissive.setHex(original.color);\n material.emissiveIntensity = original.intensity;\n }\n }\n }\n });\n }\n\n applyHairAppearance(meshes: readonly Mesh[], appearance: any) {\n for (const mesh of meshes) {\n for (const material of materials((mesh as any).material) as any[]) {\n if (appearance.baseColor && material.color) material.color.set(appearance.baseColor);\n if (appearance.emissive && material.emissive) material.emissive.set(appearance.emissive);\n if (typeof appearance.emissiveIntensity === 'number') material.emissiveIntensity = appearance.emissiveIntensity;\n material.needsUpdate = true;\n }\n }\n }\n\n addMorphTarget(\n root: Object3D,\n target: MorphTargetInput,\n options: AddMorphTargetOptions = {},\n ) {\n return this.addMorphTargets(root, [target], options)[`${target.meshName}:${target.name}`];\n }\n\n addMorphTargets(\n root: Object3D,\n targets: readonly MorphTargetInput[],\n options: AddMorphTargetOptions = {},\n ) {\n if (targets.length === 0) return {};\n\n const stages = new Map<string, MorphMutationStage>();\n const result: Record<string, number> = {};\n const batchKeys = new Set<string>();\n\n try {\n for (const target of targets) {\n const key = `${target.meshName}:${target.name}`;\n if (batchKeys.has(key)) throw new Error(`Morph target appears more than once in batch: ${key}`);\n batchKeys.add(key);\n\n let stage = stages.get(target.meshName);\n if (!stage) {\n const mesh = root.getObjectByName(target.meshName) as Mesh | null;\n if (!mesh || !(mesh as any).isMesh) throw new Error(`Mesh not found: ${target.meshName}`);\n stage = {\n mesh,\n sourceGeometry: mesh.geometry,\n geometry: mesh.geometry.clone(),\n dictionary: {\n ...(mesh.morphTargetDictionary\n ?? (mesh.geometry as unknown as { morphTargetDictionary?: Record<string, number> })\n .morphTargetDictionary\n ?? {}),\n },\n influences: [...(mesh.morphTargetInfluences ?? [])],\n };\n stages.set(target.meshName, stage);\n }\n\n result[key] = this.applyMorphTargetToStage(stage, target, options);\n }\n } catch (error) {\n for (const stage of stages.values()) stage.geometry.dispose();\n throw error;\n }\n\n const replaceGeometry = options.forceGeometryReplacement !== false;\n for (const stage of stages.values()) {\n const committedGeometry: any = replaceGeometry ? stage.geometry : stage.sourceGeometry;\n if (!replaceGeometry) {\n committedGeometry.morphAttributes = stage.geometry.morphAttributes;\n committedGeometry.morphTargetsRelative = stage.geometry.morphTargetsRelative;\n committedGeometry.boundingBox = stage.geometry.boundingBox;\n committedGeometry.boundingSphere = stage.geometry.boundingSphere;\n }\n committedGeometry.morphTargetDictionary = { ...stage.dictionary };\n stage.mesh.geometry = committedGeometry;\n stage.mesh.morphTargetDictionary = { ...stage.dictionary };\n stage.mesh.morphTargetInfluences = [...stage.influences];\n if (!replaceGeometry) stage.geometry.dispose();\n }\n if (replaceGeometry) {\n const replacedGeometries = new Set(Array.from(stages.values(), (stage) => stage.sourceGeometry));\n for (const sourceGeometry of replacedGeometries) {\n let stillInUse = false;\n root.traverse((object: any) => {\n if (object.isMesh && object.geometry === sourceGeometry) stillInUse = true;\n });\n if (!stillInUse) sourceGeometry.dispose();\n }\n }\n\n return result;\n }\n\n private applyMorphTargetToStage(\n stage: MorphMutationStage,\n target: MorphTargetInput,\n options: AddMorphTargetOptions,\n ) {\n const geometry: any = stage.geometry;\n const dictionary = stage.dictionary;\n if (!target.name?.trim()) throw new Error(`Morph target name is required for mesh: ${target.meshName}`);\n const configuredIndex = dictionary[target.name];\n const existing = Number.isInteger(configuredIndex) && configuredIndex >= 0\n ? configuredIndex\n : undefined;\n if (existing !== undefined && !options.replace) throw new Error(`Morph target already exists: ${target.name}`);\n\n const usedIndices = Object.values(dictionary)\n .map((value) => {\n if (!Number.isInteger(value) || value < 0) throw new Error(`Invalid morph target index on ${target.meshName}: ${value}`);\n return value;\n });\n const currentTargetCount = Math.max(\n 0,\n ...Object.values(geometry.morphAttributes as Record<string, unknown[]>).map((attributes) => attributes?.length ?? 0),\n usedIndices.length > 0 ? Math.max(...usedIndices) + 1 : 0,\n stage.influences.length,\n );\n const index = existing ?? currentTargetCount;\n const targetCount = Math.max(currentTargetCount, index + 1);\n const sourceIsRelative = target.relative !== false;\n if (currentTargetCount === 0) geometry.morphTargetsRelative = sourceIsRelative;\n\n for (const semantic of MORPH_ATTRIBUTE_SEMANTICS) {\n const data = target[semantic] as ArrayLike<number> | undefined;\n const existingAttributes = geometry.morphAttributes[semantic] as Array<BufferAttribute | undefined> | undefined;\n if (!data && existingAttributes?.length === 0) {\n delete geometry.morphAttributes[semantic];\n continue;\n }\n if (!data && !existingAttributes) continue;\n\n const base = geometry.getAttribute(semantic);\n if (!base || (data && data.length !== base.count * base.itemSize)) {\n throw new Error(`Invalid ${semantic} morph data length`);\n }\n\n const attributes = [...(existingAttributes ?? [])];\n for (let targetIndex = 0; targetIndex < targetCount; targetIndex += 1) {\n if (targetIndex === index && data) {\n attributes[targetIndex] = createMorphAttribute(\n geometry,\n semantic,\n target.name,\n data,\n sourceIsRelative,\n );\n } else if (!attributes[targetIndex] || targetIndex === index) {\n attributes[targetIndex] = createNeutralMorphAttribute(\n geometry,\n semantic,\n targetIndex === index ? target.name : `morph_${targetIndex}`,\n );\n }\n }\n geometry.morphAttributes[semantic] = attributes;\n }\n\n dictionary[target.name] = index;\n geometry.morphTargetDictionary = { ...dictionary };\n while (stage.influences.length < targetCount) stage.influences.push(0);\n if (options.resetInfluence !== false) stage.influences[index] = 0;\n geometry.computeBoundingBox?.();\n geometry.computeBoundingSphere?.();\n return index;\n }\n\n private applyMaterial(mesh: Mesh, config: MaterialConfig) {\n if (typeof config.renderOrder === 'number') mesh.renderOrder = config.renderOrder;\n for (const material of materials((mesh as any).material) as any[]) {\n let changed = false;\n const assign = (key: string, value: unknown) => {\n if (material[key] === value) return;\n material[key] = value;\n changed = true;\n };\n if (typeof config.opacity === 'number') assign('opacity', config.opacity);\n if (typeof config.transparent === 'boolean') assign('transparent', config.transparent);\n else if (typeof config.opacity === 'number' && config.opacity < 1) assign('transparent', true);\n if (typeof config.depthWrite === 'boolean') assign('depthWrite', config.depthWrite);\n if (typeof config.depthTest === 'boolean') assign('depthTest', config.depthTest);\n if (config.blending) assign('blending', THREE_BLENDING_MODES[config.blending]);\n // Profile replacement also replays unchanged materials after mapping edits.\n // Invalidate renderer programs only when an authored material value changes.\n if (changed) material.needsUpdate = true;\n }\n }\n\n private visitMesh(root: Object3D, name: string, visit: (mesh: Mesh) => void) {\n root.traverse((object: any) => { if (object.isMesh && object.name === name) visit(object); });\n }\n}\n\nexport const collectMorphMeshes = (root: Object3D) => {\n const meshes: Mesh[] = [];\n root.traverse((object: any) => { if (object.isMesh && morphEntries(object).length > 0) meshes.push(object); });\n return meshes;\n};\n\nexport * from './model';\nexport * from './scene';\n\nexport * from './editor/SkeletonOverlay';\nexport * from './editor/morphVertexPreview';\n"]}
1
+ {"version":3,"sources":["../three/annotations/runtime.ts","../three/annotations/morphGeometry.ts","../three/annotations/modelObservation.ts","../three/sceneRenderingBinding.ts","../three/modelSkinning.ts","../three/playbackRendering.ts","../three/annotations/modelRenderPreparation.ts","../three/annotations/adapter.ts","../three/annotations/DOMControls.ts","../three/annotations/ThreeAnnotationControls.ts","../three/annotations/ThreeAnnotationRenderer.ts","../three/annotations/markerSurfaceRaycast.ts","../three/annotations/loadFrame.ts","../three/annotations/ThreeAnnotationController.ts","../three/annotations/ThreeAnnotationMarkers.ts","../three/annotations/HtmlAnnotationMarkers.ts","../three/annotations/ThreeAnnotations.ts","../three/annotations/annotationAnchorModel.ts","../three/annotations/runtimeAnnotationSidePreview.ts","../three/annotations/lifecycleBridge.ts","../three/annotations/markerVisibilityLifecycle.ts","../three/annotations/runtimeAnnotationPreview.ts","../three/annotations/runtimeAnnotationPreviewSide.ts","../three/annotations/boneResolutionProfile.ts","../three/reference-pose.ts","../three/vrm-animation.ts","../three/authoring.ts","../three/clipBindings.ts","../three/nativePlayback.ts","../three/character.ts","../three/sceneInkBackgroundStyle.ts","../three/sceneInkBackground.ts","../three/characterTexturePalette.ts","../three/model.ts","../three/modelMorphLayout.ts","../three/sceneBackground.ts","../three/sceneVideoCapture.ts","../three/scene.ts","../three/characterHost.ts","../three/scenery.ts","../three/editor/SkeletonOverlay.ts","../three/editor/morphVertexPreview.ts","../three/index.ts"],"names":["THREE","THREE2","request","requireInitializedEmbodyCore","entry","snapshot","document","target","THREE3","bounds","Quaternion","Vector3","THREE4","THREE5","THREE6","initEmbodyCore","THREE7","THREE8","apply","Matrix4","bindings","isBone","materials","NormalAnimationBlendMode","resource","action","json","finite","DEFAULT_HAIR_COLOR_APPEARANCE","PropertyBinding","AdditiveAnimationBlendMode","progress","InterpolateDiscrete","InterpolateLinear","LoopOnce","LoopPingPong","node","THREE9","THREE10","Box3","FBXLoader","owners","Euler","intensity","MathUtils","Mesh","prepare","Color","background","preset","coordinates","PerspectiveCamera","identity","SRGBColorSpace","CanvasTexture","TextureLoader","LoadingManager","GLTFLoader","Group","THREE12","createNeutralMorphAttribute","BufferAttribute","QuaternionKeyframeTrack","VectorKeyframeTrack","AnimationClip","copy","MeshBasicMaterial"],"mappings":"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","file":"index.js","sourcesContent":["import { requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport type { AnnotationAnchoredRegion, AnnotationCharacterConfig, CameraState, ExpandedRegionState, MarkerStyle, MarkerStyleOverrides, LineConfig } from './types';\n\nexport function annotationQuery<T>(operation: string, payload: unknown): T {\n return JSON.parse(requireInitializedEmbodyCore().annotation_query(operation, JSON.stringify(payload))) as T;\n}\nexport type NativeAnnotationRuntime = InstanceType<ReturnType<typeof requireInitializedEmbodyCore>['AnnotationRuntime']>;\nexport interface MarkerDescriptor {\n id: number;\n name: string;\n label: string;\n title: string;\n htmlText: string;\n style: Required<Omit<MarkerStyleOverrides, 'line'>> & { line: Required<LineConfig> };\n radius: number;\n arrowLength: number;\n arrowRadius: number;\n}\nexport interface AnnotationSnapshot {\n generation: number;\n revision: number;\n descriptorRevision: number;\n configRevision: number;\n disposed: boolean;\n loaded: boolean;\n visible: boolean;\n style: MarkerStyle;\n currentRegion: string | null;\n solo: string | null;\n regions: AnnotationAnchoredRegion[];\n config: AnnotationCharacterConfig;\n descriptors: MarkerDescriptor[];\n camera: CameraState;\n expanded: ExpandedRegionState[];\n}\nexport interface SurfaceQuery { id: number; generation: number; phase: number; origin: [number, number, number]; direction: [number, number, number]; far: number; }\n\n/** Only annotation contract data crosses Wasm; host resources/metadata stay borrowed. */\nexport function annotationConfigInput(config: AnnotationCharacterConfig): Record<string, unknown> {\n const keys = ['characterId', 'characterName', 'regions', 'annotationRegions', 'disabledRegions', 'markerStyle', 'playIntroOnLoad', 'defaultRegion', 'boneNodes', 'bonePrefix', 'boneSuffix', 'suffixPattern', 'auToMorphs', 'auToBones', 'morphToMesh', 'markerGroups', 'lineDefaults', 'markerDefaults'] as const;\n const result: Record<string, unknown> = {};\n for (const key of keys) if (config[key] !== undefined) result[key] = config[key];\n if (config.profile) result.profile = Object.fromEntries(keys.filter(key => config.profile?.[key] !== undefined).map(key => [key, config.profile![key]]));\n return result;\n}\n\n/** Profile transport selects contract fields without traversing host metadata. */\nexport function annotationProfileInput(profile: unknown): unknown {\n if (typeof profile !== 'object' || profile === null || Array.isArray(profile)) return undefined;\n const source = profile as Record<string, unknown>;\n const fields = ['auToBones', 'auToMorphs', 'morphToMesh', 'boneNodes', 'bonePrefix', 'boneSuffix', 'suffixPattern'];\n const result = Object.fromEntries(fields.filter(key => source[key] !== undefined).map(key => [key, source[key]]));\n const nested = source.profile;\n if (typeof nested === 'object' && nested !== null && !Array.isArray(nested)) {\n const value = nested as Record<string, unknown>;\n result.profile = Object.fromEntries(fields.filter(key => value[key] !== undefined).map(key => [key, value[key]]));\n }\n return result;\n}\n","import * as THREE from 'three';\n\ntype Attribute = THREE.BufferAttribute | THREE.InterleavedBufferAttribute;\n\nexport function readAttribute(attribute: Attribute): Float32Array {\n const values = new Float32Array(attribute.count * attribute.itemSize);\n for (let index = 0; index < attribute.count; index++) for (let axis = 0; axis < attribute.itemSize; axis++) values[index * attribute.itemSize + axis] = attribute.getComponent(index, axis);\n return values;\n}\n\nexport function readMorphGeometry(mesh: THREE.Mesh, names: string[]): { base: Float32Array; morphs: Float32Array; relative: boolean } | null {\n const position = mesh.geometry.getAttribute('position');\n if (!position || position.itemSize !== 3) return null;\n const attributes = names.flatMap(name => {\n const index = mesh.morphTargetDictionary?.[name];\n const attribute = index == null ? undefined : mesh.geometry.morphAttributes.position?.[index];\n return attribute ? [attribute] : [];\n });\n if (!attributes.length || attributes.some(attribute => attribute.count !== position.count || attribute.itemSize !== 3)) return null;\n const base = readAttribute(position);\n const morphs = new Float32Array(attributes.length * base.length);\n attributes.forEach((attribute, index) => morphs.set(readAttribute(attribute), index * base.length));\n return { base, morphs, relative: mesh.geometry.morphTargetsRelative };\n}\n\nexport function updateAnnotationWorldMatrices(model: THREE.Object3D): void {\n model.parent?.updateWorldMatrix(true, false);\n // SkinnedMesh updates its bind inverse in this override, before CPU skinning.\n model.updateMatrixWorld(true);\n}\n\nexport function sampleMorphVertices(mesh: THREE.Mesh, indices: ArrayLike<number>, samples: Float32Array, vertex = new THREE.Vector3()): void {\n const skinned = mesh as THREE.SkinnedMesh;\n if (skinned.isSkinnedMesh) {\n // Skeleton bones may be siblings of the mesh, outside its updated subtree.\n for (const bone of skinned.skeleton.bones) bone.updateWorldMatrix(true, false);\n skinned.skeleton.update();\n }\n for (let offset = 0; offset < indices.length; offset++) {\n mesh.getVertexPosition(indices[offset], vertex).applyMatrix4(mesh.matrixWorld);\n samples[offset * 3] = vertex.x;\n samples[offset * 3 + 1] = vertex.y;\n samples[offset * 3 + 2] = vertex.z;\n }\n}\n\n/** Native identities/versions only. Rust decides whether this observation\n * invalidates an attachment and which geometry/vertices are needed next. */\nexport class MorphGeometryObservation {\n revision = 0;\n namesJson = '[]';\n private signature: unknown[] = [];\n observe(mesh: THREE.Mesh): void {\n const dictionary = Object.entries(mesh.morphTargetDictionary ?? {}).sort(([a], [b]) => a.localeCompare(b));\n const attributes = [mesh.geometry.getAttribute('position'), ...(mesh.geometry.morphAttributes.position ?? [])];\n const signature: unknown[] = [mesh.geometry, mesh.geometry.morphTargetsRelative, ...dictionary.flat()];\n for (const attribute of attributes) {\n signature.push(attribute);\n if (attribute) signature.push(attribute.array, attribute.count, attribute.itemSize, attribute.normalized,\n 'data' in attribute ? attribute.data.version : attribute.version,\n 'data' in attribute ? attribute.data.stride : 0, 'offset' in attribute ? attribute.offset : 0);\n }\n if (signature.length === this.signature.length && signature.every((value, index) => value === this.signature[index])) return;\n this.signature = signature;\n this.revision++;\n this.namesJson = JSON.stringify(dictionary.map(([name]) => name));\n }\n}\n","import * as THREE from 'three';\nimport { requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport type { NativeAnnotationRuntime } from './runtime';\nimport { MorphGeometryObservation, readAttribute, readMorphGeometry, sampleMorphVertices, updateAnnotationWorldMatrices } from './morphGeometry';\nexport { readAttribute } from './morphGeometry';\n\ntype Bounds = { min: number[]; max: number[] };\nexport interface AnnotationModelObservation {\n bounds: Bounds;\n quaternion: number[];\n inverse: number[];\n objects: { id: number; name: string; kind: string; parent: number | null; position: number[]; bounds: Bounds | null; matrix: number[]; inverse: number[]; morphNames: string[] }[];\n}\nconst bounds = (box: THREE.Box3): Bounds | null => box.isEmpty() ? null : { min: box.min.toArray(), max: box.max.toArray() };\ntype MorphObservation = {\n planId: number;\n objectId: number;\n mesh: THREE.Mesh;\n indices: Uint32Array;\n samples: Float32Array;\n};\n\n/** Stable native handle table. No region matching or anchor policy lives here. */\nexport class AnnotationModelObserver {\n readonly objects = new Map<number, THREE.Object3D>();\n readonly meshes: THREE.Mesh[] = [];\n private readonly ids = new Map<THREE.Object3D, number>();\n private morphGeneration: number | null = null;\n private morphObservations: MorphObservation[] = [];\n private readonly morphGeometry = new Map<number, MorphGeometryObservation>();\n private readonly vertex = new THREE.Vector3();\n constructor(readonly model: THREE.Object3D) {\n model.traverse(object => {\n const id = this.objects.size + 1;\n this.ids.set(object, id); this.objects.set(id, object);\n if ((object as THREE.Mesh).isMesh) this.meshes.push(object as THREE.Mesh);\n });\n }\n id(object: THREE.Object3D): number | undefined { return this.ids.get(object); }\n private updateWorldMatrices(): void {\n updateAnnotationWorldMatrices(this.model);\n }\n capture(): AnnotationModelObservation {\n this.updateWorldMatrices();\n const modelBox = new THREE.Box3().setFromObject(this.model);\n if (modelBox.isEmpty()) modelBox.setFromCenterAndSize(this.model.getWorldPosition(new THREE.Vector3()), new THREE.Vector3());\n return {\n bounds: bounds(modelBox)!, quaternion: this.model.getWorldQuaternion(new THREE.Quaternion()).toArray(), inverse: this.model.matrixWorld.clone().invert().toArray(),\n objects: [...this.objects].map(([id, object]) => {\n const mesh = object as THREE.Mesh;\n const bone = (object as THREE.Bone).isBone;\n return { id, name: object.name, kind: mesh.isMesh ? 'Mesh' : bone ? 'Bone' : object.type, parent: object.parent ? this.ids.get(object.parent) ?? null : null,\n position: object.getWorldPosition(new THREE.Vector3()).toArray(), bounds: bone ? null : bounds(new THREE.Box3().setFromObject(object)), matrix: object.matrixWorld.toArray(), inverse: object.matrixWorld.clone().invert().toArray(), morphNames: Object.keys(mesh.morphTargetDictionary ?? {}) };\n }),\n };\n }\n observe(runtime: NativeAnnotationRuntime): void { runtime.observe_model(JSON.stringify(this.capture())); }\n transforms(runtime: NativeAnnotationRuntime): Float32Array {\n const ids = runtime.tracked_objects();\n if (!ids.length) return new Float32Array();\n this.updateWorldMatrices();\n const values = new Float32Array(ids.length * 17);\n ids.forEach((id, index) => { const object = this.objects.get(id); if (object) { values[index * 17] = id; values.set(object.matrixWorld.elements, index * 17 + 1); } });\n return values;\n }\n private prepareMorphAnchors(runtime: NativeAnnotationRuntime): void {\n const generation = runtime.generation();\n if (!runtime.is_current(generation)) return;\n if (this.morphGeneration !== generation) this.morphObservations = [];\n this.morphGeneration = generation;\n const changed = new Set<number>();\n for (const mesh of this.meshes) {\n const id = this.ids.get(mesh)!;\n let observation = this.morphGeometry.get(id);\n if (!observation) { observation = new MorphGeometryObservation(); this.morphGeometry.set(id, observation); }\n observation.observe(mesh);\n if (runtime.observe_morph_geometry(generation, id, observation.revision, observation.namesJson)) changed.add(id);\n }\n if (!changed.size) return;\n this.morphObservations = this.morphObservations.filter(observation => !changed.has(observation.objectId));\n const requests = JSON.parse(runtime.command('morphRequests', '{}', performance.now())) as { objectId: number; region: { name: string }; morphNames: string[] }[];\n for (const request of requests) {\n if (!changed.has(request.objectId)) continue;\n const mesh = this.objects.get(request.objectId) as THREE.Mesh | undefined;\n if (!mesh?.isMesh) continue;\n const geometry = readMorphGeometry(mesh, request.morphNames);\n if (!geometry) continue;\n const plan = runtime.prepare_morph_anchor(generation, request.objectId, request.region.name, geometry.base, geometry.morphs, geometry.relative);\n if (plan.length < 2) continue;\n const indices = plan.slice(1);\n this.morphObservations.push({ planId: plan[0], objectId: request.objectId, mesh, indices, samples: new Float32Array(indices.length * 3) });\n }\n }\n /** Transport only: Rust owns the vertex selection, weights and live anchor. */\n observeMorphAnchors(runtime: NativeAnnotationRuntime): void {\n this.prepareMorphAnchors(runtime);\n if (this.morphGeneration === null || !runtime.is_current(this.morphGeneration)) {\n this.morphObservations = [];\n this.morphGeneration = null;\n return;\n }\n if (!this.morphObservations.length) return;\n this.updateWorldMatrices();\n for (const { planId, mesh, indices, samples } of this.morphObservations) {\n sampleMorphVertices(mesh, indices, samples, this.vertex);\n runtime.observe_morph_anchor(this.morphGeneration, planId, samples);\n }\n }\n /** Rust selects influenced vertices; Three evaluates the current native pose. */\n observeFocus(runtime: NativeAnnotationRuntime, request: unknown): void {\n const observation = this.capture();\n runtime.observe_model(JSON.stringify(observation));\n const ids = JSON.parse(runtime.command('focusObjects', JSON.stringify(request), performance.now())) as number[];\n const core = requireInitializedEmbodyCore();\n for (const id of ids) {\n const object = this.objects.get(id);\n if (!(object as THREE.Bone | undefined)?.isBone) continue;\n const points: number[] = [];\n for (const nativeMesh of this.meshes) {\n const mesh = nativeMesh as THREE.SkinnedMesh;\n if (!mesh.isSkinnedMesh) continue;\n const index = mesh.skeleton.bones.indexOf(object as THREE.Bone);\n const skinIndices = mesh.geometry.getAttribute('skinIndex');\n const skinWeights = mesh.geometry.getAttribute('skinWeight');\n if (index < 0 || !skinIndices || !skinWeights) continue;\n mesh.skeleton.update();\n const selected = core.annotation_bone_vertices(readAttribute(skinIndices), readAttribute(skinWeights), new Uint32Array([index]));\n const vertex = new THREE.Vector3();\n for (const selectedIndex of selected) { mesh.getVertexPosition(selectedIndex, vertex).applyMatrix4(mesh.matrixWorld); points.push(vertex.x, vertex.y, vertex.z); }\n }\n const measured = core.annotation_point_bounds(new Float32Array(points));\n const entry = observation.objects.find(entry => entry.id === id);\n if (entry && measured.length === 6) entry.bounds = { min: Array.from(measured.slice(0, 3)), max: Array.from(measured.slice(3, 6)) };\n }\n runtime.observe_model(JSON.stringify(observation));\n }\n}\n\nexport function observeAnnotationModel(model: THREE.Object3D): AnnotationModelObservation { return new AnnotationModelObserver(model).capture(); }\n","import type { PerspectiveCamera, Scene } from 'three';\nimport type { CharacterSceneRenderer, CharacterSceneRenderingController } from './scene';\n\n/** Adapter-private binding. Applications pass config.rendering to the camera controller. */\nexport type SceneRenderingBinding = {\n suspend(): Promise<void>;\n prepare(renderer: CharacterSceneRenderer): Promise<void>;\n commit(renderer: CharacterSceneRenderer): Promise<void>;\n onError(error: unknown): void;\n};\n\ntype Owner = {\n scene: Scene;\n camera: PerspectiveCamera;\n binding: SceneRenderingBinding | null;\n disposed: boolean;\n drain: Promise<void> | null;\n settled: () => Promise<unknown> | null;\n reportFailure: (error: unknown, renderer?: CharacterSceneRenderer | null) => void;\n};\nconst owners = new WeakMap<CharacterSceneRenderingController, Owner>();\n\nexport function registerSceneRendering(controller: CharacterSceneRenderingController, scene: Scene, camera: PerspectiveCamera, settled: () => Promise<unknown> | null, reportFailure: (error: unknown, renderer?: CharacterSceneRenderer | null) => void) {\n const owner: Owner = { scene, camera, binding: null, disposed: false, drain: null, settled, reportFailure };\n owners.set(controller, owner);\n return owner;\n}\n\nexport function bindSceneRendering(controller: CharacterSceneRenderingController, scene: Scene, camera: PerspectiveCamera, binding: SceneRenderingBinding) {\n const owner = owners.get(controller);\n if (!owner || owner.disposed) throw new Error('Character scene rendering has been disposed or is not owned by Embody.');\n if (owner.scene !== scene || owner.camera !== camera) throw new Error('Rendering and camera controllers must share their scene and camera.');\n if (owner.binding) throw new Error('Character scene rendering already has a camera controller.');\n owner.binding = binding;\n const snapshot = controller.getSnapshot();\n if (snapshot.renderer) void binding.commit(snapshot.renderer).catch(binding.onError);\n if (snapshot.status !== 'ready' && snapshot.status !== 'error') void binding.suspend().catch(binding.onError);\n return () => {\n if (owner.binding === binding) {\n owner.drain = binding.suspend();\n void owner.drain.catch(() => undefined);\n owner.binding = null;\n return Promise.allSettled([owner.drain, owner.settled()]).then(() => undefined);\n }\n return null;\n };\n}\n\nexport function reportSceneRenderingFailure(controller: CharacterSceneRenderingController, error: unknown, renderer?: CharacterSceneRenderer | null) {\n const owner = owners.get(controller);\n if (owner && !owner.disposed) owner.reportFailure(error, renderer);\n}\n","import { Float32BufferAttribute, FloatType } from 'three';\nimport type { BufferAttribute, BufferGeometry, InterleavedBufferAttribute, Object3D, SkinnedMesh } from 'three';\n\n/** Keep joint indices compatible with both native WebGPU and WebGL skinning. */\nexport function prepareModelSkinning(model: Object3D): () => void {\n const replacements: { geometry: BufferGeometry; original: BufferAttribute | InterleavedBufferAttribute; prepared: BufferAttribute }[] = [];\n model.traverse(object => {\n const mesh = object as SkinnedMesh;\n if (!mesh.isSkinnedMesh) return;\n const geometry = mesh.geometry;\n const original = geometry.getAttribute('skinIndex');\n if (!original) return;\n if (original.array instanceof Float32Array && (!('gpuType' in original) || original.gpuType === FloatType)) return;\n\n // Three's native backend widens Uint8/Uint16 attributes in place to Uint32.\n // WebGL then uses vertexAttribIPointer, but its skinIndex shader input is\n // vec4. Float32 preserves every glTF joint index and avoids that mutation.\n // Read components so interleaved indices do not copy adjacent attributes.\n const prepared = new Float32BufferAttribute(original.count * original.itemSize, original.itemSize);\n for (let vertex = 0; vertex < original.count; vertex++) {\n for (let component = 0; component < original.itemSize; component++) {\n prepared.setComponent(vertex, component, original.getComponent(vertex, component));\n }\n }\n prepared.name = original.name;\n prepared.setUsage('data' in original ? original.data.usage : original.usage);\n geometry.setAttribute('skinIndex', prepared);\n replacements.push({ geometry, original, prepared });\n });\n // A replacement renderer may fail after compilation. The old native pipeline\n // still expects its original attribute format, so restore its exact objects.\n return () => {\n for (const { geometry, original, prepared } of replacements) {\n if (geometry.getAttribute('skinIndex') === prepared) geometry.setAttribute('skinIndex', original);\n }\n };\n}\n","import { Timer } from 'three';\nimport type { AnimationMixer, Object3D } from 'three';\n\ntype Binding = { mixer: AnimationMixer; enabled: boolean; disposed: boolean; afterFrame: (deltaSeconds: number) => void; afterSample?: (deltaSeconds: number) => void };\nconst bindings = new WeakMap<Object3D, Set<Binding>>();\n\n/** Register native playback with the existing scene renderer; never starts a loop. */\nexport function bindPlaybackRendering(model: Object3D, mixer: AnimationMixer, afterFrame: (deltaSeconds: number) => void, afterSample?: (deltaSeconds: number) => void) {\n const binding: Binding = { mixer, enabled: true, disposed: false, afterFrame, afterSample };\n const entries = bindings.get(model) ?? new Set<Binding>();\n entries.add(binding);\n bindings.set(model, entries);\n return {\n setEnabled(enabled: boolean) { binding.enabled = enabled; },\n dispose() {\n binding.disposed = true;\n entries.delete(binding);\n if (!entries.size) bindings.delete(model);\n },\n };\n}\n\n/** Called once by the Three render integration, using its native Timer. */\nexport function renderScenePlayback(scene: Object3D, timer: Timer): void {\n const mixers = new Set<AnimationMixer>();\n const active: Binding[] = [];\n scene.traverse((object) => {\n for (const binding of bindings.get(object) ?? []) {\n if (binding.enabled) { active.push(binding); mixers.add(binding.mixer); }\n }\n });\n const deltaSeconds = timer.getDelta();\n const elapsed = new Map<AnimationMixer, number>();\n for (const mixer of mixers) {\n // Physics advances forward even when a native animation plays backward;\n // its actual reversed pose determines the direction of the hair response.\n elapsed.set(mixer, Math.abs(deltaSeconds * mixer.timeScale));\n mixer.update(deltaSeconds);\n }\n // Observe the actual blended pose only after all native sampling. Response\n // samples are staged for the next native frame, without a second mixer pass.\n for (const binding of active) if (binding.enabled && !binding.disposed) {\n binding.afterSample?.(elapsed.get(binding.mixer)!);\n }\n // Native finished callbacks run inside mixer iteration. Resource release and\n // observers must wait until every mixer has finished sampling this frame.\n for (const binding of active) if (binding.enabled && !binding.disposed) binding.afterFrame(deltaSeconds);\n}\n\n/** Frame hook for an existing Three/R3F renderer. Does not create a render loop. */\nexport function createScenePlaybackFrame(scene: Object3D, document?: Document) {\n const timer = new Timer();\n if (document) timer.connect(document);\n let disposed = false;\n let initialized = false;\n return {\n onFrame(timestamp?: number) {\n if (disposed) return;\n timer.update(timestamp);\n // The first render establishes this renderer's timestamp origin.\n if (!initialized) { initialized = true; return; }\n renderScenePlayback(scene, timer);\n },\n dispose() { if (!disposed) { disposed = true; timer.dispose(); } },\n };\n}\n","import * as THREE from 'three';\nimport type { CharacterSceneRenderer } from '../scene';\nimport { prepareModelSkinning } from '../modelSkinning';\n\nfunction captureRenderTarget(renderer: CharacterSceneRenderer): () => void {\n const face = renderer.getActiveCubeFace();\n const mip = renderer.getActiveMipmapLevel();\n if ('isWebGPURenderer' in renderer) {\n const target = renderer.getRenderTarget();\n return () => renderer.setRenderTarget(target, face, mip);\n }\n const target = renderer.getRenderTarget();\n return () => renderer.setRenderTarget(target, face, mip);\n}\n\n/** Match the lazy bounds used by Three's Frustum.intersectsObject. */\nfunction initializeModelCullingBounds(model: THREE.Object3D): void {\n model.traverseVisible((object) => {\n if (!object.frustumCulled) return;\n const drawable = object as THREE.Mesh & THREE.Line & THREE.Points;\n if (!(drawable.isMesh || drawable.isLine || drawable.isPoints)) return;\n if ('boundingSphere' in drawable) {\n if (drawable.boundingSphere === null && 'computeBoundingSphere' in drawable\n && typeof drawable.computeBoundingSphere === 'function') drawable.computeBoundingSphere();\n } else if (drawable.geometry.boundingSphere === null) drawable.geometry.computeBoundingSphere();\n });\n}\n\n/** Only the model root is exposed; authored child visibility and layers are retained. */\nfunction withPreparedModel<T>(\n scene: THREE.Scene, model: THREE.Object3D, operation: () => T,\n options: { initializeBounds?: boolean } = {},\n): T {\n if (model === scene) throw new Error('Render preparation requires a model, not the controller scene.');\n let ancestor = model;\n while (ancestor.parent) {\n ancestor = ancestor.parent;\n if (!ancestor.visible) throw new Error('Render preparation requires visible model ancestors.');\n }\n if (model.parent && ancestor !== scene) throw new Error('Render preparation requires a detached model or a model in the controller scene.');\n const detached = !model.parent;\n const visible = model.visible;\n const culling = new Map<THREE.Object3D, boolean>();\n try {\n if (detached) scene.add(model);\n model.visible = true;\n if (options.initializeBounds) {\n // Skin bounds use bone.matrixWorld and current morph weights, not the\n // uploaded skeleton buffer. Refresh the same hierarchy the draw will use.\n scene.updateMatrixWorld(true);\n initializeModelCullingBounds(model);\n }\n model.traverseVisible((object) => {\n culling.set(object, object.frustumCulled);\n object.frustumCulled = false;\n });\n return operation();\n } finally {\n culling.forEach((value, object) => { object.frustumCulled = value; });\n model.visible = visible;\n if (detached) scene.remove(model);\n }\n}\n\n/** Three collects visible surfaces before yielding; no shared mutations span the await. */\nexport function compileModelForRender(\n renderer: CharacterSceneRenderer, scene: THREE.Scene, camera: THREE.Camera, model: THREE.Object3D,\n): Promise<unknown> {\n if ('isWebGPURenderer' in renderer && !renderer.hasInitialized()) {\n throw new Error('Model render preparation requires an initialized WebGPU renderer.');\n }\n // Only the caller-owned model is retained across asynchronous compilation.\n // Controller markers may still be replaced/disposed while this is pending.\n return withPreparedModel(scene, model, () => {\n prepareModelSkinning(model);\n return renderer.compileAsync(model, camera, scene);\n });\n}\n\n/** One complete scene draw initializes native geometry/textures and real shadow variants. */\nexport function drawModelForRender(\n renderer: CharacterSceneRenderer, scene: THREE.Scene, camera: THREE.Camera, model: THREE.Object3D,\n): () => void {\n const viewport = renderer.getViewport(new THREE.Vector4());\n const scissor = renderer.getScissor(new THREE.Vector4());\n const scissorTest = renderer.getScissorTest();\n const restoreRenderTarget = captureRenderTarget(renderer);\n const autoClear = renderer.autoClear;\n const clearColor = renderer.getClearColor(Object.assign(new THREE.Color(), { a: 1 }));\n const clearAlpha = renderer.getClearAlpha();\n const native = 'isWebGPURenderer' in renderer ? renderer : null;\n const renderObject = native?.getRenderObjectFunction();\n const mrt = native?.getMRT();\n const background = scene.background;\n const hasBackgroundNode = 'backgroundNode' in scene;\n const backgroundNode = hasBackgroundNode ? scene.backgroundNode : undefined;\n const overrideMaterial = scene.overrideMaterial;\n const sceneName = scene.name;\n const globalShadow = 'autoUpdate' in renderer.shadowMap ? renderer.shadowMap : null;\n const globalAutoUpdate = globalShadow?.autoUpdate;\n const globalNeedsUpdate = globalShadow?.needsUpdate;\n const shadows: { shadow: THREE.LightShadow; layers: number; autoUpdate: boolean; needsUpdate: boolean; remainingUpdate?: boolean }[] = [];\n let rendered = false;\n try {\n withPreparedModel(scene, model, () => {\n if (renderer.shadowMap.enabled) {\n scene.traverseVisible((object) => {\n const light = object as THREE.Light & { shadow?: THREE.LightShadow };\n if (light.isLight && light.castShadow && light.shadow && light.layers.test(camera.layers)) {\n const shadow = light.shadow;\n shadows.push({ shadow, layers: shadow.camera.layers.mask, autoUpdate: shadow.autoUpdate, needsUpdate: shadow.needsUpdate });\n shadow.needsUpdate = true;\n }\n });\n if (globalShadow) globalShadow.needsUpdate = true;\n }\n renderer.autoClear = false;\n // Color backgrounds force a framebuffer clear even with autoClear=false;\n // viewport clipping alone cannot keep that clear off the visible canvas.\n if (scene.background && 'isColor' in scene.background) scene.background = null;\n renderer.setViewport(0, 0, 0, 0);\n renderer.render(scene, camera);\n rendered = true;\n for (const state of shadows) state.remainingUpdate = state.shadow.needsUpdate;\n }, { initializeBounds: true });\n } finally {\n // Restore public state even when a native nested shadow draw throws before\n // Three's own restoration. The draw never changes authored layers/materials.\n restoreRenderTarget();\n renderer.setViewport(viewport);\n renderer.setScissor(scissor);\n renderer.setScissorTest(scissorTest);\n renderer.setClearColor(clearColor, clearAlpha);\n renderer.autoClear = autoClear;\n if (native) { native.setRenderObjectFunction(renderObject ?? null); native.setMRT(mrt ?? null); }\n scene.background = background;\n if (hasBackgroundNode) Object.assign(scene, { backgroundNode });\n else Reflect.deleteProperty(scene, 'backgroundNode');\n scene.overrideMaterial = overrideMaterial;\n scene.name = sceneName;\n for (const { shadow, layers, autoUpdate, needsUpdate, remainingUpdate } of shadows) {\n shadow.camera.layers.mask = layers;\n shadow.autoUpdate = autoUpdate;\n shadow.needsUpdate = rendered ? needsUpdate || !!remainingUpdate : true;\n }\n if (globalShadow) {\n globalShadow.autoUpdate = globalAutoUpdate!;\n globalShadow.needsUpdate = rendered ? globalNeedsUpdate! : true;\n }\n }\n // Cancellation can arrive between this synchronous draw and readiness\n // settlement. The host will not reveal that model, so its static maps expire.\n return () => {\n for (const { shadow } of shadows) shadow.needsUpdate = true;\n if (globalShadow && renderer.shadowMap.enabled) globalShadow.needsUpdate = true;\n };\n}\n","import { annotationConfigInput, annotationQuery } from './runtime';\nimport { observeAnnotationModel } from './modelObservation';\nimport { Quaternion, Vector3, type Object3D } from 'three';\nimport { initEmbodyCore, requireInitializedEmbodyCore, type EmbodyCore, type CameraFlight, type CameraOrbit } from '@lovelace_lol/embody/wasm';\nimport type { AnnotationCharacterConfig, AnnotationLaterality, BoneResolutionProfile, Region } from './types';\nexport { initEmbodyCore } from '@lovelace_lol/embody/wasm';\nexport type { AnnotationLaterality, BoneResolutionProfile } from './types';\n\ntype Point = { x: number; y: number; z: number };\ntype Rotation = Point & { w: number };\ntype Bounds = { center: Point; size: Point };\nconst vec = (v: Point) => new Float32Array([v.x, v.y, v.z]);\nconst quat = (q?: Rotation | null) => new Float32Array(q ? [q.x, q.y, q.z, q.w] : []);\nconst bounds = (b?: Bounds | null) => new Float32Array(b ? [b.center.x, b.center.y, b.center.z, b.size.x, b.size.y, b.size.z] : []);\nconst point = (values: ArrayLike<number>, offset = 0): Point => ({ x: values[offset], y: values[offset + 1], z: values[offset + 2] });\nconst framing = (v: ArrayLike<number>) => ({ position: point(v), target: point(v, 3), distance: v[6] });\n\n/** Typed, allocation-only bridge to the canonical Rust camera and marker algorithms. */\nexport class RustAnnotationCameraCore {\n constructor(private readonly core: EmbodyCore) {}\n static async create() { return new RustAnnotationCameraCore(await initEmbodyCore()); }\n normalizeCameraAngle(angle: number) { return this.core.normalize_camera_angle_degrees(angle); }\n worldDirectionForCameraAngle(q: Rotation | undefined, angle: number) { return point(this.core.world_direction_for_camera_angle(quat(q), angle)); }\n resolveFocusCameraDirection(q: Rotation | undefined, effectiveAngle: number, cameraAngle?: number, angleSpace = 'model') {\n return point(this.core.resolve_focus_camera_direction(quat(q), effectiveAngle, cameraAngle != null, angleSpace === 'world'));\n }\n resolveAutoCloseupAngle(offset: number, focusSize: Point, modelSize: Point) { return this.core.resolve_auto_closeup_angle(offset, vec(focusSize), vec(modelSize)); }\n focusPaddingFactor(size: number, closeUp: number, zoom: number, fullBody: number) { return this.core.focus_padding_factor(size, closeUp, zoom, fullBody); }\n solveFocusFraming(o: { focusBounds?: Bounds; modelBounds?: Bounds | null; modelQuaternion?: Rotation; fovDegrees: number; aspect: number; minDistance: number; closeUpPaddingFactor: number; zoomPaddingFactor: number; fullBodyPaddingFactor: number; overridePadding?: number; cameraAngle?: number; angleSpace?: string }) {\n return framing(this.core.solve_focus_framing(bounds(o.focusBounds), bounds(o.modelBounds), quat(o.modelQuaternion), o.fovDegrees, o.aspect, o.minDistance, o.closeUpPaddingFactor, o.zoomPaddingFactor, o.fullBodyPaddingFactor, o.overridePadding, o.cameraAngle, o.angleSpace === 'world'));\n }\n solveFullBodyFraming(o: { boxMin: Point; boxMax: Point; modelQuaternion?: Rotation; fovDegrees: number; aspect: number; minDistance: number; fullBodyPaddingFactor: number; overridePadding?: number; cameraAngle?: number; angleSpace?: string }) {\n return framing(this.core.solve_full_body_framing(vec(o.boxMin), vec(o.boxMax), quat(o.modelQuaternion), o.fovDegrees, o.aspect, o.minDistance, o.fullBodyPaddingFactor, o.overridePadding, o.cameraAngle, o.angleSpace === 'world'));\n }\n passesMarkerCameraAngleGate(o: { markerAngle?: number; currentCameraAngle?: number; rangeDegrees?: number }) { return this.core.passes_marker_camera_angle_gate(o.markerAngle, o.currentCameraAngle, o.rangeDegrees); }\n shouldShowMarker(o: { hiddenChild: boolean; solo: 'none' | 'soloed' | 'other-soloed'; markerAngle?: number; currentCameraAngle?: number }) {\n return this.core.should_show_marker(o.hiddenChild, o.solo === 'soloed' ? 1 : o.solo === 'other-soloed' ? 2 : 0, o.markerAngle, o.currentCameraAngle);\n }\n resolveViewportConstrainedLineScale(o: { startClip: ArrayLike<number>; endClip: ArrayLike<number>; safeX: number; safeY: number; minLengthRatio?: number }) {\n const v = this.core.resolve_viewport_constrained_line_scale(new Float32Array(o.startClip), new Float32Array(o.endClip), o.safeX, o.safeY, o.minLengthRatio);\n return { visible: v[0] >= 1, lineScale: v[1] };\n }\n resolveViewportSafeBounds(o: { labelScaleX: number; labelScaleY: number; projectionXScale: number; projectionYScale: number; viewportWidth: number; viewportHeight: number; edgePaddingPx?: number }) {\n const v = this.core.resolve_viewport_safe_bounds(o.labelScaleX, o.labelScaleY, o.projectionXScale, o.projectionYScale, o.viewportWidth, o.viewportHeight, o.edgePaddingPx);\n return { safeX: v[0], safeY: v[1] };\n }\n sampleMarkerBezierCurve(start: Point, end: Point, segments = 16) { return this.core.sample_marker_bezier_curve(vec(start), vec(end), segments); }\n sampleMarkerArcCurve(start: Point, end: Point, segments = 16) { return this.core.sample_marker_arc_curve(vec(start), vec(end), segments); }\n markerVisibilityAnimationFactors(visible: boolean, t: number) {\n const v = this.core.marker_visibility_animation_factors(visible, t);\n return { itemOpacityFactor: v[0], labelScaleFactor: v[1], lineOpacityFactor: v[2] };\n }\n separateOverlappingMarkerEndpoints(o: { starts: ArrayLike<number>; ends: ArrayLike<number>; modelCenter: Point; modelHeight: number }) { return this.core.separate_overlapping_marker_endpoints(new Float32Array(o.starts), new Float32Array(o.ends), vec(o.modelCenter), o.modelHeight); }\n createCameraFlight(start: Point, startTarget: Point, end: Point, endTarget: Point, duration: number) { return animationHandle(new this.core.CameraFlight(vec(start), vec(startTarget), vec(end), vec(endTarget), duration)); }\n createCameraOrbit(center: Point, radius: number, height: number, duration: number) { return animationHandle(new this.core.CameraOrbit(vec(center), radius, height, duration)); }\n}\n\nfunction animationHandle(handle: CameraFlight | CameraOrbit) {\n let disposed = false;\n return {\n sample(elapsed: number) {\n const v = handle.sample(elapsed);\n return { position: point(v), target: point(v, 3), done: v[6] >= 1 };\n },\n get durationMs() { return handle.duration_ms(); },\n dispose() { if (!disposed) { disposed = true; handle.free(); } },\n };\n}\nexport const createRustAnnotationCameraCore = () => RustAnnotationCameraCore.create();\n\nfunction request<T>(op: string, payload: unknown): T {\n return JSON.parse(requireInitializedEmbodyCore().embody_request(JSON.stringify({ op, payload }))) as T;\n}\n\n/** Resolve only annotation/profile inputs, preserving host-only data by reference. */\nexport async function resolveAnnotationCharacterConfig<T extends AnnotationCharacterConfig>(config: T): Promise<T> {\n await initEmbodyCore();\n const keys = ['profilePresetId', 'presetId', 'baseProfileId', 'auPresetType', 'annotationRegions', 'regions', 'disabledRegions', 'boneNodes', 'bonePrefix', 'boneSuffix', 'suffixPattern', 'auToMorphs', 'auToBones', 'morphToMesh', 'markerGroups', 'lineDefaults', 'markerDefaults'] as const;\n const input: Record<string, unknown> = {};\n for (const key of keys) if (config[key] !== undefined) input[key] = config[key];\n if (config.profile) {\n input.profile = Object.fromEntries(keys.filter(k => config.profile?.[k] !== undefined).map(k => [k, config.profile![k]]));\n }\n const extended = request<Record<string, unknown>>('profile.extendConfig', { config: input });\n const resolved = { ...config };\n for (const key of keys) if (extended[key] !== undefined) (resolved as Record<string, unknown>)[key] = extended[key];\n resolved.regions = annotationQuery('regions', { config: annotationConfigInput(resolved) });\n return resolved;\n}\n\nexport function resolveBoneNames(names: string[] | undefined, profile?: BoneResolutionProfile | null): string[] {\n return request('profile.resolveBoneNames', { profile: profile ?? {}, names: names ?? [] });\n}\nexport function fuzzyNameMatch(objectName: string, targetName: string, suffixPattern?: string): boolean { return request('name.fuzzyMatch', { objectName, targetName, suffixPattern }); }\nexport function getDefaultAnnotationLaterality(): AnnotationLaterality { return annotationQuery('defaultLaterality', {}); }\nexport function getSemanticHorizontalSignForSide(side: 'left' | 'right', laterality: AnnotationLaterality): 1 | -1 { return annotationQuery('sideSign', { side, laterality }); }\nexport function getSemanticHorizontalSign(name: string, laterality: AnnotationLaterality): 1 | -1 | null { return annotationQuery('semanticSign', { name, laterality }); }\nexport function resolveRegionCameraAngle(region: Region, laterality: AnnotationLaterality): number | undefined { return annotationQuery<number | null>('cameraAngle', { region, laterality }) ?? undefined; }\nexport function resolveRegionVisibilityCameraAngle(region: Region, laterality: AnnotationLaterality): number | undefined { return annotationQuery<number | null>('visibilityAngle', { region, laterality }) ?? undefined; }\nexport function toWorldDirection(model: Object3D | null, direction: Vector3): Vector3 { const value = annotationQuery<Point>('worldDirection', { quaternion: model?.getWorldQuaternion(new Quaternion()).toArray(), direction }); return new Vector3(value.x, value.y, value.z); }\nexport function getWorldDirectionForCameraAngle(model: Object3D | null, angle: number): Vector3 { const v = requireInitializedEmbodyCore().world_direction_for_camera_angle(quat(model?.getWorldQuaternion(new Quaternion())), angle); return new Vector3(v[0], v[1], v[2]); }\nexport function getModelLocalOrbitAngle(model: Object3D | null, center: Vector3, position: Vector3): number { return annotationQuery('orbitAngle', { quaternion: model?.getWorldQuaternion(new Quaternion()).toArray(), center, position }); }\nexport function passesMarkerCameraAngleGate(o: { markerAngle?: number; currentCameraAngle?: number; rangeDegrees?: number }): boolean { return requireInitializedEmbodyCore().passes_marker_camera_angle_gate(o.markerAngle, o.currentCameraAngle, o.rangeDegrees); }\nexport function resolveFaceCenter(model: Object3D, region: Region, profile?: BoneResolutionProfile | null): { center: Vector3; headBonePosition?: Vector3; method: string; debugInfo: string[] } {\n const result = annotationQuery<{ center: Point; headBonePosition: Point | null; method: string; debugInfo: string[] }>('faceCenter', { model: observeAnnotationModel(model), region, profile });\n return { ...result, center: new Vector3(result.center.x, result.center.y, result.center.z), headBonePosition: result.headBonePosition ? new Vector3(result.headBonePosition.x, result.headBonePosition.y, result.headBonePosition.z) : undefined };\n}\nexport function detectAnnotationLaterality(model: Object3D | null, regions: Region[], profile: BoneResolutionProfile | null): AnnotationLaterality { return model ? annotationQuery('laterality', { model: observeAnnotationModel(model), regions, profile }) : getDefaultAnnotationLaterality(); }\n","import { annotationQuery } from './runtime';\n/**\n * Self-contained DOM controls for ThreeAnnotationController\n * No React dependencies - vanilla DOM manipulation\n */\nexport interface DOMControlRegion {\n name: string;\n parent?: string;\n children?: string[];\n}\n\nexport interface DOMControlsConfig {\n /** Container element to append controls to */\n container: HTMLElement;\n /** Callback when user selects a region */\n onRegionSelect: (name: string) => void;\n /** Initial list of regions */\n regions: DOMControlRegion[];\n /** Currently selected region */\n currentRegion?: string;\n /** Initial annotation-marker visibility */\n markersVisible?: boolean;\n /** Callback when the Markers checkbox is toggled */\n onMarkersVisibleChange?: (visible: boolean) => void;\n}\n\n/** Temporary AU preview regions must never appear in the View dropdown. */\nexport const RUNTIME_ANNOTATION_REGION_PREFIX = 'runtime:annotation:';\n\nexport function isRuntimeAnnotationRegionName(name: string): boolean { return annotationQuery('isRuntimeName', { name }); }\nexport function filterCameraViewRegions<T extends { name: string }>(regions: T[]): T[] { return annotationQuery<number[]>('viewRegionIndices', { regions: regions.map(({ name }) => ({ name })) }).map(index => regions[index]); }\n\n/**\n * CSS styles for the DOM controls\n * Scoped with unique class prefix to avoid conflicts\n */\nconst STYLES = `\n.acc-controls {\n position: absolute;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 1000;\n display: flex;\n gap: 8px;\n padding: 8px 12px;\n background: rgba(0, 0, 0, 0.7);\n border-radius: 8px;\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n.acc-select {\n background: rgba(255, 255, 255, 0.1);\n color: white;\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 4px;\n padding: 6px 12px;\n font-size: 14px;\n cursor: pointer;\n outline: none;\n width: 160px;\n max-width: 160px;\n min-width: 160px;\n appearance: none;\n -webkit-appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='white' d='M6 8L2 4h8z'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 8px center;\n padding-right: 28px;\n}\n\n.acc-markers {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-left: 4px;\n padding-left: 10px;\n border-left: 1px solid rgba(255, 255, 255, 0.15);\n color: rgba(255, 255, 255, 0.85);\n font-size: 12px;\n user-select: none;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.acc-markers input {\n margin: 0;\n cursor: pointer;\n accent-color: #3182ce;\n}\n\n.acc-select:hover {\n background-color: rgba(255, 255, 255, 0.15);\n border-color: rgba(255, 255, 255, 0.3);\n}\n\n.acc-select:focus {\n border-color: #3182ce;\n box-shadow: 0 0 0 2px rgba(49, 130, 206, 0.3);\n}\n\n.acc-select option {\n background: #1a202c;\n color: white;\n padding: 8px;\n}\n\n.acc-label {\n color: rgba(255, 255, 255, 0.7);\n font-size: 12px;\n display: flex;\n align-items: center;\n margin-right: 4px;\n}\n`;\n\n// Track if styles have been injected\nlet stylesInjected = false;\n\nfunction injectStyles(): void {\n if (stylesInjected || typeof document === 'undefined') return;\n const style = document.createElement('style');\n style.setAttribute('data-acc-styles', 'true');\n style.textContent = STYLES;\n document.head.appendChild(style);\n stylesInjected = true;\n}\n\n/**\n * Format region name for display\n * Converts snake_case to Title Case\n */\nexport function buildRegionDisplayOptions(regions: DOMControlRegion[]): Array<{ name: string; label: string }> { return annotationQuery('displayOptions', { regions }); }\n\n/**\n * CameraDOMControls - Self-contained DOM UI for region selection\n */\nexport class CameraDOMControls {\n private container: HTMLElement;\n private wrapper: HTMLDivElement;\n private select: HTMLSelectElement;\n private markersCheckbox: HTMLInputElement | null = null;\n private onRegionSelect: (name: string) => void;\n private onMarkersVisibleChange?: (visible: boolean) => void;\n\n constructor(config: DOMControlsConfig) {\n // Inject styles once\n injectStyles();\n\n this.container = config.container;\n this.onRegionSelect = config.onRegionSelect;\n this.onMarkersVisibleChange = config.onMarkersVisibleChange;\n\n // Create wrapper\n this.wrapper = document.createElement('div');\n this.wrapper.className = 'acc-controls';\n\n // Create label\n const label = document.createElement('span');\n label.className = 'acc-label';\n label.textContent = 'View:';\n this.wrapper.appendChild(label);\n\n // Create select\n this.select = document.createElement('select');\n this.select.className = 'acc-select';\n this.populateSelect(config.regions, config.currentRegion);\n\n // Handle selection changes\n this.select.addEventListener('change', () => {\n this.onRegionSelect(this.select.value);\n });\n\n this.wrapper.appendChild(this.select);\n\n if (this.onMarkersVisibleChange) {\n const markersLabel = document.createElement('label');\n markersLabel.className = 'acc-markers';\n\n this.markersCheckbox = document.createElement('input');\n this.markersCheckbox.type = 'checkbox';\n this.markersCheckbox.checked = Boolean(config.markersVisible);\n this.markersCheckbox.setAttribute('aria-label', 'Show annotation markers');\n this.markersCheckbox.addEventListener('change', () => {\n this.onMarkersVisibleChange?.(this.markersCheckbox!.checked);\n });\n\n const markersText = document.createElement('span');\n markersText.textContent = 'Markers';\n\n markersLabel.appendChild(this.markersCheckbox);\n markersLabel.appendChild(markersText);\n this.wrapper.appendChild(markersLabel);\n }\n\n // Append to container\n // Ensure container has relative positioning for absolute positioning to work\n const containerStyle = window.getComputedStyle(this.container);\n if (containerStyle.position === 'static') {\n this.container.style.position = 'relative';\n }\n\n this.container.appendChild(this.wrapper);\n }\n\n /**\n * Populate select options\n */\n private populateSelect(regions: DOMControlRegion[], current?: string): void {\n this.select.innerHTML = '';\n\n const viewRegions = filterCameraViewRegions(regions);\n\n if (viewRegions.length === 0) {\n const option = document.createElement('option');\n option.value = '';\n option.textContent = 'No regions';\n option.disabled = true;\n this.select.appendChild(option);\n return;\n }\n\n buildRegionDisplayOptions(viewRegions).forEach(({ name, label }) => {\n const option = document.createElement('option');\n option.value = name;\n option.textContent = label;\n if (name === current) {\n option.selected = true;\n }\n this.select.appendChild(option);\n });\n }\n\n /**\n * Update available regions\n */\n updateRegions(regions: DOMControlRegion[], current?: string): void {\n this.populateSelect(regions, current);\n }\n\n /**\n * Sync Markers checkbox with controller visibility state.\n */\n setMarkersVisible(visible: boolean): void {\n if (!this.markersCheckbox || this.markersCheckbox.checked === visible) return;\n this.markersCheckbox.checked = visible;\n }\n\n /**\n * Set current region (updates select value)\n */\n setCurrentRegion(name: string): void {\n if (this.select.value !== name) {\n this.select.value = name;\n }\n }\n\n /**\n * Show/hide controls\n */\n setVisible(visible: boolean): void {\n this.wrapper.style.display = visible ? 'flex' : 'none';\n }\n\n /**\n * Check if controls are visible\n */\n isVisible(): boolean {\n return this.wrapper.style.display !== 'none';\n }\n\n /**\n * Cleanup and remove from DOM\n */\n dispose(): void {\n this.wrapper.remove();\n }\n}\n","import * as THREE from 'three';\nimport type { NativeAnnotationRuntime } from './runtime';\n\n/** Native event capture and pose observation. Rust integrates every gesture. */\nexport class ThreeAnnotationControls extends THREE.EventDispatcher<{ change: {}; start: {}; end: {} }> {\n readonly target = new THREE.Vector3();\n private disposed = false;\n private previousTouchAction = '';\n private connected = false;\n constructor(public domElement: HTMLElement, private readonly runtime: NativeAnnotationRuntime, private readonly advance: () => void, private readonly captureInput = true) {\n super();\n this.connect(domElement);\n }\n connect(element: HTMLElement): void {\n if (this.disposed || (this.connected && this.domElement === element)) return;\n this.disconnect();\n this.domElement = element;\n if (!this.captureInput) return;\n this.previousTouchAction = element.style.touchAction;\n element.style.touchAction = 'none';\n element.addEventListener('pointerdown', this.down);\n element.addEventListener('pointermove', this.move);\n element.addEventListener('pointerup', this.up);\n element.addEventListener('pointercancel', this.cancel);\n element.addEventListener('lostpointercapture', this.cancel);\n element.addEventListener('wheel', this.wheel, { passive: false });\n element.addEventListener('contextmenu', this.contextMenu);\n this.connected = true;\n }\n disconnect(): void {\n if (!this.connected) return;\n this.connected = false;\n this.domElement.removeEventListener('pointerdown', this.down);\n this.domElement.removeEventListener('pointermove', this.move);\n this.domElement.removeEventListener('pointerup', this.up);\n this.domElement.removeEventListener('pointercancel', this.cancel);\n this.domElement.removeEventListener('lostpointercapture', this.cancel);\n this.domElement.removeEventListener('wheel', this.wheel);\n this.domElement.removeEventListener('contextmenu', this.contextMenu);\n this.domElement.style.touchAction = this.previousTouchAction;\n this.runtime.command('input', '{\"kind\":\"disconnect\"}', performance.now());\n }\n get enabled(): boolean { return this.read().enabled; }\n set enabled(enabled: boolean) { this.settings({ enabled }); }\n get enableDamping(): boolean { return this.read().enableDamping; }\n set enableDamping(enableDamping: boolean) { this.settings({ enableDamping }); }\n get dampingFactor(): number { return this.read().dampingFactor; }\n set dampingFactor(dampingFactor: number) { this.settings({ dampingFactor }); }\n get minDistance(): number { return this.read().minDistance; }\n set minDistance(minDistance: number) { this.settings({ minDistance }); }\n get maxDistance(): number { return this.read().maxDistance; }\n set maxDistance(maxDistance: number) { this.settings({ maxDistance }); }\n private read(): { enabled: boolean; enableDamping: boolean; dampingFactor: number; minDistance: number; maxDistance: number } { if (this.disposed) throw new Error('Annotation controls are disposed.'); return JSON.parse(this.runtime.command('controls', '{}', performance.now())); }\n private settings(value: unknown): void { if (!this.disposed) this.runtime.command('settings', JSON.stringify(value), performance.now()); }\n update(): void { if (!this.disposed) this.advance(); }\n notifyChange(): void { this.dispatchEvent({ type: 'change' }); }\n private send(kind: string, event: PointerEvent): void {\n const rect = this.domElement.getBoundingClientRect();\n this.runtime.command('input', JSON.stringify({ kind, id: event.pointerId, button: event.button, x: event.clientX, y: event.clientY, width: rect.width, height: rect.height, modifier: event.ctrlKey || event.metaKey || event.shiftKey }), performance.now());\n this.advance();\n }\n private readonly down = (event: PointerEvent): void => { this.domElement.setPointerCapture?.(event.pointerId); this.send('down', event); this.dispatchEvent({ type: 'start' }); };\n private readonly move = (event: PointerEvent): void => { this.send('move', event); };\n private readonly up = (event: PointerEvent): void => { this.send('up', event); if (this.domElement.hasPointerCapture?.(event.pointerId)) this.domElement.releasePointerCapture(event.pointerId); this.dispatchEvent({ type: 'end' }); };\n private readonly cancel = (event: PointerEvent): void => { this.send('cancel', event); this.dispatchEvent({ type: 'end' }); };\n private readonly wheel = (event: WheelEvent): void => {\n event.preventDefault();\n this.runtime.command('input', JSON.stringify({ kind: 'wheel', deltaY: event.deltaY, deltaMode: event.deltaMode, width: this.domElement.clientWidth, height: this.domElement.clientHeight }), performance.now());\n this.advance();\n };\n private readonly contextMenu = (event: Event): void => { event.preventDefault(); };\n dispose(): void {\n if (this.disposed) return;\n this.disconnect();\n this.disposed = true;\n }\n}\n","import * as THREE from 'three';\nimport { requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport type { AnnotationSnapshot, MarkerDescriptor, NativeAnnotationRuntime } from './runtime';\n\ninterface Objects {\n descriptor: string;\n sphere: THREE.Mesh<THREE.SphereGeometry, THREE.MeshBasicMaterial>;\n line: THREE.Line<THREE.BufferGeometry, THREE.LineBasicMaterial>;\n label: THREE.Sprite;\n texture: THREE.CanvasTexture;\n arrow: THREE.Mesh<THREE.ConeGeometry, THREE.MeshBasicMaterial> | null;\n element: HTMLDivElement | null;\n}\n\ntype ParentPosition = { users: number; original: string; priority: string };\nconst positionedParents = new WeakMap<HTMLElement, ParentPosition>();\n\n/** Several annotation views can borrow the same static canvas container. */\nfunction positionOverlayParent(parent: HTMLElement): () => void {\n let position = positionedParents.get(parent);\n if (position) position.users++;\n else {\n const computed = parent.ownerDocument?.defaultView?.getComputedStyle(parent).position ?? parent.style.position;\n if (computed && computed !== 'static') return () => {};\n position = { users: 1, original: parent.style.position ?? '', priority: parent.style.getPropertyPriority?.('position') ?? '' };\n positionedParents.set(parent, position);\n parent.style.position = 'relative';\n }\n const borrowed = position;\n return () => {\n if (--borrowed.users > 0) return;\n positionedParents.delete(parent);\n // A later host edit owns this property; never restore over it.\n if (parent.style.position !== 'relative' || (parent.style.getPropertyPriority?.('position') ?? '') !== '') return;\n if (parent.style.setProperty) parent.style.setProperty('position', borrowed.original, borrowed.priority);\n else parent.style.position = borrowed.original;\n };\n}\n\n/** Applies Rust frame records to native objects. No annotation state machine. */\nexport class ThreeAnnotationRenderer {\n private readonly group = new THREE.Group();\n private readonly objects = new Map<number, Objects>();\n private readonly overlay: HTMLDivElement;\n private readonly raycaster = new THREE.Raycaster();\n private readonly pointer = new THREE.Vector2();\n private readonly viewProjection = new THREE.Matrix4();\n private overlayParent: HTMLElement | null = null;\n private releaseParentPosition: (() => void) | null = null;\n private readonly overlayResizeObserver: ResizeObserver | null;\n private style = '';\n private revision = -1;\n private meshes: THREE.Mesh[] = [];\n setMeshes(meshes: THREE.Mesh[]): void { this.meshes = meshes; }\n\n constructor(\n private readonly runtime: NativeAnnotationRuntime,\n private readonly scene: THREE.Scene,\n private readonly camera: THREE.PerspectiveCamera,\n private domElement: HTMLElement,\n private readonly onPick: (ids: number[]) => void,\n private readonly onHover: (id: number | null) => void,\n ) {\n this.scene.add(this.group);\n this.overlay = document.createElement('div');\n this.overlay.style.cssText = 'position:absolute;pointer-events:none;overflow:hidden;';\n this.overlayResizeObserver = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => this.layoutOverlay());\n this.attachOverlay();\n domElement.addEventListener('click', this.click);\n }\n private attachOverlay(): void {\n const parent = this.domElement.parentElement ?? this.domElement;\n if (parent !== this.overlayParent) {\n this.releaseParentPosition?.();\n this.releaseParentPosition = positionOverlayParent(parent);\n this.overlayParent = parent;\n parent.appendChild(this.overlay);\n }\n this.overlayResizeObserver?.disconnect();\n this.overlayResizeObserver?.observe(this.domElement);\n if (parent !== this.domElement) this.overlayResizeObserver?.observe(parent);\n this.layoutOverlay();\n }\n private layoutOverlay(): DOMRect {\n const rect = this.domElement.getBoundingClientRect();\n // offsetParent can change if the host edits its positioning while attached.\n const parent = (this.overlay.offsetParent as HTMLElement | null) ?? this.overlayParent;\n const origin = parent?.getBoundingClientRect();\n this.overlay.style.left = `${rect.left - (origin?.left ?? 0) - (parent?.clientLeft ?? 0) + (parent?.scrollLeft ?? 0)}px`;\n this.overlay.style.top = `${rect.top - (origin?.top ?? 0) - (parent?.clientTop ?? 0) + (parent?.scrollTop ?? 0)}px`;\n this.overlay.style.width = `${rect.width}px`;\n this.overlay.style.height = `${rect.height}px`;\n return rect;\n }\n setDomElement(element: HTMLElement): void {\n if (element === this.domElement) { this.attachOverlay(); return; }\n this.domElement.removeEventListener('click', this.click);\n this.domElement = element;\n this.attachOverlay();\n element.addEventListener('click', this.click);\n }\n sync(snapshot: AnnotationSnapshot): void {\n if (this.revision === snapshot.descriptorRevision && this.style === snapshot.style) return;\n if (this.style !== snapshot.style) this.clear();\n this.style = snapshot.style;\n const ids = new Set(snapshot.descriptors.map(descriptor => descriptor.id));\n for (const id of this.objects.keys()) if (!ids.has(id)) this.remove(id);\n for (const descriptor of snapshot.descriptors) {\n const signature = JSON.stringify(descriptor);\n if (this.objects.get(descriptor.id)?.descriptor === signature) continue;\n this.remove(descriptor.id);\n this.objects.set(descriptor.id, this.create(descriptor, signature));\n }\n this.revision = snapshot.descriptorRevision;\n }\n private create(descriptor: MarkerDescriptor, signature: string): Objects {\n const { style } = descriptor;\n const sphere = new THREE.Mesh(new THREE.SphereGeometry(descriptor.radius, 12, 12), new THREE.MeshBasicMaterial({ color: style.markerColor, transparent: true }));\n const dashed = style.line.style === 'dashed' || style.line.style === 'dotted';\n const material = dashed\n ? new THREE.LineDashedMaterial({ color: style.lineColor, transparent: true, dashSize: style.line.style === 'dotted' ? 0.005 : 0.02, gapSize: 0.01, linewidth: style.line.thickness })\n : new THREE.LineBasicMaterial({ color: style.lineColor, transparent: true, linewidth: style.line.thickness });\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute('position', new THREE.BufferAttribute(new Float32Array(51), 3));\n const line = new THREE.Line(geometry, material);\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (!context) { sphere.geometry.dispose(); sphere.material.dispose(); geometry.dispose(); material.dispose(); throw new Error('Annotation labels require a 2D canvas context.'); }\n const font = `${style.labelFontSize}px Arial, sans-serif`;\n context.font = font;\n canvas.width = Math.ceil(context.measureText(descriptor.label).width) + 24;\n canvas.height = Math.ceil(style.labelFontSize * 1.5) + 12;\n context.font = font; context.textAlign = 'center'; context.textBaseline = 'middle';\n context.fillStyle = style.labelBackground; context.fillRect(0, 0, canvas.width, canvas.height);\n context.fillStyle = style.labelColor; context.fillText(descriptor.label, canvas.width / 2, canvas.height / 2);\n const texture = new THREE.CanvasTexture(canvas);\n const label = new THREE.Sprite(new THREE.SpriteMaterial({ map: texture, transparent: true, depthTest: true, depthWrite: false, sizeAttenuation: false }));\n const arrow = style.line.arrowHead ? new THREE.Mesh(new THREE.ConeGeometry(descriptor.arrowRadius, descriptor.arrowLength, 8), new THREE.MeshBasicMaterial({ color: style.lineColor, transparent: true })) : null;\n let element: HTMLDivElement | null = null;\n if (this.style === 'html') {\n element = document.createElement('div');\n element.className = 'annotation-html-marker'; element.dataset.annotation = descriptor.name;\n element.textContent = descriptor.htmlText; element.title = descriptor.title; element.setAttribute('aria-label', descriptor.title);\n element.style.cssText = 'position:absolute;pointer-events:auto;transform:translate(-50%,-50%);width:24px;height:24px;border-radius:50%;border:2px solid white;display:none;align-items:center;justify-content:center;cursor:pointer;font: bold 12px Arial,sans-serif;box-shadow:0 2px 8px rgba(0,0,0,.3);';\n element.style.color = style.labelColor;\n element.addEventListener('mouseenter', () => this.onHover(descriptor.id));\n element.addEventListener('mouseleave', () => this.onHover(null));\n element.addEventListener('click', event => { event.stopPropagation(); this.onPick([descriptor.id]); });\n this.overlay.appendChild(element);\n }\n for (const object of [sphere, line, label, arrow]) if (object) { object.userData.annotationId = descriptor.id; object.visible = false; this.group.add(object); }\n this.runtime.label_metrics(descriptor.id, canvas.width, canvas.height);\n return { descriptor: signature, sphere, line, label, texture, arrow, element };\n }\n update(now: number): void {\n this.camera.updateMatrixWorld();\n this.viewProjection.multiplyMatrices(this.camera.projectionMatrix, this.camera.matrixWorldInverse);\n if ((this.domElement.parentElement ?? this.domElement) !== this.overlayParent) this.attachOverlay();\n const rect = this.layoutOverlay();\n const rays = this.runtime.occlusion_queries();\n const hits = new Float32Array(rays.length / 8 * 2);\n for (let offset = 0; offset < rays.length; offset += 8) {\n this.raycaster.set(new THREE.Vector3().fromArray(rays, offset + 1), new THREE.Vector3().fromArray(rays, offset + 4));\n this.raycaster.near = 0; this.raycaster.far = rays[offset + 7];\n const intersection = this.raycaster.intersectObjects(this.meshes, false)[0];\n hits[offset / 4] = rays[offset]; hits[offset / 4 + 1] = intersection?.distance ?? Infinity;\n }\n this.runtime.observe_occlusion(hits);\n const values = this.runtime.marker_frame(now, new Float32Array(this.camera.projectionMatrix.elements), new Float32Array(this.viewProjection.elements), rect.width, rect.height);\n const stride = requireInitializedEmbodyCore().annotation_marker_frame_stride();\n for (let offset = 0; offset < values.length; offset += stride) {\n const objects = this.objects.get(values[offset]);\n if (!objects) continue;\n const visible = values[offset + 1] === 1;\n const nativeVisible = visible && !objects.element;\n objects.sphere.visible = objects.line.visible = objects.label.visible = nativeVisible;\n if (objects.arrow) objects.arrow.visible = nativeVisible;\n objects.sphere.position.fromArray(values, offset + 2);\n objects.sphere.scale.setScalar(values[offset + 8]);\n objects.sphere.material.opacity = values[offset + 11]; objects.sphere.material.color.setHex(values[offset + 13]);\n objects.line.material.opacity = values[offset + 12]; objects.line.material.color.setHex(values[offset + 14]);\n const positions = objects.line.geometry.getAttribute('position') as THREE.BufferAttribute;\n (positions.array as Float32Array).set(values.subarray(offset + 19, offset + 70)); positions.needsUpdate = true;\n objects.line.geometry.computeBoundingSphere();\n if (objects.line.material instanceof THREE.LineDashedMaterial) objects.line.computeLineDistances();\n objects.label.position.fromArray(values, offset + 5); objects.label.scale.set(values[offset + 9], values[offset + 10], 1);\n objects.label.material.opacity = values[offset + 11];\n if (objects.arrow) { objects.arrow.position.fromArray(values, offset + 5); objects.arrow.quaternion.fromArray(values, offset + 15); objects.arrow.material.opacity = values[offset + 12]; objects.arrow.material.color.setHex(values[offset + 14]); }\n if (objects.element) { objects.element.style.display = visible ? 'flex' : 'none'; objects.element.style.transform = `translate(-50%,-50%) scale(${values[offset + 72]})`; objects.element.style.background = `#${Math.round(values[offset + 13]).toString(16).padStart(6, '0')}`; objects.element.style.left = `${values[offset + 70]}px`; objects.element.style.top = `${values[offset + 71]}px`; objects.element.style.opacity = String(values[offset + 11]); }\n }\n }\n private readonly click = (event: MouseEvent): void => {\n const rect = this.domElement.getBoundingClientRect();\n this.pointer.set((event.clientX - rect.left) / rect.width * 2 - 1, -(event.clientY - rect.top) / rect.height * 2 + 1);\n this.raycaster.near = 0; this.raycaster.far = Infinity;\n this.raycaster.setFromCamera(this.pointer, this.camera);\n // Raycaster reports native hits. Rust decides which annotation is selectable.\n this.onPick(this.raycaster.intersectObjects([...this.objects.values()].flatMap(objects => [objects.sphere, objects.label]), false).map(hit => hit.object.userData.annotationId as number));\n };\n private remove(id: number): void {\n const objects = this.objects.get(id); if (!objects) return;\n for (const object of [objects.sphere, objects.line, objects.arrow]) if (object) { this.group.remove(object); object.geometry.dispose(); object.material.dispose(); }\n this.group.remove(objects.label); objects.label.material.dispose(); objects.texture.dispose(); objects.element?.remove(); this.objects.delete(id);\n }\n clear(): void { for (const id of this.objects.keys()) this.remove(id); this.revision = -1; }\n dispose(): void {\n this.domElement.removeEventListener('click', this.click); this.clear(); this.group.removeFromParent();\n this.overlayResizeObserver?.disconnect(); this.overlay.remove(); this.releaseParentPosition?.();\n this.releaseParentPosition = null; this.overlayParent = null; this.meshes = [];\n }\n}\n","import type * as THREE from 'three';\n\nconst SLICE_BUDGET_MS = 4;\n\n/**\n * Keep Three's native per-mesh raycast, including skinning, morphs and material\n * sides. Yield between meshes once a slice is spent; one mesh is indivisible.\n * A null result means the owning model/region load was replaced or disposed.\n */\nexport async function intersectMeshesInSlices(\n raycaster: THREE.Raycaster,\n meshes: readonly THREE.Mesh[],\n options: { isCurrent: () => boolean; yieldToPaint: () => Promise<void>; now?: () => number },\n): Promise<THREE.Intersection[] | null> {\n const now = options.now ?? (() => performance.now());\n let sliceStart = now();\n const hits: THREE.Intersection[] = [];\n for (const [index, mesh] of meshes.entries()) {\n if (!options.isCurrent()) return null;\n // Let Raycaster apply its native layer checks and Mesh/SkinnedMesh logic.\n // Accumulate separately so earlier meshes' hits aren't sorted repeatedly.\n for (const hit of raycaster.intersectObject(mesh, false)) hits.push(hit);\n if (!options.isCurrent()) return null;\n if (index < meshes.length - 1 && now() - sliceStart >= SLICE_BUDGET_MS) {\n await options.yieldToPaint();\n if (!options.isCurrent()) return null;\n sliceStart = now();\n }\n }\n if (!options.isCurrent()) return null;\n // Same stable distance ordering as Raycaster.intersectObjects(meshes, false).\n return hits.sort((left, right) => left.distance - right.distance);\n}\n","/** Continue in a task after paint, rather than in the animation-frame microtask. */\nexport function waitForCharacterLoadPaint(): Promise<void> {\n return new Promise((resolve) => {\n let frame: number | undefined;\n let task: ReturnType<typeof setTimeout> | undefined;\n const finish = () => {\n clearTimeout(fallback);\n if (task !== undefined) clearTimeout(task);\n if (frame !== undefined && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(frame);\n resolve();\n };\n // Hidden tabs can suspend rAF, including after the visibility check.\n const fallback = setTimeout(finish, 100);\n if (typeof requestAnimationFrame === 'function' &&\n (typeof document === 'undefined' || document.visibilityState !== 'hidden')) {\n frame = requestAnimationFrame(() => { task = setTimeout(finish, 0); });\n } else {\n task = setTimeout(finish, 0);\n }\n });\n}\n","import * as THREE from 'three';\nimport { initEmbodyCore, requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport type { CharacterSceneRenderer } from '../scene';\nimport { bindSceneRendering, reportSceneRenderingFailure } from '../sceneRenderingBinding';\nimport { prepareModelSkinning } from '../modelSkinning';\nimport { renderScenePlayback } from '../playbackRendering';\nimport { compileModelForRender, drawModelForRender } from './modelRenderPreparation';\nimport { resolveAnnotationCharacterConfig } from './adapter';\nimport { CameraDOMControls } from './DOMControls';\nimport { ThreeAnnotationControls } from './ThreeAnnotationControls';\nimport { ThreeAnnotationRenderer } from './ThreeAnnotationRenderer';\nimport { AnnotationModelObserver } from './modelObservation';\nimport { intersectMeshesInSlices } from './markerSurfaceRaycast';\nimport { waitForCharacterLoadPaint } from './loadFrame';\nimport { annotationConfigInput, annotationProfileInput, type AnnotationSnapshot, type NativeAnnotationRuntime, type SurfaceQuery } from './runtime';\nimport type { ThreeAnnotationControllerConfig, CharacterConfig, AnnotationAnchoredRegion, CameraState, MarkerStyle, MarkerStyleOverrides, LineConfig, ExpandedRegionState, RuntimeAnnotationOptions, RuntimeAnnotationRegionSummary, RegionChangeCallback } from './types';\n\nexport interface MarkerStateSnapshot { visible: boolean; style: MarkerStyle; }\ninterface ModelRenderPreparation { promise: Promise<void>; draw: (() => void) | null; cancel: (reason: Error) => void; }\nfunction renderPreparationAborted(): Error { const error = new Error('Model render preparation was cancelled.'); error.name = 'AbortError'; return error; }\n\n/** Native resource owner for one Rust AnnotationRuntime. Await create() or initialize Wasm before construction. */\nexport class ThreeAnnotationController {\n readonly camera: THREE.PerspectiveCamera;\n readonly scene: THREE.Scene;\n readonly controls: ThreeAnnotationControls;\n private readonly runtime: NativeAnnotationRuntime;\n private readonly markerRenderer: ThreeAnnotationRenderer;\n private readonly resolveCharacterConfig: NonNullable<ThreeAnnotationControllerConfig['resolveCharacterConfig']>;\n private readonly selectRegion?: (name: string) => void;\n private domElement: HTMLElement;\n private readonly manageCamera: boolean;\n private observer: AnnotationModelObserver | null = null;\n private hostConfig: CharacterConfig | null = null;\n private configSnapshot: CharacterConfig | null = null;\n private configSnapshotRevision = -1;\n private configSnapshotHost: CharacterConfig | null = null;\n private state: AnnotationSnapshot;\n private domControls: CameraDOMControls | null = null;\n private disposed = false;\n private fallbackFrame: number | null = null;\n private readonly flights = new Map<number, () => void>();\n private readonly markerStateListeners = new Set<(state: MarkerStateSnapshot) => void>();\n private readonly regionListeners = new Set<RegionChangeCallback>();\n private renderer: CharacterSceneRenderer | null = null;\n private readonly playbackTimer = new THREE.Timer();\n private renderFrame: ThreeAnnotationControllerConfig['renderFrame'];\n private resizeRenderer: ThreeAnnotationControllerConfig['resizeRenderer'];\n private onRenderError: ThreeAnnotationControllerConfig['onRenderError'];\n private renderingSuspended = false;\n private unbindRendering: (() => Promise<void> | null) | null = null;\n private renderingFailure: ((error: unknown) => void) | null = null;\n private framePending = false;\n private frameCompletion: Promise<void> | null = null;\n private modelPreparation: ModelRenderPreparation | null = null;\n private renderFailed = false;\n private resizeObserver: ResizeObserver | null = null;\n private boundResizeHandler: (() => void) | null = null;\n\n static async create(config: ThreeAnnotationControllerConfig): Promise<ThreeAnnotationController> { await initEmbodyCore(); return new ThreeAnnotationController(config); }\n constructor(config: ThreeAnnotationControllerConfig, nativeOptions: { captureInput?: boolean; manageCamera?: boolean; markerDefaults?: unknown } = {}) {\n const core = requireInitializedEmbodyCore();\n const settings = Object.fromEntries(['enableDamping', 'dampingFactor', 'minDistance', 'maxDistance', 'transitionDuration', 'zoomPaddingFactor', 'closeUpPaddingFactor', 'fullBodyPaddingFactor'].map(key => [key, config[key as keyof ThreeAnnotationControllerConfig]]));\n this.runtime = new core.AnnotationRuntime(JSON.stringify({ ...settings, markerDefaults: nativeOptions.markerDefaults }));\n this.camera = config.camera; this.scene = config.scene; this.domElement = config.domElement;\n this.manageCamera = nativeOptions.manageCamera ?? true;\n this.resolveCharacterConfig = config.resolveCharacterConfig ?? resolveAnnotationCharacterConfig;\n this.selectRegion = config.onRegionSelect;\n this.controls = new ThreeAnnotationControls(config.domElement, this.runtime, () => { this.update(); this.requestFrame(); }, nativeOptions.captureInput);\n this.state = this.readState();\n if (this.manageCamera) this.applyCameraState(this.state.camera);\n else this.controls.target.copy(this.camera.getWorldDirection(new THREE.Vector3()).add(this.camera.position));\n this.markerRenderer = new ThreeAnnotationRenderer(this.runtime, this.scene, this.camera, this.domElement, ids => this.pick(ids), id => { if (!this.disposed) { this.call('hover', { id }); this.update(); } });\n if (config.showDOMControls ?? true) this.domControls = new CameraDOMControls({ container: config.controlsContainer ?? (config.rendering && config.domElement.tagName === 'CANVAS' ? config.domElement.parentElement ?? config.domElement : config.domElement), regions: [], markersVisible: this.state.visible, onRegionSelect: name => this.select(name), onMarkersVisibleChange: visible => this.setMarkersVisible(visible) });\n this.update();\n this.renderFrame = config.renderFrame;\n this.resizeRenderer = config.resizeRenderer;\n this.onRenderError = config.onRenderError;\n if (config.rendering) {\n const rendering = config.rendering;\n this.renderingFailure = (error) => reportSceneRenderingFailure(rendering, error, this.renderer);\n this.unbindRendering = bindSceneRendering(config.rendering, this.scene, this.camera, {\n suspend: async () => {\n this.renderingSuspended = true;\n const preparation = this.modelPreparation;\n this.cancelModelPreparation();\n // A lost device can reject loop shutdown. Still drain every borrower\n // before allowing the scene owner to release its model resources.\n let stopping: Promise<void>;\n try { stopping = Promise.resolve(this.renderer?.setAnimationLoop(null)); }\n catch (failure) { stopping = Promise.reject(failure); }\n const [stopped] = await Promise.allSettled([\n stopping,\n this.frameCompletion,\n preparation?.promise,\n ]);\n if (stopped.status === 'rejected') throw stopped.reason;\n },\n prepare: async (renderer) => {\n if (this.disposed) throw renderPreparationAborted();\n const model = this.observer?.model;\n if (model) {\n await compileModelForRender(renderer, this.scene, this.camera, model);\n if (this.disposed || model !== this.observer?.model) throw renderPreparationAborted();\n drawModelForRender(renderer, this.scene, this.camera, model);\n } else renderer.render(this.scene, this.camera);\n },\n commit: async (renderer) => {\n if (this.disposed) throw renderPreparationAborted();\n this.cleanupResizeHandling();\n this.controls.disconnect();\n this.controls.connect(renderer.domElement);\n this.domElement = renderer.domElement;\n this.markerRenderer.setDomElement(renderer.domElement);\n this.renderer = renderer;\n this.renderFailed = false;\n this.renderingSuspended = false;\n this.setupResizeHandling();\n this.boundResizeHandler?.();\n await this.startRenderLoop(true);\n if (this.disposed) { this.stopRenderLoop(); throw renderPreparationAborted(); }\n },\n onError: (error) => this.handleRenderError(error),\n });\n } else if (config.renderer) {\n this.renderer = config.renderer;\n void this.startRenderLoop();\n this.setupResizeHandling();\n }\n\n }\n private readState(): AnnotationSnapshot { return JSON.parse(this.runtime.snapshot()) as AnnotationSnapshot; }\n private call<T = void>(operation: string, payload: unknown = {}): T { if (this.disposed) throw new Error('Annotation controller is disposed.'); return JSON.parse(this.runtime.command(operation, JSON.stringify(payload), performance.now())) as T; }\n private sync(): void {\n if (this.disposed || this.runtime.revision() === this.state.revision) return;\n const previous = this.state; this.state = this.readState();\n this.markerRenderer.sync(this.state);\n this.domControls?.updateRegions(this.state.regions, this.state.currentRegion ?? undefined);\n this.domControls?.setMarkersVisible(this.state.visible);\n if (previous.currentRegion !== this.state.currentRegion && this.state.currentRegion) for (const listener of this.regionListeners) listener(this.state.currentRegion);\n if (previous.visible !== this.state.visible || previous.style !== this.state.style) for (const listener of this.markerStateListeners) listener({ visible: this.state.visible, style: this.state.style });\n }\n private applyCameraState(state: CameraState): void { this.camera.position.fromArray(state.position); this.controls.target.fromArray(state.target); this.camera.lookAt(this.controls.target); this.camera.updateMatrixWorld(); }\n private isCurrent(generation: number): boolean { return !this.disposed && this.runtime.is_current(generation); }\n private requestFrame(): void {\n if (this.disposed || this.renderer || this.fallbackFrame !== null || !this.runtime.needs_frame()) return;\n this.fallbackFrame = requestAnimationFrame(() => { this.fallbackFrame = null; this.update(); this.requestFrame(); });\n }\n private settleFlights(): void {\n const completed = this.runtime.completed_camera_request();\n for (const [id, resolve] of this.flights) if (id <= completed) { this.flights.delete(id); resolve(); }\n }\n private waitForFlight(id: number | null): Promise<void> {\n if (id === null || this.disposed) return Promise.resolve();\n if (this.manageCamera) this.applyCameraState(this.readState().camera); this.sync(); this.settleFlights();\n if (id <= this.runtime.completed_camera_request()) return Promise.resolve();\n const promise = new Promise<void>(resolve => this.flights.set(id, resolve)); this.requestFrame(); return promise;\n }\n private select(name: string): void { if (this.selectRegion) this.selectRegion(name); else void this.focusRegion(name); }\n private pick(ids: number[]): void { if (this.disposed) return; const name = this.call<string | null>('pick', { ids }); this.sync(); this.requestFrame(); if (name) this.select(name); }\n setModel(model: THREE.Object3D): void {\n if (this.disposed) return;\n prepareModelSkinning(model);\n this.cancelModelPreparation();\n const observer = new AnnotationModelObserver(model);\n this.runtime.set_model(JSON.stringify(observer.capture())); this.observer = observer; this.markerRenderer.setMeshes(observer.meshes); this.hostConfig = null; this.configSnapshot = null; this.configSnapshotHost = null;\n this.settleFlights(); this.sync();\n }\n /** Drop native and Rust model observations before the host releases its model under a rendering lease. */\n clearModel(): void {\n if (this.disposed) return;\n this.cancelModelPreparation(); this.call('clearModel');\n this.observer = null; this.hostConfig = null; this.configSnapshot = null; this.configSnapshotHost = null; this.markerRenderer.setMeshes([]);\n this.settleFlights(); this.sync();\n }\n getModel(): THREE.Object3D | null { return this.observer?.model ?? null; }\n async loadRegions(config: CharacterConfig): Promise<void> {\n if (this.disposed) return;\n const generation = this.call<number>('beginLoad'); this.settleFlights();\n const resolved = await this.resolveCharacterConfig(config);\n if (!this.isCurrent(generation)) return;\n await this.prepareRegionsAndMarkersForReveal(resolved);\n }\n private configure(config: CharacterConfig): void {\n this.cancelModelPreparation(); this.call('configure', { config: annotationConfigInput(config) }); this.hostConfig = config; this.settleFlights(); this.sync();\n }\n prepareRegionsForReveal(config: CharacterConfig): void { if (this.disposed) return; this.configure(config); this.startConfiguredCamera(); }\n async prepareRegionsAndMarkersForReveal(config: CharacterConfig, beforeReveal?: () => Promise<boolean>): Promise<void> {\n if (this.disposed) return; this.configure(config); const generation = this.runtime.generation();\n await this.loadMarkersForCurrentRegions(true);\n if (!this.isCurrent(generation)) return;\n if (beforeReveal && !await beforeReveal()) return;\n if (this.isCurrent(generation)) this.startConfiguredCamera();\n }\n private startConfiguredCamera(): void { this.update(); this.observer?.observeFocus(this.runtime, { configured: true }); void this.waitForFlight(this.call<number | null>('startConfigured')); }\n async loadMarkersForCurrentRegions(sliceSurfaceQueries = false): Promise<void> {\n if (this.disposed || !this.observer) return;\n const observer = this.observer; const generation = this.runtime.generation();\n observer.observe(this.runtime);\n observer.observeMorphAnchors(this.runtime);\n const queries = JSON.parse(this.runtime.plan_markers('{}')) as SurfaceQuery[];\n for (const initial of queries) {\n let query: SurfaceQuery | null = initial;\n while (query && this.isCurrent(generation)) {\n const raycaster = new THREE.Raycaster(new THREE.Vector3().fromArray(query.origin), new THREE.Vector3().fromArray(query.direction), 0, query.far);\n const hits = sliceSurfaceQueries\n ? await intersectMeshesInSlices(raycaster, observer.meshes, { isCurrent: () => this.isCurrent(generation), yieldToPaint: waitForCharacterLoadPaint })\n : raycaster.intersectObjects(observer.meshes, false);\n if (!hits || !this.isCurrent(generation)) return;\n query = JSON.parse(this.runtime.surface_result(query.generation, query.id, query.phase, new Float32Array(hits.flatMap(hit => hit.point.toArray())))) as SurfaceQuery | null;\n if (sliceSurfaceQueries && query) await waitForCharacterLoadPaint();\n }\n }\n if (!this.isCurrent(generation)) return;\n this.runtime.finish_markers(generation); this.sync(); this.update(); this.requestFrame();\n }\n private rebuild(): void { void this.loadMarkersForCurrentRegions().catch(error => this.handleRenderError(error)); }\n focusRegion(name: string, duration?: number): Promise<void> { return this.focus({ name, duration }); }\n focusBones(bones: string[], duration?: number): Promise<void> { return this.focus({ region: { bones }, duration }); }\n focusMeshes(meshes: string[], duration?: number): Promise<void> { return this.focus({ region: { meshes }, duration }); }\n focusFullBody(duration?: number): Promise<void> { return this.focus({ region: { objects: ['*'] }, duration }); }\n focusObjects(objects: THREE.Object3D[], duration?: number): Promise<void> { return this.focus({ region: { objectIds: objects.flatMap(object => { const id = this.observer?.id(object); return id === undefined ? [] : [id]; }) }, duration }); }\n private focus(request: unknown): Promise<void> { if (this.disposed) return Promise.resolve(); this.update(); this.observer?.observeFocus(this.runtime, request); return this.waitForFlight(this.call<number | null>('focus', request)); }\n playIntroAnimation(orbitDuration = 3000, zoomDuration = 1500): Promise<void> { if (this.disposed) return Promise.resolve(); this.update(); this.observer?.observeFocus(this.runtime, { intro: true }); return this.waitForFlight(this.call<number | null>('intro', { orbitDuration, zoomDuration })); }\n animateToCameraState(state: CameraState, duration?: number): Promise<void> { if (this.disposed) return Promise.resolve(); return this.waitForFlight(this.call<number>('animateCamera', { ...state, duration })); }\n getCameraState(): CameraState { return { position: this.camera.position.toArray(), target: this.controls.target.toArray() }; }\n setCameraState(state: CameraState): void { if (this.disposed) return; this.call('setCamera', state); this.applyCameraState(this.readState().camera); this.settleFlights(); this.sync(); this.controls.notifyChange(); }\n getRegionNames(): string[] { return this.getAnnotationRegions().map(region => region.name); }\n getCurrentRegion(): string | null { return this.state.currentRegion; }\n getCharacterConfig(): CharacterConfig | null {\n if (!this.hostConfig) return null;\n // React consumers observe this snapshot. Camera/hover frames must not create\n // a new profile identity or trigger another round of editor effects.\n if (this.configSnapshotRevision !== this.state.configRevision || this.configSnapshotHost !== this.hostConfig) {\n this.configSnapshot = { ...this.hostConfig, ...this.state.config };\n this.configSnapshotRevision = this.state.configRevision;\n this.configSnapshotHost = this.hostConfig;\n }\n return this.configSnapshot;\n }\n getAnnotationRegions(): AnnotationAnchoredRegion[] { return structuredClone(this.state.regions); }\n getAnnotationRegion(name: string): AnnotationAnchoredRegion | undefined { return this.getAnnotationRegions().find(region => region.name === name); }\n setCurrentRegion(name: string | null): void { if (this.disposed) return; this.call('select', { name }); this.sync(); }\n getMarkersVisible(): boolean { return this.state.visible; }\n setMarkersVisible(visible: boolean): void {\n if (this.disposed) return;\n this.call('visibility', { visible });\n this.sync();\n // Region preparation defers native marker construction until the first\n // reveal. Rust's loaded state prevents rebuilding on later visibility edits.\n if (visible && !this.state.loaded && this.hostConfig) this.rebuild();\n this.update(); this.requestFrame();\n }\n getMarkerStyle(): MarkerStyle { return this.state.style; }\n setMarkerStyle(style: MarkerStyle): void { if (this.disposed) return; this.call('style', { style }); this.sync(); this.update(); }\n clearMarkers(): void { if (this.disposed) return; this.cancelModelPreparation(); this.call('clear'); this.observer?.observeMorphAnchors(this.runtime); this.hostConfig = null; this.configSnapshot = null; this.configSnapshotHost = null; this.settleFlights(); this.sync(); }\n subscribeMarkerState(listener: (state: MarkerStateSnapshot) => void): () => void { this.markerStateListeners.add(listener); listener({ visible: this.state.visible, style: this.state.style }); return () => { this.markerStateListeners.delete(listener); }; }\n onRegionChange(listener: RegionChangeCallback): () => void { this.regionListeners.add(listener); return () => { this.regionListeners.delete(listener); }; }\n soloMarker(name: string | null): void { if (this.disposed) return; this.call('solo', { name }); this.sync(); this.update(); }\n getSoloedMarker(): string | null { return this.state.solo; }\n expandRegion(name: string, duration?: number): void { this.expandCommand('expand', name, duration); }\n setRegionExpansion(name: string, expanded: boolean, animation: 'outward' | 'staggered' = 'outward', duration?: number): void { this.expandCommand(expanded ? 'expand' : 'collapse', name, duration, animation); }\n collapseRegion(name: string, duration?: number): void { this.expandCommand('collapse', name, duration); }\n toggleRegion(name: string, animation: 'outward' | 'staggered' = 'outward', duration?: number): void { this.expandCommand('toggle', name, duration, animation); }\n private expandCommand(operation: string, name: string, duration?: number, animation?: string): void { if (this.disposed) return; this.call(operation, { name, duration, animation }); this.sync(); this.update(); this.requestFrame(); }\n getExpandedRegions(): ExpandedRegionState[] { return structuredClone(this.state.expanded); }\n setRegionLineStyle(name: string, line: Partial<LineConfig>): void { this.updateAnnotationRegion(name, { style: { line } }); }\n setRegionStyle(name: string, style: Partial<MarkerStyleOverrides>): void { this.updateAnnotationRegion(name, { style }); }\n updateRegionMeshes(name: string, meshes: string[]): void { this.updateAnnotationRegion(name, { meshes }); }\n repositionMarker(name: string, position: { x: number; y: number; z: number }): void { this.updateAnnotationRegion(name, { markerAnchor: { type: 'point', position } }); }\n getMarkerPosition(name: string): { x: number; y: number; z: number } | null { return this.disposed ? null : this.call('markerPosition', { name }); }\n updateAnnotationRegion(name: string, update: Partial<AnnotationAnchoredRegion>): void { if (this.disposed) return; this.call('updateRegion', { name, update: JSON.parse(JSON.stringify(update, (_key, value) => value === undefined ? null : value)) }); this.sync(); this.rebuild(); }\n removeAnnotationRegion(name: string): void { if (this.disposed) return; this.call('removeRegion', { name }); this.sync(); this.rebuild(); }\n showRuntimeBoneAnnotation(boneName: string, options: RuntimeAnnotationOptions = {}): RuntimeAnnotationRegionSummary { const result = this.call<RuntimeAnnotationRegionSummary>('runtimeBone', { target: boneName, options }); this.sync(); this.rebuild(); return result; }\n showRuntimeAUAnnotations(auId: string | number, profile?: unknown, options: RuntimeAnnotationOptions = {}, morphTargetsByMesh?: unknown): RuntimeAnnotationRegionSummary[] { const result = this.call<RuntimeAnnotationRegionSummary[]>('runtimeAU', { target: String(auId), profile: annotationProfileInput(profile), options, meshes: morphTargetsByMesh }); this.sync(); this.rebuild(); return result; }\n clearRuntimeAnnotations(): string[] { if (this.disposed) return []; const names = this.call<string[]>('clearRuntime'); this.sync(); this.rebuild(); return names; }\n setDOMControlsVisible(visible: boolean): void { this.domControls?.setVisible(visible); }\n updateDOMControls(): void { this.domControls?.updateRegions(this.state.regions, this.state.currentRegion ?? undefined); this.domControls?.setMarkersVisible(this.state.visible); }\n update(): void {\n if (this.disposed) return;\n const rect = this.domElement.getBoundingClientRect(); const now = performance.now();\n const pose = this.runtime.camera_frame(now, new Float32Array([...this.camera.position.toArray(), ...this.controls.target.toArray(), this.camera.fov, this.camera.aspect, rect.width, rect.height]));\n if (this.manageCamera && pose.length >= 6) { this.camera.position.fromArray(pose); this.controls.target.fromArray(pose, 3); this.camera.lookAt(this.controls.target); }\n if (this.observer) {\n this.runtime.observe_transforms(this.observer.transforms(this.runtime));\n this.observer.observeMorphAnchors(this.runtime);\n }\n this.sync(); this.markerRenderer.update(now); this.settleFlights();\n if (pose[9] === 1) this.controls.notifyChange();\n }\n dispose(): void {\n if (this.disposed) return; this.disposed = true; this.cancelModelPreparation(); this.stopRenderLoop(); this.cleanupResizeHandling();\n this.playbackTimer.dispose();\n const renderingSettled = this.unbindRendering?.(); this.unbindRendering = null;\n if (this.fallbackFrame !== null) cancelAnimationFrame(this.fallbackFrame); this.fallbackFrame = null;\n this.controls.dispose();\n // A candidate renderer may still be compiling these borrowed marker resources.\n if (renderingSettled) void renderingSettled.then(() => this.markerRenderer.dispose());\n else this.markerRenderer.dispose();\n this.domControls?.dispose(); this.domControls = null;\n this.runtime.dispose(); this.runtime.free(); this.observer = null; this.hostConfig = null; this.configSnapshot = null; this.configSnapshotHost = null;\n for (const resolve of this.flights.values()) resolve(); this.flights.clear(); this.markerStateListeners.clear(); this.regionListeners.clear();\n }\n private startRenderLoop(propagateFailure = false): void | Promise<void> {\n if (!this.renderer) return;\n const renderer = this.renderer;\n this.playbackTimer.disconnect();\n const ownerDocument = renderer.domElement?.ownerDocument;\n if (ownerDocument) this.playbackTimer.connect(ownerDocument);\n this.playbackTimer.reset();\n let playbackStarted = false;\n try {\n const started = renderer.setAnimationLoop((timestamp?: number) => {\n if (this.disposed || renderer !== this.renderer) return;\n this.playbackTimer.update(timestamp);\n const samplePlayback = playbackStarted;\n playbackStarted = true;\n if (this.renderFailed || this.renderingSuspended || this.framePending) return;\n try {\n // Native shadows are updated once per camera/frame. Prepare the full\n // scene first and leave its pixels untouched until the next frame.\n const preparationDraw = this.modelPreparation?.draw;\n if (preparationDraw) { preparationDraw(); return; }\n if (samplePlayback) renderScenePlayback(this.scene, this.playbackTimer);\n this.update();\n const frame = this.renderFrame\n ? this.renderFrame(this.renderer!, this.scene, this.camera)\n : this.renderer!.render(this.scene, this.camera);\n if (frame) {\n this.framePending = true;\n this.frameCompletion = Promise.resolve(frame).then(\n () => { this.framePending = false; },\n (error) => { this.framePending = false; this.handleRenderError(error); },\n );\n }\n } catch (error) { this.handleRenderError(error); }\n });\n if (started) return started.catch((error) => {\n if (propagateFailure) throw error;\n if (renderer === this.renderer) this.handleRenderError(error);\n });\n } catch (error) {\n if (propagateFailure) throw error;\n this.handleRenderError(error);\n }\n }\n\n private handleRenderError(error: unknown): void {\n if (this.disposed || this.renderFailed) return;\n this.renderFailed = true;\n this.cancelModelPreparation(error instanceof Error ? error : new Error(String(error)));\n this.stopRenderLoop();\n const failure = error instanceof Error ? error : new Error(String(error));\n if (this.renderingFailure) { this.renderingFailure(failure); return; }\n try {\n if (this.onRenderError) this.onRenderError(failure);\n else console.error('Character camera render loop failed.', failure);\n } catch (callbackError) {\n console.error('Character camera render-error callback failed.', callbackError);\n }\n }\n\n /**\n * Stop the render loop\n */\n private stopRenderLoop(): void {\n this.playbackTimer.reset();\n try {\n const stopped = this.renderer?.setAnimationLoop(null);\n if (stopped) void stopped.catch((error) => console.error('Character camera render loop stop failed.', error));\n } catch (error) { console.error('Character camera render loop stop failed.', error); }\n }\n\n private setupResizeHandling(): void {\n if (!this.renderer) return;\n\n const container = this.domElement.parentElement || this.domElement;\n\n // Create resize handler\n this.boundResizeHandler = () => {\n const width = container.clientWidth || window.innerWidth;\n const height = container.clientHeight || window.innerHeight;\n\n this.camera.aspect = width / height;\n this.camera.updateProjectionMatrix();\n\n if (this.renderer) {\n if (this.resizeRenderer) {\n this.resizeRenderer(this.renderer, width, height);\n } else {\n this.renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 2));\n this.renderer.setSize(width, height, false);\n }\n }\n };\n\n // Use ResizeObserver for container size changes\n this.resizeObserver = new ResizeObserver(this.boundResizeHandler);\n this.resizeObserver.observe(container);\n\n // Also listen to window resize as fallback\n window.addEventListener('resize', this.boundResizeHandler);\n }\n\n /**\n * Clean up resize handling\n */\n private cleanupResizeHandling(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n if (this.boundResizeHandler) {\n window.removeEventListener('resize', this.boundResizeHandler);\n this.boundResizeHandler = null;\n }\n }\n\n // ====== CORE PUBLIC METHODS ======\n\n /**\n * Prepare the currently visible material variants before first reveal.\n * Borrows model/renderer; callers retain them until this promise settles,\n * including after cancellation or controller disposal.\n */\n prepareModelForRender(model: THREE.Object3D, options: { signal?: AbortSignal } = {}): Promise<void> {\n if (this.disposed || options.signal?.aborted) return Promise.reject(renderPreparationAborted());\n if (this.renderingSuspended) return Promise.reject(new Error('Model render preparation is unavailable during renderer replacement.'));\n if (!this.renderer || this.renderFailed) return Promise.reject(new Error('Model render preparation requires an active controller-owned renderer.'));\n const renderer = this.renderer;\n const previous = this.modelPreparation;\n previous?.cancel(renderPreparationAborted());\n let cancelled: Error | null = null;\n let invalidatePreparedShadows: (() => void) | null = null;\n let rejectDraw: ((error: Error) => void) | null = null;\n let resolve!: () => void;\n let reject!: (error: unknown) => void;\n const promise = new Promise<void>((yes, no) => { resolve = yes; reject = no; });\n const request: ModelRenderPreparation = {\n promise, draw: null,\n cancel: (reason) => {\n cancelled ??= reason;\n invalidatePreparedShadows?.();\n request.draw = null;\n rejectDraw?.(cancelled);\n },\n };\n this.modelPreparation = request;\n const abort = () => request.cancel(renderPreparationAborted());\n options.signal?.addEventListener('abort', abort, { once: true });\n const checkCancelled = () => { if (cancelled) throw cancelled; };\n void (async () => {\n try {\n // Supersession never compiles over a predecessor's borrowed objects.\n if (previous) await previous.promise.catch(() => undefined);\n // A host callback may have started while the predecessor was settling.\n // Read its current completion here, immediately before acquiring state.\n if (this.framePending && this.frameCompletion) await this.frameCompletion;\n checkCancelled();\n const compilation = compileModelForRender(renderer, this.scene, this.camera, model);\n try { await compilation; }\n catch (error) { throw cancelled ?? error; }\n checkCancelled();\n await new Promise<void>((done, failed) => {\n rejectDraw = failed;\n request.draw = () => {\n request.draw = null;\n try {\n checkCancelled();\n invalidatePreparedShadows = drawModelForRender(renderer, this.scene, this.camera, model);\n checkCancelled();\n done();\n } catch (error) { invalidatePreparedShadows?.(); failed(cancelled ?? error); }\n };\n });\n checkCancelled();\n } finally {\n options.signal?.removeEventListener('abort', abort);\n if (this.modelPreparation === request) this.modelPreparation = null;\n }\n })().then(resolve, reject);\n return promise;\n }\n\n private cancelModelPreparation(reason = renderPreparationAborted()): void {\n this.modelPreparation?.cancel(reason);\n }\n\n /**\n * Set the model to use for bone/mesh lookups\n * Must be called after model loads\n */\n\n}\n","import * as THREE from 'three';\nimport { ThreeAnnotationController } from './ThreeAnnotationController';\nimport type { AnnotationAnchoredRegion, CharacterConfig, MarkerStyle, MarkerStyleOverrides, LineConfig, ExpandAnimation } from './types';\nexport interface AnnotationMarkersConfig { scene: THREE.Scene; camera: THREE.PerspectiveCamera; domElement: HTMLElement; onSelect: (name: string) => void; config?: Partial<MarkerStyleOverrides> & { lineLength?: number; labelScale?: number }; }\n/** Marker-only native view of the same Rust runtime used by the controller. */\nexport class ThreeAnnotationMarkers {\n protected readonly controller: ThreeAnnotationController;\n constructor(private readonly options: AnnotationMarkersConfig, private readonly style: MarkerStyle = '3d') {\n this.controller = new ThreeAnnotationController({ ...options, onRegionSelect: options.onSelect, showDOMControls: false }, { captureInput: false, manageCamera: false, markerDefaults: options.config });\n this.controller.setMarkersVisible(true);\n }\n setModel(model: THREE.Object3D): void { this.controller.setModel(model); }\n loadRegions(config: CharacterConfig, options: { sliceSurfaceQueries?: boolean } = {}): Promise<void> {\n this.controller.prepareRegionsForReveal({ ...config, markerStyle: this.style, playIntroOnLoad: false, defaultRegion: undefined });\n return this.controller.loadMarkersForCurrentRegions(options.sliceSurfaceQueries);\n }\n setCurrentRegion(name: string | null): void { this.controller.setCurrentRegion(name); }\n updateRegion(name: string, update: Partial<AnnotationAnchoredRegion>): void { this.controller.updateAnnotationRegion(name, update); }\n removeRegion(name: string): void { this.controller.removeAnnotationRegion(name); }\n updateRegionMeshes(name: string, meshes: string[]): void { this.controller.updateRegionMeshes(name, meshes); }\n repositionMarker(name: string, position: THREE.Vector3): void { this.controller.repositionMarker(name, position); }\n getMarkerPosition(name: string): THREE.Vector3 | null { const p = this.controller.getMarkerPosition(name); return p ? new THREE.Vector3(p.x, p.y, p.z) : null; }\n updateLineStyle(name: string, line: Partial<LineConfig>): void { this.controller.setRegionLineStyle(name, line); }\n updateMarkerStyle(name: string, style: Partial<MarkerStyleOverrides>): void { this.controller.setRegionStyle(name, style); }\n setSoloMarker(name: string | null): void { this.controller.soloMarker(name); }\n getSoloedMarker(): string | null { return this.controller.getSoloedMarker(); }\n expandRegion(name: string, animation: ExpandAnimation = 'outward', duration?: number): void { this.controller.setRegionExpansion(name, true, animation, duration); }\n collapseRegion(name: string, duration?: number): void { this.controller.collapseRegion(name, duration); }\n toggleRegion(name: string, animation: ExpandAnimation = 'outward', duration?: number): void { this.controller.toggleRegion(name, animation, duration); }\n getExpandedRegions() { return this.controller.getExpandedRegions(); }\n update(): void { this.controller.update(); }\n setVisible(visible: boolean): void { this.controller.setMarkersVisible(visible); }\n clear(): void { this.controller.clearMarkers(); }\n dispose(): void { this.controller.dispose(); }\n}\n","import { ThreeAnnotationMarkers, type AnnotationMarkersConfig } from './ThreeAnnotationMarkers';\n/** HTML rendering of the same Rust annotation state and layout. */\nexport class HtmlAnnotationMarkers extends ThreeAnnotationMarkers { constructor(options: AnnotationMarkersConfig) { super(options, 'html'); } }\n","import { initEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport { annotationQuery } from './runtime';\nimport { observeAnnotationModel } from './modelObservation';\nimport * as THREE from 'three';\nimport { ThreeAnnotationController } from './ThreeAnnotationController';\nimport { ThreeAnnotationMarkers } from './ThreeAnnotationMarkers';\nimport { HtmlAnnotationMarkers } from './HtmlAnnotationMarkers';\nimport { CameraDOMControls } from './DOMControls';\nimport type {\n CharacterConfig,\n ThreeAnnotationControllerConfig,\n MarkerStyle,\n LineConfig,\n MarkerStyleOverrides,\n ExpandAnimation,\n ExpandedRegionState,\n} from './types';\n\n/**\n * ThreeAnnotations Configuration\n */\nexport interface ThreeAnnotationsConfig {\n /** Three.js scene */\n scene: THREE.Scene;\n /** Three.js camera */\n camera: THREE.PerspectiveCamera;\n /** Canvas or container element */\n domElement: HTMLElement;\n /** Marker style: '3d' (default) or 'html' */\n markerStyle?: MarkerStyle;\n /** Show DOM controls dropdown. Default: false */\n showControls?: boolean;\n /** Callback when a region is selected */\n onRegionSelect?: (name: string) => void;\n /** Camera controller options */\n cameraOptions?: Partial<ThreeAnnotationControllerConfig>;\n}\n\n/**\n * ThreeAnnotations - Camera & Marker System for Three.js\n *\n * Factory class that creates and manages camera controller and markers.\n *\n * @example\n * ```typescript\n * const annotations = await ThreeAnnotations.create({\n * scene,\n * camera,\n * domElement: canvas,\n * markerStyle: '3d',\n * });\n *\n * annotations.setModel(model);\n * await annotations.loadCharacter(config);\n * annotations.focus('head');\n *\n * // In render loop\n * annotations.update();\n * ```\n */\nexport class ThreeAnnotations {\n private readonly cameraController: ThreeAnnotationController;\n private model: THREE.Object3D | null = null;\n\n static async create(options: ThreeAnnotationsConfig): Promise<ThreeAnnotations> { await initEmbodyCore(); return new ThreeAnnotations(options); }\n\n constructor(options: ThreeAnnotationsConfig) {\n this.cameraController = new ThreeAnnotationController({\n scene: options.scene,\n camera: options.camera,\n domElement: options.domElement,\n showDOMControls: options.showControls ?? false,\n onRegionSelect: options.onRegionSelect,\n ...options.cameraOptions,\n });\n this.cameraController.setMarkersVisible(true);\n if (options.markerStyle) this.cameraController.setMarkerStyle(options.markerStyle);\n }\n\n setModel(model: THREE.Object3D): this {\n this.model = model;\n this.cameraController.setModel(model);\n return this;\n }\n\n async loadCharacter(config: CharacterConfig): Promise<this> {\n await this.cameraController.loadRegions(config);\n return this;\n }\n\n focus(regionName: string, duration?: number): Promise<void> { return this.cameraController.focusRegion(regionName, duration); }\n getRegions(): string[] { return this.cameraController.getRegionNames(); }\n getCurrentRegion(): string | null { return this.cameraController.getCurrentRegion(); }\n setMarkerStyle(style: MarkerStyle): this { this.cameraController.setMarkerStyle(style); return this; }\n setMarkersVisible(visible: boolean): this { this.cameraController.setMarkersVisible(visible); return this; }\n setControlsVisible(visible: boolean): this { this.cameraController.setDOMControlsVisible(visible); return this; }\n getCameraState() { return this.cameraController.getCameraState(); }\n setCameraState(position: [number, number, number], target: [number, number, number], _animate?: boolean): this {\n this.cameraController.setCameraState({ position, target }); return this;\n }\n get controller(): ThreeAnnotationController { return this.cameraController; }\n update(): void { this.cameraController.update(); }\n expandRegion(name: string, duration?: number): this { this.cameraController.expandRegion(name, duration); return this; }\n collapseRegion(name: string, duration?: number): this { this.cameraController.collapseRegion(name, duration); return this; }\n toggleRegion(name: string, animation: ExpandAnimation = 'outward', duration?: number): this { this.cameraController.toggleRegion(name, animation, duration); return this; }\n getExpandedRegions(): ExpandedRegionState[] { return this.cameraController.getExpandedRegions(); }\n soloMarker(name: string | null): this { this.cameraController.soloMarker(name); return this; }\n getSoloedMarker(): string | null { return this.cameraController.getSoloedMarker(); }\n setRegionLineStyle(name: string, line: Partial<LineConfig>): this { this.cameraController.setRegionLineStyle(name, line); return this; }\n setRegionStyle(name: string, style: Partial<MarkerStyleOverrides>): this { this.cameraController.setRegionStyle(name, style); return this; }\n dispose(): void { this.cameraController.dispose(); this.model = null; }\n\n // ============ CHARACTER VALIDATION ============\n\n /**\n * Validate a loaded character model against expected bone/morph mappings\n * @param expectedBones - Map of semantic bone names to actual bone names\n * @param expectedMorphs - List of expected morph target names\n * @returns Validation result with found/missing bones and morphs\n */\n validateCharacter(expectedBones?: Record<string, string>, expectedMorphs?: string[]): CharacterValidationResult {\n return annotationQuery('validateCharacter', { model: this.model ? observeAnnotationModel(this.model) : null, expectedBones, expectedMorphs });\n }\n getBoneNames(): string[] { return annotationQuery('modelNames', { model: this.model ? observeAnnotationModel(this.model) : null, kind: 'bones' }); }\n getMorphNames(): string[] { return annotationQuery('modelNames', { model: this.model ? observeAnnotationModel(this.model) : null, kind: 'morphs' }); }\n getMeshNames(): string[] { return annotationQuery('modelNames', { model: this.model ? observeAnnotationModel(this.model) : null, kind: 'meshes' }); }\n}\n\n// ============ VALIDATION TYPES ============\n\nexport interface ValidationItem {\n name: string;\n semantic?: string;\n}\n\nexport interface ValidationCategory {\n found: ValidationItem[];\n missing: ValidationItem[];\n unexpected: ValidationItem[];\n}\n\nexport interface CharacterValidationResult {\n valid: boolean;\n bones: ValidationCategory;\n morphs: ValidationCategory;\n meshes: { found: string[]; total: number };\n summary: string;\n}\n\n// Re-export for convenience\nexport { ThreeAnnotationController as CameraController } from './ThreeAnnotationController';\nexport { ThreeAnnotationMarkers as Markers3D } from './ThreeAnnotationMarkers';\nexport { HtmlAnnotationMarkers as MarkersHTML } from './HtmlAnnotationMarkers';\nexport { CameraDOMControls as Controls } from './DOMControls';\n","import type { AnnotationAnchoredRegion, AnnotationMarkerAnchor, Region } from './types';\nimport { annotationQuery } from './runtime';\nexport type MarkerAnchorProjectionMode = 'legacy' | 'project' | 'skip';\nexport interface ResolvedMarkerAnchorRegion { region: AnnotationAnchoredRegion; anchor: AnnotationMarkerAnchor | null; source: 'legacy-region' | 'marker-anchor'; projection: MarkerAnchorProjectionMode; useLegacyRegionSemantics: boolean; }\nexport function resolveMarkerAnchorRegion(region: Region): ResolvedMarkerAnchorRegion { return annotationQuery('anchor', { region }); }\nexport function shouldUseFaceCenterForMarkerAnchor(resolved: ResolvedMarkerAnchorRegion): boolean { return annotationQuery('faceAnchor', { resolved }); }\nexport function shouldProjectMarkerAnchorToSurface(resolved: ResolvedMarkerAnchorRegion, legacyDefault: boolean): boolean { return annotationQuery('projectAnchor', { resolved, legacyDefault }); }\n","import * as THREE from 'three';\nimport { requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport type { AnnotationAnchoredRegion, RuntimeAnnotationSide } from './types';\nimport { annotationQuery } from './runtime';\nimport { readMorphGeometry, sampleMorphVertices, updateAnnotationWorldMatrices } from './morphGeometry';\nexport function getRuntimeAnnotationSide(region: AnnotationAnchoredRegion): RuntimeAnnotationSide | null { return annotationQuery('side', { region }); }\nexport function getRuntimeAUMeshSideOffset(region: AnnotationAnchoredRegion, sideSign: number, modelSize: THREE.Vector3): THREE.Vector3 | null { const value = annotationQuery<{x:number;y:number;z:number} | null>('meshSideOffset', { region, sideSign, size: modelSize }); return value ? new THREE.Vector3(value.x, value.y, value.z) : null; }\n/** Reads native attributes; both candidate selection and anchor reduction run in Rust. */\nexport function getRuntimeAUMorphAnchorPoint(region: AnnotationAnchoredRegion, mesh: THREE.Mesh): THREE.Vector3 | null {\n const core = requireInitializedEmbodyCore();\n const names = annotationQuery<string[]>('morphNames', { region });\n const geometry = readMorphGeometry(mesh, names);\n if (!geometry) return null;\n const candidates = core.annotation_morph_anchor_candidates(JSON.stringify(region), geometry.base, geometry.morphs, geometry.relative);\n updateAnnotationWorldMatrices(mesh);\n const positions = new Float32Array(candidates.length / 2 * 3);\n sampleMorphVertices(mesh, candidates.filter((_value, index) => index % 2 === 0), positions);\n const samples = new Float32Array(candidates.length / 2 * 4);\n for (let index = 0; index < candidates.length / 2; index++) {\n samples.set(positions.subarray(index * 3, index * 3 + 3), index * 4);\n samples[index * 4 + 3] = candidates[index * 2 + 1];\n }\n const value = core.annotation_weighted_anchor(samples);\n return value.length === 3 ? new THREE.Vector3().fromArray(value) : null;\n}\n","import { initEmbodyCore, requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\n\ntype Lifecycle = InstanceType<ReturnType<typeof requireInitializedEmbodyCore>['AnnotationLifecycle']>;\nexport type LifecycleEffect = { kind: 'visibility' | 'style' | 'previewStart' | 'previewEnd'; visible?: boolean; style?: '3d' | 'html' };\n/** Clock/queue transport only. All deadline and effect decisions belong to Rust. */\nexport class AnnotationLifecycleBridge {\n private readiness: Promise<void> = Promise.resolve();\n private initializing: Promise<void> | null = null;\n private core: Lifecycle | null = null;\n private timer: ReturnType<typeof setTimeout> | null = null;\n private pending: { operation: string; options: unknown; time: number }[] = [];\n private initialized = false;\n private commandRevision = 0;\n constructor(private readonly mode: 'preview' | 'visibility', private readonly duration: number, private readonly apply: (effects: LifecycleEffect[]) => void) {\n this.initialize();\n }\n /** The current attempt; dispatching after a failed attempt can start a retry. */\n get ready(): Promise<void> { return this.readiness; }\n private initialize(): void {\n if (this.initialized) return;\n // Another scene may have retried the shared loader after our earlier failure.\n try { requireInitializedEmbodyCore(); this.initialized = true; }\n catch { /* Queue native calls until the shared loader is ready. */ }\n if (this.initialized) {\n this.readiness = Promise.resolve();\n this.drainPending();\n return;\n }\n if (this.initializing) return;\n this.initializing = initEmbodyCore().then(() => {\n this.initializing = null;\n this.initialized = true;\n this.drainPending();\n }, error => {\n this.initializing = null;\n this.pending = [];\n throw error;\n });\n this.readiness = this.initializing;\n void this.readiness.catch(error => { console.error('Annotation lifecycle initialization failed.', error); });\n }\n private drainPending(): void {\n // Consume the live queue so cleanup from a callback can cancel its tail.\n while (this.pending.length) {\n const entry = this.pending.shift()!;\n this.execute(entry.operation, entry.options, entry.time);\n }\n }\n dispatch(operation: string, options: unknown = {}): void {\n const time = performance.now();\n if (operation === 'dispose') {\n this.pending = [];\n if (!this.initialized) return;\n }\n if (!this.initialized) { this.pending.push({ operation, options, time }); this.initialize(); return; }\n this.execute(operation, options, time);\n }\n private execute(operation: string, options: unknown, time: number): void {\n const revision = ++this.commandRevision;\n if (this.timer !== null) clearTimeout(this.timer); this.timer = null;\n // dispose is reusable host cleanup (including React effect replay). Release\n // the Wasm allocation and create a fresh runtime on the next native call.\n const core = this.core ??= new (requireInitializedEmbodyCore().AnnotationLifecycle)(this.mode, this.duration);\n const effects = JSON.parse(core.command(operation, JSON.stringify(options), time)) as LifecycleEffect[];\n if (operation === 'dispose') { this.core = null; core.free(); }\n this.apply(effects);\n // A callback can dispose/reuse the lifecycle; its newer command owns timers.\n if (operation === 'dispose' || revision !== this.commandRevision) return;\n const deadline = core.deadline();\n if (deadline !== undefined) this.timer = setTimeout(() => this.dispatch('tick'), Math.max(0, deadline - performance.now()));\n }\n isActive(): boolean { return this.core?.is_active() ?? false; }\n}\n","import type { ThreeAnnotationController } from './ThreeAnnotationController';\nimport type { MarkerStyle } from './types';\nimport { AnnotationLifecycleBridge } from './lifecycleBridge';\nimport { annotationQuery } from './runtime';\nexport const DEFAULT_MARKER_AUTO_HIDE_MS = 5000;\nexport type MarkerLifecycleRevealOptions = { durationMs?: number; markerStyle?: MarkerStyle; revealDelayMs?: number };\nexport type MarkerLifecycleRevealSource = { markerStyle?: MarkerStyle; playIntroOnLoad?: boolean };\ntype Controller = Pick<ThreeAnnotationController, 'setMarkersVisible' | 'setMarkerStyle'>;\nexport function createMarkerLifecycleRevealOptions(config: MarkerLifecycleRevealSource | null | undefined): MarkerLifecycleRevealOptions { return annotationQuery('revealOptions', { config }); }\nexport function createMarkerVisibilityLifecycle(getController: () => Controller | null, defaultDurationMs = DEFAULT_MARKER_AUTO_HIDE_MS) {\n let owner: Controller | null = null;\n const bridge = new AnnotationLifecycleBridge('visibility', defaultDurationMs, effects => {\n // Controller identity is a borrowed native resource, never serialized state.\n if (getController() !== owner) return;\n for (const effect of effects) { if (effect.kind === 'visibility') owner?.setMarkersVisible(effect.visible!); if (effect.kind === 'style') owner?.setMarkerStyle(effect.style!); }\n });\n const dispatch = (operation: string, options: unknown = {}) => { owner = getController(); bridge.dispatch(operation, options); };\n return { get ready() { return bridge.ready; }, setManualVisibility: (visible: boolean) => dispatch('manual', { visible }), prepareForCharacterLoad: () => dispatch('prepare'), showForCharacterLoad: (options: MarkerLifecycleRevealOptions = {}) => dispatch('reveal', options), dispose: () => bridge.dispatch('dispose') };\n}\n","import { AnnotationLifecycleBridge } from './lifecycleBridge';\nexport const DEFAULT_PREVIEW_AUTO_CLEAR_MS = 1200;\nexport interface RuntimeAnnotationPreviewLifecycleOptions { getDisabled?: () => boolean; getAutoClearMs?: () => number | undefined; onPreviewStart?: () => void; onPreviewEnd?: () => void; }\nexport function createRuntimeAnnotationPreviewLifecycle(options: RuntimeAnnotationPreviewLifecycleOptions) {\n const bridge = new AnnotationLifecycleBridge('preview', DEFAULT_PREVIEW_AUTO_CLEAR_MS, effects => {\n for (const effect of effects) { if (effect.kind === 'previewStart') options.onPreviewStart?.(); if (effect.kind === 'previewEnd') options.onPreviewEnd?.(); }\n });\n return { get ready() { return bridge.ready; },\n start: (forceRefresh = false) => bridge.dispatch('start', { forceRefresh, disabled: options.getDisabled?.(), durationMs: options.getAutoClearMs?.() }),\n end: () => bridge.dispatch('end'), scheduleEnd: () => bridge.dispatch('scheduleEnd', { durationMs: options.getAutoClearMs?.() }),\n isActive: () => bridge.isActive(), dispose: () => bridge.dispatch('dispose'),\n };\n}\n","import type { RuntimeAnnotationSide } from './types';\nimport { annotationProfileInput, annotationQuery } from './runtime';\nexport function inferRuntimeAnnotationPreviewSide(auId: number, profile: { auToMorphs?: unknown; auToBones?: unknown } | null | undefined): RuntimeAnnotationSide | undefined { return annotationQuery<RuntimeAnnotationSide | null>('inferPreviewSide', { au: auId, profile: annotationProfileInput(profile) }) ?? undefined; }\nexport function pickContinuumAnnotationAuId(value: number, negId: number, posId: number, stickyId: number | null): number { return annotationQuery('continuumTarget', { value, negId, posId, stickyId }); }\n","import type { BoneResolutionProfile } from './adapter';\n\n/**\n * Embody serializes bone-resolution inputs into Wasm. Passing a complete\n * character profile also serializes authored vertex deltas and saved clips\n * for every annotation lookup, even though the resolver cannot use them.\n */\nexport function boneResolutionProfile(\n profile: BoneResolutionProfile | null | undefined,\n): BoneResolutionProfile | null {\n if (!profile) return null;\n return {\n bonePrefix: profile.bonePrefix,\n boneSuffix: profile.boneSuffix,\n boneNodes: profile.boneNodes,\n suffixPattern: profile.suffixPattern,\n };\n}\n","import { Matrix4, Quaternion, Vector3 } from 'three';\nimport type { Object3D } from 'three';\n\ntype ReferenceVector3 = Readonly<{ x: number; y: number; z: number }>;\ntype ReferenceQuaternion = Readonly<{ x: number; y: number; z: number; w: number }>;\n\nexport type ThreeReferencePoseNode = Readonly<{\n /** Child-index path relative to the captured model. The model itself has path ''. */\n path: string;\n parentPath: string | null;\n name: string;\n type: string;\n isBone: boolean;\n rotationOrder: Object3D['rotation']['order'];\n /** Authored Euler values for automatic TRS, including rotations beyond one turn. */\n rotationEuler?: ReferenceVector3;\n childCount: number;\n /** For manual matrices, this is a decomposition; matrices remain authoritative for shear. */\n transform: Readonly<{\n position: ReferenceVector3;\n rotation: ReferenceQuaternion;\n scale: ReferenceVector3;\n }>;\n /** Column-major local and world matrices, including shear and non-bone ancestors. */\n localMatrix: readonly number[];\n worldMatrix: readonly number[];\n worldPosition: ReferenceVector3;\n /** Optional morph baseline captured independently from later live influences. */\n morphInfluences?: readonly number[];\n}>;\n\nexport type ThreeModelReferencePose = Readonly<{\n version: 1;\n /** Captured transform above the model root; identity for an unparented model. */\n parentWorldMatrix: readonly number[];\n nodes: readonly ThreeReferencePoseNode[];\n}>;\n\nconst isBone = (object: Object3D) => !!((object as Object3D & { isBone?: boolean }).isBone || object.type === 'Bone');\n\nconst finite = (values: readonly number[], description: string) => {\n if (!values.every(Number.isFinite)) {\n throw new Error(`Cannot capture reference pose: ${description} contains non-finite values`);\n }\n};\n\nconst matrixValues = (matrix: Matrix4, description: string): readonly number[] => {\n const values = matrix.elements.slice();\n finite(values, description);\n return Object.freeze(values);\n};\n\nconst localMatrix = (object: Object3D) => object.matrixAutoUpdate\n ? new Matrix4().compose(object.position, object.quaternion, object.scale)\n : object.matrix.clone();\n\nconst referenceTransform = (object: Object3D, matrix: Matrix4): ThreeReferencePoseNode['transform'] => {\n // Manual matrices can contain shear that TRS cannot represent exactly. Retain the\n // original matrix independently and expose a decomposition only for TRS consumers.\n const position = object.matrixAutoUpdate ? object.position : new Vector3();\n const rotation = object.matrixAutoUpdate ? object.quaternion : new Quaternion();\n const scale = object.matrixAutoUpdate ? object.scale : new Vector3();\n if (!object.matrixAutoUpdate) {\n // r184 substitutes identity TRS for singular matrices. Keep rejecting a\n // missing basis axis instead of inventing its authored rotation and scale.\n const elements = matrix.elements;\n if ([0, 4, 8].some((start) => Math.hypot(elements[start], elements[start + 1], elements[start + 2]) === 0)) {\n throw new Error(`Cannot capture reference pose: manual transform for ${JSON.stringify(object.name)} has a zero-length basis axis`);\n }\n matrix.decompose(position, rotation, scale);\n }\n finite([...position.toArray(), ...rotation.toArray(), ...scale.toArray()], `transform for ${JSON.stringify(object.name)}`);\n return Object.freeze({\n position: Object.freeze({ x: position.x, y: position.y, z: position.z }),\n rotation: Object.freeze({ x: rotation.x, y: rotation.y, z: rotation.z, w: rotation.w }),\n scale: Object.freeze({ x: scale.x, y: scale.y, z: scale.z }),\n });\n};\n\nconst captureSubtree = (\n object: Object3D,\n path: string,\n parentPath: string | null,\n parentMatrix: Matrix4,\n nodes: ThreeReferencePoseNode[],\n) => {\n const local = localMatrix(object);\n const localValues = matrixValues(local, `local matrix at ${JSON.stringify(path)}`);\n const world = new Matrix4().multiplyMatrices(parentMatrix, local);\n const worldValues = matrixValues(world, `world matrix at ${JSON.stringify(path)}`);\n const influences = (object as Object3D & { morphTargetInfluences?: readonly number[] }).morphTargetInfluences;\n const morphInfluences = influences === undefined ? undefined : Array.from(influences);\n if (morphInfluences) finite(morphInfluences, `morph influences at ${JSON.stringify(path)}`);\n const rotationEuler = object.matrixAutoUpdate\n ? { x: object.rotation.x, y: object.rotation.y, z: object.rotation.z }\n : undefined;\n if (rotationEuler) finite(Object.values(rotationEuler), `Euler rotation at ${JSON.stringify(path)}`);\n nodes.push(Object.freeze({\n path,\n parentPath,\n name: object.name,\n type: object.type,\n isBone: isBone(object),\n rotationOrder: object.rotation.order,\n ...(rotationEuler ? { rotationEuler: Object.freeze(rotationEuler) } : {}),\n childCount: object.children.length,\n transform: referenceTransform(object, local),\n localMatrix: localValues,\n worldMatrix: worldValues,\n worldPosition: Object.freeze({ x: worldValues[12], y: worldValues[13], z: worldValues[14] }),\n ...(morphInfluences ? { morphInfluences: Object.freeze(morphInfluences) } : {}),\n }));\n object.children.forEach((child, index) => captureSubtree(child, `${path}/${index}`, path, world, nodes));\n};\n\nconst matchesNode = (object: Object3D, node: ThreeReferencePoseNode | undefined, path: string, parentPath: string | null) =>\n node !== undefined\n && node.path === path\n && node.parentPath === parentPath\n && node.name === object.name\n && node.type === object.type\n && node.isBone === isBone(object);\n\nconst incompatible = (object: Object3D, path: string) =>\n new Error(`Incompatible reference pose hierarchy at ${JSON.stringify(path)} (${JSON.stringify(object.name)})`);\n\n/**\n * Explicitly capture the authored reference pose before starting animation.\n * This does not infer a skin bind pose or animation frame zero: it snapshots the\n * transforms supplied by the caller, without updating or otherwise mutating the scene.\n * World matrices are calculated from the full ancestor chain's local transforms,\n * not potentially stale matrixWorld values. All returned data is deeply frozen and\n * JSON-serializable; no object, UUID, or live transform references are retained.\n * Existing morph influences are copied as an optional baseline. Non-finite data\n * or manual matrices with a zero-length basis axis/non-finite TRS decomposition throw.\n */\nexport function captureModelReferencePose(model: Object3D): ThreeModelReferencePose {\n const ancestors: Object3D[] = [];\n for (let ancestor = model.parent; ancestor; ancestor = ancestor.parent) ancestors.push(ancestor);\n const parentWorld = new Matrix4();\n for (const ancestor of ancestors.reverse()) parentWorld.multiply(localMatrix(ancestor));\n const parentWorldMatrix = matrixValues(parentWorld, 'parent world matrix');\n const nodes: ThreeReferencePoseNode[] = [];\n\n captureSubtree(model, '', null, parentWorld, nodes);\n return Object.freeze({ version: 1, parentWorldMatrix, nodes: Object.freeze(nodes) });\n}\n\n/**\n * Explicitly extend a reference after appending children, such as a generated\n * skeleton. Existing structural paths, names, kinds and child order must match;\n * removing or inserting before an existing child is incompatible. Existing\n * captured data remains unchanged except child counts. Newly appended subtrees\n * use their current local transforms beneath the CAPTURED parent world matrix,\n * so playback and later scene placement never become the old rig's reference.\n * Returns a new deeply frozen snapshot without mutating the model or previous\n * data. Identical sibling swaps cannot be distinguished by structural identity.\n */\nexport function extendModelReferencePose(\n model: Object3D,\n previous: ThreeModelReferencePose,\n): ThreeModelReferencePose {\n if (previous.version !== 1) throw new Error('Unsupported model reference pose version');\n const nodes: ThreeReferencePoseNode[] = [];\n let index = 0;\n const extend = (object: Object3D, path: string, parentPath: string | null) => {\n const node = previous.nodes[index++];\n if (!matchesNode(object, node, path, parentPath) || object.children.length < node.childCount) {\n throw incompatible(object, path);\n }\n // Copy even a deserialized snapshot into frozen data; never freeze or mutate\n // the caller's input, or reuse any current transform/morph values here.\n nodes.push(Object.freeze({\n ...node,\n childCount: object.children.length,\n transform: Object.freeze({\n position: Object.freeze({ ...node.transform.position }),\n rotation: Object.freeze({ ...node.transform.rotation }),\n scale: Object.freeze({ ...node.transform.scale }),\n }),\n localMatrix: Object.freeze([...node.localMatrix]),\n worldMatrix: Object.freeze([...node.worldMatrix]),\n worldPosition: Object.freeze({ ...node.worldPosition }),\n ...(node.rotationEuler ? { rotationEuler: Object.freeze({ ...node.rotationEuler }) } : {}),\n ...(node.morphInfluences ? { morphInfluences: Object.freeze([...node.morphInfluences]) } : {}),\n }));\n for (let childIndex = 0; childIndex < node.childCount; childIndex += 1) {\n extend(object.children[childIndex], `${path}/${childIndex}`, path);\n }\n const parentWorld = new Matrix4().fromArray(node.worldMatrix);\n for (let childIndex = node.childCount; childIndex < object.children.length; childIndex += 1) {\n captureSubtree(object.children[childIndex], `${path}/${childIndex}`, path, parentWorld, nodes);\n }\n };\n extend(model, '', null);\n if (index !== previous.nodes.length) throw new Error('Incompatible reference pose hierarchy: extra captured nodes');\n return Object.freeze({\n version: 1,\n parentWorldMatrix: Object.freeze([...previous.parentWorldMatrix]),\n nodes: Object.freeze(nodes),\n });\n}\n\n/**\n * Resolve captured data against an identically structured model, including a fresh\n * clone/load with new UUIDs. Names, types, bone flags, and child ordering must match;\n * duplicate names are distinguished by structural path, never name lookup.\n * Current transforms and the model's external scene parent are deliberately ignored.\n * An incompatible hierarchy throws before a binding map is returned.\n */\nexport function bindModelReferencePose(\n model: Object3D,\n referencePose: ThreeModelReferencePose,\n): ReadonlyMap<Object3D, ThreeReferencePoseNode> {\n if (referencePose.version !== 1) throw new Error('Unsupported model reference pose version');\n const bindings = new Map<Object3D, ThreeReferencePoseNode>();\n let index = 0;\n const bind = (object: Object3D, path: string, parentPath: string | null) => {\n const node = referencePose.nodes[index++];\n if (!matchesNode(object, node, path, parentPath) || node.childCount !== object.children.length) {\n throw incompatible(object, path);\n }\n bindings.set(object, node);\n object.children.forEach((child, childIndex) => bind(child, `${path}/${childIndex}`, path));\n };\n bind(model, '', null);\n if (index !== referencePose.nodes.length) throw new Error('Incompatible reference pose hierarchy: extra captured nodes');\n return bindings;\n}\n","import {\n AnimationClip, InterpolateDiscrete, InterpolateLinear, LoadingManager,\n Matrix4, NormalAnimationBlendMode, Quaternion, QuaternionKeyframeTrack, Texture, TextureLoader,\n Vector3, VectorKeyframeTrack,\n} from 'three';\nimport type { Object3D, SkinnedMesh, Mesh, Material } from 'three';\nimport { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js';\nimport { requireInitializedEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport { bindModelReferencePose, captureModelReferencePose } from './reference-pose';\nimport type { ThreeModelReferencePose } from './reference-pose';\nimport { ThreeModelInspector } from './index';\n\ntype Vec3 = [number, number, number];\ntype Quat = [number, number, number, number];\ntype RigNode = { id: string; name: string; parent: string | null; translation: Vec3; rotation: Quat; scale: Vec3 };\ntype Rig = { metersPerUnit: number; nodes: RigNode[]; humanoidBones: Record<string, string> };\ntype AnimationTrack = { node: string; path: 'rotation' | 'translation' | 'scale'; interpolation: 'STEP' | 'LINEAR'; times: number[]; values: number[] };\n\n/** Validated body-animation intermediate, not a file format. Persist the .vrma GLB bytes. */\nexport type VrmAnimationDocument = {\n version: 1; name: string; durationSeconds: number; rig: Rig; tracks: AnimationTrack[];\n};\n/** Metres represented by one model coordinate unit; always supplied by the caller. */\nexport type VrmAnimationUnits = { metersPerUnit: number };\nexport type VrmAnimationFile = { name: string; bytes: Uint8Array };\nexport type VrmAnimationInfo = { name: string; durationSeconds: number; trackCount: number };\nexport type MixamoVrmAnimationOptions = {\n /** Mixamo FBX generally uses centimeters (0.01); this is explicit, never inferred. */\n metersPerUnit: number;\n /** Authored T reference; omission requires skin bind inverses. Never pass frame zero. */\n referencePose?: ThreeModelReferencePose;\n};\nexport type VrmAnimationTargetOptions = {\n metersPerUnit: number;\n referencePose: ThreeModelReferencePose;\n /** Existing Embody profile; resolved with Rust's humanoid characterization. */\n profile?: unknown;\n /** Explicit VRM role -> unique target bone name, taking precedence over profile. */\n humanoidBones?: Record<string, string>;\n name?: string;\n};\n\nconst MAX_BYTES = 64 * 1024 * 1024;\nconst identity = new Matrix4();\nconst isBone = (node: Object3D) => (node as Object3D & { isBone?: boolean }).isBone || node.type === 'Bone';\n\nfunction decomposeReference(matrix: Matrix4, name: string) {\n const position = new Vector3(); const rotation = new Quaternion(); const scale = new Vector3();\n if (!matrix.elements.every(Number.isFinite) || Math.abs(matrix.determinant()) < 1e-20) {\n throw new Error(`Invalid reference matrix for ${name}`);\n }\n matrix.decompose(position, rotation, scale);\n const reconstructed = new Matrix4().compose(position, rotation, scale);\n if (matrix.elements.some((v, i) => Math.abs(v - reconstructed.elements[i]) > 1e-5 * Math.max(1, Math.abs(v)))) {\n throw new Error(`Reference ${name} contains shear, which VRMA retargeting does not support`);\n }\n return { translation: position.toArray() as Vec3, rotation: rotation.toArray() as Quat, scale: scale.toArray() as Vec3 };\n}\n\nfunction objectsInModel(model: Object3D) {\n const all: Object3D[] = [];\n model.traverse((node) => all.push(node));\n const needed = new Set<Object3D>([model]);\n for (const bone of all.filter(isBone)) {\n for (let node: Object3D | null = bone; node && node !== model; node = node.parent) needed.add(node);\n }\n const objects = all.filter((node) => needed.has(node));\n if (objects.length > 4096) throw new Error('Animation rig exceeds 4096 nodes');\n const ids = new Map(objects.map((node, i) => [node, String(i)]));\n return { objects, ids };\n}\n\nfunction inspectReference(model: Object3D, referencePose: ThreeModelReferencePose, metersPerUnit: number, includeRoot = false) {\n const bindings = bindModelReferencePose(model, referencePose);\n const { objects, ids } = objectsInModel(model);\n const nodes = objects.map((node) => ({\n id: ids.get(node)!, name: node.name, parent: node === model ? null : ids.get(node.parent!)!,\n // Placement of the model in a scene is not part of its humanoid coordinate system.\n ...decomposeReference(node === model && !includeRoot ? identity : new Matrix4().fromArray(bindings.get(node)!.localMatrix), node.name),\n }));\n return { rig: { metersPerUnit, nodes, humanoidBones: {} } as Rig, objects, ids };\n}\n\nfunction inspectSkinBind(model: Object3D, metersPerUnit: number) {\n if (model.parent) throw new Error('Use an explicit referencePose for a parented source model');\n const initial = captureModelReferencePose(model);\n const initialBindings = bindModelReferencePose(model, initial);\n const { objects, ids } = objectsInModel(model);\n const world = new Map<Object3D, Matrix4>();\n const all: Object3D[] = [];\n model.traverse((node) => all.push(node));\n for (const node of all) {\n const mesh = node as SkinnedMesh;\n if (!mesh.isSkinnedMesh) continue;\n const { bones, boneInverses } = mesh.skeleton;\n if (bones.length !== boneInverses.length) throw new Error('Invalid skin bind inverse count');\n bones.forEach((bone, index) => {\n const inverse = boneInverses[index];\n if (Math.abs(inverse.determinant()) < 1e-20) throw new Error(`Singular bind matrix for ${bone.name}`);\n const bind = inverse.clone().invert();\n const prior = world.get(bone);\n if (prior && prior.elements.some((value, i) => Math.abs(value - bind.elements[i]) > 1e-4)) {\n throw new Error(`Conflicting skin bind matrices for ${bone.name}`);\n }\n world.set(bone, bind);\n });\n }\n const nodes = objects.map((node) => {\n if (isBone(node) && !world.has(node)) {\n throw new Error(`No skin bind reference for ${node.name}; supply an explicit authored T-pose reference`);\n }\n const nodeWorld = world.get(node) ?? new Matrix4().fromArray(initialBindings.get(node)!.worldMatrix);\n const parentWorld = node.parent\n ? world.get(node.parent) ?? new Matrix4().fromArray(initialBindings.get(node.parent)!.worldMatrix)\n : identity;\n const local = parentWorld.clone().invert().multiply(nodeWorld);\n return { id: ids.get(node)!, name: node.name, parent: node === model ? null : ids.get(node.parent!)!, ...decomposeReference(local, node.name) };\n });\n return { rig: { metersPerUnit, nodes, humanoidBones: {} } as Rig, objects, ids };\n}\n\nfunction uniqueBone(objects: Object3D[], name: string) {\n const matches = objects.filter((node) => isBone(node) && (node.name === name || node.uuid === name));\n if (matches.length !== 1) throw new Error(`Animation bone ${name} must resolve uniquely (found ${matches.length})`);\n return matches[0];\n}\n\n/** Pure conversion with borrowed native objects: no mixer, scene mutation, loading or disposal. */\nexport function convertMixamoToVrmAnimation(source: Object3D, clip: AnimationClip, options: MixamoVrmAnimationOptions): Uint8Array {\n const core = requireInitializedEmbodyCore();\n if (clip.blendMode !== NormalAnimationBlendMode) {\n throw new Error('VRMA conversion requires absolute local animation keys; additive clips are unsupported');\n }\n const { rig, objects, ids } = options.referencePose\n ? inspectReference(source, options.referencePose, options.metersPerUnit, true)\n : inspectSkinBind(source, options.metersPerUnit);\n const tracks: AnimationTrack[] = clip.tracks.map((track) => {\n // FBXLoader creates direct bone property tracks. Avoid PropertyBinding's fuzzy\n // name lookup and reject arbitrary scene/morph/indexed targets explicitly.\n const match = /^(.*)\\.(quaternion|position|scale)$/.exec(track.name);\n if (!match) throw new Error(`Unsupported Mixamo track ${track.name}`);\n const bone = uniqueBone(objects, match[1]);\n const interpolation = track.getInterpolation();\n if (interpolation !== InterpolateLinear && interpolation !== InterpolateDiscrete) {\n throw new Error(`Unsupported interpolation on ${track.name}`);\n }\n return { node: ids.get(bone)!, path: match[2] === 'quaternion' ? 'rotation' : match[2] === 'position' ? 'translation' : 'scale',\n interpolation: interpolation === InterpolateDiscrete ? 'STEP' : 'LINEAR', times: Array.from(track.times), values: Array.from(track.values) };\n });\n const normalized = core.normalize_mixamo_animation(JSON.stringify({ version: 1, name: clip.name, durationSeconds: clip.duration, rig, tracks }));\n return core.encode_vrma_animation(normalized);\n}\n\n/** Validates embedded binary/accessors, humanoid hierarchy, reference and supported channels. */\nexport function inspectVrmAnimation(bytes: Uint8Array): VrmAnimationDocument {\n if (bytes.byteLength > MAX_BYTES) throw new Error('VRMA exceeds 64 MiB');\n return JSON.parse(requireInitializedEmbodyCore().decode_vrma_animation(bytes)) as VrmAnimationDocument;\n}\n\n/** Builds native target-local tracks. The caller owns mixer scheduling and blending. */\nexport function createAnimationClipFromVrmAnimation(bytes: Uint8Array, target: Object3D, options: VrmAnimationTargetOptions): AnimationClip {\n const core = requireInitializedEmbodyCore();\n const document = inspectVrmAnimation(bytes);\n const { rig, objects, ids } = inspectReference(target, options.referencePose, options.metersPerUnit);\n let humanoidBones = options.humanoidBones;\n if (!humanoidBones) {\n if (!options.profile) throw new Error('VRMA target requires a characterized profile or explicit humanoidBones');\n const inspection = new ThreeModelInspector().inspectModel(target, { referencePose: options.referencePose });\n const result = JSON.parse(core.validate_humanoid_characterization(JSON.stringify(options.profile), JSON.stringify(inspection.descriptor))) as {\n valid: boolean; errors: string[]; roles: Record<string, { boneName: string }>;\n };\n if (!result.valid) throw new Error(`Cannot characterize VRMA target: ${result.errors.join('; ')}`);\n humanoidBones = Object.fromEntries(Object.entries(result.roles).map(([role, binding]) => [role, binding.boneName]));\n }\n for (const [role, name] of Object.entries(humanoidBones)) {\n // Eyes may be part of a complete target characterization. They are not body\n // animation channels, regardless of whether bindings came from a profile.\n if (role !== 'leftEye' && role !== 'rightEye') rig.humanoidBones[role] = ids.get(uniqueBone(objects, name))!;\n }\n const retargeted = JSON.parse(core.retarget_vrma_animation(JSON.stringify(document), JSON.stringify(rig))) as VrmAnimationDocument;\n const byId = new Map(objects.map((node) => [ids.get(node)!, node]));\n const tracks = retargeted.tracks.map((track) => {\n const node = byId.get(track.node);\n if (!node) throw new Error(`Retargeted node ${track.node} is not in the target model`);\n const interpolation = track.interpolation === 'STEP' ? InterpolateDiscrete : InterpolateLinear;\n return track.path === 'rotation'\n ? new QuaternionKeyframeTrack(`${node.uuid}.quaternion`, track.times, track.values, interpolation)\n : new VectorKeyframeTrack(`${node.uuid}.position`, track.times, track.values, interpolation);\n });\n return new AnimationClip(options.name ?? document.name, retargeted.durationSeconds, tracks);\n}\n\n/** Browser FBX boundary: textures are never fetched; temporary parser objects are released. */\nexport function convertMixamoFbxToVrmAnimations(bytes: ArrayBuffer, options: VrmAnimationUnits): VrmAnimationFile[] {\n requireInitializedEmbodyCore();\n if (!bytes.byteLength || bytes.byteLength > MAX_BYTES) throw new Error('FBX must be between 1 byte and 64 MiB');\n const textures = new Set<Texture>();\n class AnimationTextureLoader extends TextureLoader {\n override load(url: string): Texture<HTMLImageElement> {\n // FBXLoader may create blob URLs for embedded images; consume no image data.\n if (url.startsWith('blob:')) URL.revokeObjectURL(url);\n const texture = new Texture<HTMLImageElement>(); textures.add(texture); return texture;\n }\n }\n const manager = new LoadingManager();\n manager.addHandler(/.*/, new AnimationTextureLoader(manager));\n manager.setURLModifier(() => { throw new Error('External FBX resources are not allowed for animation conversion'); });\n let source: Object3D | undefined;\n try {\n source = new FBXLoader(manager).parse(bytes, '');\n if (!source.animations.length) throw new Error('FBX has no animation clips');\n let hasSkin = false;\n source.traverse((node) => { if ((node as SkinnedMesh).isSkinnedMesh) hasSkin = true; });\n // FBXLoader has not played any animation. For animation-only exports the\n // authored default transforms are the explicit reference, validated in Rust.\n const referencePose = hasSkin ? undefined : captureModelReferencePose(source);\n return source.animations.map((clip) => ({ name: clip.name, bytes: convertMixamoToVrmAnimation(source!, clip, { ...options, referencePose }) }));\n } finally {\n const materials = new Set<Material>();\n source?.traverse((node) => {\n const mesh = node as Mesh;\n mesh.geometry?.dispose();\n if (mesh.material) for (const material of Array.isArray(mesh.material) ? mesh.material : [mesh.material]) materials.add(material);\n (node as SkinnedMesh).skeleton?.dispose();\n });\n for (const material of materials) material.dispose();\n for (const texture of textures) texture.dispose();\n }\n}\n","import type { AnimationClip, Mesh, Object3D } from 'three';\nimport type { GLTF } from 'three/examples/jsm/loaders/GLTFLoader.js';\nimport { requireInitializedEmbodyCore, CC4_HUMANOID_SKELETON_TEMPLATE, HUMANOID_SKELETON_TEMPLATES, DEFAULT_HAIR_COLOR_APPEARANCE } from '@lovelace_lol/embody/wasm';\nimport { ThreeModelInspector, serializeAnimationClips } from './index';\nimport type { Region } from './annotations/types';\nimport type * as Types from './authoringTypes';\n\nexport * from './authoringTypes';\nexport { resolveBoneNames, fuzzyNameMatch } from './annotations/adapter';\nexport {\n DEFAULT_AXIS_TO_CHANNEL, DEFAULT_BONE_MAX_DEGREES, JOINT_CONTROL_SECTION,\n VISEME_KEYS, HAIR_COLOR_PRESETS, DEFAULT_HAIR_COLOR_APPEARANCE, getAUDescriptors, LEGACY_BODY_CONTROL_AUS,\n HUMANOID_SKELETON_TEMPLATES, CC4_HUMANOID_SKELETON_TEMPLATE,\n} from '@lovelace_lol/embody/wasm';\n\nconst json = (value: unknown) => JSON.stringify(value ?? {});\nfunction request<T>(op: string, payload: unknown = {}): T {\n return JSON.parse(requireInitializedEmbodyCore().embody_request(json({ op, payload }))) as T;\n}\n\nexport const getPreset = (id: Types.PresetType): Types.Profile => request('preset.get', { id });\nexport const extendCharacterConfigWithPreset = <T extends Types.ProfileRuntimeConfig>(config: T): T => request('profile.extendConfig', { config });\nexport const extractProfileOverrides = (config: Types.ProfileRuntimeConfig): Partial<Types.Profile> => request('profile.extractOverrides', { config });\nexport const mergeCharacterRegionsByName = (base?: Region[], override?: Region[]): Region[] => request('profile.mergeRegions', { base, override });\nexport const getMeshNamesForAUProfile = (profile: Partial<Types.Profile>, auId: number): string[] => request('profile.getMeshNamesForAU', { profile, auId });\n/** Resolve routing and legacy mesh aliases once for an editor inventory. */\nexport const resolveMorphMeshSelections = (\n profile: Partial<Pick<Types.Profile, 'morphToMesh' | 'visemeMeshCategory'>>,\n categories: string[], availableNames: string[],\n): Record<string, Types.MorphMeshSelection> => request('profile.resolveMorphMeshSelections', { profile, categories, availableNames });\nexport const getHumanoidSpecification = (): Types.HumanoidSpecification => request('humanoid.getSpecification');\nexport const setAUMorphTargets = (profile: Types.ProfileInput, auId: number, side: 'left' | 'right' | 'center', targets: Types.MorphTargetRef[]): Partial<Types.Profile> & Pick<Types.Profile, 'auToMorphs'> => request('profile.setAUMorphTargets', { profile, auId, side, targets });\nexport const setHumanoidRoleBinding = (profile: Types.ProfileInput, role: Types.VRMHumanoidRole, boneName: string | null): Partial<Types.Profile> => request('profile.setHumanoidRoleBinding', { profile, role, boneName });\nexport const resolveHumanoidCharacterization = (profile: Partial<Types.Profile>): Types.HumanoidCharacterizationResolution => request('profile.resolveHumanoidCharacterization', { profile });\n\nexport const hasLeftRightMorphs = (profile: Partial<Types.Profile>, auId: number): boolean => request('profile.hasLeftRightMorphs', { profile, auId });\nexport const isMixedAU = (profile: Partial<Types.Profile>, auId: number): boolean => request('profile.isMixedAU', { profile, auId });\nexport const resolveVisemeProfile = (profile: Partial<Types.Profile>): Types.ResolvedVisemeProfile => request('profile.resolveVisemes', { profile });\n\nexport const isMaxDegreesOnlyAxisBindingUpdate = (update: Types.BoneAxisBindingUpdate): boolean => request('bone.isMaxDegreesOnlyUpdate', { update });\nexport const findNodeKeyForBone = (boneName: string, profile: Partial<Types.Profile> | null): string | null => profile ? request('bone.findNodeKey', { profile, boneName }) : null;\nexport const ensureBoneNodeKey = (profile: Types.Profile, boneName: string): { nodeKey: string; boneNodes: Record<string, string> } => request('bone.ensureNodeKey', { profile, boneName });\nexport const ensureBilateralBoneNodeKeys = (profile: Types.ProfileInput, leftBoneName: string, rightBoneName: string): Partial<Types.Profile> => request('bone.ensureBilateralNodeKeys', { profile, leftBoneName, rightBoneName });\nexport const resolveBoneNameForNodeKey = (profile: Types.Profile, nodeKey: string): string | null => request('bone.resolveBoneName', { profile, nodeKey });\nexport const stripConfiguredBoneAffixes = (profile: Pick<Types.Profile, 'bonePrefix' | 'boneSuffix'> | null | undefined, boneName: string): string => request('bone.stripAffixes', { profile: profile ?? {}, boneName });\nexport const inferChiralBoneNamePair = (boneNames: string[], selectedBoneName: string): Types.ChiralBoneNamePair | null => request('bone.inferChiralPair', { boneNames, selectedBoneName });\nexport const formatAxisLabel = (axis: Types.BoneAxisKey): string => request('bone.formatAxisLabel', { axis });\nexport const formatAxisDirectionLabel = (axis: Types.BoneAxisKey, direction: Types.BoneAxisDirection): string => request('bone.formatDirectionLabel', { axis, direction });\nexport const getAxisFromChannel = (channel?: string): Types.BoneAxisKey | null => channel ? request('bone.getAxisFromChannel', { channel }) : null;\nexport const getBoneAxisBindingState = (profile: Partial<Types.Profile>, boneName: string, axis: Types.BoneAxisKey): Types.BoneAxisBindingState | null => request('bone.getAxisState', { profile, boneName, axis });\nexport const resolveBoneAxisChannel = (profile: Types.Profile, boneName: string, axis: Types.BoneAxisKey): Types.RotationChannel => request('bone.resolveAxisChannel', { profile, boneName, axis });\nexport const getBilateralAxisBindingState = (profile: Partial<Types.Profile>, boneName: string, axis: Types.BoneAxisKey): Types.BilateralAxisBindingState | null => request('bone.getBilateralAxisState', { profile, boneName, axis });\nexport const getAUBoneBindingState = (profile: Partial<Types.Profile>, auId: number): Types.AUBoneBindingState => request('bone.getAUBindingState', { profile, auId });\n/** Resolve a panel's bone links without repeatedly serializing its full character. */\nexport const getAUBoneBindingStates = (\n profile: Partial<Pick<Types.Profile, 'auToBones' | 'boneNodes' | 'bonePrefix' | 'boneSuffix' | 'suffixPattern' | 'compositeRotations' | 'continuumPairs' | 'humanoidCharacterization'>>,\n auIds: readonly number[],\n): Record<number, Types.AUBoneBindingState> => request('bone.getAUBindingStates', {\n profile: {\n auToBones: profile.auToBones, boneNodes: profile.boneNodes,\n bonePrefix: profile.bonePrefix, boneSuffix: profile.boneSuffix, suffixPattern: profile.suffixPattern,\n compositeRotations: profile.compositeRotations, continuumPairs: profile.continuumPairs,\n humanoidCharacterization: profile.humanoidCharacterization,\n },\n auIds,\n});\nexport const inferEyeControlScope = (profile: Pick<Types.Profile, 'auToBones'>, binding: Pick<Types.BoneAxisBindingState, 'nodeKey' | 'negativeAuId' | 'positiveAuId'>): Types.BoneControlScope | null => request('bone.inferEyeScope', { profile, binding });\nexport const inferEyeControlFamily = (binding: Pick<Types.BoneAxisBindingState, 'nodeKey' | 'axis'>): Types.BoneControlFamily | null => request('bone.inferEyeFamily', { binding });\nexport const applyBoneAxisBindingUpdate = (profile: Types.ProfileInput, boneName: string, axis: Types.BoneAxisKey, update: Types.BoneAxisBindingUpdate): Partial<Types.Profile> => request('bone.applyAxisUpdate', { profile, boneName, axis, update });\nexport const applyBilateralAxisBindingUpdate = (profile: Types.ProfileInput, boneName: string, axis: Types.BoneAxisKey, scope: Types.BilateralBoneAxisScope, update: Types.BoneAxisBindingUpdate): Partial<Types.Profile> => request('bone.applyBilateralAxisUpdate', { profile, boneName, axis, scope, update });\nexport const applyAUBoneBindingUpdate = (profile: Types.Profile, auId: number, update: { boneName: string | null; axis: Types.BoneAxisKey; direction: Types.BoneAxisDirection; maxDegrees: number | null }): Types.Profile => request('bone.applyAUBindingUpdate', { profile, auId, update });\nexport const createBoneAxisAu = (profile: Types.ProfileInput, boneName: string, axis: Types.BoneAxisKey, direction: Types.BoneAxisDirection, options: { name?: string } = {}): Types.CreatedBoneAxisAu => request('bone.createAxisAU', { profile, boneName, axis, direction, name: options.name });\nexport const createBilateralBoneAxisAu = (profile: Types.ProfileInput, boneName: string, axis: Types.BoneAxisKey, scope: Types.BilateralBoneAxisScope, direction: Types.BoneAxisDirection, options: { name?: string } = {}): Types.CreatedBoneAxisAu => request('bone.createBilateralAxisAU', { profile, boneName, axis, scope, direction, name: options.name });\nexport const buildBoneAuOptions = (profile: Partial<Types.Profile>): Array<{ value: string; label: string; detail?: string }> => request('bone.buildAUOptions', { profile });\nexport const isJointControlAuInfo = (info?: Pick<Types.AUInfo, 'facePart'> | null): boolean => request('bone.isJointControlInfo', { info });\nexport const classifyAuAsJointControl = (profile: Types.Profile, auId: number, options: { boneName?: string | null; nodeKey?: string | null } = {}): Types.Profile => request('bone.classifyJointControl', { profile, auId, boneName: options.boneName, nodeKey: options.nodeKey });\nexport const resolveContinuumDisplayLabel = (profile: Partial<Pick<Types.Profile, 'continuumPairs' | 'continuumLabels' | 'auInfo' | 'boneNodes' | 'bonePrefix' | 'boneSuffix'>>, negativeAuId: number, positiveAuId: number): string => request<string | null>('bone.resolveContinuumLabel', { profile, negativeAuId, positiveAuId }) ?? `AU ${negativeAuId} <-> AU ${positiveAuId}`;\n\nfunction inspectModel(model: Object3D, meshes?: Mesh[], profile?: Partial<Types.Profile>) {\n return new ThreeModelInspector().inspectModel(model, { meshes, profile });\n}\n\nexport function extractModelData(model: Object3D, meshes?: Mesh[], animations: AnimationClip[] = []): Types.ModelData {\n const inspection = inspectModel(model, meshes);\n return JSON.parse(requireInitializedEmbodyCore().extract_model_data_json(json(inspection.descriptor), json(serializeAnimationClips(model, animations, inspection))));\n}\nexport async function analyzeModel(options: {\n source: { type: 'gltf'; gltf: GLTF } | { type: 'runtime'; model: Object3D; meshes?: Mesh[]; animations?: AnimationClip[] };\n preset?: Types.Profile; suggestCorrections?: boolean;\n}): Promise<Types.ModelAnalysisReport> {\n const source = options.source;\n const model = source.type === 'gltf' ? source.gltf.scene ?? source.gltf.scenes[0] : source.model;\n const animations = source.type === 'gltf' ? source.gltf.animations : source.animations ?? [];\n const inspection = inspectModel(model, source.type === 'runtime' ? source.meshes : undefined);\n return JSON.parse(requireInitializedEmbodyCore().analyze_model_descriptor(json(inspection.descriptor), json(serializeAnimationClips(model, animations, inspection)), options.preset ? json(options.preset) : '', json({ suggestCorrections: Boolean(options.suggestCorrections) })));\n}\ntype ValidationMesh = { name?: string; morphTargetDictionary?: Record<string, number>; geometry?: { morphTargetDictionary?: Record<string, number> } };\nexport function validateMappings(meshes: unknown[], skeleton: unknown, profile: Partial<Types.Profile>, options: Record<string, unknown> = {}): Types.ValidationResult {\n let nextMorphId = 1;\n const morphTargets: Array<{ id: number; meshId: number; name: string; hostIndex: number }> = [];\n const descriptorMeshes = (meshes ?? []).map((value, index) => {\n const mesh = value as ValidationMesh;\n const id = index + 1;\n const morphTargetIds = Object.entries(mesh.morphTargetDictionary ?? mesh.geometry?.morphTargetDictionary ?? {}).map(([name, hostIndex]) => {\n const morphId = nextMorphId++;\n morphTargets.push({ id: morphId, meshId: id, name, hostIndex });\n return morphId;\n });\n return { id, name: mesh.name ?? '', morphTargetIds, visible: true };\n });\n const bones = ((skeleton as { bones?: Array<string | { name?: string }> } | null)?.bones ?? []).map((bone, index) => ({ id: index + 1, name: typeof bone === 'string' ? bone : bone.name ?? '' }));\n return JSON.parse(requireInitializedEmbodyCore().validate_profile_model(json(profile), json({ meshes: descriptorMeshes, morphTargets, bones, objects: [] }), json(options)));\n}\nexport function validateHumanoidCharacterization(model: Object3D, profile: Partial<Types.Profile>): Types.HumanoidCharacterizationResolution {\n return JSON.parse(requireInitializedEmbodyCore().validate_humanoid_characterization(json(profile), json(inspectModel(model, undefined, profile).descriptor)));\n}\nexport function normalizeHairColorAppearance(value: Types.HairColorAppearance | string, fallback: Types.HairColorAppearance = DEFAULT_HAIR_COLOR_APPEARANCE): Types.HairColorAppearance {\n return JSON.parse(requireInitializedEmbodyCore().normalize_hair_color_appearance_json(json(value), json(fallback)));\n}\nexport const getHumanoidSkeletonTemplate = (id: string): Types.HumanoidSkeletonTemplate | null => (HUMANOID_SKELETON_TEMPLATES.find(template => template.id === id) ?? null) as unknown as Types.HumanoidSkeletonTemplate | null;\nexport function getHumanoidSkeletonTemplateBoneNames(template: Types.HumanoidSkeletonTemplate = CC4_HUMANOID_SKELETON_TEMPLATE as unknown as Types.HumanoidSkeletonTemplate): string[] {\n return JSON.parse(requireInitializedEmbodyCore().humanoid_skeleton_template_bone_names(json(template)));\n}\nexport function createValidationSkeletonFromHumanoidTemplate(template: Types.HumanoidSkeletonTemplate = CC4_HUMANOID_SKELETON_TEMPLATE as unknown as Types.HumanoidSkeletonTemplate): { bones: Array<{ name: string }> } {\n return JSON.parse(requireInitializedEmbodyCore().create_validation_skeleton_json(json(template)));\n}\nexport function computeHumanoidSkeletonTemplateRestBounds(template: Types.HumanoidSkeletonTemplate): Types.HumanoidSkeletonTemplateBounds {\n return Array.from(requireInitializedEmbodyCore().compute_humanoid_skeleton_template_rest_bounds(json(template))) as unknown as Types.HumanoidSkeletonTemplateBounds;\n}\nexport function extractHumanoidSkeletonTemplateFromModel(model: Object3D, options: { id: string; sourceCharacterId: string; sourceAsset?: string; sourceSkinName?: string }): Types.HumanoidSkeletonTemplate {\n return JSON.parse(requireInitializedEmbodyCore().extract_humanoid_skeleton_template_json(json(inspectModel(model).descriptor), json(options)));\n}\n\nexport type { AUDescriptor } from '@lovelace_lol/embody/wasm';\n","import { PropertyBinding } from 'three';\nimport type { AnimationClip, KeyframeTrack } from 'three';\nimport type { ClipIRTrack, ThreeModelInspection } from './index';\n\n/**\n * Packed morphs must share PropertyMixers with indexed compiled tracks. Euler\n * components avoid Euler.fromArray's incompatible mixer-buffer offset/order.\n */\nexport function withComponentTracks(clip: AnimationClip): AnimationClip {\n let expanded = false;\n const tracks = clip.tracks.flatMap((track) => {\n const parsed = PropertyBinding.parseTrackName(track.name);\n const euler = parsed.propertyName === 'rotation';\n if ((!euler && !['morphTargetInfluences', 'weights'].includes(parsed.propertyName)) || parsed.propertyIndex !== undefined) return [track];\n const cubic = (track as KeyframeTrack & {\n createInterpolant: { isInterpolantFactoryMethodGLTFCubicSpline?: boolean };\n }).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true;\n const parts = cubic ? 3 : 1;\n const width = track.getValueSize() / parts;\n if (!Number.isInteger(width) || width < 1 || (euler && width !== 3)) throw new Error(`Invalid component track ${JSON.stringify(track.name)}.`);\n expanded = true;\n return Array.from({ length: width }, (_, component) => {\n // Cloning the packed track first copies every morph's samples once per\n // component. Allocate only this component, including cubic tangents.\n const values = track.values.slice(0, track.times.length * parts);\n for (let sample = 0; sample < values.length; sample += 1) values[sample] = track.values[sample * width + component];\n const Track = track.constructor as typeof KeyframeTrack;\n const scalar = new Track(`${track.name}[${euler ? ['x', 'y', 'z'][component] : component}]`, track.times.slice(), values);\n // Match Three's clone contract: preserve the native interpolation factory.\n (scalar as KeyframeTrack & { createInterpolant: unknown }).createInterpolant =\n (track as KeyframeTrack & { createInterpolant: unknown }).createInterpolant;\n return scalar;\n });\n });\n if (!expanded) return clip;\n // The component tracks are already prepared; clip.clone() would clone the\n // original packed buffers again only to discard those cloned tracks.\n const Clip = clip.constructor as typeof AnimationClip;\n const indexed = new Clip(clip.name, clip.duration, tracks, clip.blendMode);\n indexed.userData = JSON.parse(JSON.stringify(clip.userData));\n return indexed;\n}\n\n/** One PropertyMixer cache key for every concrete renderer destination. */\nexport function concreteTrackName(target: ClipIRTrack['target'] | undefined, inspection: ThreeModelInspection): string | undefined {\n if (!target) return undefined;\n if (target.kind === 'morphTarget') {\n const binding = inspection.morphBindings.get(Number(target.morphTargetId));\n return binding && `${binding.mesh.uuid}.morphTargetInfluences[${binding.index}]`;\n }\n if (target.kind === 'boneTransform' || target.kind === 'objectTransform') {\n const object = target.kind === 'boneTransform'\n ? inspection.boneBindings.get(Number(target.boneId))\n : inspection.objectBindings.get(Number(target.objectId));\n const property = target.property ?? 'rotation';\n if (!object) return undefined;\n if (property === 'rotation' || property === 'quaternion') return `${object.uuid}.quaternion`;\n if (property === 'eulerX' || property === 'eulerY' || property === 'eulerZ') return `${object.uuid}.rotation[${property.slice(-1).toLowerCase()}]`;\n if (property === 'position' || property === 'scale') return `${object.uuid}.${property}`;\n }\n if (target.kind === 'meshVisibility') {\n const mesh = inspection.meshBindings.get(Number(target.meshId));\n return mesh && `${mesh.uuid}.visible`;\n }\n return undefined;\n}\n\n/** Retain authored samples and interpolants; normalize only cloned binding names. */\nexport function cloneWithConcreteTrackNames(clip: AnimationClip, tracks: readonly ClipIRTrack[], inspection: ThreeModelInspection): AnimationClip {\n const native = clip.clone();\n for (let index = 0; index < tracks.length; index += 1) {\n const name = concreteTrackName(tracks[index].target, inspection);\n if (!name) throw new Error('Every native playback track must resolve on the bound model.');\n native.tracks[index].name = name;\n }\n return native;\n}\n","import {\n AdditiveAnimationBlendMode,\n AnimationMixer,\n LoopOnce,\n LoopPingPong,\n LoopRepeat,\n NormalAnimationBlendMode,\n} from 'three';\nimport type { AnimationAction, AnimationClip, KeyframeTrack, Object3D } from 'three';\nimport type { NativePlaybackSession } from '../wasm/index';\nimport { createAnimationClipFromClipIR, serializeAnimationClips } from './index';\nimport type { ClipIR, ThreeModelInspection } from './index';\nimport { bindPlaybackRendering } from './playbackRendering';\nimport { cloneWithConcreteTrackNames, withComponentTracks } from './clipBindings';\n\nexport type ThreeNativeLoop = { mode: 'once' | 'repeat' | 'pingPong'; count?: number | null };\nexport type ThreeNativePlaybackOptions = {\n replace?: string;\n startSeconds?: number;\n speed?: number;\n /** Native contribution only; semantic intensity belongs in the compiled clip. */\n weight?: number;\n blendMode?: 'normal' | 'additive';\n loop?: ThreeNativeLoop;\n finalPose?: 'release' | 'hold';\n};\nexport type ThreeNativePlaybackControl =\n | { type: 'pause' | 'resume' | 'stop' }\n | { type: 'seek'; seconds: number }\n | { type: 'setSpeed'; speed: number }\n | { type: 'setWeight'; weight: number }\n | { type: 'setBlendMode'; blendMode: 'normal' | 'additive' }\n | { type: 'setLoop'; loop: ThreeNativeLoop }\n | { type: 'setFinalPose'; finalPose: 'release' | 'hold' }\n | { type: 'fadeIn' | 'fadeOut'; seconds: number };\nexport type ThreeNativePlaybackEvent =\n | { type: 'completed'; handle: string }\n | { type: 'cancelled'; handle: string; reason: string }\n | { type: 'error'; handle: string; message: string };\nexport type ThreeNativePlaybackBinding = {\n model: Object3D;\n inspection: ThreeModelInspection;\n /** Optional existing native mixer. Otherwise the connector owns one. */\n mixer?: AnimationMixer;\n /** Apply renderer effects using the existing scene clock; never starts a loop. */\n onFrame?: (deltaSeconds: number) => void;\n};\ntype BoundPlayback = ThreeNativePlaybackBinding & { mixer: AnimationMixer };\n\ntype Settings = Required<Omit<ThreeNativePlaybackOptions, 'replace'>>;\ntype Command =\n | { type: 'play'; handle: string; clip: ClipIR; settings: Settings }\n | { type: 'replaceClip'; handle: string; clip: ClipIR }\n | { type: 'control'; handle: string; control: ThreeNativePlaybackControl }\n | { type: 'release'; handle: string };\ntype Batch = { handle?: string; commands: Command[]; events: ThreeNativePlaybackEvent[] };\ntype NativeNotification = { type: 'completed' | 'cancelled' | 'error'; handle: string; message?: string };\ntype PausedFade = { seconds: number; from: number; to: number; weight: number };\ntype Resource = { clip: AnimationClip; action?: AnimationAction; binding: BoundPlayback; fadingOut?: boolean; pausedFade?: PausedFade; explicitlyPaused?: boolean; suspendedPaused?: boolean };\ntype PendingBatch = { batch: Batch; nextCommand: number; clip?: AnimationClip; afterCommands?: () => void };\ntype NativeInterpolant = { resultBuffer: unknown; settings?: unknown; valueSize: number };\ntype NativeTrack = KeyframeTrack & { createInterpolant: ((buffer: unknown) => NativeInterpolant) & { isInterpolantFactoryMethodGLTFCubicSpline?: boolean } };\ntype FadeInterpolant = { parameterPositions: ArrayLike<number>; sampleValues: { [index: number]: number }; evaluate(time: number): ArrayLike<number> };\ntype EditableAction = AnimationAction & { _interpolants: NativeInterpolant[]; _interpolantSettings: unknown; _weightInterpolant: FadeInterpolant | null };\nconst sampleSize = (track: KeyframeTrack) => track.getValueSize() / ((track as NativeTrack).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ? 3 : 1);\n\nconst asError = (error: unknown): Error => error instanceof Error ? error : new Error(String(error));\nconst blendMode = (mode: 'normal' | 'additive') => mode === 'additive' ? AdditiveAnimationBlendMode : NormalAnimationBlendMode;\nconst loopMode = (mode: ThreeNativeLoop['mode']) => mode === 'once' ? LoopOnce : mode === 'repeat' ? LoopRepeat : LoopPingPong;\n\nfunction validateBinding(binding: ThreeNativePlaybackBinding): void {\n if (!binding.model?.isObject3D || (binding.mixer && binding.mixer.getRoot() !== binding.model)) {\n throw new Error('Native playback requires a Three model and its render integration mixer.');\n }\n const objects = new Set<Object3D>();\n binding.model.traverse((object) => objects.add(object));\n const { inspection } = binding;\n for (const object of [\n ...inspection.meshBindings.values(), ...inspection.boneBindings.values(),\n ...inspection.objectBindings.values(), ...Array.from(inspection.morphBindings.values(), (entry) => entry.mesh),\n ]) {\n if (!objects.has(object)) throw new Error('Native playback inspection contains an object outside the bound model.');\n }\n}\n\n/**\n * Execute validated Rust commands on the native mixer. There is no\n * clock or update API. Each play owns a unique clip/action; other mixer users\n * remain untouched by stop, replacement, rebind and disposal.\n *\n * The connector owns the supplied Wasm session and frees it after successful\n * disposal. A failed release retains ownership and can be retried by dispose.\n */\nexport class ThreeNativePlaybackConnector {\n private binding: BoundPlayback;\n private rendering: ReturnType<typeof bindPlaybackRendering>;\n private renderingEnabled = true;\n private readonly resources = new Map<string, Resource>();\n private readonly actionHandles = new Map<AnimationAction, string>();\n private readonly listeners = new Set<(event: ThreeNativePlaybackEvent) => void>();\n private readonly pending: PendingBatch[] = [];\n private readonly notifications: NativeNotification[] = [];\n private depth = 0;\n private flushingNotifications = false;\n private notificationScheduled = false;\n private sessionDisposed = false;\n private disposed = false;\n private readonly onError?: (error: Error) => void;\n private readonly onRelease?: (handle: string) => void;\n private readonly afterSample?: (deltaSeconds: number) => void;\n\n constructor(\n private readonly session: NativePlaybackSession,\n binding: ThreeNativePlaybackBinding & { onError?: (error: Error) => void; onRelease?: (handle: string) => void; afterSample?: (deltaSeconds: number) => void },\n ) {\n validateBinding(binding);\n this.binding = { ...binding, mixer: binding.mixer ?? new AnimationMixer(binding.model) };\n this.onError = binding.onError;\n this.onRelease = binding.onRelease;\n this.afterSample = binding.afterSample;\n this.binding.mixer.addEventListener('finished', this.finished);\n this.rendering = bindPlaybackRendering(binding.model, this.binding.mixer,\n this.afterFrame, this.sampleResponse);\n }\n\n private readonly afterFrame = (deltaSeconds: number): void => {\n this.flushEvents();\n if (!this.disposed) this.binding.onFrame?.(deltaSeconds);\n };\n\n /** Prepare bindings first; old actions are released before the new binding is exposed. */\n rebind(modelKey: string, profileKey: string, binding: ThreeNativePlaybackBinding = this.binding): void {\n validateBinding(binding);\n this.beforeOperation();\n this.dispatch(this.session.rebind(modelKey, profileKey), undefined, () => {\n this.binding.mixer.removeEventListener('finished', this.finished);\n this.rendering.dispose();\n this.binding = { ...binding, mixer: binding.mixer ?? new AnimationMixer(binding.model) };\n this.binding.mixer.addEventListener('finished', this.finished);\n this.rendering = bindPlaybackRendering(binding.model, this.binding.mixer,\n this.afterFrame, this.sampleResponse);\n this.rendering.setEnabled(this.renderingEnabled);\n });\n }\n\n play(clip: ClipIR, options: ThreeNativePlaybackOptions = {}): string {\n this.beforeOperation();\n const native = createAnimationClipFromClipIR(clip, this.binding.inspection);\n if (native.tracks.length !== clip.tracks.length) {\n throw new Error('Every playback track must resolve on the bound model.');\n }\n return this.dispatch(this.session.play(JSON.stringify(clip), JSON.stringify(options)), native).handle!;\n }\n\n /**\n * Validate native track bindings through the existing serializer, then retain\n * the native clone's interpolants and authored/additive sample values. Concrete\n * binding names match compiled tracks so Three shares their PropertyMixer.\n */\n playNativeClip(clip: AnimationClip, options: ThreeNativePlaybackOptions = {}): string {\n this.beforeOperation();\n clip = withComponentTracks(clip);\n const [ir] = serializeAnimationClips(this.binding.model, [clip], this.binding.inspection);\n if (ir.tracks.length !== clip.tracks.length) {\n throw new Error('Every native playback track must serialize against the bound model.');\n }\n const native = cloneWithConcreteTrackNames(clip, ir.tracks, this.binding.inspection);\n const settings = {\n ...options,\n blendMode: options.blendMode ?? (clip.blendMode === AdditiveAnimationBlendMode ? 'additive' : 'normal'),\n };\n return this.dispatch(this.session.play(JSON.stringify(ir), JSON.stringify(settings)), native).handle!;\n }\n\n control(handle: string, control: ThreeNativePlaybackControl): void {\n this.beforeOperation();\n this.dispatch(this.session.control(handle, JSON.stringify(control)));\n }\n\n setRendering(enabled: boolean): void {\n this.beforeOperation();\n if (enabled === this.renderingEnabled) return;\n this.renderingEnabled = enabled;\n this.rendering.setEnabled(enabled);\n for (const resource of this.resources.values()) {\n if (!resource.action) continue;\n if (!enabled) {\n resource.suspendedPaused = resource.action.paused;\n this.pauseFade(resource);\n resource.action.paused = true;\n } else if (resource.suspendedPaused !== undefined) {\n resource.action.paused = resource.suspendedPaused;\n if (!resource.explicitlyPaused) this.resumeFade(resource);\n resource.suspendedPaused = undefined;\n }\n }\n }\n\n setTimeScale(value: number): void {\n this.beforeOperation();\n if (!Number.isFinite(value)) throw new Error('Native mixer speed must be finite.');\n this.binding.mixer.timeScale = value;\n }\n\n fadeIn(handle: string, seconds: number): void { this.control(handle, { type: 'fadeIn', seconds }); }\n fadeOut(handle: string, seconds: number): void { this.control(handle, { type: 'fadeOut', seconds }); }\n\n /** Edit authored samples, retaining the native action and its loop/fade progress. */\n replaceClip(handle: string, clip: AnimationClip): void {\n this.beforeOperation();\n clip = withComponentTracks(clip);\n const resource = this.resources.get(handle);\n if (!resource) throw new Error('Unknown, foreign or stale playback handle.');\n const [ir] = serializeAnimationClips(this.binding.model, [clip], this.binding.inspection);\n if (ir.tracks.length !== clip.tracks.length) throw new Error('Every edited track must resolve on the bound model.');\n const native = cloneWithConcreteTrackNames(clip, ir.tracks, this.binding.inspection);\n if (native.tracks.length !== resource.clip.tracks.length || native.tracks.some((track, index) => {\n const old = resource.clip.tracks[index];\n return track.name !== old.name || track.ValueTypeName !== old.ValueTypeName || sampleSize(track) !== sampleSize(old);\n })) throw new Error('Editing samples must preserve track bindings; play a new clip to change its bindings.');\n const editable = resource.action as EditableAction | undefined;\n if (!editable || !Array.isArray(editable._interpolants) || editable._interpolants.length !== native.tracks.length) {\n throw new Error('This Three version does not support editing native action samples.');\n }\n this.dispatch(this.session.replace_clip(handle, JSON.stringify(ir)), native);\n }\n\n /** Native state for the owning adapter; never exposed through Polymer. */\n getAction(handle: string): AnimationAction | undefined {\n return this.resources.get(handle)?.action;\n }\n\n private readonly sampleResponse = (deltaSeconds: number): void => {\n if (this.disposed || !this.renderingEnabled) return;\n try { this.afterSample?.(deltaSeconds); }\n catch (error) {\n // One character's invalid input must not prevent other characters from\n // sampling, or prevent native completion from releasing resources.\n const failure = asError(error);\n queueMicrotask(() => { if (this.onError) this.onError(failure); else throw failure; });\n }\n };\n\n /** Deliver native completion after the borrowed mixer has finished sampling. */\n flushEvents(): void {\n if (this.disposed) return;\n this.notificationScheduled = false;\n for (const [handle, resource] of this.resources) {\n // Three evaluates fade weights on its mixer clock. Observe completion;\n // do not calculate a deadline or interpolate another weight here.\n if (resource.fadingOut && resource.action?.getEffectiveWeight() === 0) {\n resource.fadingOut = false;\n this.notifications.push({ type: 'cancelled', handle });\n }\n }\n this.flushNotifications();\n }\n\n subscribe(listener: (event: ThreeNativePlaybackEvent) => void): () => void {\n if (this.disposed) throw new Error('Native playback connector is disposed.');\n this.listeners.add(listener);\n return () => { this.listeners.delete(listener); };\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.retryPending();\n if (!this.sessionDisposed) {\n const batch = this.session.dispose();\n this.sessionDisposed = true;\n this.dispatch(batch);\n }\n // A failed release throws above, leaving listeners, resources and session\n // owned until a later dispose successfully retries the remaining effects.\n this.binding.mixer.removeEventListener('finished', this.finished);\n this.rendering.dispose();\n this.notifications.length = 0;\n this.listeners.clear();\n this.session.free();\n this.disposed = true;\n }\n\n private pauseFade(resource: Resource): void {\n const action = resource.action as EditableAction | undefined;\n const fade = action?._weightInterpolant;\n if (!action || !fade) return;\n // Preserve Three's own fade segment. Mixer time remains its only clock.\n resource.pausedFade = {\n seconds: Math.max(0, fade.parameterPositions[1] - resource.binding.mixer.time),\n from: fade.evaluate(resource.binding.mixer.time)[0], to: fade.sampleValues[1], weight: action.weight,\n };\n action.stopFading();\n action.setEffectiveWeight(resource.pausedFade.weight * resource.pausedFade.from);\n }\n\n private resumeFade(resource: Resource): void {\n const action = resource.action as EditableAction | undefined;\n const fade = resource.pausedFade;\n if (!action || !fade) return;\n resource.pausedFade = undefined;\n action.setEffectiveWeight(fade.weight);\n action.fadeIn(fade.seconds);\n const interpolant = action._weightInterpolant!;\n interpolant.sampleValues[0] = fade.from;\n interpolant.sampleValues[1] = fade.to;\n }\n\n private beforeOperation(): void {\n if (this.disposed || this.sessionDisposed) throw new Error('Native playback connector is disposed.');\n this.retryPending();\n }\n\n private retryPending(): void {\n if (this.pending.length) this.drain();\n }\n\n private dispatch(serialized: string, clip?: AnimationClip, afterCommands?: () => void): Batch {\n const batch = JSON.parse(serialized) as Batch;\n this.pending.push({ batch, nextCommand: 0, clip, afterCommands });\n this.drain();\n return batch;\n }\n\n private drain(): void {\n const errors: Error[] = [];\n this.depth += 1;\n try {\n while (this.pending.length) {\n const pending = this.pending[0];\n while (pending.nextCommand < pending.batch.commands.length) {\n const command = pending.batch.commands[pending.nextCommand];\n try {\n this.execute(command, pending.clip);\n } catch (error) {\n // A release failure cannot be represented by a late terminal event.\n // Keep this command and its undelivered events available for retry.\n if (command.type === 'release') throw asError(error);\n const failure = asError(error);\n errors.push(failure);\n this.notifications.push({ type: 'error', handle: command.handle, message: failure.message || 'Native operation failed.' });\n }\n pending.nextCommand += 1;\n }\n pending.afterCommands?.();\n this.pending.shift();\n // Commands have finished before any observer may reenter playback.\n for (const event of pending.batch.events) {\n for (const listener of [...this.listeners]) {\n // An observer failure must not make a successful play look like an\n // allocation failure to its caller and orphan the new handle.\n try { listener(event); } catch (error) {\n const failure = asError(error);\n queueMicrotask(() => { if (this.onError) this.onError(failure); else throw failure; });\n }\n }\n }\n }\n } finally {\n this.depth -= 1;\n }\n if (this.depth === 0 && !this.flushingNotifications) this.flushNotifications();\n if (errors.length) throw errors[0];\n }\n\n private execute(command: Command, preparedClip?: AnimationClip): void {\n if (command.type === 'release') {\n const resource = this.resources.get(command.handle);\n if (!resource) return;\n resource.action?.stop();\n resource.binding.mixer.uncacheAction(resource.clip, resource.binding.model);\n resource.binding.mixer.uncacheClip(resource.clip);\n if (resource.action) this.actionHandles.delete(resource.action);\n this.resources.delete(command.handle);\n // Releasing a completed held pose is not a second terminal event. The\n // owning facade still needs to retire its resource bookkeeping.\n try { this.onRelease?.(command.handle); } catch (error) {\n const failure = asError(error);\n queueMicrotask(() => { if (this.onError) this.onError(failure); else throw failure; });\n }\n return;\n }\n if (command.type === 'replaceClip') {\n const resource = this.resources.get(command.handle);\n if (!resource || !preparedClip) throw new Error('Native clip edit has no owned resource.');\n // Three has no public action sample-edit method. Keep this adapter access\n // isolated: rebuild native interpolants with the existing PropertyMixer\n // result buffers, without reading or changing time, loop counters or fades.\n const action = resource.action as EditableAction;\n const tracks = preparedClip.tracks.map((track) => track.clone());\n const interpolants = tracks.map((track, index) => {\n const interpolant = (track as NativeTrack).createInterpolant(action._interpolants[index].resultBuffer);\n if (interpolant.settings) Object.assign(action._interpolantSettings as object, interpolant.settings);\n interpolant.settings = action._interpolantSettings;\n return interpolant;\n });\n resource.clip.tracks = tracks;\n action._interpolants = interpolants;\n return;\n }\n if (command.type === 'play') {\n if (!preparedClip) throw new Error('Native playback has no prepared clip.');\n const resource: Resource = { clip: preparedClip, binding: this.binding };\n this.resources.set(command.handle, resource);\n const settings = command.settings;\n const action = this.binding.mixer.clipAction(preparedClip, this.binding.model, blendMode(settings.blendMode));\n resource.action = action;\n this.actionHandles.set(action, command.handle);\n action.setLoop(loopMode(settings.loop.mode), settings.loop.count ?? Infinity);\n action.clampWhenFinished = settings.finalPose === 'hold';\n action.setEffectiveTimeScale(settings.speed);\n action.setEffectiveWeight(settings.weight);\n action.time = settings.startSeconds;\n if (!this.renderingEnabled) { resource.suspendedPaused = false; action.paused = true; }\n action.play();\n return;\n }\n const resource = this.resources.get(command.handle);\n const action = resource?.action;\n if (!resource || !action) throw new Error('Native playback action is unavailable.');\n const control = command.control;\n switch (control.type) {\n case 'pause':\n resource.explicitlyPaused = true;\n this.pauseFade(resource);\n action.paused = true;\n if (!this.renderingEnabled) this.resources.get(command.handle)!.suspendedPaused = true;\n break;\n case 'resume':\n resource.explicitlyPaused = false;\n if (this.renderingEnabled) { action.paused = false; this.resumeFade(resource); }\n else this.resources.get(command.handle)!.suspendedPaused = false;\n break;\n case 'seek': action.time = control.seconds; break;\n case 'setSpeed': action.setEffectiveTimeScale(control.speed); break;\n case 'setWeight':\n resource.pausedFade = undefined;\n action.setEffectiveWeight(control.weight);\n this.resources.get(command.handle)!.fadingOut = false;\n break;\n case 'setBlendMode': action.blendMode = blendMode(control.blendMode); break;\n case 'setLoop': action.setLoop(loopMode(control.loop.mode), control.loop.count ?? Infinity); break;\n case 'setFinalPose': action.clampWhenFinished = control.finalPose === 'hold'; break;\n case 'fadeIn':\n resource.pausedFade = undefined;\n action.fadeIn(control.seconds); resource.fadingOut = false;\n if (resource.explicitlyPaused || !this.renderingEnabled) this.pauseFade(resource);\n break;\n case 'fadeOut':\n resource.pausedFade = undefined;\n if (control.seconds === 0) this.notifications.push({ type: 'cancelled', handle: command.handle });\n else { action.fadeOut(control.seconds); resource.fadingOut = true; if (resource.explicitlyPaused || !this.renderingEnabled) this.pauseFade(resource); }\n break;\n case 'stop': throw new Error('Rust must translate stop into a resource release.');\n }\n }\n\n private readonly finished = (event: { action: AnimationAction }): void => {\n const handle = this.actionHandles.get(event.action);\n if (!handle || this.disposed) return;\n this.notifications.push({ type: this.resources.get(handle)?.fadingOut ? 'cancelled' : 'completed', handle });\n // Three dispatches finished while iterating its active action arrays.\n // Releasing/uncaching an action there would mutate that iteration.\n if (this.notificationScheduled) return;\n this.notificationScheduled = true;\n queueMicrotask(() => {\n this.notificationScheduled = false;\n if (this.disposed) return;\n try { this.flushNotifications(); } catch (error) {\n const failure = asError(error);\n if (this.onError) this.onError(failure);\n else throw failure;\n }\n });\n };\n\n private flushNotifications(): void {\n if (this.flushingNotifications || this.depth > 0 || this.disposed || this.notificationScheduled) return;\n this.flushingNotifications = true;\n try {\n while (this.notifications.length) {\n const event = this.notifications.shift()!;\n this.dispatch(this.session.notify(JSON.stringify(event)));\n }\n } finally {\n this.flushingNotifications = false;\n }\n }\n}\n","import {\n AdditiveAnimationBlendMode, AnimationClip, AnimationUtils, LoopOnce, LoopPingPong,\n NormalAnimationBlendMode, PropertyBinding, Quaternion, Euler, InterpolateDiscrete, InterpolateLinear,\n} from 'three';\nimport type { AnimationAction, KeyframeTrack, Mesh, Object3D } from 'three';\nimport type { AUDescriptor } from '@lovelace_lol/embody/wasm';\nimport { initEmbodyCore, requireInitializedEmbodyCore, DEFAULT_HAIR_COLOR_APPEARANCE } from '@lovelace_lol/embody/wasm';\nimport type { RuntimeCore } from '@lovelace_lol/embody/wasm';\nimport {\n ThreeFrameApplier, ThreeModelInspector, createAnimationClipFromClipIR,\n serializeAnimationClips,\n} from './index';\nimport type { ClipIR, ClipIRTrack, ThreeModelInspection } from './index';\nimport {\n bindModelReferencePose, captureModelReferencePose, extendModelReferencePose,\n} from './reference-pose';\nimport type { ThreeModelReferencePose, ThreeReferencePoseNode } from './reference-pose';\nimport { convertMixamoFbxToVrmAnimations, createAnimationClipFromVrmAnimation, inspectVrmAnimation } from './vrm-animation';\nimport type { VrmAnimationFile, VrmAnimationInfo, VrmAnimationUnits } from './vrm-animation';\nimport { ThreeNativePlaybackConnector } from './nativePlayback';\nimport { withComponentTracks } from './clipBindings';\nimport type { ThreeNativePlaybackControl, ThreeNativePlaybackEvent, ThreeNativePlaybackOptions } from './nativePlayback';\nimport type {\n AnimationClipInfo, HairAppearanceState, HairColorAppearance,\n HairPhysicsRuntimeConfig, HairPhysicsRuntimeConfigUpdate, MeshCategory,\n MeshInfo, Profile, ProfileInput, ThreeResolvedMaterialConfig,\n} from './authoringTypes';\n\ntype JsonObject = Record<string, any>;\ntype NativeTrack = KeyframeTrack & { createInterpolant: ((result?: Float32Array) => { evaluate(time: number): ArrayLike<number> }) & { isInterpolantFactoryMethodGLTFCubicSpline?: boolean } };\nexport type RustEmbodyHostConfig = {\n profileMode?: 'preset' | 'profile';\n presetId?: string;\n presetType?: string;\n profile?: ProfileInput;\n meshes?: Mesh[];\n referencePose?: ThreeModelReferencePose;\n};\nexport type CharacterPlaybackOptions = JsonObject;\n/** Semantic AU values keyed by numeric AU id. */\nexport type CharacterAUState = {\n live: Record<string, number>;\n animated: Record<string, number>;\n total: Record<string, number>;\n unreadable: string[];\n};\nexport type CharacterAUGoalMeasurement = { distance: number; reversal: boolean; current: Record<string, number> };\nexport type CharacterPlaybackEvent = ThreeNativePlaybackEvent & { actionId: string; clipName: string };\nexport interface CharacterPlaybackHandle {\n readonly name: string;\n actionId?: string;\n promise: Promise<CharacterPlaybackEvent>;\n readonly finished: Promise<CharacterPlaybackEvent>;\n play(): CharacterPlaybackHandle;\n stop(): CharacterPlaybackHandle;\n cancel(): CharacterPlaybackHandle;\n pause(): CharacterPlaybackHandle;\n resume(): CharacterPlaybackHandle;\n setWeight(value: number): CharacterPlaybackHandle;\n setIntensity(value: number): CharacterPlaybackHandle;\n setSpeed(value: number): CharacterPlaybackHandle;\n setPlaybackRate(value: number): CharacterPlaybackHandle;\n setTime(value: number): CharacterPlaybackHandle;\n seek(value: number): CharacterPlaybackHandle;\n updateParams(value: CharacterPlaybackOptions): CharacterPlaybackHandle;\n setParams(value: CharacterPlaybackOptions): CharacterPlaybackHandle;\n subscribe(listener: ((event: CharacterPlaybackEvent) => void) | { next(event: CharacterPlaybackEvent): void }): () => void;\n}\nexport interface CharacterTransitionHandle {\n promise: Promise<void>;\n pause(): void;\n resume(): void;\n cancel(): void;\n}\n\ntype Source =\n | { name: string; kind: 'native'; clip: AnimationClip }\n | { name: string; kind: 'curves' | 'typed'; input: any; options: CharacterPlaybackOptions }\n | { name: string; kind: 'compiled'; clip: ClipIR };\n/**\n * Who requested a playback. Stop All and crossfade act only on `caller`\n * playbacks. Aggregate pause/resume also controls `live` setter transitions,\n * while `hair` actions follow explicit hair controls and the render step.\n */\ntype PlaybackOwner = 'caller' | 'live' | 'hair';\ntype Playback = {\n id: string;\n source: Source;\n owner: PlaybackOwner;\n options: CharacterPlaybackOptions;\n connector: ThreeNativePlaybackConnector;\n terminal: boolean;\n inheritedStarts: Map<string, number[]>;\n replay(options: CharacterPlaybackOptions): CharacterPlaybackHandle;\n notify(event: CharacterPlaybackEvent): void;\n};\nconst json = (value: unknown): string => JSON.stringify(value ?? {});\nconst targetKey = (target: ClipIRTrack['target']): string => JSON.stringify([target.kind, target.meshId, target.morphTargetId, target.boneId, target.objectId, target.property]);\nconst copy = <T>(value: T): T => JSON.parse(JSON.stringify(value));\nconst parse = <T = any>(value: string): T => JSON.parse(value);\nconst finite = (value: unknown): value is number => typeof value === 'number' && Number.isFinite(value);\nconst intensity = (options: CharacterPlaybackOptions, fallback = 1): number => {\n const value = options.intensityScale ?? options.intensity ?? options.weight;\n return finite(value) ? Math.max(0, Math.min(2, value)) : fallback;\n};\n/** An outgoing action's effective weight relative to the incoming action's. */\nconst weightRatio = (outgoing: AnimationAction, options: CharacterPlaybackOptions): number =>\n outgoing.getEffectiveWeight() / (finite(options.mixerWeight) && options.mixerWeight > 0 ? options.mixerWeight : 1);\n/**\n * A partially weighted sample's contribution, expressed at the incoming\n * action's weight: the outgoing value moved toward `neutral` by `ratio`.\n * A fading action contributes value x weight, so inheriting the raw track\n * value would jump back up to the unfaded pose.\n */\nconst weighted = (sample: number[], neutral: number[] | undefined, ratio: number, quaternion: boolean): number[] => {\n if (ratio === 1) return sample;\n if (quaternion) return new Quaternion().fromArray(neutral ?? [0, 0, 0, 1]).slerp(new Quaternion().fromArray(sample), ratio).toArray();\n return sample.map((value, axis) => (neutral?.[axis] ?? 0) + (value - (neutral?.[axis] ?? 0)) * ratio);\n};\nconst presetId = (value?: string): string => value?.trim().toLowerCase() || 'cc4';\nconst HAIR_RESPONSE = '__embody_hair_response';\nconst HAIR_IMPULSE_CLIP = '__embody_hair_impulse';\n/** Captured model-space head chain, expressed in the bound local reference for Rust. */\ntype HairHeadObservation = {\n boneName: string;\n chain: Object3D[];\n reference: number[];\n modelToReference: Quaternion;\n rotation: Quaternion;\n};\n\nexport function supportsRustEmbodyPreset(value?: string): boolean {\n return requireInitializedEmbodyCore().has_preset(presetId(value));\n}\n\n/** Character commands compile in Rust and play exclusively on the native connector. */\nexport class Embody {\n readonly meshes: Mesh[] = [];\n meshByName = new Map<string, Mesh>();\n bones: ThreeModelInspection['bones'] = {};\n private readonly wasm = requireInitializedEmbodyCore();\n private core: RuntimeCore;\n private readonly inspector = new ThreeModelInspector();\n private readonly applier = new ThreeFrameApplier();\n private readonly references = new WeakMap<Object3D, ThreeModelReferencePose>();\n private referenceBindings: ReadonlyMap<Object3D, ThreeReferencePoseNode> = new Map();\n private boundModel?: Object3D;\n get model(): Object3D | undefined { return this.boundModel; }\n private inspection?: ThreeModelInspection;\n private connector?: ThreeNativePlaybackConnector;\n private profile: JsonObject;\n private profileSource: JsonObject;\n private readonly profileMode: 'preset' | 'profile';\n private readonly preset: string;\n private readonly sources = new Map<string, Source>();\n private readonly vrmAnimations = new Map<string, { model: Object3D; clip: AnimationClip }>();\n private readonly playbacks = new Map<string, Playback>();\n private readonly current = new Map<string, Playback>();\n private playDepth = 0;\n private readonly pendingEvents: ThreeNativePlaybackEvent[] = [];\n private readonly pendingReleases: Playback[] = [];\n private bindingGeneration = 0;\n private disposed = false;\n private rendering = true;\n private timeScale = 1;\n private nextLiveTarget = 0;\n private readonly liveTargets = new Map<string, { track: ClipIRTrack; handle: CharacterPlaybackHandle; releasing: boolean }>();\n private readonly hairObjects = new Map<string, Mesh>();\n private hairHeadObservation?: HairHeadObservation;\n private hairConfig: JsonObject = {};\n private hairAppearance: HairAppearanceState = {\n hairColor: copy(DEFAULT_HAIR_COLOR_APPEARANCE),\n eyebrowColor: copy(DEFAULT_HAIR_COLOR_APPEARANCE),\n showOutline: false, outlineColor: '#000000', outlineOpacity: 1,\n };\n\n constructor(private readonly config: RustEmbodyHostConfig = {}) {\n const mode = config.profileMode ?? 'preset';\n if (mode !== 'profile' && mode !== 'preset') throw new Error(`Unknown profile mode: ${mode}`);\n if (mode === 'profile' && !config.profile) throw new Error('Resolved profile mode requires a profile object.');\n this.profileMode = mode;\n this.preset = presetId(config.presetId ?? config.presetType);\n if (mode === 'preset' && !this.wasm.has_preset(this.preset)) throw new Error(`Unknown Embody preset: ${this.preset}`);\n this.profileSource = this.validateProfile(config.profile ?? {});\n this.profile = this.resolveProfile(this.profileSource);\n this.core = new this.wasm.RuntimeCore(0);\n }\n\n static async create(config: RustEmbodyHostConfig = {}): Promise<Embody> {\n await initEmbodyCore();\n return new Embody(config);\n }\n\n private assertAlive(): void { if (this.disposed) throw new Error('Character is disposed.'); }\n private requireModel(): Object3D {\n this.assertAlive();\n if (!this.boundModel) throw new Error('Bind a character model with onReady before using this operation.');\n return this.boundModel;\n }\n private requireConnector(): ThreeNativePlaybackConnector {\n this.requireModel();\n if (!this.connector) throw new Error('Character playback is not bound.');\n return this.connector;\n }\n private validateProfile(value: JsonObject): JsonObject {\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error('Embody profile must be a JSON object.');\n return copy(value);\n }\n private resolveProfile(value: JsonObject): JsonObject {\n return this.profileMode === 'profile' ? copy(value) : parse(this.wasm.merge_embedded_preset(this.preset, json(value)));\n }\n\n onReady(options: { model: Object3D; meshes?: Mesh[]; animations?: AnimationClip[]; referencePose?: ThreeModelReferencePose }): void {\n this.assertAlive();\n const model = options.model;\n if (!model?.isObject3D) throw new Error('onReady requires a Three Object3D model.');\n this.applier.clearMeshHighlights();\n const reference = this.references.get(model) ?? options.referencePose ?? (!this.boundModel ? this.config.referencePose : undefined) ?? captureModelReferencePose(model);\n const inspection = this.inspector.inspectModel(model, { meshes: options.meshes, profile: this.profile, referencePose: reference });\n this.bind(model, reference, inspection, this.profileSource, this.profile);\n if (options.animations) this.loadAnimationClips(options.animations);\n }\n\n private bind(model: Object3D, reference: ThreeModelReferencePose, inspection: ThreeModelInspection, source: JsonObject, profile: JsonObject, preserveLiveState = true): void {\n // Prepare every fallible profile/reference operation before releasing the old binding.\n const referenceBindings = bindModelReferencePose(model, reference);\n // Inspection stays live; release clips need the separately captured baseline.\n const runtimeDescriptor = {\n ...inspection.descriptor,\n morphTargets: inspection.descriptor.morphTargets.map((morph) => {\n const binding = inspection.morphBindings.get(morph.id);\n const baseline = binding && referenceBindings.get(binding.mesh)?.morphInfluences?.[binding.index];\n return { ...morph, initialValue: baseline ?? morph.initialValue };\n }),\n };\n const replacingModel = !!this.boundModel && this.boundModel !== model;\n const core = new this.wasm.RuntimeCore(0);\n try {\n if (this.profileMode === 'profile') core.configure_with_profile(json(source), json(runtimeDescriptor));\n else core.configure_with_preset(this.preset, json(source), json(runtimeDescriptor));\n if (preserveLiveState && this.boundModel) core.copy_live_state_from(this.core);\n for (const registered of replacingModel ? [] : this.sources.values()) {\n if (registered.kind === 'native') {\n const [clip] = serializeAnimationClips(model, [registered.clip], inspection);\n core.register_animation_clip(json(clip), 'baked');\n }\n }\n } catch (error) { core.free(); throw error; }\n try { this.connector?.dispose(); }\n catch (error) { core.free(); throw error; }\n this.core.free();\n this.core = core;\n if (replacingModel) { this.sources.clear(); this.vrmAnimations.clear(); }\n this.boundModel = model;\n this.inspection = inspection;\n this.referenceBindings = referenceBindings;\n this.references.set(model, reference);\n this.profileSource = source;\n this.profile = profile;\n this.bindingGeneration += 1;\n this.playbacks.clear();\n this.current.clear();\n this.liveTargets.clear();\n this.meshes.splice(0, this.meshes.length, ...(inspection.morphMeshes.length ? inspection.morphMeshes : inspection.allMeshes));\n this.meshByName = inspection.meshByName;\n this.bones = inspection.bones;\n this.applier.setBindings(inspection);\n this.applier.applyMeshMaterialConfigs(model, profile.meshes ?? {});\n const session = new this.wasm.NativePlaybackSession();\n try {\n this.connector = new ThreeNativePlaybackConnector(session, {\n model, inspection,\n onFrame: (deltaSeconds) => {\n if (this.disposed) return;\n this.applier.applyMeshHighlightFrame(parse(this.core.advance_mesh_highlight(deltaSeconds)));\n },\n onRelease: (id) => {\n const playback = this.playbacks.get(id);\n if (!playback?.terminal) return;\n // A held predecessor is released synchronously during replacement.\n // Its semantic record must survive until the new slot inherits it.\n if (this.playDepth) this.pendingReleases.push(playback);\n else this.forget(playback);\n },\n afterSample: (mixerDeltaSeconds) => this.sampleHairResponse(mixerDeltaSeconds, true),\n });\n }\n catch (error) { session.free(); throw error; }\n this.connector.rebind(model.uuid, String(this.bindingGeneration));\n this.connector.setRendering(this.rendering);\n this.connector.setTimeScale(this.timeScale);\n this.connector.subscribe((event) => this.onPlaybackEvent(event));\n this.hairConfig = parse(this.core.get_hair_config_json());\n this.bindHairHead(model, inspection);\n this.registerHairObjects(inspection.allMeshes.filter((mesh) => ['hair', 'eyebrow'].includes(this.meshCategory(mesh))));\n if (preserveLiveState) this.commitLive();\n }\n\n bindModel(meshes?: Mesh[]): void {\n const model = this.requireModel();\n this.applier.clearMeshHighlights();\n const reference = this.references.get(model)!;\n const inspection = this.inspector.inspectModel(model, { meshes, profile: this.profile, referencePose: reference });\n this.bind(model, reference, inspection, this.profileSource, this.profile);\n }\n extendReferencePose(): ThreeModelReferencePose {\n const model = this.requireModel();\n this.applier.clearMeshHighlights();\n const reference = extendModelReferencePose(model, this.references.get(model)!);\n const inspection = this.inspector.inspectModel(model, { profile: this.profile, referencePose: reference });\n this.bind(model, reference, inspection, this.profileSource, this.profile);\n return reference;\n }\n setProfile(value: ProfileInput): void {\n this.assertAlive();\n const source = this.validateProfile(value);\n const profile = this.resolveProfile(source);\n if (!this.boundModel) { this.profileSource = source; this.profile = profile; return; }\n this.applier.clearMeshHighlights();\n const reference = this.references.get(this.boundModel)!;\n const inspection = this.inspector.inspectModel(this.boundModel, { profile, referencePose: reference });\n this.bind(this.boundModel, reference, inspection, source, profile, false);\n }\n getProfile(): Partial<Profile> { return this.profile; }\n getProfileMode(): 'preset' | 'profile' { return this.profileMode; }\n getPresetId(): string | null { return this.profileMode === 'preset' ? this.preset : null; }\n supportsPreset(value?: string): boolean { return supportsRustEmbodyPreset(value); }\n\n private onPlaybackEvent(event: ThreeNativePlaybackEvent): void {\n if (this.playDepth) { this.pendingEvents.push(event); return; }\n const playback = this.playbacks.get(event.handle);\n if (!playback) return;\n playback.terminal = true;\n if (!playback.connector.getAction(playback.id)) this.forget(playback);\n playback.notify({ ...event, actionId: event.handle, clipName: playback.source.name });\n }\n private flushPendingPlaybackEvents(): void {\n while (!this.playDepth && this.pendingReleases.length) {\n const playback = this.pendingReleases.shift()!;\n if (this.playbacks.get(playback.id) === playback) this.forget(playback);\n }\n while (!this.playDepth && this.pendingEvents.length) this.onPlaybackEvent(this.pendingEvents.shift()!);\n }\n private compile(source: Source, options: CharacterPlaybackOptions): ClipIR {\n const buildOptions = { ...('options' in source ? source.options : {}), ...options, intensityScale: intensity(options) };\n switch (source.kind) {\n case 'curves': return parse(this.core.build_clip(source.name, json(source.input), json(buildOptions)));\n case 'typed': return parse(this.core.build_typed_clip(source.name, json(source.input), json(buildOptions)));\n case 'compiled': return source.clip;\n case 'native': throw new Error('Native animation sources do not require AU compilation.');\n }\n }\n\n private restValues(track: KeyframeTrack): number[] | undefined {\n const model = this.requireModel();\n const parsed = PropertyBinding.parseTrackName(track.name);\n let object = PropertyBinding.findNode(model, parsed.nodeName) as Object3D | undefined;\n if (parsed.objectName === 'bones' && object) {\n const skeleton = (object as Object3D & { skeleton?: { bones: Object3D[] } }).skeleton;\n object = skeleton?.bones.find((bone) => bone.name === String(parsed.objectIndex)) ??\n skeleton?.bones[Number(parsed.objectIndex)];\n }\n if (!object) return undefined;\n const reference = this.referenceBindings.get(object);\n if (!reference) return undefined;\n switch (parsed.propertyName) {\n case 'quaternion': return Object.values(reference.transform.rotation);\n case 'rotation': {\n const rotation = reference.transform.rotation;\n const euler = reference.rotationEuler ?? new Euler().setFromQuaternion(new Quaternion(rotation.x, rotation.y, rotation.z, rotation.w), reference.rotationOrder);\n const axis = parsed.propertyIndex;\n return axis === 'x' || axis === 'y' || axis === 'z' ? [euler[axis]] : [euler.x, euler.y, euler.z];\n }\n case 'position': return Object.values(reference.transform.position);\n case 'scale': return Object.values(reference.transform.scale);\n case 'weights':\n case 'morphTargetInfluences': {\n const mesh = object as Mesh;\n const index = typeof parsed.propertyIndex === 'string' && !/^\\d+$/.test(parsed.propertyIndex)\n ? mesh.morphTargetDictionary?.[parsed.propertyIndex] : Number(parsed.propertyIndex);\n return [reference.morphInfluences?.[index ?? -1] ?? 0];\n }\n default: return undefined;\n }\n }\n\n private materialize(source: Source, options: CharacterPlaybackOptions, inheritedStarts = new Map<string, number[]>()): AnimationClip {\n if (!this.inspection) throw new Error('Character has no model inspection.');\n const nativeSource = source.kind === 'native';\n let ir: ClipIR | undefined;\n if (!nativeSource) {\n ir = this.compile(source, options);\n }\n const clip = nativeSource ? withComponentTracks(source.clip).clone() : createAnimationClipFromClipIR(ir!, this.inspection);\n if (ir) {\n const predecessor = this.current.get(source.name);\n const outgoing = predecessor?.connector.getAction(predecessor.id);\n for (let index = 0; index < ir.tracks.length; index += 1) {\n if (!ir.tracks[index].inheritStart) continue;\n const track = clip.tracks[index];\n if (!track) throw new Error('Every inherited track must bind to the character.');\n const startKey = `${index}:${track.name}`;\n let previous = inheritedStarts.get(startKey);\n if (!previous && options.blendMode === 'additive') {\n // Additive inheritance belongs to this request's contribution, not\n // the full mixed pose containing baked clips and other controls.\n const rest = this.restValues(track);\n const candidates = outgoing?.getClip().tracks;\n const oldTrack = candidates?.[index]?.name === track.name ? candidates[index] : candidates?.find((candidate) => candidate.name === track.name);\n if (oldTrack && outgoing) {\n const sample = Array.from((oldTrack as NativeTrack).createInterpolant().evaluate(outgoing.time));\n const quaternion = track.ValueTypeName === 'quaternion';\n const ratio = weightRatio(outgoing, options);\n // Additive samples are offsets from neutral; normal samples are\n // absolute and fade toward the captured reference.\n previous = outgoing.blendMode === AdditiveAnimationBlendMode\n ? weighted(sample, undefined, ratio, quaternion)\n : weighted(sample, rest, ratio, quaternion);\n if (outgoing.blendMode === AdditiveAnimationBlendMode && rest) {\n previous = track.ValueTypeName === 'quaternion'\n ? new Quaternion().fromArray(rest).multiply(new Quaternion().fromArray(previous)).toArray()\n : previous.map((value, axis) => value + rest[axis]);\n }\n } else if (rest) previous = rest;\n }\n if (previous) track.values.set(previous, 0);\n inheritedStarts.set(startKey, previous ?? Array.from(track.values.subarray(0, track.getValueSize())));\n }\n }\n const authoredAdditive = clip.blendMode === AdditiveAnimationBlendMode;\n const scale = intensity(options);\n const additive = options.blendMode === 'additive' || (options.blendMode === undefined && authoredAdditive);\n // Native custom curves remain exact at their authored settings. Editing\n // strength/blend/easing materializes their native interpolant once into\n // ordinary keyframes; no custom sampling occurs during rendering.\n this.applyEasing(clip, options.easing ?? 'linear', nativeSource && (scale !== 1 || additive !== authoredAdditive));\n if (nativeSource && scale !== 1) {\n for (const track of clip.tracks) {\n const rest = authoredAdditive ? (track.ValueTypeName === 'quaternion' ? [0, 0, 0, 1] : Array(track.getValueSize()).fill(0)) : this.restValues(track);\n if (!rest) continue;\n const stride = track.getValueSize();\n const cubic = (track as NativeTrack).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true;\n const width = cubic ? stride / 3 : stride;\n for (let offset = 0; offset < track.values.length; offset += stride) {\n const sample = offset + (cubic ? width : 0);\n if (track.ValueTypeName === 'quaternion') {\n const neutral = new Quaternion().fromArray(rest);\n const value = new Quaternion().fromArray(track.values, sample);\n neutral.slerp(value, scale).toArray(track.values, sample);\n } else {\n for (let axis = 0; axis < width; axis += 1) {\n track.values[sample + axis] = rest[axis] + (track.values[sample + axis] - rest[axis]) * scale;\n if (cubic) {\n track.values[offset + axis] *= scale;\n track.values[offset + 2 * width + axis] *= scale;\n }\n }\n }\n }\n }\n }\n if (additive && !authoredAdditive) {\n const reference = clip.clone();\n for (const track of reference.tracks) {\n const rest = this.restValues(track);\n if (!rest) continue;\n const width = track.getValueSize();\n for (let offset = 0; offset < track.values.length; offset += width) track.values.set(rest, offset);\n }\n const explicitReference = options.additiveReferenceTimeSec;\n if (finite(explicitReference)) AnimationUtils.makeClipAdditive(clip, explicitReference * 30, clip.clone(), 30);\n else AnimationUtils.makeClipAdditive(clip, 0, reference, 30);\n }\n if (!additive && authoredAdditive) {\n // Native additive clips contain offsets; restore captured reference values.\n for (const track of clip.tracks) {\n const rest = this.restValues(track);\n if (!rest) continue;\n const width = track.getValueSize();\n for (let offset = 0; offset < track.values.length; offset += width) {\n if (track.ValueTypeName === 'quaternion') new Quaternion().fromArray(rest).multiply(new Quaternion().fromArray(track.values, offset)).toArray(track.values, offset);\n else for (let axis = 0; axis < width; axis += 1) track.values[offset + axis] += rest[axis];\n }\n }\n }\n clip.blendMode = additive ? AdditiveAnimationBlendMode : NormalAnimationBlendMode;\n return clip;\n }\n\n private applyEasing(clip: AnimationClip, easing: string, resampleCustom = false): void {\n if (easing === 'linear' && !resampleCustom) return;\n const curve = (progress: number): number => {\n switch (easing) {\n case 'easeIn': return progress * progress;\n case 'easeOut': return 1 - (1 - progress) ** 2;\n case 'easeInOut': return progress < 0.5 ? 2 * progress * progress : 1 - (-2 * progress + 2) ** 2 / 2;\n case 'easeInOutCubic': return progress < 0.5 ? 4 * progress ** 3 : 1 - (-2 * progress + 2) ** 3 / 2;\n default: return progress;\n }\n };\n for (const track of clip.tracks) {\n if (track.getInterpolation() === InterpolateDiscrete || track.times.length === 0) continue;\n const customInterpolant = (track as NativeTrack).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true;\n if (track.times.length === 1) {\n if (customInterpolant && resampleCustom) {\n track.values = new Float32Array((track as NativeTrack).createInterpolant().evaluate(track.times[0]));\n track.setInterpolation(InterpolateLinear);\n }\n continue;\n }\n if ((customInterpolant || track.getInterpolation() !== InterpolateLinear) && easing === 'linear' && !resampleCustom) continue;\n const stride = track.getValueSize();\n const width = customInterpolant ? stride / 3 : stride;\n const interpolant = (track as NativeTrack).createInterpolant();\n const times: number[] = [];\n const values: number[] = [];\n const append = (time: number, value: ArrayLike<number>) => { times.push(time); for (let axis = 0; axis < width; axis += 1) values.push(value[axis]); };\n for (let index = 0; index < track.times.length - 1; index += 1) {\n const start = track.times[index];\n const end = track.times[index + 1];\n // Retain duplicate keyframe times and their authored values verbatim.\n const offset = index * stride + (customInterpolant ? width : 0);\n append(start, track.values.subarray(offset, offset + width));\n if (end <= start) continue;\n for (let part = 1; part < 16; part += 1) {\n const progress = part / 16;\n append(start + (end - start) * progress, interpolant.evaluate(start + (end - start) * curve(progress)));\n }\n }\n const lastOffset = (track.times.length - 1) * stride + (customInterpolant ? width : 0);\n append(track.times[track.times.length - 1], track.values.subarray(lastOffset, lastOffset + width));\n track.times = new Float32Array(times);\n track.values = new Float32Array(values);\n if (customInterpolant || track.getInterpolation() !== InterpolateLinear) track.setInterpolation(InterpolateLinear);\n }\n }\n\n private nativeOptions(options: CharacterPlaybackOptions, clip: AnimationClip): ThreeNativePlaybackOptions {\n const mode = clip.duration === 0 ? 'once' : options.loopMode ?? (options.loop === true ? 'repeat' : 'once');\n const count = finite(options.repeatCount) && options.repeatCount > 0 ? options.repeatCount : null;\n let speed = options.speed ?? options.playbackRate ?? options.rate ?? options.timeScale ?? 1;\n if (options.reverse === true) speed = -Math.abs(speed);\n return {\n startSeconds: finite(options.time) ? options.time : finite(options.offsetSec) ? options.offsetSec : speed < 0 ? clip.duration : 0,\n speed,\n weight: finite(options.mixerWeight) ? options.mixerWeight : 1,\n blendMode: clip.blendMode === AdditiveAnimationBlendMode ? 'additive' : 'normal',\n loop: { mode: mode === 'once' ? 'once' : mode === 'pingpong' || mode === 'pingPong' ? 'pingPong' : 'repeat', count: mode === 'once' ? 1 : count },\n finalPose: options.finalPose === 'release' || options.clampWhenFinished === false ? 'release' : 'hold',\n };\n }\n private validateEasing(options: CharacterPlaybackOptions): void {\n if (options.easing !== undefined && !['linear', 'easeIn', 'easeOut', 'easeInOut', 'easeInOutCubic'].includes(options.easing)) throw new Error(`Unknown playback easing: ${options.easing}`);\n }\n\n private handle(source: Source, options: CharacterPlaybackOptions, autoPlay: boolean, owner: PlaybackOwner = 'caller'): CharacterPlaybackHandle {\n options = { ...('options' in source ? source.options : {}), ...options };\n const listeners = new Set<(event: CharacterPlaybackEvent) => void>();\n const generation = this.bindingGeneration;\n let current: Playback | undefined;\n let resolvePromise: (event: CharacterPlaybackEvent) => void = () => {};\n const result = { name: source.name } as CharacterPlaybackHandle;\n Object.defineProperty(result, 'finished', { get: () => result.promise, enumerable: true });\n const newPromise = () => { result.promise = new Promise((resolve) => { resolvePromise = resolve; }); };\n newPromise();\n result.subscribe = (listener) => {\n const callback = typeof listener === 'function' ? listener : (event: CharacterPlaybackEvent) => listener.next(event);\n listeners.add(callback);\n return () => { listeners.delete(callback); };\n };\n const start = (): CharacterPlaybackHandle => {\n if (generation !== this.bindingGeneration) throw new Error('Playback handle belongs to an obsolete model binding.');\n this.validateEasing(options);\n const connector = this.requireConnector();\n const inheritedStarts = new Map<string, number[]>();\n const clip = this.materialize(source, options, inheritedStarts);\n // Admission performs no hair work: hair observes the rendered head pose\n // once per render step instead (sampleHairResponse).\n const previous = this.current.get(source.name);\n const outgoing = previous ? connector.getAction(previous.id) : undefined;\n // Native replacement stops the outgoing action and resets its time.\n // Preserve its semantic sample before admitting the replacement.\n const predecessorTime = outgoing ? outgoing.time : Number.NaN;\n const predecessorWeightRatio = outgoing ? weightRatio(outgoing, options) : 1;\n const settings = this.nativeOptions(options, clip);\n if (previous && connector.getAction(previous.id)) settings.replace = previous.id;\n if (current) newPromise();\n const resolve = resolvePromise;\n let settled = false;\n this.playDepth += 1;\n let id: string;\n try { id = connector.playNativeClip(clip, settings); }\n catch (error) {\n this.playDepth -= 1;\n this.flushPendingPlaybackEvents();\n throw error;\n }\n try {\n // Record before the replaced action's deferred events can forget its\n // slot: the predecessor's semantic keys resolve this slot's start.\n if (source.kind === 'curves') {\n this.core.record_semantic_slot(source.name, json(source.input), intensity(options), options.easing ?? 'linear',\n predecessorTime, predecessorWeightRatio);\n } else this.core.release_semantic_slot(source.name);\n } catch (error) {\n connector.control(id, { type: 'stop' });\n this.playDepth -= 1;\n this.flushPendingPlaybackEvents();\n throw error;\n }\n const playback: Playback = {\n id, source, owner, options: { ...options, intensityScale: intensity(options) }, connector, terminal: false, inheritedStarts,\n replay: (next) => { options = next; return start(); },\n notify: (event) => {\n if (settled) return;\n settled = true;\n resolve(event);\n for (const listener of [...listeners]) {\n try { listener(event); }\n catch (error) { queueMicrotask(() => { throw error; }); }\n }\n },\n };\n current = playback;\n result.actionId = id;\n this.playbacks.set(id, playback);\n this.current.set(source.name, playback);\n const ensure = () => {\n this.assertAlive();\n if (this.connector !== connector || !connector.getAction(id)) throw new Error('Unknown, released or obsolete playback handle.');\n };\n const control = (command: ThreeNativePlaybackControl): CharacterPlaybackHandle => {\n ensure();\n connector.control(id, command);\n if (command.type === 'stop') this.forget(playback);\n return result;\n };\n result.stop = result.cancel = () => {\n if (this.connector !== connector || !connector.getAction(id)) return result;\n ensure();\n const seconds = finite(playback.options.fadeOutSec) ? playback.options.fadeOutSec : 0;\n // A held, completed action still contributes its final pose; fading\n // it is the native way to release that pose without a jump.\n if (seconds > 0) connector.fadeOut(id, seconds);\n else control({ type: 'stop' });\n return result;\n };\n result.pause = () => control({ type: 'pause' });\n result.resume = () => {\n ensure();\n if (playback.terminal) {\n options = { ...playback.options, time: connector.getAction(id)!.time };\n return start();\n }\n return control({ type: 'resume' });\n };\n result.setSpeed = result.setPlaybackRate = (speed) => { ensure(); this.updatePlayback(playback, { speed }); return result; };\n result.setTime = result.seek = (seconds) => control({ type: 'seek', seconds });\n result.setWeight = result.setIntensity = (value) => {\n ensure();\n this.updatePlayback(playback, { intensityScale: value });\n return result;\n };\n result.updateParams = result.setParams = (value) => { ensure(); this.updatePlayback(playback, value); return result; };\n try {\n const fade = options.fadeInSec ?? options.crossfadeDuration;\n if (finite(fade) && fade > 0) connector.fadeIn(id, fade);\n } finally {\n this.playDepth -= 1;\n this.flushPendingPlaybackEvents();\n }\n return result;\n };\n result.play = () => { if (current) options = { ...current.options }; return start(); };\n const beforePlay = () => { throw new Error('Play this compiled clip before changing playback.'); };\n // A prepared clip has options but owns no native action to stop or pause.\n result.stop = result.cancel = () => result;\n result.pause = result.resume = beforePlay;\n result.updateParams = result.setParams = (patch) => {\n this.assertAlive();\n this.validateEasing(patch);\n options = { ...options, ...patch };\n if ('finalPose' in patch && !('clampWhenFinished' in patch)) options.clampWhenFinished = patch.finalPose !== 'release';\n if ('clampWhenFinished' in patch && !('finalPose' in patch)) options.finalPose = patch.clampWhenFinished === false ? 'release' : 'hold';\n if ('loop' in patch && !('loopMode' in patch)) options.loopMode = patch.loop ? 'repeat' : 'once';\n if ('loopMode' in patch && !('repeatCount' in patch)) delete options.repeatCount;\n if ('weight' in patch || 'intensity' in patch || 'intensityScale' in patch) options.intensityScale = intensity(patch);\n if ('time' in patch || 'offsetSec' in patch) options.time = patch.time ?? patch.offsetSec;\n if ('speed' in patch || 'playbackRate' in patch || 'rate' in patch || 'timeScale' in patch || 'reverse' in patch) {\n let speed = patch.speed ?? patch.playbackRate ?? patch.rate ?? patch.timeScale ?? options.speed ?? options.playbackRate ?? options.rate ?? options.timeScale ?? 1;\n if ('reverse' in patch) speed = Math.abs(speed) * (patch.reverse ? -1 : 1);\n options.speed = speed;\n delete options.reverse;\n }\n return result;\n };\n result.setWeight = result.setIntensity = (value) => result.updateParams({ intensityScale: value });\n result.setSpeed = result.setPlaybackRate = (speed) => result.updateParams({ speed });\n result.setTime = result.seek = (time) => result.updateParams({ time });\n return autoPlay ? start() : result;\n }\n\n private forget(playback: Playback): void {\n this.playbacks.delete(playback.id);\n if (this.current.get(playback.source.name) === playback) {\n this.current.delete(playback.source.name);\n this.core.release_semantic_slot(playback.source.name);\n }\n }\n private updatePlayback(playback: Playback, patch: CharacterPlaybackOptions): void {\n this.validateEasing(patch);\n const connector = playback.connector;\n const action = connector.getAction(playback.id);\n if (connector !== this.connector || !action) throw new Error('Unknown, released or obsolete playback handle.');\n const options = { ...playback.options, ...patch };\n if ('finalPose' in patch && !('clampWhenFinished' in patch)) options.clampWhenFinished = patch.finalPose !== 'release';\n if ('clampWhenFinished' in patch && !('finalPose' in patch)) options.finalPose = patch.clampWhenFinished === false ? 'release' : 'hold';\n if ('loop' in patch && !('loopMode' in patch)) options.loopMode = patch.loop ? 'repeat' : 'once';\n if ('loopMode' in patch && !('repeatCount' in patch)) delete options.repeatCount;\n if ('weight' in patch || 'intensity' in patch || 'intensityScale' in patch) options.intensityScale = intensity(patch);\n if (['weight', 'intensity', 'intensityScale', 'blendMode', 'easing', 'balance', 'balanceMap', 'mixWeights'].some((key) => key in patch)) {\n const clip = this.materialize(playback.source, options, playback.inheritedStarts);\n connector.replaceClip(playback.id, clip);\n if (playback.source.kind === 'curves') this.core.restyle_semantic_slot(playback.source.name, intensity(options), options.easing ?? 'linear');\n if ('blendMode' in patch) connector.control(playback.id, { type: 'setBlendMode', blendMode: clip.blendMode === AdditiveAnimationBlendMode ? 'additive' : 'normal' });\n }\n if ('mixerWeight' in patch) connector.control(playback.id, { type: 'setWeight', weight: patch.mixerWeight });\n if ('speed' in patch || 'playbackRate' in patch || 'rate' in patch || 'timeScale' in patch || 'reverse' in patch) {\n let speed = patch.speed ?? patch.playbackRate ?? patch.rate ?? patch.timeScale ?? action.timeScale;\n if ('reverse' in patch) speed = Math.abs(speed) * (patch.reverse ? -1 : 1);\n connector.control(playback.id, { type: 'setSpeed', speed });\n options.speed = speed;\n delete options.reverse;\n }\n if ('time' in patch || 'offsetSec' in patch) {\n options.time = patch.time ?? patch.offsetSec;\n connector.control(playback.id, { type: 'seek', seconds: options.time });\n }\n if ('loopMode' in patch || 'loop' in patch || 'repeatCount' in patch) {\n if (playback.terminal) {\n playback.replay({ ...options, time: action.time });\n return;\n }\n connector.control(playback.id, { type: 'setLoop', loop: this.nativeOptions(options, action.getClip()).loop! });\n }\n if ('clampWhenFinished' in patch || 'finalPose' in patch) connector.control(playback.id, { type: 'setFinalPose', finalPose: this.nativeOptions(options, action.getClip()).finalPose! });\n playback.options = options;\n if (!connector.getAction(playback.id)) this.forget(playback);\n }\n\n supportsVrmAnimation(): boolean { return true; }\n convertMixamoFbxToVrmAnimations(bytes: ArrayBuffer, options: VrmAnimationUnits): VrmAnimationFile[] {\n this.requireModel();\n return convertMixamoFbxToVrmAnimations(bytes, options);\n }\n getVrmAnimationInfo(bytes: Uint8Array): VrmAnimationInfo {\n this.requireModel();\n const document = inspectVrmAnimation(bytes);\n return { name: document.name, durationSeconds: document.durationSeconds, trackCount: document.tracks.length };\n }\n /** Registers a source; Animation owns the later playback request. */\n registerVrmAnimation(name: string, bytes: Uint8Array, options: VrmAnimationUnits): void {\n if (typeof name !== 'string' || !name.trim()) throw new Error('VRM Animation requires a nonempty clip name.');\n const model = this.requireModel();\n const clip = createAnimationClipFromVrmAnimation(bytes, model, {\n name, metersPerUnit: options.metersPerUnit,\n referencePose: this.references.get(model)!, profile: this.profile,\n });\n // Save ownership only after native registration accepts the complete clip.\n this.registerAnimationClips([clip]);\n this.vrmAnimations.set(name, { model, clip });\n }\n /** Stale editor cleanup must not remove a later same-name native source. */\n releaseVrmAnimation(name: string): void {\n const registered = this.vrmAnimations.get(name);\n const source = this.sources.get(name);\n if (registered && !this.disposed && registered.model === this.boundModel &&\n source?.kind === 'native' && source.clip === registered.clip) this.removeAnimationClip(name);\n this.vrmAnimations.delete(name);\n }\n\n registerAnimationClips(clips: AnimationClip[]): void {\n const model = this.requireModel();\n for (const clip of clips) {\n if (this.sources.get(clip.name)?.kind === 'native' && (this.sources.get(clip.name) as { clip: AnimationClip }).clip === clip) continue;\n const [ir] = serializeAnimationClips(model, [clip], this.inspection!);\n this.core.register_animation_clip(json(ir), 'baked');\n this.sources.set(clip.name, { name: clip.name, kind: 'native', clip });\n }\n }\n loadAnimationClips(clips: AnimationClip[]): void {\n this.stopAllAnimations();\n this.vrmAnimations.clear();\n for (const source of [...this.sources.values()]) if (source.kind === 'native') {\n this.sources.delete(source.name);\n this.core.remove_animation_clip(source.name);\n }\n this.registerAnimationClips(clips ?? []);\n this.sampleHairResponse(0);\n }\n removeAnimationClip(name: string): boolean {\n this.stopAnimation(name);\n this.sources.delete(name);\n return this.core.remove_animation_clip(name);\n }\n getAnimationClips(): AnimationClipInfo[] { return parse(this.core.get_animation_clips()); }\n playAnimation(name: string, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n const source = this.sources.get(name);\n if (!source) throw new Error(`Unknown animation clip: ${name}`);\n return this.handle(source, options, true);\n }\n private build(source: Source, options: CharacterPlaybackOptions, play: boolean, owner: PlaybackOwner = 'caller'): CharacterPlaybackHandle {\n this.requireModel();\n this.validateEasing(options);\n this.compile(source, options);\n this.sources.set(source.name, source);\n return this.handle(source, options, play, owner);\n }\n buildClip(name: string, curves: JsonObject, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n if (options.semanticAnimation) throw new Error('Decode legacy named animation tracks to numeric AU curves before building a clip.');\n return this.build({ name, kind: 'curves', input: copy(curves), options: copy(options) }, options, false);\n }\n snippetToClip(name: string, curves: JsonObject, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle { return this.buildClip(name, curves, options); }\n buildTypedClip(name: string, channels: any[], options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n return this.build({ name, kind: 'typed', input: copy(channels), options: copy(options) }, options, false);\n }\n typedSnippetToClip(name: string, channels: any[], options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle { return this.buildTypedClip(name, channels, options); }\n playSnippet(snippet: string | { name: string; curves: JsonObject }, curvesOrOptions: JsonObject = {}, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n return typeof snippet === 'string' ? this.buildClip(snippet, curvesOrOptions, options).play() : this.buildClip(snippet.name, snippet.curves, curvesOrOptions).play();\n }\n playTypedSnippet(snippet: { name: string; channels: any[] }, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle { return this.buildTypedClip(snippet.name, snippet.channels, options).play(); }\n playClip(value: string | CharacterPlaybackHandle): CharacterPlaybackHandle { return typeof value === 'string' ? this.playAnimation(value) : value.play(); }\n supportsClipCurves(): boolean { return true; }\n cleanupSnippet(name: string): void { this.stopAnimation(name); this.sources.delete(name); this.core.cleanup_snippet(name); }\n crossfadeTo(name: string, seconds: number, options: CharacterPlaybackOptions = {}): CharacterPlaybackHandle {\n // Live setter targets and hair actions are not part of a caller's crossfade.\n const outgoing = [...this.current.values()].filter((playback) => playback.owner === 'caller');\n const handle = this.playAnimation(name, { ...options, fadeInSec: seconds });\n for (const playback of outgoing) if (playback.connector.getAction(playback.id)) playback.connector.fadeOut(playback.id, seconds);\n return handle;\n }\n stopAnimation(name: string): void {\n const playback = this.current.get(name);\n if (!playback) return;\n if (playback.connector.getAction(playback.id)) playback.connector.control(playback.id, { type: 'stop' });\n this.forget(playback);\n }\n /** Stop every caller playback. Live setter targets and hair actions keep running. */\n stopAllAnimations(): void {\n for (const playback of [...this.playbacks.values()]) {\n if (playback.owner !== 'caller') continue;\n if (playback.connector.getAction(playback.id)) playback.connector.control(playback.id, { type: 'stop' });\n this.forget(playback);\n }\n }\n pauseAnimation(name: string): void {\n if (name === HAIR_RESPONSE) this.core.set_hair_response_paused(true);\n const p = this.current.get(name); if (p) p.connector.control(p.id, { type: 'pause' });\n }\n resumeAnimation(name: string): void {\n if (name === HAIR_RESPONSE) {\n this.core.set_hair_response_paused(false);\n this.sampleHairResponse(0);\n }\n const p = this.current.get(name);\n if (!p) return;\n if (p.terminal) p.replay({ ...p.options, time: p.connector.getAction(p.id)?.time ?? 0 });\n else p.connector.control(p.id, { type: 'resume' });\n }\n // Hair actions follow the hair configuration and Embody.stop()/start(), not caller pause commands.\n pauseAllAnimations(): void { for (const p of this.playbacks.values()) if (!p.terminal && p.owner !== 'hair') p.connector.control(p.id, { type: 'pause' }); }\n resumeAllAnimations(): void { for (const [name, p] of [...this.current]) if (p.owner !== 'hair') this.resumeAnimation(name); }\n updateClipParams(name: string, options: CharacterPlaybackOptions): void { const p = this.current.get(name); if (p) this.updatePlayback(p, options); }\n setAnimationSpeed(name: string, value: number): void { this.updateClipParams(name, { speed: value }); }\n setAnimationIntensity(name: string, value: number): void { this.updateClipParams(name, { intensityScale: value }); }\n setAnimationLoop(name: string, value: boolean): void { this.updateClipParams(name, { loopMode: value ? 'repeat' : 'once' }); }\n setAnimationLoopMode(name: string, value: string): void { this.updateClipParams(name, { loopMode: value }); }\n setAnimationRepeatCount(name: string, value: number | null): void { this.updateClipParams(name, { loopMode: 'repeat', repeatCount: value }); }\n setAnimationReverse(name: string, value: boolean): void { this.updateClipParams(name, { reverse: value }); }\n setAnimationBlendMode(name: string, value: string): void { this.updateClipParams(name, { blendMode: value }); }\n setAnimationEasing(name: string, value: string): void { this.validateEasing({ easing: value }); this.updateClipParams(name, { easing: value }); }\n seekAnimation(name: string, value: number): void { this.updateClipParams(name, { time: value }); }\n setAnimationTime(name: string, value: number): void { this.seekAnimation(name, value); }\n setSnippetTime(name: string, value: number): void { this.seekAnimation(name, value); }\n seekSnippet(name: string, value: number): void { this.seekAnimation(name, value); }\n seek(name: string, value: number): void { this.seekAnimation(name, value); }\n setAnimationTimeScale(value: number): void { this.requireConnector().setTimeScale(value); this.timeScale = value; }\n getAnimationState(name: string): JsonObject {\n const p = this.current.get(name);\n const action = p?.connector.getAction(p.id);\n if (!action || !p) { if (p) this.forget(p); return { name, playing: false, isPlaying: false }; }\n const playing = action.isRunning();\n return { name, actionId: p.id, playing, isPlaying: playing, paused: action.paused, completed: p.terminal,\n time: action.time, duration: action.getClip().duration, speed: action.timeScale,\n intensityScale: intensity(p.options), mixerWeight: action.getEffectiveWeight(),\n loopMode: action.loop === LoopOnce ? 'once' : action.loop === LoopPingPong ? 'pingpong' : 'repeat',\n repeatCount: Number.isFinite(action.repetitions) ? action.repetitions : null,\n blendMode: action.blendMode === AdditiveAnimationBlendMode ? 'additive' : 'replace' };\n }\n getPlayingAnimations(): string[] { return [...this.current.keys()].filter((name) => this.getAnimationState(name).playing); }\n\n private commitLive(durationMs = 0): CharacterPlaybackHandle[] {\n const connector = this.requireConnector();\n const duration = Math.max(0, durationMs) / 1000;\n const clip = parse<ClipIR>(this.core.build_live_clip('__embody_live', duration));\n const touched = new Set(parse<ClipIRTrack['target'][]>(this.core.live_command_targets_json()).map(targetKey));\n const tracks = new Map<string, ClipIRTrack>(clip.tracks.map((track) => [targetKey(track.target), track]));\n const handles: CharacterPlaybackHandle[] = [];\n for (const [key, previous] of this.liveTargets) {\n if (tracks.has(key)) continue;\n if (previous.releasing && !touched.has(key)) continue;\n const action = previous.handle.actionId && connector.getAction(previous.handle.actionId);\n if (!action || duration === 0) {\n previous.handle.stop();\n this.liveTargets.delete(key);\n continue;\n }\n // Fade this action's own contribution. Inheriting the already mixed pose\n // would blend it a second time and jump when the released track disappears.\n const nativeTrack = action.getClip().tracks[0] as NativeTrack;\n const sample = Array.from(nativeTrack.createInterpolant().evaluate(action.time));\n const released: ClipIRTrack = { ...previous.track, times: [0, duration], values: [...sample, ...sample], inheritStart: false };\n const releaseClip = { ...clip, name: previous.handle.name, tracks: [released] };\n const handle = this.handle({ name: releaseClip.name, kind: 'compiled', clip: releaseClip },\n { loopMode: 'once', finalPose: 'release', mixerWeight: action.getEffectiveWeight() }, true, 'live');\n connector.fadeOut(handle.actionId!, duration);\n const record = { track: released, handle, releasing: true };\n this.liveTargets.set(key, record);\n void handle.promise.then(() => { if (this.liveTargets.get(key) === record) this.liveTargets.delete(key); });\n handles.push(handle);\n }\n for (const [key, track] of tracks) {\n const previous = this.liveTargets.get(key);\n const endpoint = (value: ClipIRTrack) => value.values.slice(value.values.length / value.times.length * (value.times.length - 1));\n // Rust identifies semantic command destinations. Concrete targets outside\n // that command keep their native action, including an intentionally cancelled one.\n if (previous && !previous.releasing && !touched.has(key) && json(endpoint(previous.track)) === json(endpoint(track))) continue;\n const name = previous?.handle.name ?? `__embody_live_${this.nextLiveTarget++}`;\n const outgoing = previous?.handle.actionId && connector.getAction(previous.handle.actionId);\n let nativeTrack = track;\n if (duration > 0 && outgoing) {\n const outgoingTrack = outgoing.getClip().tracks[0] as NativeTrack;\n // Continue from this target's own (possibly fading) contribution.\n const start = weighted(Array.from(outgoingTrack.createInterpolant().evaluate(outgoing.time)),\n this.restValues(outgoingTrack), outgoing.getEffectiveWeight(), outgoingTrack.ValueTypeName === 'quaternion');\n nativeTrack = { ...track, values: [...start, ...endpoint(track)], inheritStart: false };\n }\n const targetClip = { ...clip, name, tracks: [nativeTrack] };\n const handle = this.handle({ name, kind: 'compiled', clip: targetClip }, { loopMode: 'once', finalPose: 'hold' }, true, 'live');\n this.liveTargets.set(key, { track, handle, releasing: false });\n handles.push(handle);\n }\n return handles;\n }\n private mutateLive(mutate: () => void, durationMs = 0): CharacterPlaybackHandle[] {\n this.requireModel();\n this.core.begin_live_command();\n mutate();\n return this.commitLive(durationMs);\n }\n private transition(handles: CharacterPlaybackHandle[]): CharacterTransitionHandle {\n // A single control may own several concrete tracks. Replacement of one\n // shared target must not settle or cancel its other independent targets.\n let settled = handles.length === 0;\n const promise = Promise.all(handles.map((handle) => handle.promise)).then(() => { settled = true; });\n const control = (command: 'pause' | 'resume' | 'cancel') => {\n if (settled) return;\n for (const handle of handles) {\n const playback = handle.actionId && this.playbacks.get(handle.actionId);\n if (!playback || !playback.connector.getAction(playback.id)) continue;\n if (command === 'cancel' || !playback.terminal) handle[command]();\n }\n };\n return { promise, pause: () => control('pause'), resume: () => control('resume'), cancel: () => control('cancel') };\n }\n setAU(id: number, value: number, balance = this.core.get_au_balance(id)): void { this.mutateLive(() => this.core.set_au_signed(id, value, balance)); }\n getAU(id: number): number { return this.core.get_au(id); }\n getAUBalance(id: number): number { return this.core.get_au_balance(id); }\n getAUDescriptors(): AUDescriptor[] { return parse(this.core.get_au_descriptors_json()); }\n setContinuum(negative: number, positive: number, value: number, balance = NaN): void { this.mutateLive(() => this.core.set_continuum(negative, positive, value, balance)); }\n getContinuum(negative: number, positive: number): number { return this.core.get_continuum(negative, positive); }\n /**\n * One clip slot's own semantic AU contribution right now (`{auId: value}`),\n * evaluated in Rust at the native action's time and effective weight.\n * Null when the slot is not playing or was not an AU-curve clip.\n */\n readAUContribution(name: string): Record<string, number> | null {\n const playback = this.current.get(name);\n const action = playback?.connector.getAction(playback.id);\n return playback && action ? parse(this.core.read_semantic_slot(name, action.time, action.getEffectiveWeight())) : null;\n }\n /**\n * On-demand AU state: live control values, active AU-curve clip\n * contributions and their sum. Baked/native and typed clips cannot be\n * inverted to AU values and are listed as `unreadable`, never estimated.\n */\n readAUState(): CharacterAUState {\n const active: Array<{ name: string; time: number; weight: number }> = [];\n const unreadable: string[] = [];\n for (const [name, playback] of this.current) {\n const action = playback.connector.getAction(playback.id);\n if (!action) continue;\n if (playback.source.kind === 'curves') active.push({ name, time: action.time, weight: action.getEffectiveWeight() });\n // Compiled sources are Embody's own live-control and hair tracks.\n else if (playback.source.kind !== 'compiled') unreadable.push(name);\n }\n return { ...parse<Omit<CharacterAUState, 'unreadable'>>(this.core.read_semantic_state(json(active))), unreadable };\n }\n /**\n * Distance from a slot's current contribution to AU destinations, measured\n * along profile continuum pairs, and whether it reverses unfinished travel.\n * A slot that is not playing is at zero. Callers choose any timing policy.\n */\n measureAUGoal(name: string, destinations: Record<string, number>): CharacterAUGoalMeasurement {\n const playback = this.current.get(name);\n const action = playback?.connector.getAction(playback.id);\n const unfinished = !!playback && !!action && !playback.terminal && action.time < action.getClip().duration;\n return parse(this.core.measure_au_goal(name, action?.time ?? Number.NaN, action?.getEffectiveWeight() ?? Number.NaN,\n json(destinations), unfinished));\n }\n transitionAU(id: number, value: number, durationMs = 200, balance = this.core.get_au_balance(id)): CharacterTransitionHandle { return this.transition(this.mutateLive(() => this.core.set_au_signed(id, value, balance), durationMs)); }\n setViseme(index: number, value: number, jawScale = 1): void { this.mutateLive(() => { this.core.set_viseme(index, value); this.core.set_viseme_jaw_scale(index, jawScale); }); }\n getViseme(index: number): number { return this.core.get_viseme(index); }\n getVisemeJawScale(index: number): number { return this.core.get_viseme_jaw_scale(index); }\n setVisemeById(id: string, value: number, jawScale = 1): void { const index = this.core.viseme_slot_index(id); if (index < 0) throw new Error(`Unknown viseme: ${id}`); this.setViseme(index, value, jawScale); }\n transitionViseme(index: number, value: number, durationMs = 80, jawScale = 1): CharacterTransitionHandle { return this.transition(this.mutateLive(() => { this.core.set_viseme(index, value); this.core.set_viseme_jaw_scale(index, jawScale); }, durationMs)); }\n transitionVisemeById(id: string, value: number, durationMs = 80, jawScale = 1): CharacterTransitionHandle { const index = this.core.viseme_slot_index(id); if (index < 0) return this.transition([]); return this.transitionViseme(index, value, durationMs, jawScale); }\n setAUMixWeight(id: number, value: number): void {\n const weight = Math.max(0, Math.min(1, value));\n this.mutateLive(() => this.core.set_au_mix_weight(id, weight));\n (this.profile.auMixDefaults ??= {})[id] = weight;\n (this.profileSource.auMixDefaults ??= {})[id] = weight;\n }\n getAUMixWeight(id: number): number { return this.core.get_au_mix_weight(id); }\n hasLeftRightBones(id: number): boolean { return this.core.has_left_right_bones(id); }\n setMorph(key: string | number, value: number, meshNames: string[] = []): void { this.mutateLive(() => { if (typeof key === 'number') this.core.set_morph_index(key, value, json(meshNames)); else this.core.set_morph(key, value, json(meshNames)); }); }\n setMorphOnMeshes(meshNames: string[], key: string | number, value: number): void { this.setMorph(key, value, meshNames); }\n releaseMorph(key: string | number, meshNames: string[] = []): void { this.mutateLive(() => { if (typeof key === 'number') this.core.release_morph_index(key, json(meshNames)); else this.core.release_morph(key, json(meshNames)); }); }\n transitionMorph(key: string | number, value: number, durationMs = 120, meshNames: string[] = []): CharacterTransitionHandle { return this.transition(this.mutateLive(() => { if (typeof key === 'number') this.core.set_morph_index(key, value, json(meshNames)); else this.core.set_morph(key, value, json(meshNames)); }, durationMs)); }\n\n getMorphTargets(): Record<string, string[]> { return Object.fromEntries(this.meshes.map((mesh) => [mesh.name, Object.keys(mesh.morphTargetDictionary ?? {}).sort()])); }\n getMorphTargetIndices(): Record<string, { name: string; index: number }[]> { return Object.fromEntries(this.meshes.map((mesh) => [mesh.name, Object.entries(mesh.morphTargetDictionary ?? {}).map(([name, index]) => ({ name, index })).sort((a, b) => a.index - b.index)])); }\n addMorphTarget(target: Parameters<ThreeFrameApplier['addMorphTarget']>[1], options?: Parameters<ThreeFrameApplier['addMorphTarget']>[2]): number { const index = this.applier.addMorphTarget(this.requireModel(), target, options); this.bindModel(); return index; }\n addMorphTargets(targets: Parameters<ThreeFrameApplier['addMorphTargets']>[1], options?: Parameters<ThreeFrameApplier['addMorphTargets']>[2]): Record<string, number> { const result = this.applier.addMorphTargets(this.requireModel(), targets, options); this.bindModel(); return result; }\n private meshCategory(mesh: Object3D): MeshCategory { return this.profile.meshes?.[mesh.name]?.category ?? 'other'; }\n getMeshList(): MeshInfo[] { return (this.inspection?.allMeshes ?? []).map((mesh) => ({ name: mesh.name, visible: mesh.visible, morphCount: mesh.morphTargetInfluences?.length ?? 0, category: this.meshCategory(mesh) })); }\n getBones(): ThreeModelInspection['bones'] { return this.bones; }\n private meshProfile(name: string): JsonObject { return (this.profile.meshes ??= {})[name] ??= { category: 'other' }; }\n setMeshVisible(name: string, visible: boolean): void { this.applier.setMeshVisible(this.requireModel(), name, visible); this.meshProfile(name).visible = visible; }\n highlightMesh(name: string | null, color?: number, value?: number): void {\n this.requireModel();\n this.core.request_mesh_highlight(name ?? undefined, color, value);\n this.applier.applyMeshHighlightFrame(parse(this.core.evaluate_mesh_highlight_frame()));\n }\n getMeshMaterialConfig(name: string): ThreeResolvedMaterialConfig | null { return this.applier.getMeshMaterialConfig(this.requireModel(), name); }\n setMeshMaterialConfig(name: string, value: Parameters<ThreeFrameApplier['setMeshMaterialConfig']>[2]): void { this.applier.setMeshMaterialConfig(this.requireModel(), name, value); const entry = this.meshProfile(name); entry.material = { ...entry.material, ...value }; }\n\n registerHairObjects(objects: Object3D[]): { name: string; isMesh: boolean; isEyebrow: boolean }[] {\n this.hairObjects.clear();\n for (const object of objects) if ((object as Mesh).isMesh) this.hairObjects.set(object.name, object as Mesh);\n for (const category of ['hair', 'eyebrow'] as const) {\n const mesh = [...this.hairObjects.values()].find((object) => this.meshCategory(object) === category);\n const material: any = mesh && (Array.isArray(mesh.material) ? mesh.material[0] : mesh.material);\n if (material) this.hairAppearance[`${category}Color`] = { ...this.hairAppearance[`${category}Color`], baseColor: material.color ? `#${material.color.getHexString()}` : '#000000', emissive: material.emissive ? `#${material.emissive.getHexString()}` : '#000000', emissiveIntensity: material.emissiveIntensity ?? 0 };\n }\n for (const [name, playback] of [...this.current]) if (playback.owner === 'hair') this.stopAnimation(name);\n this.core.reset_hair_response();\n this.sampleHairResponse(0);\n return [...this.hairObjects.values()].map((mesh) => ({ name: mesh.name, isMesh: true, isEyebrow: this.meshCategory(mesh) === 'eyebrow' }));\n }\n getRegisteredHairObjects(): Object3D[] { return [...this.hairObjects.values()]; }\n getHairMorphTargets(name?: string): string[] { const meshes = name ? [this.hairObjects.get(name)] : [...this.hairObjects.values()]; return [...new Set(meshes.flatMap((mesh) => Object.keys(mesh?.morphTargetDictionary ?? {})))].sort(); }\n getHairAppearance(): HairAppearanceState { return copy(this.hairAppearance); }\n private setHairAppearance(category: 'hair' | 'eyebrow', value: string | Partial<HairColorAppearance>): void {\n const key = `${category}Color` as const;\n const next = parse(this.wasm.normalize_hair_color_appearance_json(json(value), json(this.hairAppearance[key])));\n this.hairAppearance[key] = next;\n this.applier.applyHairAppearance([...this.hairObjects.values()].filter((mesh) => this.meshCategory(mesh) === category), next);\n }\n setHairColor(value: string | Partial<HairColorAppearance>): void { this.setHairAppearance('hair', value); }\n setEyebrowColor(value: string | Partial<HairColorAppearance>): void { this.setHairAppearance('eyebrow', value); }\n setHairBaseColor(value: string): void { this.setHairColor({ baseColor: value }); }\n setEyebrowBaseColor(value: string): void { this.setEyebrowColor({ baseColor: value }); }\n setHairGlow(color: string, value: number): void { this.setHairColor({ emissive: color, emissiveIntensity: value }); }\n setEyebrowGlow(color: string, value: number): void { this.setEyebrowColor({ emissive: color, emissiveIntensity: value }); }\n setHairOutline(value: { show: boolean; color?: string; opacity?: number }): void { Object.assign(this.hairAppearance, { showOutline: value.show }, value.color ? { outlineColor: value.color } : {}, value.opacity !== undefined ? { outlineOpacity: value.opacity } : {}); }\n private hairClipOptions(options: CharacterPlaybackOptions): CharacterPlaybackOptions {\n return { ...options, meshNames: [...this.hairObjects.keys()], source: 'hair', blendMode: 'additive' };\n }\n private bindHairHead(model: Object3D, inspection: ThreeModelInspection): void {\n this.hairHeadObservation = undefined;\n const binding = parse<{ boneId: number; boneName: string; reference: number[] } | null>(this.core.get_hair_head_binding_json());\n const head = binding && inspection.boneBindings.get(binding.boneId);\n if (!binding || !head) return;\n const chain: Object3D[] = [];\n for (let node: Object3D | null = head; node && node !== model; node = node.parent) chain.push(node);\n if (!chain.length || chain[chain.length - 1].parent !== model) return;\n const reference = new Quaternion();\n const node = new Quaternion();\n for (let index = chain.length - 1; index >= 0; index -= 1) {\n const rotation = this.referenceBindings.get(chain[index])?.transform.rotation;\n reference.multiply(rotation ? node.set(rotation.x, rotation.y, rotation.z, rotation.w) : chain[index].quaternion);\n }\n this.hairHeadObservation = {\n boneName: binding.boneName, chain, reference: binding.reference,\n modelToReference: new Quaternion().fromArray(binding.reference).multiply(reference.normalize().invert()),\n rotation: new Quaternion(),\n };\n }\n private sampleHairResponse(deltaSeconds: number, observeHead = false): void {\n if (this.disposed || !this.connector || !this.inspection) return;\n if (!this.hairConfig.enabled || !this.hairObjects.size) {\n this.stopAnimation(HAIR_RESPONSE);\n return;\n }\n const previous = this.current.get(HAIR_RESPONSE);\n const action = previous?.connector.getAction(previous.id);\n // Paused state still reconciles edited/cleared target bindings, without\n // advancing dynamics. Pausing only the head lets the hair keep settling.\n const head = this.hairHeadObservation;\n // Synchronous binding/configuration may precede restored live controls'\n // first native sample. Only a fully mixed renderer frame may prime head\n // history, avoiding a false kick from that temporary reference pose.\n let pose: { boneName: string; reference: number[]; current: number[] } | null = null;\n if (observeHead && head) {\n // localReference^-1 * current sent to Rust equals the captured model-space\n // reference^-1 * rendered head rotation, including parent neck/spine motion.\n const rotation = head.rotation.copy(head.modelToReference);\n for (let index = head.chain.length - 1; index >= 0; index -= 1) rotation.multiply(head.chain[index].quaternion);\n pose = { boneName: head.boneName, reference: head.reference, current: rotation.normalize().toArray() };\n }\n const ir = parse<ClipIR>(this.core.build_hair_response_clip(HAIR_RESPONSE, JSON.stringify(pose), action?.paused ? 0 : deltaSeconds,\n json({ meshNames: [...this.hairObjects.keys()] })));\n if (!ir.tracks.length) { this.stopAnimation(HAIR_RESPONSE); return; }\n const clip = createAnimationClipFromClipIR(ir, this.inspection);\n // Rust emits zero-neutral offsets, not absolute reference morph values.\n clip.blendMode = AdditiveAnimationBlendMode;\n const oldTracks = action?.getClip().tracks;\n const sameBindings = oldTracks && oldTracks.length === clip.tracks.length && clip.tracks.every((track, index) => {\n const old = oldTracks[index];\n return old.name === track.name && old.ValueTypeName === track.ValueTypeName && old.getValueSize() === track.getValueSize();\n });\n if (previous && action && sameBindings) {\n this.connector.replaceClip(previous.id, clip);\n previous.source = { name: HAIR_RESPONSE, kind: 'native', clip };\n } else {\n // Binding changes alone require a new native action. Numerical edits,\n // head retargets and ordinary frames retain both action and Rust state.\n const handle = this.handle({ name: HAIR_RESPONSE, kind: 'native', clip }, { loopMode: 'repeat', blendMode: 'additive' }, true, 'hair');\n if (action?.paused || this.core.is_hair_response_paused()) handle.pause();\n }\n }\n setHairPhysicsEnabled(value: boolean): void { this.setHairPhysicsConfig({ enabled: value }); }\n isHairPhysicsEnabled(): boolean { return !!this.hairConfig.enabled; }\n setHairPhysicsConfig(value: HairPhysicsRuntimeConfigUpdate): void {\n this.assertAlive();\n this.hairConfig = parse(this.core.set_hair_config_json(json(value)));\n if (!this.hairConfig.enabled) {\n for (const [name, playback] of [...this.current]) if (playback.owner === 'hair') this.stopAnimation(name);\n }\n this.sampleHairResponse(0);\n }\n getHairPhysicsConfig(): Partial<HairPhysicsRuntimeConfig> { return copy(this.hairConfig); }\n validateHairMorphTargets(): string[] {\n return parse(this.core.get_missing_hair_morph_targets_json(json(this.getHairMorphTargets())));\n }\n applyHairStateToObject(name: string, state: JsonObject): void {\n const mesh = this.hairObjects.get(name);\n if (!mesh) return;\n if (state.visible !== undefined) mesh.visible = state.visible;\n if (state.scale) mesh.scale.set(state.scale.x, state.scale.y, state.scale.z);\n if (state.position) mesh.position.set(state.position.x, state.position.y, state.position.z);\n if (state.color) this.applier.applyHairAppearance([mesh], state.color);\n }\n playHairImpulse(horizontal: number, vertical: number): CharacterPlaybackHandle | undefined {\n if (!this.hairConfig.enabled || !this.hairObjects.size) return undefined;\n const curves = parse(this.wasm.build_hair_impulse_curves(json(this.hairConfig), this.hairConfig.impulseClipDuration, horizontal, vertical));\n if (!Object.keys(curves).length) return undefined;\n const options = this.hairClipOptions({ loopMode: 'once', finalPose: 'release' });\n return this.build({ name: HAIR_IMPULSE_CLIP, kind: 'curves', input: curves, options: copy(options) }, options, true, 'hair');\n }\n start(): void { this.assertAlive(); this.rendering = true; this.connector?.setRendering(true); }\n stop(): void { this.assertAlive(); this.rendering = false; this.connector?.setRendering(false); }\n clear(): void { this.mutateLive(() => this.core.clear()); }\n resetToNeutral(): void { this.clear(); }\n dispose(): void {\n if (this.disposed) return;\n this.connector?.dispose();\n this.applier.clearMeshHighlights();\n this.core.free();\n this.playbacks.clear();\n this.current.clear();\n this.sources.clear();\n this.vrmAnimations.clear();\n this.hairObjects.clear();\n this.hairHeadObservation = undefined;\n this.meshes.length = 0;\n this.meshByName.clear();\n this.bones = {};\n this.liveTargets.clear();\n this.connector = undefined;\n this.inspection = undefined;\n this.boundModel = undefined;\n this.disposed = true;\n }\n}\n\nexport function createRustEmbodyHostUnbound(config: RustEmbodyHostConfig = {}): Embody { return new Embody(config); }\nexport async function createRustEmbodyHost(model: Object3D, config: RustEmbodyHostConfig = {}): Promise<Embody> {\n const character = await Embody.create(config);\n try { character.onReady({ model, meshes: config.meshes, referencePose: config.referencePose }); return character; }\n catch (error) { character.dispose(); throw error; }\n}\n","// CSS gradients need no extra renderer resources or animation loop.\nexport const SCENE_INK_BASE_COLOR = '#29333b';\nexport const SCENE_INK_BASE_GRADIENT =\n 'radial-gradient(ellipse at 50% 42%, #46535c 0%, #35414a 42%, #29333b 76%, #252e35 100%)';\n\nexport type SceneInkCssPalette = readonly [string, string, string];\n\nconst DEFAULT_PALETTE: SceneInkCssPalette = ['#7cb8b2', '#627888', '#8b989f'];\n\nexport function createSceneInkBackgroundCss(palette: SceneInkCssPalette = DEFAULT_PALETTE): string {\n const [a, b, c] = palette;\n // Overlapping soft ellipses give the ink irregular edges without a noise\n // shader, blur filter, canvas, pointer listener or frame-by-frame repaint.\n return [\n `radial-gradient(ellipse 46% 62% at calc(20% + var(--scene-ink-shift-x, 0%)) 30%, color-mix(in srgb, ${a} 24%, transparent), transparent 78%)`,\n `radial-gradient(ellipse 32% 44% at 34% calc(52% + var(--scene-ink-shift-y, 0%)), color-mix(in srgb, ${a} 12%, transparent), transparent 82%)`,\n `radial-gradient(ellipse 48% 60% at calc(82% - var(--scene-ink-shift-x, 0%)) 62%, color-mix(in srgb, ${b} 22%, transparent), transparent 80%)`,\n `radial-gradient(ellipse 28% 38% at 68% calc(26% - var(--scene-ink-shift-y, 0%)), color-mix(in srgb, ${b} 10%, transparent), transparent 82%)`,\n `radial-gradient(ellipse 50% 38% at 38% calc(78% + var(--scene-ink-shift-y, 0%)), color-mix(in srgb, ${c} 18%, transparent), transparent 82%)`,\n SCENE_INK_BASE_GRADIENT,\n ].join(', ');\n}\n\nexport const DEFAULT_SCENE_INK_BACKGROUND = createSceneInkBackgroundCss();\n","import * as THREE from 'three';\nimport { createSceneInkBackgroundCss, type SceneInkCssPalette } from './sceneInkBackgroundStyle';\n\nexport type SceneInkBackgroundPalette = readonly [\n THREE.ColorRepresentation,\n THREE.ColorRepresentation,\n THREE.ColorRepresentation,\n];\n\nexport type SceneInkBackground = {\n setPalette: (palette?: SceneInkBackgroundPalette | null) => void;\n dispose: () => void;\n};\n\nconst toCssColor = (tone: THREE.ColorRepresentation) => `#${new THREE.Color(tone).getHexString()}`;\n\nexport function createSceneInkBackground(\n onBackgroundChange?: (background: string) => void,\n): SceneInkBackground {\n let currentBackground = '';\n let disposed = false;\n\n const applyBackground = (palette?: SceneInkBackgroundPalette | null) => {\n if (disposed) return;\n const colors: SceneInkCssPalette | undefined = palette\n ? [toCssColor(palette[0]), toCssColor(palette[1]), toCssColor(palette[2])]\n : undefined;\n const background = createSceneInkBackgroundCss(colors);\n if (background === currentBackground) return;\n currentBackground = background;\n onBackgroundChange?.(background);\n };\n\n applyBackground();\n\n return {\n setPalette: applyBackground,\n dispose: () => {\n if (disposed) return;\n disposed = true;\n },\n };\n}\n","import * as THREE from 'three';\nimport type { SceneInkBackgroundPalette } from './sceneInkBackground';\n\ntype PaletteMaterial = THREE.Material & {\n color?: THREE.Color;\n emissive?: THREE.Color;\n map?: THREE.Texture | null;\n emissiveMap?: THREE.Texture | null;\n};\n\ntype WeightedColor = {\n color: THREE.Color;\n score: number;\n};\n\ntype CachedPalette = {\n materialPalette?: SceneInkBackgroundPalette | null;\n texturePalette?: SceneInkBackgroundPalette | null;\n texturePalettePromise?: Promise<SceneInkBackgroundPalette | null>;\n};\n\nconst paletteCache = new Map<string, CachedPalette>();\nconst MAX_TEXTURE_SAMPLE_SIZE = 10;\nconst MIN_SAMPLE_SATURATION = 0.04;\nconst MIN_CANDIDATE_DISTANCE = 0.12;\n\n/** Reuse the finished palette on character switches without resampling textures. */\nexport function readCachedCharacterPalette(cacheKey: string): SceneInkBackgroundPalette | null {\n const cached = paletteCache.get(cacheKey);\n return cached?.texturePalette ?? cached?.materialPalette ?? null;\n}\n\nexport function resolveCharacterMaterialPalette(\n model: THREE.Object3D,\n cacheKey: string,\n): SceneInkBackgroundPalette | null {\n const cached = getCachedPalette(cacheKey);\n if (cached.materialPalette !== undefined) {\n return cached.materialPalette;\n }\n\n const samples = collectPaletteSamples(model, false);\n const palette = buildPalette(samples);\n cached.materialPalette = palette;\n return palette;\n}\n\nexport function resolveCharacterTexturePalette(\n model: THREE.Object3D,\n cacheKey: string,\n): Promise<SceneInkBackgroundPalette | null> {\n const cached = getCachedPalette(cacheKey);\n if (cached.texturePalette !== undefined) {\n return Promise.resolve(cached.texturePalette);\n }\n if (cached.texturePalettePromise) {\n return cached.texturePalettePromise;\n }\n\n cached.texturePalettePromise = schedulePaletteExtraction(() => {\n const samples = collectPaletteSamples(model, true);\n const palette = buildPalette(samples);\n cached.texturePalette = palette;\n return palette;\n });\n\n return cached.texturePalettePromise;\n}\n\nfunction getCachedPalette(cacheKey: string): CachedPalette {\n const cached = paletteCache.get(cacheKey) ?? {};\n paletteCache.set(cacheKey, cached);\n return cached;\n}\n\nfunction schedulePaletteExtraction(\n extractPalette: () => SceneInkBackgroundPalette | null,\n): Promise<SceneInkBackgroundPalette | null> {\n return new Promise((resolve) => {\n const run = () => resolve(extractPalette());\n\n if (typeof window !== 'undefined' && 'requestIdleCallback' in window) {\n window.requestIdleCallback(run, { timeout: 700 });\n return;\n }\n\n globalThis.setTimeout(run, 0);\n });\n}\n\nfunction collectPaletteSamples(model: THREE.Object3D, includeTextures: boolean): WeightedColor[] {\n const samples: WeightedColor[] = [];\n const seenMaterials = new Set<string>();\n const seenTextures = new Set<string>();\n\n model.traverse((object) => {\n const mesh = object as THREE.Mesh;\n if (!mesh.isMesh || !mesh.material) {\n return;\n }\n\n const materials = Array.isArray(mesh.material) ? mesh.material : [mesh.material];\n for (const material of materials) {\n if (!material || seenMaterials.has(material.uuid)) {\n continue;\n }\n seenMaterials.add(material.uuid);\n collectMaterialSamples(material as PaletteMaterial, samples, seenTextures, includeTextures);\n }\n });\n\n return samples;\n}\n\nfunction collectMaterialSamples(\n material: PaletteMaterial,\n samples: WeightedColor[],\n seenTextures: Set<string>,\n includeTextures: boolean,\n): void {\n pushColorSample(samples, material.color, 1.25);\n pushColorSample(samples, material.emissive, 0.8);\n\n if (!includeTextures) {\n return;\n }\n\n if (material.map && !seenTextures.has(material.map.uuid)) {\n seenTextures.add(material.map.uuid);\n samples.push(...sampleTexture(material.map));\n }\n\n if (material.emissiveMap && !seenTextures.has(material.emissiveMap.uuid)) {\n seenTextures.add(material.emissiveMap.uuid);\n samples.push(...sampleTexture(material.emissiveMap).map(({ color, score }) => ({\n color,\n score: score * 0.65,\n })));\n }\n}\n\nfunction pushColorSample(samples: WeightedColor[], color: THREE.Color | undefined, score: number): void {\n if (!color || !isUsableColor(color)) {\n return;\n }\n\n samples.push({\n color: color.clone(),\n score,\n });\n}\n\nfunction sampleTexture(texture: THREE.Texture): WeightedColor[] {\n if (typeof document === 'undefined') {\n return [];\n }\n\n const image = texture.image as CanvasImageSource | undefined;\n const imageSize = getImageSize(image);\n if (!image || !imageSize) {\n return [];\n }\n\n const canvas = document.createElement('canvas');\n const width = Math.min(MAX_TEXTURE_SAMPLE_SIZE, imageSize.width);\n const height = Math.min(MAX_TEXTURE_SAMPLE_SIZE, imageSize.height);\n canvas.width = width;\n canvas.height = height;\n\n const context = canvas.getContext('2d', { willReadFrequently: true });\n if (!context) {\n return [];\n }\n\n try {\n context.drawImage(image, 0, 0, width, height);\n const data = context.getImageData(0, 0, width, height).data;\n const samples: WeightedColor[] = [];\n\n for (let index = 0; index < data.length; index += 4) {\n const alpha = data[index + 3] / 255;\n if (alpha < 0.18) {\n continue;\n }\n\n const color = new THREE.Color(\n data[index] / 255,\n data[index + 1] / 255,\n data[index + 2] / 255,\n );\n if (!isUsableColor(color)) {\n continue;\n }\n\n const hsl = { h: 0, s: 0, l: 0 };\n color.getHSL(hsl);\n samples.push({\n color,\n score: alpha * (0.4 + hsl.s * 1.3),\n });\n }\n\n return samples;\n } catch {\n return [];\n }\n}\n\nfunction getImageSize(image: CanvasImageSource | undefined): { width: number; height: number } | null {\n if (!image || !('width' in image) || !('height' in image)) {\n return null;\n }\n\n const width = Number(image.width);\n const height = Number(image.height);\n if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) {\n return null;\n }\n\n return { width, height };\n}\n\nfunction isUsableColor(color: THREE.Color): boolean {\n const hsl = { h: 0, s: 0, l: 0 };\n color.getHSL(hsl);\n return hsl.l > 0.05 && hsl.l < 0.94 && hsl.s >= MIN_SAMPLE_SATURATION;\n}\n\nfunction buildPalette(samples: WeightedColor[]): SceneInkBackgroundPalette | null {\n if (samples.length === 0) {\n return null;\n }\n\n const buckets = new Map<number, { color: THREE.Color; score: number }>();\n for (const sample of samples) {\n const hsl = { h: 0, s: 0, l: 0 };\n sample.color.getHSL(hsl);\n const bucketId = Math.floor(hsl.h * 18);\n const bucket = buckets.get(bucketId) ?? { color: new THREE.Color(0, 0, 0), score: 0 };\n bucket.color.r += sample.color.r * sample.score;\n bucket.color.g += sample.color.g * sample.score;\n bucket.color.b += sample.color.b * sample.score;\n bucket.score += sample.score;\n buckets.set(bucketId, bucket);\n }\n\n const candidates = Array.from(buckets.values())\n .filter((bucket) => bucket.score > 0)\n .map((bucket) => ({\n color: massageBackgroundTone(bucket.color.multiplyScalar(1 / bucket.score)),\n score: bucket.score,\n }))\n .sort((a, b) => b.score - a.score);\n\n const selected: THREE.Color[] = [];\n for (const candidate of candidates) {\n const distinctEnough = selected.every((color) => colorDistance(color, candidate.color) >= MIN_CANDIDATE_DISTANCE);\n if (!distinctEnough) {\n continue;\n }\n\n selected.push(candidate.color);\n if (selected.length === 3) {\n break;\n }\n }\n\n if (selected.length === 0) {\n return null;\n }\n\n while (selected.length < 3) {\n selected.push(createCompanionTone(selected[0], selected.length));\n }\n\n return [selected[0], selected[1], selected[2]];\n}\n\nfunction massageBackgroundTone(color: THREE.Color): THREE.Color {\n const hsl = { h: 0, s: 0, l: 0 };\n color.getHSL(hsl);\n const saturation = THREE.MathUtils.clamp(Math.max(hsl.s * 1.35, 0.46), 0.46, 0.82);\n const lightness = THREE.MathUtils.clamp(hsl.l + 0.08, 0.42, 0.66);\n return new THREE.Color().setHSL(hsl.h, saturation, lightness);\n}\n\nfunction createCompanionTone(source: THREE.Color, index: number): THREE.Color {\n const hsl = { h: 0, s: 0, l: 0 };\n source.getHSL(hsl);\n const hueOffset = index === 1 ? 0.075 : -0.065;\n return new THREE.Color().setHSL(\n THREE.MathUtils.euclideanModulo(hsl.h + hueOffset, 1),\n THREE.MathUtils.clamp(hsl.s * (index === 1 ? 0.92 : 0.82), 0.38, 0.76),\n THREE.MathUtils.clamp(hsl.l + (index === 1 ? 0.04 : -0.03), 0.38, 0.68),\n );\n}\n\nfunction colorDistance(a: THREE.Color, b: THREE.Color): number {\n const dr = a.r - b.r;\n const dg = a.g - b.g;\n const db = a.b - b.b;\n return Math.sqrt(dr * dr + dg * dg + db * db);\n}\n","import { Box3 } from 'three';\nimport type { AnimationClip, Mesh, Object3D, Scene } from 'three';\nimport { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';\nimport { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\nimport type { GLTF } from 'three/examples/jsm/loaders/GLTFLoader.js';\n\nexport type CharacterModelLoadResult = { model: Object3D; meshes: Mesh[]; animations: AnimationClip[]; gltf: GLTF | null };\nexport type CharacterModelFormat = 'gltf' | 'fbx';\nexport type CharacterModelLoadOptions = { format?: CharacterModelFormat; onProgress?: (progress: number) => void; castShadows?: boolean; dracoDecoderPath?: string };\nexport type CharacterModelTransform = { modelOffset?: { x?: number; y?: number; z?: number }; modelRotation?: { x?: number; y?: number; z?: number }; modelScale?: number; modelGroundClearance?: number };\n\nlet draco: DRACOLoader | null = null;\nlet dracoPath = '';\nlet gltfLoader: GLTFLoader | null = null;\nlet gltfLoaderUsesDraco = false;\nlet fbxLoader: FBXLoader | null = null;\n\nconst getGltfLoader = (dracoDecoderPath?: string) => {\n const wantsDraco = typeof dracoDecoderPath === 'string' && dracoDecoderPath.length > 0;\n const normalizedPath = wantsDraco\n ? (dracoDecoderPath!.endsWith('/') ? dracoDecoderPath! : `${dracoDecoderPath!}/`)\n : '';\n\n // Rebuild only when Draco enablement/path changes. Non-Draco assets must not\n // pay for constructing/attaching DRACOLoader at all.\n if (!gltfLoader || gltfLoaderUsesDraco !== wantsDraco || (wantsDraco && normalizedPath !== dracoPath)) {\n draco?.dispose();\n draco = null;\n dracoPath = normalizedPath;\n gltfLoaderUsesDraco = wantsDraco;\n gltfLoader = new GLTFLoader();\n if (wantsDraco) {\n draco = new DRACOLoader().setDecoderPath(normalizedPath).setDecoderConfig({ type: 'wasm' });\n gltfLoader.setDRACOLoader(draco);\n }\n }\n return gltfLoader;\n};\n\nconst prepare = (model: Object3D, castShadows = true) => {\n const meshes: Mesh[] = [];\n model.traverse((object: any) => {\n if (!object.isMesh) return;\n if (castShadows) object.castShadow = true;\n if (object.morphTargetInfluences?.length) meshes.push(object);\n });\n return meshes;\n};\n\nconst prepareCharacterModelResult = (model: Object3D, animations: AnimationClip[], gltf: GLTF | null, options: CharacterModelLoadOptions): CharacterModelLoadResult =>\n ({ model, meshes: prepare(model, options.castShadows), animations, gltf });\n\nconst bufferFormat = (data: ArrayBuffer): CharacterModelFormat => {\n // Inspect only the header; keep glTF's existing errors for unrecognized data.\n // Explicit format selection also supports ASCII FBX with unusually long comments.\n const header = new TextDecoder().decode(new Uint8Array(data, 0, Math.min(data.byteLength, 4096)));\n return header.startsWith('Kaydara FBX Binary \\0') || /^\\s*FBXHeaderExtension\\s*:/m.test(header) ? 'fbx' : 'gltf';\n};\n\nconst progress = (listener?: (progress: number) => void) => {\n let last = -1;\n return (event: ProgressEvent) => {\n if (!listener || !event.lengthComputable) return;\n const next = Math.min(100, Math.max(0, Math.round(event.loaded / event.total * 100)));\n if (next !== last) { last = next; listener(next); }\n };\n};\n\nexport function applyCharacterModelTransform(model: Object3D, value: CharacterModelTransform = {}) {\n if (value.modelOffset) model.position.set(value.modelOffset.x ?? 0, value.modelOffset.y ?? 0, value.modelOffset.z ?? 0);\n if (value.modelRotation) model.rotation.set(...(['x', 'y', 'z'] as const).map((axis) => (value.modelRotation?.[axis] ?? 0) * Math.PI / 180) as [number, number, number]);\n if (Number.isFinite(value.modelScale) && (value.modelScale ?? 0) > 0) model.scale.setScalar(value.modelScale!);\n if (Number.isFinite(value.modelGroundClearance)) { model.updateMatrixWorld(true); const min = new Box3().setFromObject(model).min.y; if (Number.isFinite(min) && min < value.modelGroundClearance!) model.position.y += value.modelGroundClearance! - min; }\n}\n\nexport function disposeCharacterModel(scene: Scene | null, model: Object3D) {\n scene?.remove(model);\n model.traverse((object: any) => {\n object.geometry?.dispose?.();\n for (const material of object.material ? (Array.isArray(object.material) ? object.material : [object.material]) : []) {\n for (const value of Object.values(material) as any[]) if (value?.isTexture) value.dispose?.();\n material.dispose?.();\n }\n });\n}\n\nexport function loadCharacterModel(url: string, options: CharacterModelLoadOptions = {}): Promise<CharacterModelLoadResult> {\n const done = (model: Object3D, animations: AnimationClip[], gltf: GLTF | null) => prepareCharacterModelResult(model, animations, gltf, options);\n if ((options.format ?? (/\\.fbx(?:[?#]|$)/i.test(url) ? 'fbx' : 'gltf')) === 'fbx') {\n fbxLoader ??= new FBXLoader();\n return new Promise((resolve, reject) => fbxLoader!.load(url, (model) => resolve(done(model, model.animations ?? [], null)), progress(options.onProgress), reject));\n }\n const loader = getGltfLoader(options.dracoDecoderPath);\n return new Promise((resolve, reject) => loader.load(url, (gltf) => resolve(done(gltf.scene, gltf.animations ?? [], gltf)), progress(options.onProgress), reject));\n}\n\nexport function parseCharacterModel(data: ArrayBuffer, resourcePath = '', options: CharacterModelLoadOptions = {}): Promise<CharacterModelLoadResult> {\n if ((options.format ?? bufferFormat(data)) === 'fbx') {\n // Keep parse failures asynchronous, like GLTFLoader.parse failures.\n return Promise.resolve().then(() => {\n fbxLoader ??= new FBXLoader();\n const model = fbxLoader.parse(data, resourcePath);\n return prepareCharacterModelResult(model, model.animations ?? [], null, options);\n });\n }\n const loader = getGltfLoader(options.dracoDecoderPath);\n return new Promise((resolve, reject) => loader.parse(data, resourcePath, (gltf) => resolve(prepareCharacterModelResult(gltf.scene, gltf.animations ?? [], gltf, options)), reject));\n}\n","import * as THREE from 'three';\n\nconst THREE_RENDERED_MORPH_SEMANTICS = ['position', 'normal', 'color'] as const;\ntype ThreeRenderedMorphSemantic = typeof THREE_RENDERED_MORPH_SEMANTICS[number];\ntype ThreeMorphAttribute = THREE.BufferAttribute | THREE.InterleavedBufferAttribute;\n\nexport interface CharacterMorphLayoutRepair {\n meshName: string;\n paddedChannels: Partial<Record<ThreeRenderedMorphSemantic, number>>;\n removedEmptyChannels: ThreeRenderedMorphSemantic[];\n paddedInfluences: number;\n}\n\nfunction resolveMorphTargetCount(mesh: THREE.Mesh): number {\n const morphAttributes = mesh.geometry.morphAttributes;\n const attributeCount = THREE_RENDERED_MORPH_SEMANTICS.reduce(\n (count, semantic) => Math.max(count, morphAttributes[semantic]?.length ?? 0),\n 0,\n );\n const influenceCount = mesh.morphTargetInfluences?.length ?? 0;\n const dictionaryCount = Object.values(mesh.morphTargetDictionary ?? {}).reduce((count, index) => {\n if (!Number.isInteger(index) || index < 0) {\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" has an invalid morph target dictionary index: ${index}.`,\n );\n }\n return Math.max(count, index + 1);\n }, 0);\n\n return Math.max(attributeCount, influenceCount, dictionaryCount);\n}\n\nfunction createNeutralMorphAttribute(\n mesh: THREE.Mesh,\n semantic: ThreeRenderedMorphSemantic,\n existingAttributes: ThreeMorphAttribute[],\n targetIndex: number,\n): THREE.BufferAttribute {\n const geometry = mesh.geometry;\n const baseAttribute = geometry.getAttribute(semantic);\n const template = baseAttribute ?? existingAttributes.find(Boolean);\n if (!template) {\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" cannot repair morph ${semantic}[${targetIndex}] `\n + 'because it has no base or existing attribute to copy.',\n );\n }\n\n const neutral = template.clone();\n if (geometry.morphTargetsRelative || !baseAttribute) {\n for (let vertexIndex = 0; vertexIndex < neutral.count; vertexIndex += 1) {\n for (let component = 0; component < neutral.itemSize; component += 1) {\n neutral.setComponent(vertexIndex, component, 0);\n }\n }\n }\n\n const targetName = Object.entries(mesh.morphTargetDictionary ?? {})\n .find(([, index]) => index === targetIndex)?.[0];\n neutral.name = targetName ?? '';\n return neutral;\n}\n\n/** Repair recoverable channel holes before Three.js builds its morph texture. */\nexport function normalizeRenderableCharacterMorphAttributes(\n model: THREE.Object3D,\n): CharacterMorphLayoutRepair[] {\n const repairs: CharacterMorphLayoutRepair[] = [];\n\n model.traverse((object) => {\n const mesh = object as THREE.Mesh;\n if (!mesh.isMesh || !mesh.geometry) return;\n\n const morphAttributes = mesh.geometry.morphAttributes;\n const removedEmptyChannels: ThreeRenderedMorphSemantic[] = [];\n for (const semantic of THREE_RENDERED_MORPH_SEMANTICS) {\n if (semantic !== 'position' && morphAttributes[semantic]?.length === 0) {\n delete morphAttributes[semantic];\n removedEmptyChannels.push(semantic);\n }\n }\n\n const targetCount = resolveMorphTargetCount(mesh);\n if (targetCount === 0) {\n if (morphAttributes.position?.length === 0) {\n delete morphAttributes.position;\n removedEmptyChannels.push('position');\n }\n if (removedEmptyChannels.length > 0) {\n repairs.push({\n meshName: mesh.name || mesh.uuid,\n paddedChannels: {},\n removedEmptyChannels,\n paddedInfluences: 0,\n });\n }\n return;\n }\n\n const positionCount = mesh.geometry.getAttribute('position')?.count;\n if (!positionCount) {\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" has morph targets but no base position attribute.`,\n );\n }\n\n const paddedChannels: Partial<Record<ThreeRenderedMorphSemantic, number>> = {};\n for (const semantic of THREE_RENDERED_MORPH_SEMANTICS) {\n let attributes = morphAttributes[semantic];\n if (!attributes) {\n if (semantic !== 'position') continue;\n attributes = [];\n morphAttributes.position = attributes;\n }\n\n const baseAttribute = mesh.geometry.getAttribute(semantic);\n const referenceAttribute = baseAttribute ?? attributes.find(Boolean);\n const expectedItemSize = referenceAttribute?.itemSize;\n for (let targetIndex = 0; targetIndex < targetCount; targetIndex += 1) {\n const attribute = attributes[targetIndex];\n if (!attribute) {\n attributes[targetIndex] = createNeutralMorphAttribute(\n mesh,\n semantic,\n attributes,\n targetIndex,\n );\n paddedChannels[semantic] = (paddedChannels[semantic] ?? 0) + 1;\n continue;\n }\n\n if (attribute.count !== positionCount || attribute.itemSize !== expectedItemSize) {\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" has an invalid morph ${semantic}[${targetIndex}] `\n + `(count=${attribute.count}, itemSize=${attribute.itemSize}; `\n + `expected count=${positionCount}, itemSize=${expectedItemSize}).`,\n );\n }\n }\n }\n\n const influences = mesh.morphTargetInfluences ?? [];\n const paddedInfluences = targetCount - influences.length;\n while (influences.length < targetCount) {\n influences.push(0);\n }\n mesh.morphTargetInfluences = influences;\n\n if (\n removedEmptyChannels.length > 0\n || Object.keys(paddedChannels).length > 0\n || paddedInfluences > 0\n ) {\n repairs.push({\n meshName: mesh.name || mesh.uuid,\n paddedChannels,\n removedEmptyChannels,\n paddedInfluences,\n });\n }\n });\n\n return repairs;\n}\n\nexport function assertRenderableCharacterMorphAttributes(model: THREE.Object3D): void {\n model.traverse((object) => {\n const mesh = object as THREE.Mesh;\n if (!mesh.isMesh) return;\n\n const morphAttributes = mesh.geometry?.morphAttributes;\n const primary = morphAttributes?.position\n ?? morphAttributes?.normal\n ?? morphAttributes?.color;\n const targetCount = primary?.length ?? 0;\n if (targetCount === 0) return;\n\n const positionCount = mesh.geometry.getAttribute('position')?.count;\n const invalidSemantics = THREE_RENDERED_MORPH_SEMANTICS.filter((semantic) => {\n const attributes = morphAttributes[semantic];\n if (semantic === 'position' && !attributes) return true;\n if (!attributes) return false;\n const expectedItemSize = mesh.geometry.getAttribute(semantic)?.itemSize\n ?? attributes.find(Boolean)?.itemSize;\n return attributes.length !== targetCount\n || Array.from({ length: targetCount }, (_, index) => attributes[index])\n .some((attribute) => (\n !attribute\n || attribute.count !== positionCount\n || attribute.itemSize !== expectedItemSize\n ));\n });\n const influenceCount = mesh.morphTargetInfluences?.length ?? 0;\n\n if (invalidSemantics.length > 0 || influenceCount !== targetCount) {\n const channelCounts = THREE_RENDERED_MORPH_SEMANTICS\n .map((semantic) => `${semantic}=${morphAttributes[semantic]?.length ?? 0}`)\n .join(', ');\n throw new Error(\n `Mesh \"${mesh.name || mesh.uuid}\" has an invalid Three.js morph layout `\n + `(${channelCounts}, influences=${influenceCount}, expected=${targetCount}).`,\n );\n }\n });\n}\n\n","import { Euler, type Scene } from 'three';\n\ntype Background = { value: Scene['background']; intensity: number; rotation: Euler };\ntype Override = { value: Background | null; onSceneDispose: () => void };\ntype Owner = { base: Background; override: Override | null; disposed: boolean };\nconst owners = new WeakMap<Scene, Owner>();\nconst snapshot = (scene: Scene): Background => ({ value: scene.background, intensity: scene.backgroundIntensity, rotation: scene.backgroundRotation.clone() });\nconst apply = (scene: Scene, value: Background) => {\n scene.background = value.value;\n scene.backgroundIntensity = value.intensity;\n scene.backgroundRotation.copy(value.rotation);\n};\nconst ownerFor = (scene: Scene): Owner => {\n let owner = owners.get(scene);\n if (!owner) { owner = { base: snapshot(scene), override: null, disposed: false }; owners.set(scene, owner); }\n return owner;\n};\n\n/** Character settings update the inherited background even while scenery covers it. */\nexport function setSceneBaseBackground(scene: Scene, value: Scene['background']) {\n const owner = ownerFor(scene);\n owner.base = { value, intensity: 1, rotation: new Euler() };\n if (!owner.override?.value) apply(scene, owner.base);\n}\n\n/** One scenery owner per scene prevents competing capture-and-restore cleanups. */\nexport function acquireSceneBackground(scene: Scene, onSceneDispose: () => void) {\n const owner = ownerFor(scene);\n if (owner.disposed) throw new Error('The scenery scene has been disposed.');\n if (owner.override) throw new Error('The scene already has a scenery renderer.');\n owner.base = snapshot(scene);\n const override: Override = { value: null, onSceneDispose };\n owner.override = override;\n let disposed = false;\n return {\n set(value: Scene['background'], intensity: number, rotationDegrees: number) {\n if (disposed || owner.disposed) throw new Error('The scenery background has been disposed.');\n override.value = { value, intensity, rotation: new Euler(0, rotationDegrees * Math.PI / 180, 0) };\n apply(scene, override.value);\n },\n clear() {\n if (disposed) return;\n override.value = null;\n apply(scene, owner.base);\n },\n dispose() {\n if (disposed) return;\n disposed = true;\n if (owner.override === override) { owner.override = null; apply(scene, owner.base); }\n },\n };\n}\n\n/** Called by the scene's existing lifetime; the renderer owns its async drain. */\nexport function disposeSceneBackground(scene: Scene) {\n const owner = ownerFor(scene);\n if (owner.disposed) return;\n owner.disposed = true;\n owner.override?.onSceneDispose();\n}\n","import type { CharacterSceneRenderingController, CharacterSceneRenderingSnapshot } from './scene';\n\nexport type CharacterSceneVideoCaptureOptions = { fps?: number };\nexport type CharacterSceneVideoCapture = { readonly stream: MediaStream; release(): void };\nconst activeCaptures = new WeakMap<CharacterSceneRenderingController, Set<() => void>>();\n\n/** Internal scene-owner hook: long-lived video must not block model/scenery retirement. */\nexport function endCharacterSceneVideoCaptures(rendering: CharacterSceneRenderingController): void {\n for (const end of [...(activeCaptures.get(rendering) ?? [])]) end();\n}\n\n/** Borrows the managed renderer without drawing, resizing, or replacing its loop. */\nexport function acquireCharacterSceneVideoCapture(\n rendering: CharacterSceneRenderingController,\n options: CharacterSceneVideoCaptureOptions = {},\n): CharacterSceneVideoCapture {\n const fps = options.fps ?? 30;\n if (!Number.isFinite(fps) || fps < 1 || fps > 60) throw new Error('Video capture frame rate must be between 1 and 60 fps.');\n if (typeof MutationObserver === 'undefined') throw new Error('Canvas size observation is unavailable for video capture.');\n const lease = rendering.acquireRenderer();\n const canvas = lease.renderer.domElement;\n let tracks: MediaStreamTrack[] = [];\n let unsubscribe: (() => void) | null = null;\n let observer: MutationObserver | null = null;\n let released = false;\n let leaseReleased = false;\n const trackListeners: Array<() => void> = [];\n const stoppedTracks = new Set<MediaStreamTrack>();\n const captures = activeCaptures.get(rendering) ?? new Set<() => void>();\n activeCaptures.set(rendering, captures);\n const terminate = () => finish(true);\n captures.add(terminate);\n\n function cleanup() {\n captures.delete(terminate);\n if (!captures.size && activeCaptures.get(rendering) === captures) activeCaptures.delete(rendering);\n const observing = observer; observer = null;\n try { observing?.disconnect(); } catch { /* Still release tracks and the renderer. */ }\n const subscribed = unsubscribe; unsubscribe = null;\n try { subscribed?.(); } catch { /* A failed observer cannot retain the renderer. */ }\n for (const remove of trackListeners.splice(0)) {\n try { remove(); } catch { /* Continue cleaning up the other tracks. */ }\n }\n for (const track of tracks) {\n if (stoppedTracks.has(track)) continue;\n stoppedTracks.add(track);\n try { track.stop(); } catch { /* Still release the renderer lease. */ }\n }\n if (!leaseReleased) { leaseReleased = true; lease.release(); }\n }\n\n function finish(notify: boolean) {\n if (released) { cleanup(); return; }\n released = true;\n const ended = notify ? tracks.filter(track => track.readyState !== 'ended') : [];\n // Release synchronously before observers can request a switch/disposal that drains leases.\n cleanup();\n for (const track of ended) {\n try { track.dispatchEvent(new Event('ended')); } catch { /* Other track observers must still be notified. */ }\n }\n }\n\n function check(snapshot: CharacterSceneRenderingSnapshot) {\n if (snapshot.renderer !== lease.renderer || !['ready', 'error'].includes(snapshot.status)) finish(true);\n }\n\n try {\n if (typeof canvas.captureStream !== 'function') throw new Error('This renderer canvas cannot provide a video stream.');\n const stream = canvas.captureStream(fps);\n tracks = stream.getTracks();\n if (released) throw new Error('Video capture ended during canvas acquisition.');\n if (!stream.getVideoTracks().some(track => track.readyState === 'live')) throw new Error('The renderer canvas did not provide a live video track.');\n for (const track of tracks) {\n const ended = () => finish(true);\n trackListeners.push(() => track.removeEventListener('ended', ended));\n track.addEventListener('ended', ended);\n if (released) throw new Error('Video capture ended during acquisition.');\n }\n const width = canvas.width, height = canvas.height;\n // subscribe() may immediately invalidate the capture before returning its disposer.\n unsubscribe = rendering.subscribe(check);\n if (released) throw new Error('The renderer changed during video capture acquisition.');\n check(rendering.getSnapshot());\n if (released) throw new Error('The renderer is unavailable for video capture.');\n observer = new MutationObserver(() => {\n if (canvas.width !== width || canvas.height !== height) finish(true);\n });\n if (released) throw new Error('Video capture ended during size observer creation.');\n observer.observe(canvas, { attributes: true, attributeFilter: ['width', 'height'] });\n if (canvas.width !== width || canvas.height !== height) finish(true);\n if (released) throw new Error('The renderer canvas changed size during video capture acquisition.');\n return { stream, release: () => finish(false) };\n } catch (error) {\n finish(false);\n throw error;\n }\n}\n","import {\n ACESFilmicToneMapping,\n Color,\n DirectionalLight,\n HemisphereLight,\n MathUtils,\n Mesh,\n PCFShadowMap,\n PCFSoftShadowMap,\n PerspectiveCamera,\n PlaneGeometry,\n PMREMGenerator,\n Scene,\n ShadowMaterial,\n SRGBColorSpace,\n WebGLCoordinateSystem,\n WebGLRenderer,\n WebGPUCoordinateSystem,\n} from 'three';\nimport type { ColorRepresentation, CoordinateSystem, Light, LightShadow, OrthographicCamera, RenderTarget, Texture } from 'three';\nimport type { WebGPURenderer } from 'three/webgpu';\nimport { RoomEnvironment } from 'three/examples/jsm/environments/RoomEnvironment.js';\nimport { registerSceneRendering } from './sceneRenderingBinding';\nimport { prepareModelSkinning } from './modelSkinning';\nimport { disposeSceneBackground, setSceneBaseBackground } from './sceneBackground';\nimport { endCharacterSceneVideoCaptures } from './sceneVideoCapture';\n\nexport type DefaultCharacterLightingSettings = {\n envMapEnabled: boolean;\n environmentIntensity: number;\n environmentBlur: number;\n exposure: number;\n ambientIntensity: number;\n keyIntensity: number;\n fillIntensity: number;\n rimIntensity: number;\n shadowOpacity: number;\n};\n\nexport const DEFAULT_CHARACTER_LIGHTING_PRESETS = {\n cleanStudio: { id: 'cleanStudio', label: 'Soft Studio', settings: { envMapEnabled: true, environmentIntensity: .24, environmentBlur: .04, exposure: 1.08, ambientIntensity: .32, keyIntensity: .52, fillIntensity: .18, rimIntensity: .08, shadowOpacity: .22 } },\n softFill: { id: 'softFill', label: 'Soft Fill', settings: { envMapEnabled: true, environmentIntensity: .3, environmentBlur: .04, exposure: 1.1, ambientIntensity: .38, keyIntensity: .44, fillIntensity: .24, rimIntensity: .1, shadowOpacity: .18 } },\n inspection: { id: 'inspection', label: 'Inspection', settings: { envMapEnabled: true, environmentIntensity: .45, environmentBlur: .035, exposure: 1.18, ambientIntensity: .48, keyIntensity: .58, fillIntensity: .32, rimIntensity: .14, shadowOpacity: .12 } },\n contrast: { id: 'contrast', label: 'Contrast', settings: { envMapEnabled: true, environmentIntensity: .2, environmentBlur: .035, exposure: 1.08, ambientIntensity: .25, keyIntensity: .7, fillIntensity: .12, rimIntensity: .22, shadowOpacity: .28 } },\n} as const;\n\nexport type DefaultCharacterLightingPresetId = keyof typeof DEFAULT_CHARACTER_LIGHTING_PRESETS;\nexport const DEFAULT_CHARACTER_LIGHTING_PRESET_ID: DefaultCharacterLightingPresetId = 'cleanStudio';\nexport const DEFAULT_CHARACTER_LIGHTING_PRESET_IDS = Object.keys(DEFAULT_CHARACTER_LIGHTING_PRESETS) as DefaultCharacterLightingPresetId[];\nexport const DEFAULT_CHARACTER_LIGHTING_SETTINGS: DefaultCharacterLightingSettings = { ...DEFAULT_CHARACTER_LIGHTING_PRESETS.cleanStudio.settings };\n\nexport const CHARACTER_SCENE_TYPES = {\n studio: { id: 'studio', label: 'Studio', description: 'Transparent background, soft studio lighting, ground shadow.', background: null, lightingPreset: 'cleanStudio', shadowPlane: true },\n showcase: { id: 'showcase', label: 'Showcase', description: 'Dark backdrop with contrasty key/rim lighting for presentation shots.', background: 0x101216, lightingPreset: 'contrast', shadowPlane: true },\n inspection: { id: 'inspection', label: 'Inspection', description: 'Bright, even lighting on a light backdrop for close-up review.', background: 0xe8eaed, lightingPreset: 'inspection', shadowPlane: true },\n void: { id: 'void', label: 'Void', description: 'Transparent background, soft fill lighting, no ground shadow.', background: null, lightingPreset: 'softFill', shadowPlane: false },\n} as const;\nexport type CharacterSceneTypeId = keyof typeof CHARACTER_SCENE_TYPES;\nexport const CHARACTER_SCENE_TYPE_IDS = Object.keys(CHARACTER_SCENE_TYPES) as CharacterSceneTypeId[];\nexport const DEFAULT_CHARACTER_SCENE_TYPE_ID: CharacterSceneTypeId = 'studio';\n\nexport type DefaultCharacterSceneOptions = {\n type?: CharacterSceneTypeId;\n background?: ColorRepresentation | null;\n cameraFov?: number;\n pixelRatioCap?: number;\n shadows?: boolean;\n lightingPreset?: DefaultCharacterLightingPresetId;\n lighting?: Partial<DefaultCharacterLightingSettings>;\n shadowPlane?: boolean;\n manageResize?: boolean;\n};\n/** Saved per-character appearance; renderer preference and DOM ownership stay separate. */\nexport type CharacterSceneConfiguration = Pick<DefaultCharacterSceneOptions,\n 'type' | 'cameraFov' | 'shadows' | 'lightingPreset' | 'lighting' | 'shadowPlane'> & {\n background?: string | number | null;\n };\n\nexport type DefaultCharacterSceneAsyncOptions = DefaultCharacterSceneOptions & {\n /** Auto (default) tries native WebGPU initialization, then falls back to WebGL. */\n renderer?: CharacterSceneRendererPreference;\n /** Persistent settings take precedence over the legacy renderer option. */\n rendering?: Partial<CharacterSceneRenderingSettings>;\n /** Cancels construction, not ownership of a successfully returned scene. */\n signal?: AbortSignal;\n /** Compatibility notification; rendering snapshots also expose device loss. */\n onDeviceLost?: (error: Error) => void;\n};\n\nexport type CharacterSceneRenderer = WebGLRenderer | WebGPURenderer;\nexport type CharacterSceneBackend = 'webgl' | 'webgpu';\nexport type CharacterSceneRendererPreference = 'auto' | CharacterSceneBackend;\n\ntype CharacterScene<R extends CharacterSceneRenderer> = {\n container: HTMLElement;\n scene: Scene;\n renderer: R;\n camera: PerspectiveCamera;\n lighting: ReturnType<typeof createDefaultCharacterLighting>;\n shadowPlane: ReturnType<typeof createShadowPlane> | null;\n sceneType: CharacterSceneTypeId;\n ownsScene: true;\n resize: () => void;\n setSceneSettings: (settings: CharacterSceneConfiguration) => void;\n dispose: () => void;\n};\n\nexport type DefaultCharacterScene = CharacterScene<WebGLRenderer>;\nexport type CharacterSceneRenderingSettings = { preference: CharacterSceneRendererPreference };\nexport type CharacterSceneRenderingStatus = 'initializing' | 'switching' | 'ready' | 'error' | 'lost' | 'disposed';\nexport type CharacterSceneRenderingSnapshot = {\n readonly settings: CharacterSceneRenderingSettings;\n readonly status: CharacterSceneRenderingStatus;\n readonly error: Error | null;\n} & (\n | { readonly backend: 'webgl'; readonly renderer: WebGLRenderer }\n | { readonly backend: 'webgpu'; readonly renderer: WebGPURenderer }\n | { readonly backend: null; readonly renderer: null }\n);\nexport type CharacterSceneRendererLease = { readonly renderer: CharacterSceneRenderer; release(): void };\nexport interface CharacterSceneRenderingController {\n getSettings(): CharacterSceneRenderingSettings;\n getSnapshot(): CharacterSceneRenderingSnapshot;\n setSettings(patch: Partial<CharacterSceneRenderingSettings>): Promise<CharacterSceneRenderingSnapshot>;\n subscribe(listener: (snapshot: CharacterSceneRenderingSnapshot) => void): () => void;\n /** Borrow for capture/readback; release in finally. Unavailable during switching/loss. */\n acquireRenderer(): CharacterSceneRendererLease;\n /** Wait for queued scene work, then atomically borrow the active renderer. Release in finally. */\n acquireRendererAsync(): Promise<CharacterSceneRendererLease>;\n /** Drain borrowed work, then synchronously detach/free caller-owned resources, even after loss/disposal. */\n releaseSceneResources(release: () => void): Promise<void>;\n}\nexport type DefaultCharacterSceneRuntimeOptions = DefaultCharacterSceneAsyncOptions;\nexport type DefaultCharacterSceneRuntime = Omit<CharacterScene<CharacterSceneRenderer>, 'renderer' | 'dispose'> & {\n readonly renderer: CharacterSceneRenderer | null;\n readonly backend: CharacterSceneBackend | null;\n dispose(): Promise<void>;\n readonly rendering: CharacterSceneRenderingController;\n readonly ready: Promise<CharacterSceneRenderingSnapshot>;\n};\nexport type ReadyDefaultCharacterScene = (\n | (Omit<DefaultCharacterScene, 'dispose'> & { readonly backend: 'webgl' })\n | (Omit<CharacterScene<WebGPURenderer>, 'dispose'> & { readonly backend: 'webgpu' })\n) & { readonly rendering: CharacterSceneRenderingController; dispose(): Promise<void> };\n\n// Register each resource as it is acquired. A failing disposer must not prevent\n// later resources from being released, and repeated disposal is harmless.\nfunction createDisposer() {\n const callbacks: Array<() => void> = [];\n let disposed = false;\n return {\n add: (callback: () => void) => { callbacks.push(callback); },\n isDisposed: () => disposed,\n dispose: () => {\n if (disposed) return;\n disposed = true;\n let failed = false;\n let firstError: unknown;\n for (const callback of callbacks.reverse()) {\n try { callback(); } catch (error) {\n if (!failed) firstError = error;\n failed = true;\n }\n }\n callbacks.length = 0;\n if (failed) throw firstError;\n },\n };\n}\n\nfunction rollback(dispose: () => void) {\n // Preserve the construction/preparation error after attempting all cleanup.\n try { dispose(); } catch { /* The original failure is more useful to callers. */ }\n}\n\nconst finite = (value: unknown, min: number, max: number, fallback: number) => {\n const number = typeof value === 'number' ? value : Number(value);\n return Number.isFinite(number) ? MathUtils.clamp(number, min, max) : fallback;\n};\n\nconst normalize = (value: Partial<Record<keyof DefaultCharacterLightingSettings, unknown>>): DefaultCharacterLightingSettings => ({\n envMapEnabled: typeof value.envMapEnabled === 'boolean' ? value.envMapEnabled : DEFAULT_CHARACTER_LIGHTING_SETTINGS.envMapEnabled,\n environmentIntensity: finite(value.environmentIntensity, 0, 1.5, DEFAULT_CHARACTER_LIGHTING_SETTINGS.environmentIntensity),\n environmentBlur: finite(value.environmentBlur, 0, .04, DEFAULT_CHARACTER_LIGHTING_SETTINGS.environmentBlur),\n exposure: finite(value.exposure, .6, 2.2, DEFAULT_CHARACTER_LIGHTING_SETTINGS.exposure),\n ambientIntensity: finite(value.ambientIntensity, 0, 1.4, DEFAULT_CHARACTER_LIGHTING_SETTINGS.ambientIntensity),\n keyIntensity: finite(value.keyIntensity, 0, 2.2, DEFAULT_CHARACTER_LIGHTING_SETTINGS.keyIntensity),\n fillIntensity: finite(value.fillIntensity, 0, 1.6, DEFAULT_CHARACTER_LIGHTING_SETTINGS.fillIntensity),\n rimIntensity: finite(value.rimIntensity, 0, 1.6, DEFAULT_CHARACTER_LIGHTING_SETTINGS.rimIntensity),\n shadowOpacity: finite(value.shadowOpacity, 0, .5, DEFAULT_CHARACTER_LIGHTING_SETTINGS.shadowOpacity),\n});\n\nexport const normalizeDefaultCharacterLightingSettings = (value: unknown) =>\n value && typeof value === 'object' && !Array.isArray(value)\n ? normalize(value as Partial<Record<keyof DefaultCharacterLightingSettings, unknown>>)\n : null;\n\nexport function createShadowPlane(scene: Scene, options: { size?: number; opacity?: number; yPosition?: number } = {}) {\n const plane = new Mesh(new PlaneGeometry(options.size ?? 20, options.size ?? 20), new ShadowMaterial({ opacity: options.opacity ?? .3 }));\n plane.rotation.x = -Math.PI / 2;\n plane.position.y = options.yPosition ?? -.01;\n plane.receiveShadow = true;\n plane.name = 'shadowPlane';\n scene.add(plane);\n return plane;\n}\n\nexport function createDefaultCharacterLighting(scene: Scene, renderer: WebGLRenderer, initial: Partial<DefaultCharacterLightingSettings> = {}) {\n return createCharacterLighting(scene, renderer, () => new PMREMGenerator(renderer), initial);\n}\n\ntype ScenePMREM = { fromScene(scene: Scene, sigma?: number): RenderTarget; dispose(): void };\n\ntype LightingRenderer = {\n renderer: CharacterSceneRenderer;\n pmrem: ScenePMREM;\n environment: RenderTarget | null;\n revision: number;\n dispose(): void;\n};\n\nfunction createCharacterLighting(scene: Scene, renderer: CharacterSceneRenderer, createPMREM: () => ScenePMREM, initial: Partial<DefaultCharacterLightingSettings>) {\n const lighting = createMutableCharacterLighting(scene, initial);\n try { lighting.commit(lighting.prepare(renderer, createPMREM)); return lighting.controller; }\n catch (error) { rollback(lighting.controller.dispose); throw error; }\n}\n\n/** Lights/settings stay stable; only backend-specific environment resources move. */\nfunction createMutableCharacterLighting(scene: Scene, initial: Partial<DefaultCharacterLightingSettings>) {\n const lifetime = createDisposer();\n try {\n const ambient = new HemisphereLight(0xf7fbff, 0x6b7280, 0);\n const key = new DirectionalLight(0xfffbf4, 0);\n const fill = new DirectionalLight(0xe8f0ff, 0);\n const rim = new DirectionalLight(0xdde8ff, 0);\n ambient.name = 'embodyCharacterAmbientHemisphereLight'; ambient.position.set(0, 8, 0);\n key.name = 'embodyCharacterKeyLight'; key.position.set(4.5, 7.5, 6.2); key.castShadow = true;\n key.shadow.mapSize.set(2048, 2048); Object.assign(key.shadow.camera, { near: .5, far: 50, left: -10, right: 10, top: 10, bottom: -10 }); key.shadow.bias = -.0001; key.shadow.radius = 4;\n fill.name = 'embodyCharacterFillLight'; fill.position.set(-5.5, 4.2, 4.5);\n rim.name = 'embodyCharacterRimLight'; rim.position.set(-3.5, 4.8, -5.4);\n lifetime.add(() => scene.remove(ambient, key, fill, rim));\n for (const light of [key, fill, rim]) lifetime.add(() => light.dispose());\n scene.add(ambient, key, fill, rim);\n const listeners = new Set<(value: DefaultCharacterLightingSettings) => void>();\n lifetime.add(() => listeners.clear());\n let active: LightingRenderer | null = null;\n let held = false;\n let closed = false;\n let revision = 0;\n let settings = normalize({ ...DEFAULT_CHARACTER_LIGHTING_SETTINGS, ...initial });\n lifetime.add(() => { scene.environment = null; active?.dispose(); active = null; });\n const rebuild = (target: LightingRenderer) => {\n let environment: RenderTarget | null = null;\n if (settings.envMapEnabled) {\n const room = new RoomEnvironment();\n try { environment = target.pmrem.fromScene(room, settings.environmentBlur); } finally { room.dispose(); }\n }\n target.environment?.dispose(); target.environment = environment; target.revision = revision;\n };\n const show = (target: LightingRenderer | null) => {\n if (target) {\n target.renderer.outputColorSpace = SRGBColorSpace;\n target.renderer.toneMapping = ACESFilmicToneMapping;\n target.renderer.toneMappingExposure = settings.exposure;\n }\n scene.environment = target?.environment?.texture ?? null;\n scene.environmentIntensity = settings.envMapEnabled ? settings.environmentIntensity : 0;\n ambient.intensity = settings.ambientIntensity; key.intensity = settings.keyIntensity; fill.intensity = settings.fillIntensity; rim.intensity = settings.rimIntensity;\n const plane = scene.getObjectByName('shadowPlane') as Mesh | undefined;\n for (const material of plane ? (Array.isArray(plane.material) ? plane.material : [plane.material]) : []) if (material instanceof ShadowMaterial) material.opacity = settings.shadowOpacity;\n };\n const prepare = (renderer: CharacterSceneRenderer, createPMREM: () => ScenePMREM): LightingRenderer => {\n const resources = createDisposer();\n try {\n const pmrem = createPMREM(); resources.add(() => pmrem.dispose());\n const target: LightingRenderer = { renderer, pmrem, environment: null, revision, dispose: resources.dispose };\n resources.add(() => { target.environment?.dispose(); target.environment = null; });\n rebuild(target); return target;\n } catch (error) { rollback(resources.dispose); throw error; }\n };\n const setSettings = (patch: Partial<DefaultCharacterLightingSettings>) => {\n if (closed || lifetime.isDisposed()) throw new Error('Character lighting has been disposed.');\n const previous = settings; settings = normalize({ ...settings, ...patch }); revision++;\n if (!held) {\n if (active && (previous.envMapEnabled !== settings.envMapEnabled || previous.environmentBlur !== settings.environmentBlur)) rebuild(active);\n show(active);\n }\n listeners.forEach((listener) => listener({ ...settings })); return { ...settings };\n };\n show(null);\n const controller = {\n getSettings: () => ({ ...settings }), getEnvironmentTexture: (): Texture | null => active?.environment?.texture ?? null,\n setSettings, setPreset: (id: DefaultCharacterLightingPresetId) => setSettings(DEFAULT_CHARACTER_LIGHTING_PRESETS[id]?.settings ?? {}),\n subscribe: (listener: (value: DefaultCharacterLightingSettings) => void) => {\n if (closed || lifetime.isDisposed()) throw new Error('Character lighting has been disposed.');\n listeners.add(listener); listener({ ...settings }); return () => { listeners.delete(listener); };\n },\n dispose: lifetime.dispose,\n };\n return {\n controller, prepare, show, close: () => { closed = true; }, revision: () => revision,\n hold: () => { held = true; },\n restore: () => {\n held = false;\n try { if (active && active.revision !== revision) rebuild(active); } finally { show(active); }\n },\n commit: (target: LightingRenderer) => {\n const previous = active; active = target; held = false; show(active);\n return previous;\n },\n };\n } catch (error) { rollback(lifetime.dispose); throw error; }\n}\n\nfunction constructDefaultCharacterScene<R extends CharacterSceneRenderer>(\n container: HTMLElement,\n options: DefaultCharacterSceneOptions,\n renderer: R,\n disposeRenderer: () => void,\n createLighting: (scene: Scene, settings: Partial<DefaultCharacterLightingSettings>) => ReturnType<typeof createDefaultCharacterLighting>,\n) {\n const lifetime = createDisposer();\n lifetime.add(disposeRenderer);\n try {\n const sceneType = CHARACTER_SCENE_TYPES[options.type as CharacterSceneTypeId] ?? CHARACTER_SCENE_TYPES.studio;\n let currentSceneType = sceneType.id;\n const width = Math.max(1, container.clientWidth || globalThis.innerWidth || 1);\n const height = Math.max(1, container.clientHeight || globalThis.innerHeight || 1);\n const ratio = () => Math.min(globalThis.devicePixelRatio || 1, options.pixelRatioCap ?? 1.5);\n renderer.setPixelRatio(ratio()); renderer.setSize(width, height, true); renderer.shadowMap.enabled = options.shadows ?? true; renderer.shadowMap.type = PCFShadowMap;\n Object.assign(renderer.domElement.style, { display: 'block', width: '100%', height: '100%' });\n const scene = new Scene(); const background = options.background === undefined ? sceneType.background : options.background;\n setSceneBaseBackground(scene, background == null ? null : new Color(background));\n lifetime.add(() => disposeSceneBackground(scene));\n const camera = new PerspectiveCamera(options.cameraFov ?? 45, width / height, .1, 1000);\n const preset = DEFAULT_CHARACTER_LIGHTING_PRESETS[(options.lightingPreset ?? sceneType.lightingPreset) as DefaultCharacterLightingPresetId]?.settings ?? DEFAULT_CHARACTER_LIGHTING_SETTINGS;\n const lighting = createLighting(scene, { ...preset, ...options.lighting });\n lifetime.add(() => lighting.dispose());\n let shadowPlane: ReturnType<typeof createShadowPlane> | null = null;\n const ensureShadowPlane = () => {\n if (shadowPlane) return shadowPlane;\n const plane = createShadowPlane(scene, { opacity: lighting.getSettings().shadowOpacity });\n lifetime.add(() => plane.material.dispose()); lifetime.add(() => plane.geometry.dispose()); lifetime.add(() => scene.remove(plane));\n shadowPlane = plane;\n return plane;\n };\n if (options.shadowPlane ?? sceneType.shadowPlane) ensureShadowPlane();\n const setSceneSettings = (value: CharacterSceneConfiguration) => {\n if (lifetime.isDisposed()) return;\n const type = CHARACTER_SCENE_TYPES[value.type ?? DEFAULT_CHARACTER_SCENE_TYPE_ID] ?? CHARACTER_SCENE_TYPES[DEFAULT_CHARACTER_SCENE_TYPE_ID];\n currentSceneType = type.id;\n const background = value.background === undefined ? type.background : value.background;\n setSceneBaseBackground(scene, background == null ? null : new Color(background));\n camera.fov = value.cameraFov ?? 45; camera.updateProjectionMatrix();\n const preset = DEFAULT_CHARACTER_LIGHTING_PRESETS[value.lightingPreset ?? type.lightingPreset] ?? DEFAULT_CHARACTER_LIGHTING_PRESETS[DEFAULT_CHARACTER_LIGHTING_PRESET_ID];\n lighting.setSettings({ ...preset.settings, ...value.lighting });\n renderer.shadowMap.enabled = value.shadows ?? true;\n const showPlane = value.shadowPlane ?? type.shadowPlane;\n if (showPlane) ensureShadowPlane();\n if (shadowPlane) shadowPlane.visible = showPlane;\n };\n const resize = () => {\n if (lifetime.isDisposed()) return;\n const w = Math.max(1, container.clientWidth || globalThis.innerWidth || 1);\n const h = Math.max(1, container.clientHeight || globalThis.innerHeight || 1);\n camera.aspect = w / h; camera.updateProjectionMatrix();\n renderer.setPixelRatio(ratio()); renderer.setSize(w, h, false);\n };\n const handle: CharacterScene<R> = { container, scene, renderer, camera, lighting, get shadowPlane() { return shadowPlane; }, get sceneType() { return currentSceneType; }, ownsScene: true, resize, setSceneSettings, dispose: lifetime.dispose };\n const attach = () => {\n lifetime.add(() => { if (renderer.domElement.parentElement === container) container.removeChild(renderer.domElement); });\n container.appendChild(renderer.domElement);\n if (options.manageResize !== false) {\n lifetime.add(() => globalThis.removeEventListener?.('resize', resize));\n globalThis.addEventListener?.('resize', resize);\n }\n };\n return { handle, attach };\n } catch (error) {\n rollback(lifetime.dispose);\n throw error;\n }\n}\n\n/** The existing synchronous WebGL path; it does not wait for shader compilation. */\nexport function createDefaultCharacterScene(container: HTMLElement, options: DefaultCharacterSceneOptions = {}): DefaultCharacterScene {\n const { handle, attach } = constructWebGLScene(container, options);\n try { attach(); return handle; } catch (error) {\n rollback(handle.dispose);\n throw error;\n }\n}\n\nfunction constructWebGLScene(container: HTMLElement, options: DefaultCharacterSceneOptions) {\n const renderer = new WebGLRenderer({ alpha: true, antialias: true, powerPreference: 'high-performance' });\n return constructDefaultCharacterScene(container, options, renderer, () => renderer.dispose(),\n (scene, settings) => createDefaultCharacterLighting(scene, renderer, settings));\n}\n\nfunction throwIfAborted(signal?: AbortSignal) {\n if (signal?.aborted) throw new DOMException('Character scene creation was aborted.', 'AbortError');\n}\n\ntype RendererCandidate = (\n | { backend: 'webgl'; renderer: WebGLRenderer }\n | { backend: 'webgpu'; renderer: WebGPURenderer }\n) & { createPMREM(): ScenePMREM; dispose(): void; lost: Error | null };\n\nfunction acquireWebGLRenderer(): RendererCandidate {\n const renderer = new WebGLRenderer({ alpha: true, antialias: true, powerPreference: 'high-performance' });\n const lifetime = createDisposer(); lifetime.add(() => renderer.dispose());\n return { backend: 'webgl', renderer, createPMREM: () => new PMREMGenerator(renderer), dispose: lifetime.dispose, lost: null };\n}\n\n// @types/three r184 omits this backend capability, which failed init still owns.\nfunction disposeBackend(backend: object) {\n if ('dispose' in backend && typeof backend.dispose === 'function') backend.dispose();\n}\n\nasync function acquireNativeRenderer(check: () => void, onLoss: (candidate: RendererCandidate) => void): Promise<RendererCandidate> {\n const lifetime = createDisposer();\n try {\n if (typeof navigator === 'undefined' || !('gpu' in navigator) || !navigator.gpu) {\n throw new Error('WebGPU is unavailable. Use WebGL or a browser with WebGPU in a secure context.');\n }\n const { WebGPURenderer, PMREMGenerator: WebGPUPMREMGenerator } = await import('three/webgpu');\n check();\n const renderer = new WebGPURenderer({ alpha: true, antialias: true, powerPreference: 'high-performance' });\n const initialBackend = renderer.backend;\n const candidate: RendererCandidate = {\n backend: 'webgpu', renderer, lost: null,\n createPMREM: () => new WebGPUPMREMGenerator(renderer), dispose: lifetime.dispose,\n };\n const originalDeviceLost = renderer.onDeviceLost.bind(renderer);\n renderer.onDeviceLost = (info) => {\n originalDeviceLost(info);\n if (lifetime.isDisposed() || candidate.lost) return;\n candidate.lost = new Error(`WebGPU device lost: ${info.message || 'Unknown reason'}`);\n onLoss(candidate);\n };\n lifetime.add(() => {\n try {\n if (renderer.hasInitialized()) renderer.dispose();\n else disposeBackend(renderer.backend);\n } finally {\n if (renderer.backend !== initialBackend) disposeBackend(initialBackend);\n }\n });\n await renderer.init(); check();\n if (candidate.lost) throw candidate.lost;\n if (!('isWebGPUBackend' in renderer.backend) || renderer.backend.isWebGPUBackend !== true) {\n throw new Error('Native WebGPU initialization failed; Three selected WebGL2. Select WebGL to retry.');\n }\n return candidate;\n } catch (error) { rollback(lifetime.dispose); check(); throw error; }\n}\n\nfunction renderingAborted() { return new DOMException('Character scene renderer request was cancelled.', 'AbortError'); }\nfunction rendererPreference(value: unknown): CharacterSceneRendererPreference {\n if (value === 'auto' || value === 'webgl' || value === 'webgpu') return value;\n throw new Error(`Unsupported character scene renderer: ${String(value)}`);\n}\n\n/** Three's WebGPU renderer changes these cameras; WebGLRenderer does not undo it. */\nfunction prepareCameraCoordinates(scene: Scene, camera: PerspectiveCamera, backend: CharacterSceneBackend): () => void {\n const cameras = new Set<PerspectiveCamera | OrthographicCamera>([camera]);\n const shadows: LightShadow<PerspectiveCamera | OrthographicCamera>[] = [];\n scene.traverse(object => {\n const light = object as Light & { shadow?: LightShadow<PerspectiveCamera | OrthographicCamera> };\n if (light.isLight && light.shadow) {\n cameras.add(light.shadow.camera);\n shadows.push(light.shadow);\n }\n });\n const previous = Array.from(cameras, current => [current, current.coordinateSystem] as const);\n const apply = (current: PerspectiveCamera | OrthographicCamera, coordinates: CoordinateSystem) => {\n current.coordinateSystem = coordinates;\n current.updateProjectionMatrix();\n };\n const coordinates = backend === 'webgpu' ? WebGPUCoordinateSystem : WebGLCoordinateSystem;\n cameras.forEach(current => apply(current, coordinates));\n shadows.forEach(shadow => { shadow.needsUpdate = true; });\n return () => {\n previous.forEach(([current, original]) => apply(current, original));\n shadows.forEach(shadow => { shadow.needsUpdate = true; });\n };\n}\n\n/** Stable scene ownership, including a recoverable initial renderer failure. */\nexport function createDefaultCharacterSceneRuntime(\n container: HTMLElement,\n options: DefaultCharacterSceneRuntimeOptions = {},\n): DefaultCharacterSceneRuntime {\n throwIfAborted(options.signal);\n const lifetime = createDisposer();\n try {\n const sceneType = CHARACTER_SCENE_TYPES[options.type as CharacterSceneTypeId] ?? CHARACTER_SCENE_TYPES.studio;\n let currentSceneType = sceneType.id;\n const scene = new Scene();\n const background = options.background === undefined ? sceneType.background : options.background;\n setSceneBaseBackground(scene, background == null ? null : new Color(background));\n lifetime.add(() => disposeSceneBackground(scene));\n const camera = new PerspectiveCamera(options.cameraFov ?? 45, 1, .1, 1000);\n const preset = DEFAULT_CHARACTER_LIGHTING_PRESETS[(options.lightingPreset ?? sceneType.lightingPreset) as DefaultCharacterLightingPresetId]?.settings ?? DEFAULT_CHARACTER_LIGHTING_SETTINGS;\n const lighting = createMutableCharacterLighting(scene, { ...preset, ...options.lighting });\n lifetime.add(lighting.controller.dispose);\n let shadowsEnabled = options.shadows ?? true;\n let shadowPlane: ReturnType<typeof createShadowPlane> | null = null;\n const ensureShadowPlane = () => {\n if (shadowPlane) return shadowPlane;\n const plane = createShadowPlane(scene, { opacity: lighting.controller.getSettings().shadowOpacity });\n lifetime.add(() => plane.material.dispose()); lifetime.add(() => plane.geometry.dispose()); lifetime.add(() => scene.remove(plane));\n shadowPlane = plane;\n return plane;\n };\n if (options.shadowPlane ?? sceneType.shadowPlane) ensureShadowPlane();\n let settings: CharacterSceneRenderingSettings = { preference: rendererPreference(options.rendering?.preference ?? options.renderer ?? 'auto') };\n let active: RendererCandidate | null = null;\n let candidateInUse: RendererCandidate | null = null;\n let status: CharacterSceneRenderingStatus = 'initializing';\n let error: Error | null = null;\n let disposed = false;\n let disposal: Promise<void> | null = null;\n let generation = 0;\n let pending: Promise<CharacterSceneRenderingSnapshot> | null = null;\n let pendingRendererChange: Promise<CharacterSceneRenderingSnapshot> | null = null;\n let leaseCount = 0;\n let pendingResourceReleases = 0;\n let leasesReleased: (() => void) | null = null;\n let leaseBarrier: Promise<void> | null = null;\n let resizeAttached = false;\n const listeners = new Set<(snapshot: CharacterSceneRenderingSnapshot) => void>();\n const getSnapshot = (): CharacterSceneRenderingSnapshot => {\n const common = { settings: { ...settings }, status, error };\n if (active?.backend === 'webgl') return { ...common, backend: 'webgl', renderer: active.renderer };\n if (active?.backend === 'webgpu') return { ...common, backend: 'webgpu', renderer: active.renderer };\n return { ...common, backend: null, renderer: null };\n };\n const notify = () => {\n const snapshot = getSnapshot();\n for (const listener of listeners) {\n try { listener(snapshot); } catch (failure) { console.error('Character rendering subscriber failed.', failure); }\n }\n };\n const sizeRenderer = (renderer: CharacterSceneRenderer, style = false) => {\n const w = Math.max(1, container.clientWidth || globalThis.innerWidth || 1);\n const h = Math.max(1, container.clientHeight || globalThis.innerHeight || 1);\n camera.aspect = w / h; camera.updateProjectionMatrix();\n renderer.setPixelRatio(Math.min(globalThis.devicePixelRatio || 1, options.pixelRatioCap ?? 1.5));\n renderer.setSize(w, h, style);\n };\n const resize = () => { if (!disposed && active) sizeRenderer(active.renderer); };\n lifetime.add(() => { if (resizeAttached) globalThis.removeEventListener?.('resize', resize); });\n const onLoss = (candidate: RendererCandidate) => {\n if (disposed || candidate !== active) return;\n status = status === 'switching' ? 'switching' : 'lost'; error = candidate.lost;\n void Promise.resolve().then(() => candidate.renderer.setAnimationLoop(null)).catch(() => undefined);\n void owner.binding?.suspend().catch((failure) => console.error('Character renderer suspension failed.', failure));\n notify();\n try { options.onDeviceLost?.(candidate.lost!); } catch (failure) { console.error('Character scene device-loss callback failed.', failure); }\n };\n const setSettings = (patch: Partial<CharacterSceneRenderingSettings>): Promise<CharacterSceneRenderingSnapshot> => {\n if (disposed) return Promise.reject(renderingAborted());\n let preference: CharacterSceneRendererPreference;\n try { preference = patch.preference === undefined ? settings.preference : rendererPreference(patch.preference); }\n catch (failure) { return Promise.reject(failure); }\n if (pendingRendererChange && preference === settings.preference && (status === 'initializing' || status === 'switching')) return pendingRendererChange;\n if (status === 'ready' && preference === settings.preference) return Promise.resolve(getSnapshot());\n settings = { preference };\n const request = ++generation;\n const previous = pending;\n status = active ? 'switching' : 'initializing'; error = null;\n const execute = async (): Promise<CharacterSceneRenderingSnapshot> => {\n let candidate: RendererCandidate | null = null;\n let environment: LightingRenderer | null = null;\n let suspended = false;\n let attached = false;\n let restoreCameraCoordinates = () => {};\n let restoreModelSkinning = () => {};\n const check = () => {\n if (disposed || generation !== request) throw renderingAborted();\n if (!active) throwIfAborted(options.signal);\n if (candidate?.lost) throw candidate.lost;\n };\n try {\n check();\n if (preference === 'webgl') candidate = acquireWebGLRenderer();\n else {\n try { candidate = await acquireNativeRenderer(check, onLoss); }\n catch (failure) {\n check();\n if (preference !== 'auto' || (failure instanceof Error && failure.name === 'AbortError')) throw failure;\n candidate = acquireWebGLRenderer();\n }\n }\n check();\n candidateInUse = candidate;\n const renderer = candidate.renderer;\n sizeRenderer(renderer, true);\n renderer.shadowMap.enabled = shadowsEnabled;\n // WebGL PCF is already soft in supported Three versions; the old\n // constant warns and is replaced on the first draw. Keep native filtering.\n renderer.shadowMap.type = candidate.backend === 'webgl' ? PCFShadowMap : PCFSoftShadowMap;\n Object.assign(renderer.domElement.style, { display: 'block', width: '100%', height: '100%' });\n if (leaseCount) await leaseBarrier;\n check();\n if (owner.drain) await owner.drain;\n check();\n if (owner.binding) { suspended = true; await owner.binding.suspend(); }\n check();\n restoreCameraCoordinates = prepareCameraCoordinates(scene, camera, candidate.backend);\n restoreModelSkinning = prepareModelSkinning(scene);\n lighting.hold();\n // Environment changes during asynchronous compilation are deferred. If\n // authored settings changed meanwhile, prepare that revision before commit.\n do {\n environment?.dispose(); environment = lighting.prepare(renderer, candidate.createPMREM);\n lighting.show(environment);\n if (typeof renderer.compileAsync !== 'function') throw new Error('Async character scenes require Three.js WebGLRenderer.compileAsync.');\n await renderer.compileAsync(scene, camera); check();\n if (owner.binding) await owner.binding.prepare(renderer);\n else if (active) renderer.render(scene, camera);\n check();\n } while (environment.revision !== lighting.revision());\n sizeRenderer(renderer);\n // Stage the new canvas before removing the old one. A failed attach\n // or library binding leaves the old scene/renderer available.\n attached = true; container.appendChild(renderer.domElement);\n if (!resizeAttached && options.manageResize !== false) {\n resizeAttached = true; globalThis.addEventListener?.('resize', resize);\n }\n check();\n await owner.binding?.commit(renderer);\n check();\n const oldRenderer = active;\n const oldEnvironment = lighting.commit(environment); environment = null;\n active = candidate; candidate = null; attached = false;\n rollback(() => { if (oldRenderer?.renderer.domElement.parentElement === container) container.removeChild(oldRenderer.renderer.domElement); });\n rollback(() => oldEnvironment?.dispose());\n rollback(() => oldRenderer?.dispose());\n status = 'ready'; error = null;\n const snapshot = getSnapshot(); notify(); return snapshot;\n } catch (failure) {\n if (suspended) {\n try { await owner.binding?.suspend(); } catch { /* Preserve the switch failure. */ }\n if (owner.drain) await owner.drain.catch(() => undefined);\n }\n if (attached && candidate?.renderer.domElement.parentElement === container) container.removeChild(candidate.renderer.domElement);\n rollback(() => environment?.dispose());\n rollback(() => candidate?.dispose());\n const canceled = disposed || generation !== request || (!active && options.signal?.aborted);\n if (!disposed) {\n rollback(restoreModelSkinning);\n rollback(restoreCameraCoordinates);\n rollback(lighting.restore);\n if (suspended && active && !active.lost) {\n try { await owner.binding?.commit(active.renderer); } catch (resumeError) { owner.reportFailure(resumeError, active.renderer); }\n }\n if (generation === request) {\n status = active?.lost ? 'lost' : 'error';\n error = failure instanceof Error ? failure : new Error(String(failure)); notify();\n }\n }\n if (canceled) throw renderingAborted();\n throw failure;\n } finally { candidateInUse = null; }\n };\n const operation = previous ? previous.catch(() => undefined).then(execute) : Promise.resolve().then(execute);\n pending = operation;\n pendingRendererChange = operation;\n notify();\n const settled = () => {\n if (pending === operation) pending = null;\n if (pendingRendererChange === operation) pendingRendererChange = null;\n };\n void operation.then(settled, settled);\n return operation;\n };\n const rendering: CharacterSceneRenderingController = {\n getSettings: () => ({ ...settings }), getSnapshot, setSettings,\n subscribe: (listener) => {\n if (disposed) throw new Error('Character scene rendering has been disposed.');\n listeners.add(listener);\n try { listener(getSnapshot()); } catch (failure) { console.error('Character rendering subscriber failed.', failure); }\n return () => { listeners.delete(listener); };\n },\n acquireRenderer: () => {\n if (!active || active.lost || disposed || pendingResourceReleases || (status !== 'ready' && status !== 'error')) throw new Error('Character renderer is not available for capture.');\n if (leaseCount++ === 0) leaseBarrier = new Promise<void>((resolve) => { leasesReleased = resolve; });\n let released = false;\n return { renderer: active.renderer, release: () => {\n if (released) return; released = true;\n if (--leaseCount === 0) { leasesReleased?.(); leasesReleased = null; leaseBarrier = null; }\n } };\n },\n acquireRendererAsync: async () => {\n for (;;) {\n if (disposed) throw renderingAborted();\n const settling = pending;\n if (settling) {\n // A failed replacement can retain a healthy renderer. Recheck the\n // current owner after settlement rather than failing its borrower.\n await settling.catch(() => undefined);\n continue;\n }\n // No await separates this availability check from incrementing the\n // lease count; later scenery work must drain this borrower first.\n return rendering.acquireRenderer();\n }\n },\n releaseSceneResources: (release) => {\n // Disposal already owns the drain. A later caller can free its resources\n // once that completion settles, including when owned cleanup failed.\n if (disposal) return disposal.then(release, release);\n const previous = pending;\n pendingResourceReleases++;\n const operation = Promise.resolve(previous).catch(() => undefined).then(async () => {\n if (leaseCount) await leaseBarrier;\n if (owner.drain) await owner.drain.catch(() => undefined);\n if (owner.binding) {\n await owner.binding.suspend().catch(failure => owner.reportFailure(failure, active?.renderer));\n }\n try {\n release();\n } finally {\n if (!disposed && active && !active.lost) {\n await owner.binding?.commit(active.renderer).catch(failure => owner.reportFailure(failure, active?.renderer));\n }\n }\n return getSnapshot();\n }).finally(() => { pendingResourceReleases--; });\n // Serialize release with replacement so a recovery requested during the\n // drain cannot compile resources that the callback is about to free.\n pending = operation;\n // Admission is closed and retirement is queued before ended listeners can reenter.\n endCharacterSceneVideoCaptures(rendering);\n void operation.then(() => { if (pending === operation) pending = null; }, () => { if (pending === operation) pending = null; });\n return operation.then(() => undefined);\n },\n };\n const owner = registerSceneRendering(rendering, scene, camera, () => pending, (failure, renderer) => {\n if (disposed) return;\n const problem = failure instanceof Error ? failure : new Error(String(failure));\n if (candidateInUse && renderer === candidateInUse.renderer && renderer !== active?.renderer) { candidateInUse.lost = problem; return; }\n if (active) active.lost = problem;\n status = active ? 'lost' : 'error'; error = problem;\n void owner.binding?.suspend().catch(() => undefined);\n notify();\n });\n const dispose = (): Promise<void> => {\n if (disposal) return disposal;\n let resolve!: () => void;\n let reject!: (failure: unknown) => void;\n disposal = new Promise<void>((yes, no) => { resolve = yes; reject = no; });\n void disposal.catch(() => undefined);\n disposed = true; owner.disposed = true; generation++; lighting.close();\n status = 'disposed'; notify(); listeners.clear();\n const drain = owner.binding?.suspend() ?? owner.drain;\n const cleanup = () => {\n try {\n if (active?.renderer.domElement.parentElement === container) container.removeChild(active.renderer.domElement);\n try { lifetime.dispose(); } finally { active?.dispose(); }\n resolve();\n } catch (failure) { reject(failure); }\n };\n // Callers await this before releasing borrowed character resources. The\n // same completion also drains captures and a recently disposed camera.\n if (pending || leaseCount || drain) void Promise.allSettled([pending, drain, leaseBarrier]).then(cleanup);\n else cleanup();\n return disposal;\n };\n const setSceneSettings = (value: CharacterSceneConfiguration) => {\n if (disposed) return;\n shadowsEnabled = value.shadows ?? true;\n const type = CHARACTER_SCENE_TYPES[value.type ?? DEFAULT_CHARACTER_SCENE_TYPE_ID] ?? CHARACTER_SCENE_TYPES[DEFAULT_CHARACTER_SCENE_TYPE_ID];\n currentSceneType = type.id;\n const background = value.background === undefined ? type.background : value.background;\n setSceneBaseBackground(scene, background == null ? null : new Color(background));\n camera.fov = value.cameraFov ?? 45; camera.updateProjectionMatrix();\n const preset = DEFAULT_CHARACTER_LIGHTING_PRESETS[value.lightingPreset ?? type.lightingPreset] ?? DEFAULT_CHARACTER_LIGHTING_PRESETS[DEFAULT_CHARACTER_LIGHTING_PRESET_ID];\n lighting.controller.setSettings({ ...preset.settings, ...value.lighting });\n if (active) active.renderer.shadowMap.enabled = value.shadows ?? true;\n const showPlane = value.shadowPlane ?? type.shadowPlane;\n if (showPlane) ensureShadowPlane();\n if (shadowPlane) shadowPlane.visible = showPlane;\n };\n const ready = setSettings(settings);\n return { container, scene, camera, lighting: lighting.controller, get shadowPlane() { return shadowPlane; }, get sceneType() { return currentSceneType; }, ownsScene: true,\n rendering, ready, get renderer() { return active?.renderer ?? null; }, get backend() { return active?.backend ?? null; }, resize, setSceneSettings, dispose };\n } catch (failure) { rollback(lifetime.dispose); throw failure; }\n}\n\n/** Compatibility factory: failure releases all owned resources. Use the runtime factory for initial retry. */\nexport async function createDefaultCharacterSceneAsync(\n container: HTMLElement,\n options: DefaultCharacterSceneAsyncOptions = {},\n): Promise<ReadyDefaultCharacterScene> {\n const runtime = createDefaultCharacterSceneRuntime(container, options);\n try {\n const snapshot = await runtime.ready;\n if (!snapshot.renderer) throw new Error('Character scene renderer was not initialized.');\n const handle: ReadyDefaultCharacterScene = snapshot.backend === 'webgl'\n ? { ...runtime, renderer: snapshot.renderer, backend: 'webgl' }\n : { ...runtime, renderer: snapshot.renderer, backend: 'webgpu' };\n // Existing callers keep their non-null contract after first success. Read\n // rendering.getSnapshot() when an atomic backend/renderer pair is needed.\n Object.defineProperties(handle, {\n renderer: { get: () => runtime.renderer }, backend: { get: () => runtime.backend },\n shadowPlane: { get: () => runtime.shadowPlane }, sceneType: { get: () => runtime.sceneType },\n });\n return handle;\n } catch (failure) {\n try { await runtime.dispose(); } catch { /* Preserve acquisition failure. */ }\n throw failure;\n }\n}\n","import { PerspectiveCamera } from 'three';\nimport { createSceneInkBackground } from './sceneInkBackground';\nimport { resolveCharacterMaterialPalette, resolveCharacterTexturePalette } from './characterTexturePalette';\nimport type { Camera, Scene } from 'three';\nimport { initEmbodyCore } from '@lovelace_lol/embody/wasm';\nimport { Embody } from './character';\nimport type { RustEmbodyHostConfig } from './character';\nimport { loadCharacterModel, applyCharacterModelTransform, disposeCharacterModel } from './model';\nimport type { CharacterModelLoadOptions, CharacterModelLoadResult, CharacterModelTransform } from './model';\nimport { normalizeRenderableCharacterMorphAttributes, assertRenderableCharacterMorphAttributes } from './modelMorphLayout';\nimport { validateMappings } from './authoring';\nimport { createDefaultCharacterSceneAsync } from './scene';\nimport type { CharacterSceneBackend, CharacterSceneConfiguration, CharacterSceneRenderer, CharacterSceneRenderingController, DefaultCharacterSceneAsyncOptions, ReadyDefaultCharacterScene } from './scene';\nimport { ThreeAnnotationController } from './annotations/ThreeAnnotationController';\nimport type { AnnotationCharacterConfig, ThreeAnnotationControllerConfig } from './annotations/types';\nimport type { Profile } from './authoringTypes';\n\nexport interface CharacterHostCharacterOptions extends CharacterModelTransform {\n modelUrl: string;\n presetType?: string;\n profile?: Partial<Profile>;\n annotationConfig?: AnnotationCharacterConfig;\n scene?: CharacterSceneConfiguration;\n}\nexport interface CharacterHostExternalScene {\n scene: Scene;\n renderer: CharacterSceneRenderer;\n backend?: CharacterSceneBackend;\n rendering?: CharacterSceneRenderingController;\n camera: Camera;\n mountCanvas?: boolean;\n manageResize?: boolean;\n setSceneSettings?: (settings: CharacterSceneConfiguration) => void;\n}\nexport type CharacterHostModelLoader = (modelUrl: string, options: CharacterModelLoadOptions & { signal: AbortSignal }) => Promise<CharacterModelLoadResult>;\nexport type CharacterHostPreparation = CharacterModelLoadResult & {\n engine: Embody;\n character: CharacterHostCharacterOptions;\n signal: AbortSignal;\n};\nexport type CharacterHostReady = CharacterHostPreparation & {\n scene: Scene;\n camera: Camera;\n cameraController: ThreeAnnotationController | null;\n rendering: CharacterSceneRenderingController | null;\n};\nexport interface CharacterHostOptions {\n signal?: AbortSignal;\n container: HTMLElement;\n character: CharacterHostCharacterOptions;\n embody?: RustEmbodyHostConfig;\n scene?: Omit<DefaultCharacterSceneAsyncOptions, 'signal'>;\n external?: CharacterHostExternalScene;\n loader?: CharacterModelLoadOptions;\n /** Storage authorization and byte caching remain with the application. */\n loadModel?: CharacterHostModelLoader;\n /** Replays authored mesh edits through the bound engine before GPU preparation. */\n prepareCharacter?: (context: CharacterHostPreparation) => void | Promise<void>;\n onCharacterReady?: (context: CharacterHostReady) => void | Promise<void>;\n /** Default true for compatibility. Editors can retain clips in a lazy catalog. */\n registerEmbeddedAnimations?: boolean;\n camera?: Omit<Partial<ThreeAnnotationControllerConfig>, 'scene' | 'camera' | 'renderer' | 'rendering' | 'domElement'>;\n autoStart?: boolean;\n renderLoop?: boolean;\n autoFrame?: boolean;\n}\nexport interface CharacterHost extends CharacterModelLoadResult {\n engine: Embody;\n scene: Scene;\n readonly renderer: CharacterSceneRenderer | null;\n readonly backend: CharacterSceneBackend | null;\n readonly rendering: CharacterSceneRenderingController | null;\n camera: Camera;\n cameraController: ThreeAnnotationController | null;\n lighting: ReadyDefaultCharacterScene['lighting'] | null;\n ownsScene: boolean;\n container: HTMLElement;\n setCharacter(character: CharacterHostCharacterOptions, loader?: CharacterModelLoadOptions, signal?: AbortSignal): Promise<void>;\n resize(): void;\n dispose(): Promise<void>;\n}\n\n/** Acquire, prepare and reveal a character using the existing native render owner. */\nexport async function createCharacterHost(options: CharacterHostOptions): Promise<CharacterHost> {\n if (!options.container) throw new Error('createCharacterHost requires a container HTMLElement');\n if (!options.character?.modelUrl) throw new Error('createCharacterHost requires character.modelUrl');\n let loaded: CharacterModelLoadResult | undefined;\n let state: ReadyDefaultCharacterScene | CharacterHostExternalScene | undefined;\n let engine: Embody | undefined;\n let controller: ThreeAnnotationController | undefined;\n let host: CharacterHost | undefined;\n let disposed = false;\n let disposal: Promise<void> | undefined;\n let switching: Promise<void> = Promise.resolve();\n let activeChange: AbortController | undefined;\n let request = 0;\n let mountedCanvas: HTMLCanvasElement | undefined;\n const previousBackground = options.container.style?.background ?? '';\n let backgroundRevision = 0;\n const applyCharacterBackground = (value: CharacterModelLoadResult, character: CharacterHostCharacterOptions) => {\n const revision = ++backgroundRevision;\n const settings = sceneSettings(character);\n // Explicit appearance (including transparency) and external scenes remain authoritative.\n const usePalette = !options.external && settings.background === undefined\n && (settings.type === undefined || settings.type === 'studio');\n if (options.container.style) options.container.style.background = previousBackground;\n if (!usePalette) return;\n const background = createSceneInkBackground(css => {\n if (!disposed && revision === backgroundRevision && options.container.style) options.container.style.background = css;\n });\n const key = character.modelUrl;\n const materialPalette = resolveCharacterMaterialPalette(value.model, key);\n background.setPalette(materialPalette);\n void resolveCharacterTexturePalette(value.model, key).then(palette => {\n background.setPalette(palette ?? materialPalette);\n background.dispose();\n });\n };\n const visibility = new WeakMap<CharacterModelLoadResult['model'], boolean>();\n const lifetime = new AbortController();\n const initial = new AbortController();\n activeChange = initial;\n const aborted = () => new DOMException('Character host request was cancelled', 'AbortError');\n const cancel = () => { lifetime.abort(); activeChange?.abort(); };\n const cancelCreation = () => initial.abort();\n options.signal?.addEventListener('abort', cancelCreation, { once: true });\n if (options.signal?.aborted) cancelCreation();\n const check = (signal: AbortSignal) => { if (disposed || lifetime.signal.aborted || signal.aborted) throw aborted(); };\n const releaseModel = async (value: CharacterModelLoadResult) => {\n const release = () => disposeCharacterModel(state?.scene ?? null, value.model);\n if (state?.rendering) await state.rendering.releaseSceneResources(release);\n else release();\n };\n const acquireModel = (character: CharacterHostCharacterOptions, loader: CharacterModelLoadOptions | undefined, signal: AbortSignal) =>\n (options.loadModel ?? loadCharacterModel)(character.modelUrl, { ...loader, signal });\n const sceneSettings = (character: CharacterHostCharacterOptions): CharacterSceneConfiguration => {\n const { background, ...value } = { ...options.scene, ...character.scene };\n // Runtime factory options also accept Three.Color; saved character data does not.\n return { ...value, ...(background === undefined ? {} : {\n background: background && typeof background === 'object' ? background.getHex() : background,\n }) };\n };\n const acquireRenderer = async (signal: AbortSignal) => {\n const rendering = state?.rendering;\n if (!rendering) return undefined;\n try { await rendering.setSettings(rendering.getSettings()); }\n catch (error) { if (!rendering.getSnapshot().renderer) throw error; }\n check(signal);\n const lease = await rendering.acquireRendererAsync();\n try { check(signal); return lease; }\n catch (error) { lease.release(); throw error; }\n };\n const makeEngine = (value: CharacterModelLoadResult, character: CharacterHostCharacterOptions) => {\n let profile = character.profile ?? options.embody?.profile;\n let annotationConfig = character.annotationConfig;\n if (profile) {\n const bones: Array<{ name: string }> = [];\n value.model.traverse(object => { if ((object as { isBone?: boolean }).isBone && object.name) bones.push({ name: object.name }); });\n const validation = validateMappings(value.meshes, { bones }, profile, { suggestCorrections: true, useResolvedNames: true, minConfidence: 0.8 });\n if (validation.suggestedConfig && validation.corrections?.some(correction => correction.applied)) {\n profile = { ...profile, ...validation.suggestedConfig };\n if (annotationConfig) annotationConfig = { ...annotationConfig, ...validation.suggestedConfig };\n }\n }\n const resolvedCharacter = { ...character, profile, annotationConfig };\n const next = new Embody({ ...options.embody, presetType: character.presetType ?? options.embody?.presetType, profile });\n try {\n next.onReady({ model: value.model, meshes: value.meshes,\n ...(options.registerEmbeddedAnimations === false ? {} : { animations: value.animations }) });\n next.stop();\n return { next, character: resolvedCharacter };\n } catch (error) {\n try { next.dispose(); } catch { /* Preserve the binding failure. */ }\n throw error;\n }\n };\n const dispose = (): Promise<void> => {\n if (disposal) return disposal;\n disposed = true;\n backgroundRevision += 1;\n if (options.container.style) options.container.style.background = previousBackground;\n cancel();\n options.signal?.removeEventListener('abort', cancelCreation);\n disposal = (async () => {\n let failure: unknown;\n const attempt = async (release: () => unknown) => { try { await release(); } catch (error) { failure ??= error; } };\n // Cancel a preparation draw before joining an operation waiting on that draw.\n await attempt(() => controller?.dispose());\n await switching.catch(() => {});\n await attempt(() => engine?.dispose());\n const ownedScene = !options.external && state && 'dispose' in state ? state : undefined;\n if (ownedScene) await attempt(() => ownedScene.dispose());\n if (loaded) await attempt(() => releaseModel(loaded!));\n mountedCanvas?.remove();\n if (failure !== undefined) throw failure;\n })();\n return disposal;\n };\n const prepare = async (value: CharacterModelLoadResult, next: Embody, character: CharacterHostCharacterOptions, signal: AbortSignal) => {\n check(signal);\n state?.setSceneSettings?.(sceneSettings(character));\n visibility.set(value.model, value.model.visible);\n value.model.visible = false;\n value.model.userData.embodyCharacterModel = true;\n await options.prepareCharacter?.({ ...value, engine: next, character, signal });\n check(signal);\n normalizeRenderableCharacterMorphAttributes(value.model);\n assertRenderableCharacterMorphAttributes(value.model);\n // Authored morph replay can add meshes/targets. Inspect the final layout.\n if (options.prepareCharacter) next.bindModel();\n value.model.updateMatrixWorld(true);\n state!.scene.add(value.model);\n if (controller) await controller.prepareModelForRender(value.model, { signal });\n check(signal);\n };\n const frameCharacter = async (value: CharacterModelLoadResult, character: CharacterHostCharacterOptions) => {\n if (!controller) return;\n controller.setModel(value.model);\n if (character.annotationConfig) controller.prepareRegionsForReveal(character.annotationConfig);\n else if (options.autoFrame !== false) await controller.focusFullBody(0);\n };\n const ready = async (value: CharacterModelLoadResult, next: Embody, character: CharacterHostCharacterOptions, signal: AbortSignal) => {\n await frameCharacter(value, character);\n check(signal);\n await options.onCharacterReady?.({ ...value, engine: next, character, signal,\n scene: state!.scene, camera: state!.camera, cameraController: controller ?? null, rendering: state!.rendering ?? null });\n check(signal);\n };\n try {\n check(initial.signal);\n loaded = await acquireModel(options.character, options.loader, initial.signal);\n check(initial.signal);\n state = options.external ?? await createDefaultCharacterSceneAsync(options.container, { ...options.scene, ...options.character.scene, signal: initial.signal });\n check(initial.signal);\n await initEmbodyCore();\n check(initial.signal);\n if (options.external?.mountCanvas && !state.renderer.domElement.parentElement) {\n mountedCanvas = state.renderer.domElement;\n options.container.appendChild(mountedCanvas);\n }\n if (options.renderLoop ?? !options.external) {\n if (!(state.camera instanceof PerspectiveCamera)) throw new Error('Character host rendering requires a PerspectiveCamera');\n controller = new ThreeAnnotationController({ ...options.camera,\n scene: state.scene, camera: state.camera, domElement: state.renderer.domElement,\n ...(state.rendering ? { rendering: state.rendering } : { renderer: state.renderer }),\n showDOMControls: options.camera?.showDOMControls ?? false,\n });\n }\n applyCharacterModelTransform(loaded.model, options.character);\n loaded.model.updateMatrixWorld(true);\n const first = makeEngine(loaded, options.character);\n engine = first.next;\n let currentCharacter = first.character;\n const initialLease = await acquireRenderer(initial.signal);\n try {\n await prepare(loaded, engine, first.character, initial.signal);\n await ready(loaded, engine, first.character, initial.signal);\n loaded.model.visible = visibility.get(loaded.model) ?? true;\n applyCharacterBackground(loaded, first.character);\n } finally { initialLease?.release(); }\n if (options.autoStart !== false) engine.start();\n const sceneState = state;\n const rendering = state.rendering ?? null;\n host = {\n engine, scene: state.scene, camera: state.camera, cameraController: controller ?? null,\n get renderer() { return rendering ? rendering.getSnapshot().renderer : sceneState.renderer; },\n get backend() { return rendering ? rendering.getSnapshot().backend : sceneState.backend ?? null; },\n rendering, model: loaded.model, meshes: loaded.meshes, animations: loaded.animations, gltf: loaded.gltf,\n lighting: 'lighting' in state ? state.lighting : null,\n ownsScene: !options.external, container: options.container,\n resize() { if ('resize' in sceneState) sceneState.resize(); },\n setCharacter(character, loader = options.loader, signal) {\n if (disposed || lifetime.signal.aborted) return Promise.reject(aborted());\n if (!character.modelUrl) return Promise.reject(new Error('setCharacter requires character.modelUrl'));\n activeChange?.abort();\n const operation = new AbortController();\n const abort = () => operation.abort();\n signal?.addEventListener('abort', abort, { once: true });\n if (signal?.aborted) abort();\n activeChange = operation;\n const generation = ++request;\n const change = switching.catch(() => {}).then(async () => {\n check(operation.signal);\n if (generation !== request) throw aborted();\n const next = await acquireModel(character, loader, operation.signal);\n let nextEngine: Embody | undefined;\n let lease: Awaited<ReturnType<typeof acquireRenderer>> = undefined;\n let cameraChanged = false;\n let previous: CharacterModelLoadResult | undefined;\n try {\n check(operation.signal);\n lease = await acquireRenderer(operation.signal);\n applyCharacterModelTransform(next.model, character);\n next.model.updateMatrixWorld(true);\n const prepared = makeEngine(next, character);\n nextEngine = prepared.next;\n await prepare(next, nextEngine, prepared.character, operation.signal);\n cameraChanged = true;\n await ready(next, nextEngine, prepared.character, operation.signal);\n check(operation.signal);\n previous = loaded!;\n engine!.dispose();\n engine = nextEngine;\n loaded = next;\n currentCharacter = prepared.character;\n applyCharacterBackground(next, currentCharacter);\n host!.engine = engine;\n host!.model = next.model;\n host!.meshes = next.meshes;\n host!.animations = next.animations;\n host!.gltf = next.gltf;\n previous.model.visible = false;\n next.model.visible = visibility.get(next.model) ?? true;\n if (options.autoStart !== false) engine.start();\n } catch (error) {\n if (loaded !== next) {\n try { state?.setSceneSettings?.(sceneSettings(currentCharacter)); } catch { /* Preserve replacement failure. */ }\n if (cameraChanged && !disposed && controller && loaded) {\n try { await frameCharacter(loaded, currentCharacter); } catch { /* Preserve replacement failure. */ }\n }\n try { nextEngine?.dispose(); } catch { /* Still release the acquired model. */ }\n lease?.release();\n lease = undefined;\n try { await releaseModel(next); } catch { /* Preserve the replacement failure. */ }\n }\n throw error;\n } finally { lease?.release(); }\n if (previous) await releaseModel(previous);\n });\n switching = change.finally(() => signal?.removeEventListener('abort', abort));\n return switching;\n },\n dispose,\n };\n options.signal?.removeEventListener('abort', cancelCreation);\n return host;\n } catch (error) {\n try { await dispose(); } catch { /* Preserve the acquisition error. */ }\n throw error;\n }\n}\n","import { CanvasTexture, Color, EquirectangularReflectionMapping, Group, LoadingManager, SRGBColorSpace, TextureLoader } from 'three';\nimport type { BufferGeometry, Material, Object3D, Scene, Texture } from 'three';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\nimport type { CharacterSceneRenderingController } from './scene';\nimport { acquireSceneBackground } from './sceneBackground';\n\n/** World coordinates in the scene's native units (Y up for default character scenes). */\nexport type SceneSceneryPosition = { x: number; y: number; z: number };\nexport type SceneSceneryInstance = { instanceId: string; assetId: string; position: SceneSceneryPosition };\nexport type SceneScenerySkybox = {\n kind: 'skybox' | 'backdrop' | 'color';\n assetId: string | null;\n /** Six-digit #rrggbb, also used by the generated sky when assetId is null. */\n color: string;\n intensity: number;\n /** Y-axis degrees. Applies to equirectangular skyboxes. */\n rotation: number;\n};\nexport type SceneSceneryLayout = { skybox: SceneScenerySkybox | null; instances: readonly SceneSceneryInstance[] };\nexport type SceneSceneryAsset = { bytes: ArrayBuffer; contentType: string };\nexport type SceneSceneryRendererOptions = {\n scene: Scene;\n /** The scene's existing controller. Omit only for an externally managed scene. */\n rendering?: CharacterSceneRenderingController | null;\n /** Storage authorization, caching and asset identities remain with the caller. */\n loadAsset(assetId: string, signal: AbortSignal): Promise<SceneSceneryAsset>;\n onError?: (message: string) => void;\n};\nexport type SceneSceneryRenderer = {\n /** Validates and copies the entire layout before changing the current selection. */\n update(layout: SceneSceneryLayout | null): void;\n /** Cancels loads, drains borrowed rendering work, and releases only scenery. */\n dispose(): Promise<void>;\n};\n\ntype Display = { texture: Texture | null; value: Texture | Color; intensity: number; rotation: number; dispose(): void };\ntype Model = { assetId: string; wrapper: Group; controller: AbortController; roots: Object3D[]; attached: boolean; retired: boolean };\nconst finite = (value: unknown): value is number => typeof value === 'number' && Number.isFinite(value);\nconst identity = (value: unknown): value is string => typeof value === 'string' && value.trim().length > 0;\nconst messageOf = (error: unknown) => error instanceof Error ? error.message : String(error);\n\nfunction copyLayout(layout: SceneSceneryLayout | null): SceneSceneryLayout {\n if (layout === null) return { skybox: null, instances: [] };\n if (!layout || !Array.isArray(layout.instances)) throw new Error('Scenery requires an instances array.');\n const ids = new Set<string>();\n const instances = layout.instances.map(instance => {\n if (!instance || !identity(instance.instanceId) || !identity(instance.assetId)) throw new Error('Each scenery placement requires an instanceId and assetId.');\n if (ids.has(instance.instanceId)) throw new Error(`Duplicate scenery instanceId: ${instance.instanceId}`);\n ids.add(instance.instanceId);\n const position = instance.position;\n if (!position || !finite(position.x) || !finite(position.y) || !finite(position.z)) throw new Error(`Scenery placement ${instance.instanceId} requires finite X/Y/Z coordinates.`);\n return { instanceId: instance.instanceId, assetId: instance.assetId, position: { x: position.x, y: position.y, z: position.z } };\n });\n const skybox = layout.skybox;\n if (skybox !== null) {\n if (!skybox || !['skybox', 'backdrop', 'color'].includes(skybox.kind)) throw new Error('Scenery background kind must be skybox, backdrop or color.');\n if (skybox.assetId !== null && !identity(skybox.assetId)) throw new Error('The scenery background assetId must be a nonempty string or null.');\n if (skybox.kind === 'color' && skybox.assetId !== null) throw new Error('A solid scenery color cannot use an image asset.');\n if (typeof skybox.color !== 'string' || !/^#[\\da-f]{6}$/i.test(skybox.color)) throw new Error('Scenery background color must use six-digit #rrggbb.');\n if (!finite(skybox.intensity) || skybox.intensity < 0 || !finite(skybox.rotation)) throw new Error('Scenery background intensity must be nonnegative and rotation must be finite degrees.');\n }\n return { instances, skybox: skybox === null ? null : { kind: skybox.kind, assetId: skybox.assetId, color: skybox.color, intensity: skybox.intensity, rotation: skybox.rotation } };\n}\n\nfunction disposeRoots(roots: readonly Object3D[]) {\n const geometries = new Set<BufferGeometry>(), materials = new Set<Material>(), textures = new Set<Texture>();\n const skeletons = new Set<{ dispose(): void }>();\n for (const root of roots) root.traverse((object: any) => {\n if (object.geometry) geometries.add(object.geometry);\n if (object.skeleton) skeletons.add(object.skeleton);\n for (const material of object.material ? (Array.isArray(object.material) ? object.material : [object.material]) : []) {\n materials.add(material);\n for (const value of Object.values(material) as any[]) if (value?.isTexture) textures.add(value);\n }\n });\n const images = new Set<any>();\n for (const texture of textures) {\n for (const image of Array.isArray(texture.image) ? texture.image : [texture.image]) if (image) images.add(image);\n texture.dispose();\n }\n for (const geometry of geometries) geometry.dispose();\n for (const material of materials) material.dispose();\n for (const skeleton of skeletons) skeleton.dispose();\n for (const image of images) image.close?.();\n}\n\nfunction display(value: Color | Texture, skybox: SceneScenerySkybox): Display {\n const texture = 'isTexture' in value ? value as Texture : null;\n if (texture) { texture.colorSpace = SRGBColorSpace; if (skybox.kind === 'skybox') texture.mapping = EquirectangularReflectionMapping; }\n let disposed = false;\n return { value, texture, intensity: skybox.intensity, rotation: skybox.kind === 'skybox' ? skybox.rotation : 0,\n dispose() { if (disposed) return; disposed = true; texture?.dispose(); } };\n}\n\nfunction generatedSky(skybox: SceneScenerySkybox): Display {\n const canvas = document.createElement('canvas'); canvas.width = 1024; canvas.height = 512;\n const context = canvas.getContext('2d');\n if (!context) throw new Error('The browser could not create the scenery skybox.');\n const gradient = context.createLinearGradient(0, 0, 0, 512);\n gradient.addColorStop(0, '#10172c'); gradient.addColorStop(.48, skybox.color);\n gradient.addColorStop(.52, '#b6aaa0'); gradient.addColorStop(1, '#151c25');\n context.fillStyle = gradient; context.fillRect(0, 0, 1024, 512);\n return display(new CanvasTexture(canvas), skybox);\n}\n\nasync function imageDisplay(asset: SceneSceneryAsset, skybox: SceneScenerySkybox): Promise<Display> {\n if (!['image/png', 'image/jpeg', 'image/webp'].includes(asset.contentType)) throw new Error('Scenery backgrounds require a PNG, JPEG or WebP image.');\n const url = URL.createObjectURL(new Blob([asset.bytes], { type: asset.contentType }));\n let pending: Texture | undefined;\n try {\n const texture = await new Promise<Texture>((resolve, reject) => {\n pending = new TextureLoader().load(url, resolve, undefined, reject);\n });\n return display(texture, skybox);\n } catch (error) {\n pending?.dispose();\n throw new Error(`Scenery background image could not decode: ${messageOf(error)}`);\n } finally { URL.revokeObjectURL(url); }\n}\n\nasync function parseModel(asset: SceneSceneryAsset): Promise<Object3D[]> {\n if (asset.contentType !== 'model/gltf-binary' || asset.bytes.byteLength < 20) throw new Error('Scenery models require a self-contained GLB 2.0 file.');\n const header = new DataView(asset.bytes);\n if (header.getUint32(0, true) !== 0x46546c67 || header.getUint32(4, true) !== 2 || header.getUint32(8, true) !== asset.bytes.byteLength) throw new Error('Scenery models require a valid GLB 2.0 container.');\n let offset = 12, document: { buffers?: { uri?: unknown }[]; images?: { uri?: unknown }[] } | undefined;\n while (offset < asset.bytes.byteLength) {\n if (offset + 8 > asset.bytes.byteLength) throw new Error('The scenery GLB has a truncated chunk header.');\n const size = header.getUint32(offset, true), kind = header.getUint32(offset + 4, true);\n if (size % 4 || size > asset.bytes.byteLength - offset - 8) throw new Error('The scenery GLB has an invalid chunk length.');\n if (offset === 12 && kind !== 0x4e4f534a) throw new Error('The scenery GLB must begin with its JSON chunk.');\n if (kind === 0x4e4f534a) {\n if (document) throw new Error('The scenery GLB contains duplicate JSON chunks.');\n try { document = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(new Uint8Array(asset.bytes, offset + 8, size))); }\n catch (error) { throw new Error(`The scenery GLB JSON is invalid: ${messageOf(error)}`); }\n if (!document || typeof document !== 'object' || Array.isArray(document)) throw new Error('The scenery GLB JSON must be an object.');\n }\n offset += 8 + size;\n }\n // Uploaded blob: references are external too. Only the loader's own generated\n // blob URLs for embedded bufferView images may pass the URL modifier below.\n for (const resources of [document?.buffers, document?.images]) {\n if (resources !== undefined && !Array.isArray(resources)) throw new Error('The scenery GLB buffers and images must be arrays.');\n for (const resource of resources ?? []) {\n if (resource?.uri !== undefined && (typeof resource.uri !== 'string' || !resource.uri.startsWith('data:'))) {\n throw new Error('Scenery GLB files must embed their geometry and textures; external URLs are not allowed.');\n }\n }\n }\n const manager = new LoadingManager();\n manager.setURLModifier(url => {\n if (url.startsWith('data:') || url.startsWith('blob:')) return url;\n throw new Error('Scenery GLB files must embed their geometry and textures; external URLs are not allowed.');\n });\n const gltf = await new GLTFLoader(manager).parseAsync(asset.bytes, '');\n if (!gltf.scene?.isObject3D) throw new Error('The scenery GLB has no scene to display.');\n return [gltf.scene, ...gltf.scenes.filter(root => root !== gltf.scene)];\n}\n\n/** Native scene resources only: no storage, character selection, mixer or render loop. */\nexport function createSceneSceneryRenderer(options: SceneSceneryRendererOptions): SceneSceneryRenderer {\n const { scene, rendering, loadAsset } = options;\n if (!scene?.isScene || typeof loadAsset !== 'function') throw new Error('Scenery requires a Three scene and an asset loader.');\n let disposed = false, disposal: Promise<void> | null = null;\n let backgroundKey: string | null = null, backgroundGeneration = 0;\n let backgroundLoad: AbortController | null = null, currentDisplay: Display | null = null;\n const models = new Map<string, Model>(), tasks = new Set<Promise<void>>();\n const report = (message: string) => { try { options.onError?.(message); } catch (error) { console.error('Scenery error subscriber failed.', error); } };\n const track = (task: Promise<void>) => {\n tasks.add(task);\n void task.then(() => tasks.delete(task), error => { tasks.delete(task); report(messageOf(error)); });\n return task;\n };\n const release = (callback: () => void): Promise<void> => {\n try { return rendering ? rendering.releaseSceneResources(callback) : (callback(), Promise.resolve()); }\n catch (error) { return Promise.reject(error); }\n };\n const background = acquireSceneBackground(scene, () => { void dispose().catch(error => report(messageOf(error))); });\n const retire = (model: Model): Promise<void> => {\n if (model.retired) return Promise.resolve();\n model.retired = true; model.controller.abort();\n return release(() => {\n model.wrapper.removeFromParent(); model.attached = false;\n disposeRoots(model.roots); model.roots = [];\n });\n };\n const mount = (instance: SceneSceneryInstance) => {\n const wrapper = new Group(); wrapper.name = `Scenery ${instance.instanceId}`;\n wrapper.position.set(instance.position.x, instance.position.y, instance.position.z);\n const model: Model = { assetId: instance.assetId, wrapper, controller: new AbortController(), roots: [], attached: false, retired: false };\n models.set(instance.instanceId, model);\n track((async () => {\n let roots: Object3D[] = [];\n try {\n const asset = await loadAsset(model.assetId, model.controller.signal);\n if (model.controller.signal.aborted) return;\n roots = await parseModel(asset);\n if (model.controller.signal.aborted || disposed) { disposeRoots(roots); roots = []; return; }\n await release(() => {\n if (model.controller.signal.aborted || disposed) { disposeRoots(roots); roots = []; return; }\n model.roots = roots; roots = [];\n wrapper.add(model.roots[0]); scene.add(wrapper); model.attached = true;\n });\n } catch (error) {\n if (roots.length) disposeRoots(roots);\n if (!model.controller.signal.aborted && !disposed) {\n if (models.get(instance.instanceId) === model) models.delete(instance.instanceId);\n await retire(model);\n report(`Scenery placement ${instance.instanceId} could not load: ${messageOf(error)}`);\n }\n }\n })());\n };\n const updateBackground = (skybox: SceneScenerySkybox | null) => {\n const key = JSON.stringify(skybox);\n if (backgroundKey === key) return;\n backgroundKey = key; const generation = ++backgroundGeneration;\n backgroundLoad?.abort(); const controller = new AbortController(); backgroundLoad = controller;\n track((async () => {\n let next: Display | null = null;\n try {\n if (skybox) {\n if (skybox.kind === 'color') next = display(new Color(skybox.color), skybox);\n else if (!skybox.assetId) next = generatedSky(skybox);\n else {\n const asset = await loadAsset(skybox.assetId, controller.signal);\n if (controller.signal.aborted) return;\n next = await imageDisplay(asset, skybox);\n }\n }\n await release(() => {\n if (controller.signal.aborted || generation !== backgroundGeneration || disposed) { next?.dispose(); next = null; return; }\n if (next) background.set(next.value, next.intensity, next.rotation); else background.clear();\n const previous = currentDisplay; currentDisplay = next; next = null;\n previous?.dispose();\n });\n } catch (error) {\n next?.dispose();\n if (!controller.signal.aborted && generation === backgroundGeneration && !disposed) {\n backgroundKey = null;\n report(`Scenery background could not load: ${messageOf(error)}`);\n }\n }\n })());\n };\n function dispose(): Promise<void> {\n if (disposal) return disposal;\n disposed = true; backgroundGeneration++; backgroundLoad?.abort();\n // Release logical background ownership now so effect cleanup/recreation can\n // acquire the same scene. GPU resources stay alive until the drain below.\n background.dispose();\n const releases = [...models.values()].map(retire); models.clear();\n releases.push(release(() => { currentDisplay?.dispose(); currentDisplay = null; }));\n disposal = (async () => {\n const results = await Promise.allSettled([...tasks, ...releases]);\n const failed = results.find((result): result is PromiseRejectedResult => result.status === 'rejected');\n if (failed) throw failed.reason;\n })();\n return disposal;\n }\n return {\n update(value) {\n if (disposed) throw new Error('The scenery renderer has been disposed.');\n const layout = copyLayout(value);\n const next = new Map(layout.instances.map(instance => [instance.instanceId, instance]));\n for (const [id, model] of models) if (next.get(id)?.assetId !== model.assetId) { models.delete(id); track(retire(model)); }\n for (const instance of layout.instances) {\n const current = models.get(instance.instanceId);\n if (current) current.wrapper.position.set(instance.position.x, instance.position.y, instance.position.z);\n else mount(instance);\n }\n updateBackground(layout.skybox);\n },\n dispose,\n };\n}\n","/**\n * SkeletonOverlay - 3D bone visualization overlay for the Three.js scene.\n *\n * Renders each bone as an elongated octahedral shape (Blender-style armature)\n * stretched from parent joint to child joint. Updates in real-time via\n * onBeforeRender callback, following bone animation.\n */\nimport { fuzzyNameMatch } from '../authoring';\nimport * as THREE from 'three';\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface BoneTreeNode {\n name: string;\n depth: number;\n parent: string | null;\n children: string[];\n isMapped: boolean;\n /** Semantic key if this bone is mapped (e.g., 'HEAD', 'JAW') */\n semanticKey: string | null;\n /** Full semantic-key set for tree badge rendering when a row resolves multiple mappings */\n semanticKeys?: string[];\n /** Live reference to the Three.js bone object */\n boneObject: THREE.Bone;\n}\n\ninterface BoneVisualization {\n mesh: THREE.Mesh;\n parentBone: THREE.Bone;\n childBone: THREE.Bone | null;\n boneName: string;\n isMapped: boolean;\n}\n\nexport interface SkeletonOverlayOptions {\n opacityScale?: number;\n focusSelectedBone?: boolean;\n}\n\ntype OverlayAxisKey = 'pitch' | 'yaw' | 'roll';\nexport type SkeletonOverlayAxisKey = OverlayAxisKey;\ntype SkeletonOverlayRotationChannel = 'rx' | 'ry' | 'rz';\n\nexport interface AxisGizmoPointerData {\n axis: SkeletonOverlayAxisKey;\n channel: SkeletonOverlayRotationChannel;\n boneName: string;\n point: THREE.Vector3;\n origin: THREE.Vector3;\n quaternion: THREE.Quaternion;\n}\n\n// ── Constants ──────────────────────────────────────────────────────────────\n\nconst COLORS = {\n mapped: 0x4a9aaa,\n unmapped: 0x5a6a7a,\n highlighted: 0xd4a040,\n selected: 0x63b3ed,\n} as const;\n\nconst OPACITY = {\n mapped: 0.58,\n unmapped: 0.38,\n highlighted: 0.7,\n selected: 0.8,\n context: 0.46,\n muted: 0.16,\n} as const;\n\nconst AXIS_GIZMO_COLORS: Record<OverlayAxisKey, number> = {\n pitch: 0xff7a5c,\n yaw: 0x61d095,\n roll: 0x69a8ff,\n};\n\nconst AXIS_GIZMO_IDLE_OPACITY = 0.72;\nconst AXIS_GIZMO_MUTED_OPACITY = 0.26;\nconst AXIS_GIZMO_ACTIVE_OPACITY = 0.96;\nconst AXIS_GIZMO_RADIUS_FACTOR = 0.48;\nconst AXIS_GIZMO_MIN_RADIUS = 0.025;\nconst AXIS_GIZMO_MAX_RADIUS = 0.14;\nconst AXIS_GIZMO_SCREEN_RADIUS_PX = 54;\nconst AXIS_GIZMO_ACTIVE_SCALE = 1.05;\nconst AXIS_GIZMO_HIT_TUBE = 0.15;\nconst VISIBILITY_FADE_MS = 180;\nconst VISIBILITY_EPSILON = 0.01;\n\n/** Default length for leaf bones (no children) */\nconst LEAF_BONE_LENGTH = 0.02;\n\n/** Width ratio of octahedron mid-section relative to bone length */\nconst WIDTH_RATIO = 0.1;\n\n/** Position of mid-section along bone axis (0 = parent, 1 = child) */\nconst MID_POSITION = 0.2;\n\n/** Helper/root bones that can introduce non-deforming rig offsets */\nconst ROOT_HELPER_NAME_PATTERN = /armature|bone.?root|rootjoint|(?:^|[_\\W])root(?:$|[_\\W])/i;\nconst HIP_NAME_PATTERN = /(?:^|[_\\W])hip(?:$|[_\\W]|\\d)/i;\nconst PELVIS_NAME_PATTERN = /(?:^|[_\\W])pelvis(?:$|[_\\W]|\\d)/i;\n/** Distance threshold for treating two joints as occupying the same point */\nconst POSITION_EPSILON = 1e-4;\nconst DEFAULT_AXIS_CHANNELS: Record<OverlayAxisKey, SkeletonOverlayRotationChannel> = {\n pitch: 'rx',\n yaw: 'ry',\n roll: 'rz',\n};\n\n// ── Geometry ───────────────────────────────────────────────────────────────\n\n/**\n * Creates a unit octahedral bone geometry (Blender-style).\n * Two pyramids joined at a wider mid-section, extending along +Z axis from 0 to 1.\n *\n * Vertices:\n * root (0,0,0) → mid cross-section at z=0.2 → tip (0,0,1)\n */\nfunction createOctahedralBoneGeometry(): THREE.BufferGeometry {\n const w = WIDTH_RATIO;\n\n // 6 vertices: root, 4 mid-section corners, tip\n const positions = new Float32Array([\n // Face 0: root → mid1 → mid2\n 0, 0, 0, w, w, MID_POSITION, -w, w, MID_POSITION,\n // Face 1: root → mid2 → mid3\n 0, 0, 0, -w, w, MID_POSITION, -w, -w, MID_POSITION,\n // Face 2: root → mid3 → mid4\n 0, 0, 0, -w, -w, MID_POSITION, w, -w, MID_POSITION,\n // Face 3: root → mid4 → mid1\n 0, 0, 0, w, -w, MID_POSITION, w, w, MID_POSITION,\n // Face 4: tip → mid2 → mid1\n 0, 0, 1, -w, w, MID_POSITION, w, w, MID_POSITION,\n // Face 5: tip → mid3 → mid2\n 0, 0, 1, -w, -w, MID_POSITION, -w, w, MID_POSITION,\n // Face 6: tip → mid4 → mid3\n 0, 0, 1, w, -w, MID_POSITION, -w, -w, MID_POSITION,\n // Face 7: tip → mid1 → mid4\n 0, 0, 1, w, w, MID_POSITION, w, -w, MID_POSITION,\n ]);\n\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));\n geometry.computeVertexNormals();\n return geometry;\n}\n\nfunction collectBones(root: THREE.Object3D): THREE.Bone[] {\n const bones = new Set<THREE.Bone>();\n root.traverse((obj) => {\n if ((obj as THREE.Bone).isBone) {\n bones.add(obj as THREE.Bone);\n }\n if ((obj as THREE.SkinnedMesh).isSkinnedMesh) {\n const skinned = obj as THREE.SkinnedMesh;\n skinned.skeleton?.bones?.forEach((bone) => bones.add(bone));\n }\n });\n return Array.from(bones);\n}\n\nfunction isBone(obj: THREE.Object3D | null | undefined): obj is THREE.Bone {\n return !!obj && (obj as THREE.Bone).isBone;\n}\n\nfunction countBoneSubtree(bone: THREE.Bone): number {\n let count = 1;\n for (const child of bone.children) {\n if (isBone(child)) {\n count += countBoneSubtree(child);\n }\n }\n return count;\n}\n\nfunction resolveTopLevelHelperRoot(root: THREE.Object3D): THREE.Bone | null {\n const topLevelBones = collectBones(root).filter((bone) => !isBone(bone.parent));\n if (topLevelBones.length !== 1) return null;\n\n let helperRoot = topLevelBones[0];\n while (ROOT_HELPER_NAME_PATTERN.test(helperRoot.name)) {\n const boneChildren = helperRoot.children.filter(isBone);\n if (boneChildren.length !== 1) break;\n\n const onlyChild = boneChildren[0];\n if (!ROOT_HELPER_NAME_PATTERN.test(onlyChild.name)) break;\n helperRoot = onlyChild;\n }\n\n return ROOT_HELPER_NAME_PATTERN.test(helperRoot.name) ? helperRoot : null;\n}\n\nfunction resolveBodyDisplayRoot(root: THREE.Object3D): THREE.Bone | null {\n const helperRoot = resolveTopLevelHelperRoot(root);\n if (!helperRoot) return null;\n\n const boneChildren = helperRoot.children.filter(isBone);\n if (boneChildren.length === 0) return null;\n if (boneChildren.length === 1) return boneChildren[0];\n\n // Export rigs sometimes hang tiny attachment helpers off the root alongside\n // one real body subtree. Start the overlay at that dominant body child.\n const subtreeSizes = boneChildren\n .map((child) => ({ child, size: countBoneSubtree(child) }))\n .sort((left, right) => right.size - left.size);\n\n const [largest, secondLargest] = subtreeSizes;\n if (!largest || largest.size < 3) return null;\n if (!secondLargest || secondLargest.size <= 2 || largest.size >= secondLargest.size * 3) {\n return largest.child;\n }\n\n return null;\n}\n\nfunction collectBoneChildren(bone: THREE.Object3D): THREE.Bone[] {\n return bone.children.filter(isBone);\n}\n\nfunction hasZeroLengthConnection(parentBone: THREE.Bone, childBone: THREE.Bone): boolean {\n parentBone.getWorldPosition(_parentPos);\n childBone.getWorldPosition(_childPos);\n return _parentPos.distanceToSquared(_childPos) <= POSITION_EPSILON * POSITION_EPSILON;\n}\n\nfunction hasRootHelperAncestor(bone: THREE.Bone): boolean {\n let current: THREE.Object3D | null = bone.parent;\n while (isBone(current)) {\n if (ROOT_HELPER_NAME_PATTERN.test(current.name)) return true;\n current = current.parent;\n }\n return false;\n}\n\nfunction shouldSkipRootHelperConnection(parentBone: THREE.Bone, boneChildren: THREE.Bone[]): boolean {\n if (boneChildren.length !== 1) return false;\n const childBone = boneChildren[0];\n\n if (ROOT_HELPER_NAME_PATTERN.test(parentBone.name)) {\n if (!isBone(parentBone.parent)) return true;\n\n // Nested human rig helpers still produce a useless centerline when the\n // helper feeds into a hip whose pelvis child collapses to the same point.\n return collectBoneChildren(childBone).some((grandChild) => hasZeroLengthConnection(childBone, grandChild));\n }\n\n return (\n hasRootHelperAncestor(parentBone) &&\n HIP_NAME_PATTERN.test(parentBone.name) &&\n PELVIS_NAME_PATTERN.test(childBone.name) &&\n hasZeroLengthConnection(parentBone, childBone)\n );\n}\n\nfunction setRayFromPointer(\n clientX: number,\n clientY: number,\n camera: THREE.Camera,\n domElement: HTMLElement,\n): boolean {\n const rect = domElement.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) return false;\n\n _mouse.x = ((clientX - rect.left) / rect.width) * 2 - 1;\n _mouse.y = -((clientY - rect.top) / rect.height) * 2 + 1;\n _raycaster.setFromCamera(_mouse, camera);\n return true;\n}\n\n// ── Reusable temp objects (avoid GC) ───────────────────────────────────────\n\nconst _parentPos = new THREE.Vector3();\nconst _childPos = new THREE.Vector3();\nconst _direction = new THREE.Vector3();\nconst _zAxis = new THREE.Vector3(0, 0, 1);\nconst _quaternion = new THREE.Quaternion();\nconst _bonePos = new THREE.Vector3();\nconst _boneQuat = new THREE.Quaternion();\nconst _boneEuler = new THREE.Euler();\nconst _mouse = new THREE.Vector2();\nconst _raycaster = new THREE.Raycaster();\nconst _cameraSpacePosition = new THREE.Vector3();\nconst _planeNormal = new THREE.Vector3();\nconst _dragPlane = new THREE.Plane();\nconst _planeHit = new THREE.Vector3();\n\nexport function resolveSkeletonOverlayStartBoneName(\n root: THREE.Object3D,\n): string | null {\n return resolveBodyDisplayRoot(root)?.name ?? null;\n}\n\n// ── SkeletonOverlay Class ──────────────────────────────────────────────────\n\nexport class SkeletonOverlay {\n private scene: THREE.Scene;\n private group: THREE.Group;\n private visualizations: BoneVisualization[] = [];\n private boneTree: BoneTreeNode[] = [];\n private mappedBoneNames: Set<string>;\n private semanticKeyMap: Map<string, string>; // boneName → semanticKey\n private boneLookup = new Map<string, THREE.Bone>();\n\n // Shared geometry and materials\n private sharedGeometry: THREE.BufferGeometry;\n private mappedMaterial: THREE.MeshBasicMaterial;\n private unmappedMaterial: THREE.MeshBasicMaterial;\n private highlightMaterial: THREE.MeshBasicMaterial;\n private selectedMaterial: THREE.MeshBasicMaterial;\n private contextMaterial: THREE.MeshBasicMaterial;\n private mutedMaterial: THREE.MeshBasicMaterial;\n private axisRingGeometry: THREE.TorusGeometry;\n private axisRingHitGeometry: THREE.TorusGeometry;\n private axisCenterGeometry: THREE.SphereGeometry;\n private pitchRingMaterial: THREE.MeshBasicMaterial;\n private yawRingMaterial: THREE.MeshBasicMaterial;\n private rollRingMaterial: THREE.MeshBasicMaterial;\n private axisHitMaterial: THREE.MeshBasicMaterial;\n private axisCenterMaterial: THREE.MeshBasicMaterial;\n private axisGizmoGroup: THREE.Group;\n private axisGizmoMeshes: Record<OverlayAxisKey, THREE.Mesh>;\n private axisGizmoHitMeshes: Record<OverlayAxisKey, THREE.Mesh>;\n\n // Sentinel mesh for per-frame updates (stored for disposal)\n private sentinelMesh: THREE.Mesh | null = null;\n\n // State\n private highlightedBone: string | null = null;\n private selectedBone: string | null = null;\n private activeAxis: OverlayAxisKey | null = null;\n private opacityScale: number;\n private focusSelectedBone: boolean;\n private visibilityAlpha = 0;\n private visibilityTarget = 0;\n private visibilityLastFrameAt = 0;\n\n constructor(\n scene: THREE.Scene,\n mappedBoneNames: Set<string>,\n semanticKeyMap: Map<string, string>,\n options: SkeletonOverlayOptions = {},\n ) {\n this.scene = scene;\n this.mappedBoneNames = mappedBoneNames;\n this.semanticKeyMap = semanticKeyMap;\n this.opacityScale = THREE.MathUtils.clamp(options.opacityScale ?? 1, 0, 1);\n this.focusSelectedBone = options.focusSelectedBone ?? false;\n\n this.group = new THREE.Group();\n this.group.name = 'SkeletonOverlay';\n this.group.renderOrder = 999;\n this.group.visible = false;\n\n this.sharedGeometry = createOctahedralBoneGeometry();\n\n const materialOpts: Partial<THREE.MeshBasicMaterialParameters> = {\n transparent: true,\n depthTest: false,\n depthWrite: false,\n side: THREE.DoubleSide,\n };\n\n this.mappedMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.mapped, opacity: OPACITY.mapped });\n this.unmappedMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.unmapped, opacity: OPACITY.unmapped });\n this.highlightMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.highlighted, opacity: OPACITY.highlighted });\n this.selectedMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.selected, opacity: OPACITY.selected });\n this.contextMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.selected, opacity: OPACITY.context });\n this.mutedMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: COLORS.unmapped, opacity: OPACITY.muted });\n this.mappedMaterial.forceSinglePass = true;\n this.unmappedMaterial.forceSinglePass = true;\n this.highlightMaterial.forceSinglePass = true;\n this.selectedMaterial.forceSinglePass = true;\n this.contextMaterial.forceSinglePass = true;\n this.mutedMaterial.forceSinglePass = true;\n\n this.axisRingGeometry = new THREE.TorusGeometry(1, 0.032, 10, 120);\n this.axisRingHitGeometry = new THREE.TorusGeometry(1, AXIS_GIZMO_HIT_TUBE, 8, 64);\n this.axisCenterGeometry = new THREE.SphereGeometry(0.082, 12, 8);\n this.pitchRingMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: AXIS_GIZMO_COLORS.pitch, opacity: AXIS_GIZMO_IDLE_OPACITY });\n this.yawRingMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: AXIS_GIZMO_COLORS.yaw, opacity: AXIS_GIZMO_IDLE_OPACITY });\n this.rollRingMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: AXIS_GIZMO_COLORS.roll, opacity: AXIS_GIZMO_IDLE_OPACITY });\n this.axisHitMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, opacity: 0 });\n this.axisHitMaterial.colorWrite = false;\n this.axisCenterMaterial = new THREE.MeshBasicMaterial({ ...materialOpts, color: 0xf5f7fa, opacity: 0.92 });\n\n this.axisGizmoGroup = new THREE.Group();\n this.axisGizmoGroup.name = 'SelectedBoneAxisGizmo';\n this.axisGizmoGroup.visible = false;\n this.axisGizmoGroup.renderOrder = 1000;\n\n const pitchRing = new THREE.Mesh(this.axisRingGeometry, this.pitchRingMaterial);\n pitchRing.renderOrder = 1000;\n pitchRing.userData.axis = 'pitch';\n const pitchHit = new THREE.Mesh(this.axisRingHitGeometry, this.axisHitMaterial);\n pitchHit.userData.axis = 'pitch';\n\n const yawRing = new THREE.Mesh(this.axisRingGeometry, this.yawRingMaterial);\n yawRing.renderOrder = 1000;\n yawRing.userData.axis = 'yaw';\n const yawHit = new THREE.Mesh(this.axisRingHitGeometry, this.axisHitMaterial);\n yawHit.userData.axis = 'yaw';\n\n const rollRing = new THREE.Mesh(this.axisRingGeometry, this.rollRingMaterial);\n rollRing.renderOrder = 1000;\n rollRing.userData.axis = 'roll';\n const rollHit = new THREE.Mesh(this.axisRingHitGeometry, this.axisHitMaterial);\n rollHit.rotation.copy(rollRing.rotation);\n rollHit.userData.axis = 'roll';\n\n const center = new THREE.Mesh(this.axisCenterGeometry, this.axisCenterMaterial);\n center.renderOrder = 1001;\n\n this.axisGizmoMeshes = {\n pitch: pitchRing,\n yaw: yawRing,\n roll: rollRing,\n };\n this.axisGizmoHitMeshes = {\n pitch: pitchHit,\n yaw: yawHit,\n roll: rollHit,\n };\n\n Object.values(this.axisGizmoMeshes).forEach((mesh) => {\n mesh.frustumCulled = false;\n this.axisGizmoGroup.add(mesh);\n });\n Object.values(this.axisGizmoHitMeshes).forEach((mesh) => {\n mesh.frustumCulled = false;\n this.axisGizmoGroup.add(mesh);\n });\n center.frustumCulled = false;\n this.axisGizmoGroup.add(center);\n this.syncAxisGizmoChannels();\n this.syncVisibilityOpacity();\n this.updateAxisGizmoAppearance();\n }\n\n /**\n * Build the skeleton visualization from a scene root.\n * Traverses to find all THREE.Bone instances and creates octahedral meshes.\n */\n loadSkeleton(root: THREE.Object3D): void {\n this.clear();\n root.updateWorldMatrix(true, true);\n\n // Collect all bones\n const allBones = collectSkeletonBones(root);\n const includedBones = new Set(allBones);\n this.boneLookup = new Map(allBones.map((bone) => [bone.name, bone]));\n\n if (allBones.length === 0) return;\n\n // Build tree data for UI\n this.boneTree = allBones.map((bone) => {\n const isMapped = this.mappedBoneNames.has(bone.name);\n const semanticKey = this.semanticKeyMap.get(bone.name) ?? null;\n const boneChildren = bone.children\n .filter((c): c is THREE.Bone => isBone(c) && includedBones.has(c))\n .map((c) => c.name);\n const parentName = bone.parent && isBone(bone.parent) && includedBones.has(bone.parent)\n ? bone.parent.name\n : null;\n\n // Compute depth by walking up\n let depth = 0;\n let current: THREE.Object3D | null = bone.parent;\n while (current && isBone(current) && includedBones.has(current)) {\n depth++;\n current = current.parent;\n }\n\n return {\n name: bone.name,\n depth,\n parent: parentName,\n children: boneChildren,\n isMapped,\n semanticKey,\n boneObject: bone,\n };\n });\n\n // Create visualization meshes for each bone→child connection\n for (const bone of allBones) {\n const boneChildren = bone.children.filter(\n (c): c is THREE.Bone => isBone(c) && includedBones.has(c),\n );\n\n if (boneChildren.length > 0) {\n // Root/helper bones often exist only for rig transforms and produce\n // a misleading centerline (for example between a character's legs).\n if (shouldSkipRootHelperConnection(bone, boneChildren)) {\n continue;\n }\n\n for (const child of boneChildren) {\n this.createBoneMesh(bone, child);\n }\n } else {\n this.createBoneMesh(bone, null);\n }\n }\n\n this.group.add(this.axisGizmoGroup);\n\n // Attach onBeforeRender to a sentinel mesh for per-frame updates\n const sentinelGeo = new THREE.SphereGeometry(1e-6, 4, 2);\n const sentinelMat = new THREE.MeshBasicMaterial({\n transparent: true,\n opacity: 0,\n depthWrite: false,\n depthTest: false,\n });\n sentinelMat.colorWrite = false;\n const sentinel = new THREE.Mesh(sentinelGeo, sentinelMat);\n sentinel.visible = true;\n sentinel.frustumCulled = false;\n sentinel.onBeforeRender = (renderer, _scene, camera) => this.update(camera, renderer.domElement);\n this.sentinelMesh = sentinel;\n this.group.add(sentinel);\n\n this.scene.add(this.group);\n this.update();\n }\n\n private createBoneMesh(parentBone: THREE.Bone, childBone: THREE.Bone | null): void {\n const isMapped = this.mappedBoneNames.has(parentBone.name);\n const material = isMapped ? this.mappedMaterial : this.unmappedMaterial;\n\n const mesh = new THREE.Mesh(this.sharedGeometry, material);\n mesh.name = `bone_vis_${parentBone.name}${childBone ? `_${childBone.name}` : '_leaf'}`;\n mesh.frustumCulled = false;\n mesh.renderOrder = 999;\n\n // Store bone name for picking\n mesh.userData.boneName = parentBone.name;\n\n this.visualizations.push({\n mesh,\n parentBone,\n childBone,\n boneName: parentBone.name,\n isMapped,\n });\n\n this.group.add(mesh);\n }\n\n /** Called each frame via onBeforeRender. Updates all bone mesh transforms. */\n private update(camera?: THREE.Camera | null, domElement?: HTMLElement | null): void {\n this.advanceVisibility();\n\n for (const vis of this.visualizations) {\n vis.parentBone.getWorldPosition(_parentPos);\n\n if (vis.childBone) {\n vis.childBone.getWorldPosition(_childPos);\n } else {\n // Leaf bone: extend a short distance along bone's local Y axis\n _childPos.set(0, LEAF_BONE_LENGTH, 0);\n vis.parentBone.localToWorld(_childPos);\n }\n\n // Compute direction and length\n _direction.subVectors(_childPos, _parentPos);\n const length = _direction.length();\n\n if (length < 0.0001) {\n vis.mesh.visible = false;\n continue;\n }\n\n vis.mesh.visible = this.visibilityAlpha > VISIBILITY_EPSILON;\n\n // Orient: geometry is authored along +Z, align it with parent→child direction\n _direction.normalize();\n _quaternion.setFromUnitVectors(_zAxis, _direction);\n\n vis.mesh.position.copy(_parentPos);\n vis.mesh.quaternion.copy(_quaternion);\n vis.mesh.scale.set(length, length, length);\n }\n\n this.updateAxisGizmo(camera, domElement);\n }\n\n private syncVisibilityOpacity(): void {\n const alpha = this.visibilityAlpha * this.opacityScale;\n this.mappedMaterial.opacity = OPACITY.mapped * alpha;\n this.unmappedMaterial.opacity = OPACITY.unmapped * alpha;\n this.highlightMaterial.opacity = OPACITY.highlighted * alpha;\n this.selectedMaterial.opacity = OPACITY.selected * alpha;\n this.contextMaterial.opacity = OPACITY.context * alpha;\n this.mutedMaterial.opacity = OPACITY.muted * alpha;\n }\n\n private syncGroupVisibility(): void {\n this.group.visible = this.visualizations.length > 0 && (\n this.visibilityTarget > 0 ||\n this.visibilityAlpha > VISIBILITY_EPSILON ||\n this.selectedBone != null\n );\n }\n\n private advanceVisibility(): void {\n const now = typeof performance !== 'undefined' ? performance.now() : Date.now();\n const deltaMs = this.visibilityLastFrameAt > 0 ? now - this.visibilityLastFrameAt : 16;\n this.visibilityLastFrameAt = now;\n\n if (Math.abs(this.visibilityAlpha - this.visibilityTarget) > VISIBILITY_EPSILON) {\n const step = deltaMs / VISIBILITY_FADE_MS;\n if (this.visibilityTarget > this.visibilityAlpha) {\n this.visibilityAlpha = Math.min(this.visibilityTarget, this.visibilityAlpha + step);\n } else {\n this.visibilityAlpha = Math.max(this.visibilityTarget, this.visibilityAlpha - step);\n }\n } else {\n this.visibilityAlpha = this.visibilityTarget;\n }\n\n if (this.visibilityAlpha <= VISIBILITY_EPSILON && this.visibilityTarget === 0) {\n this.visibilityAlpha = 0;\n }\n\n this.syncVisibilityOpacity();\n this.syncGroupVisibility();\n }\n\n private resolveSelectedBoneObject(): THREE.Bone | null {\n if (!this.selectedBone) return null;\n return this.boneLookup.get(this.selectedBone) ?? null;\n }\n\n private resolveBoneRelativeAxisGizmoRadius(bone: THREE.Bone): number {\n bone.getWorldPosition(_parentPos);\n\n let referenceLength = 0;\n for (const child of bone.children) {\n if (!isBone(child)) continue;\n child.getWorldPosition(_childPos);\n const nextDistance = _parentPos.distanceTo(_childPos);\n if (nextDistance <= 0.0001) continue;\n referenceLength = referenceLength === 0 ? nextDistance : Math.min(referenceLength, nextDistance);\n }\n\n if (referenceLength <= 0.0001 && isBone(bone.parent)) {\n bone.parent.getWorldPosition(_childPos);\n referenceLength = _parentPos.distanceTo(_childPos);\n }\n\n if (referenceLength <= 0.0001) {\n referenceLength = LEAF_BONE_LENGTH;\n }\n\n return THREE.MathUtils.clamp(\n referenceLength * AXIS_GIZMO_RADIUS_FACTOR,\n AXIS_GIZMO_MIN_RADIUS,\n AXIS_GIZMO_MAX_RADIUS,\n );\n }\n\n private resolveScreenSpaceAxisGizmoRadius(\n origin: THREE.Vector3,\n camera?: THREE.Camera | null,\n domElement?: HTMLElement | null,\n ): number | null {\n if (!camera || !domElement) return null;\n\n const rect = domElement.getBoundingClientRect();\n const viewportHeight = domElement.clientHeight || rect.height;\n if (viewportHeight <= 0) return null;\n\n if ((camera as THREE.PerspectiveCamera).isPerspectiveCamera) {\n const perspectiveCamera = camera as THREE.PerspectiveCamera;\n _cameraSpacePosition.copy(origin).applyMatrix4(perspectiveCamera.matrixWorldInverse);\n const depth = -_cameraSpacePosition.z;\n if (!Number.isFinite(depth) || depth <= perspectiveCamera.near) return null;\n\n const visibleWorldHeight = 2\n * depth\n * Math.tan(THREE.MathUtils.degToRad(perspectiveCamera.getEffectiveFOV()) / 2);\n return visibleWorldHeight * (AXIS_GIZMO_SCREEN_RADIUS_PX / viewportHeight);\n }\n\n if ((camera as THREE.OrthographicCamera).isOrthographicCamera) {\n const orthographicCamera = camera as THREE.OrthographicCamera;\n const visibleWorldHeight = (orthographicCamera.top - orthographicCamera.bottom) / orthographicCamera.zoom;\n return visibleWorldHeight * (AXIS_GIZMO_SCREEN_RADIUS_PX / viewportHeight);\n }\n\n return null;\n }\n\n private resolveAxisGizmoRadius(\n bone: THREE.Bone,\n origin: THREE.Vector3,\n camera?: THREE.Camera | null,\n domElement?: HTMLElement | null,\n ): number {\n return this.resolveScreenSpaceAxisGizmoRadius(origin, camera, domElement)\n ?? this.resolveBoneRelativeAxisGizmoRadius(bone);\n }\n\n private updateAxisGizmoAppearance(): void {\n const hasSelection = !!this.selectedBone;\n this.axisGizmoGroup.visible = hasSelection && this.group.visible;\n\n const meshes: Array<[OverlayAxisKey, THREE.Mesh, THREE.Mesh]> = [\n ['pitch', this.axisGizmoMeshes.pitch, this.axisGizmoHitMeshes.pitch],\n ['yaw', this.axisGizmoMeshes.yaw, this.axisGizmoHitMeshes.yaw],\n ['roll', this.axisGizmoMeshes.roll, this.axisGizmoHitMeshes.roll],\n ];\n\n meshes.forEach(([axis, mesh, hitMesh]) => {\n const material = mesh.material as THREE.MeshBasicMaterial;\n const isActive = this.activeAxis === axis;\n const baseOpacity = this.activeAxis == null\n ? AXIS_GIZMO_IDLE_OPACITY\n : isActive\n ? AXIS_GIZMO_ACTIVE_OPACITY\n : AXIS_GIZMO_MUTED_OPACITY;\n material.opacity = hasSelection ? baseOpacity : 0;\n const scale = isActive ? AXIS_GIZMO_ACTIVE_SCALE : 1;\n mesh.scale.setScalar(scale);\n hitMesh.scale.setScalar(scale);\n });\n this.axisCenterMaterial.opacity = hasSelection ? 0.92 : 0;\n }\n\n private updateAxisGizmo(camera?: THREE.Camera | null, domElement?: HTMLElement | null): void {\n const selectedBone = this.resolveSelectedBoneObject();\n if (!selectedBone || !this.group.visible) {\n this.axisGizmoGroup.visible = false;\n return;\n }\n\n selectedBone.getWorldPosition(_bonePos);\n selectedBone.getWorldQuaternion(_boneQuat);\n const radius = this.resolveAxisGizmoRadius(selectedBone, _bonePos, camera, domElement);\n\n this.axisGizmoGroup.visible = true;\n this.axisGizmoGroup.position.copy(_bonePos);\n this.axisGizmoGroup.quaternion.copy(_boneQuat);\n this.axisGizmoGroup.scale.setScalar(radius);\n this.updateAxisGizmoAppearance();\n this.axisGizmoGroup.updateWorldMatrix(true, true);\n }\n\n private applyAxisRingChannel(\n mesh: THREE.Mesh,\n hitMesh: THREE.Mesh,\n axis: SkeletonOverlayAxisKey,\n ): void {\n const channel = DEFAULT_AXIS_CHANNELS[axis];\n mesh.rotation.set(0, 0, 0);\n hitMesh.rotation.set(0, 0, 0);\n\n if (channel === 'rx') {\n mesh.rotation.y = Math.PI / 2;\n hitMesh.rotation.y = Math.PI / 2;\n return;\n }\n\n if (channel === 'ry') {\n mesh.rotation.x = Math.PI / 2;\n hitMesh.rotation.x = Math.PI / 2;\n }\n }\n\n private syncAxisGizmoChannels(): void {\n (Object.keys(this.axisGizmoMeshes) as OverlayAxisKey[]).forEach((axis) => {\n this.applyAxisRingChannel(\n this.axisGizmoMeshes[axis],\n this.axisGizmoHitMeshes[axis],\n axis,\n );\n });\n }\n\n private getSelectedBonePointerData(): Omit<AxisGizmoPointerData, 'axis' | 'point' | 'channel'> | null {\n const bone = this.resolveSelectedBoneObject();\n if (!bone || !this.selectedBone) return null;\n\n bone.getWorldPosition(_bonePos);\n bone.getWorldQuaternion(_boneQuat);\n\n return {\n boneName: this.selectedBone,\n origin: _bonePos.clone(),\n quaternion: _boneQuat.clone(),\n };\n }\n\n private getAxisPlaneNormal(axis: SkeletonOverlayAxisKey, quaternion: THREE.Quaternion): THREE.Vector3 {\n const channel = DEFAULT_AXIS_CHANNELS[axis];\n if (channel === 'rx') {\n return _planeNormal.set(1, 0, 0).applyQuaternion(quaternion).normalize();\n }\n if (channel === 'ry') {\n return _planeNormal.set(0, 1, 0).applyQuaternion(quaternion).normalize();\n }\n return _planeNormal.set(0, 0, 1).applyQuaternion(quaternion).normalize();\n }\n\n // ── Public API ─────────────────────────────────────────────────────────\n\n getBoneTree(): BoneTreeNode[] {\n return this.boneTree;\n }\n\n setVisible(visible: boolean): void {\n this.visibilityTarget = visible ? 1 : 0;\n this.visibilityLastFrameAt = 0;\n this.syncGroupVisibility();\n this.advanceVisibility();\n this.updateAxisGizmoAppearance();\n }\n\n isVisible(): boolean {\n return this.visibilityTarget > 0;\n }\n\n setHighlighted(boneName: string | null): void {\n this.highlightedBone = boneName;\n this.refreshBoneMaterials();\n }\n\n setSelected(boneName: string | null): void {\n this.selectedBone = boneName;\n\n this.refreshBoneMaterials();\n this.syncGroupVisibility();\n this.updateAxisGizmo();\n }\n\n setActiveAxis(axis: OverlayAxisKey | null): void {\n this.activeAxis = axis;\n this.updateAxisGizmoAppearance();\n }\n\n /** Get world position and rotation for a bone by name */\n getBoneTransform(boneName: string): { position: [number, number, number]; rotation: [number, number, number] } | null {\n const node = this.boneTree.find((b) => b.name === boneName);\n if (!node) return null;\n\n const bone = node.boneObject;\n bone.getWorldPosition(_bonePos);\n bone.getWorldQuaternion(_boneQuat);\n _boneEuler.setFromQuaternion(_boneQuat);\n\n return {\n position: [_bonePos.x, _bonePos.y, _bonePos.z],\n rotation: [\n THREE.MathUtils.radToDeg(_boneEuler.x),\n THREE.MathUtils.radToDeg(_boneEuler.y),\n THREE.MathUtils.radToDeg(_boneEuler.z),\n ],\n };\n }\n\n pickBone(clientX: number, clientY: number, camera: THREE.Camera, domElement: HTMLElement): string | null {\n if (!this.group.visible || this.visibilityTarget <= 0 || this.visibilityAlpha <= 0.35) {\n return null;\n }\n if (!setRayFromPointer(clientX, clientY, camera, domElement)) {\n return null;\n }\n const hits = _raycaster.intersectObjects(\n this.visualizations.map((visualization) => visualization.mesh),\n false,\n );\n const hit = hits[0];\n if (!hit) return null;\n\n return typeof hit.object.userData.boneName === 'string'\n ? hit.object.userData.boneName\n : null;\n }\n\n pickAxisGizmo(clientX: number, clientY: number, camera: THREE.Camera, domElement: HTMLElement): AxisGizmoPointerData | null {\n if (!this.axisGizmoGroup.visible || !this.selectedBone) return null;\n this.updateAxisGizmo(camera, domElement);\n if (!this.axisGizmoGroup.visible) return null;\n if (!setRayFromPointer(clientX, clientY, camera, domElement)) {\n return null;\n }\n\n const hits = _raycaster.intersectObjects(Object.values(this.axisGizmoHitMeshes), false);\n const hit = hits[0];\n if (!hit) return null;\n\n const axis: unknown = hit.object.userData.axis;\n if (axis !== 'pitch' && axis !== 'yaw' && axis !== 'roll') {\n return null;\n }\n\n const base = this.getSelectedBonePointerData();\n if (!base) return null;\n\n return {\n ...base,\n axis,\n channel: DEFAULT_AXIS_CHANNELS[axis],\n point: hit.point.clone(),\n };\n }\n\n projectPointerToAxisPlane(\n clientX: number,\n clientY: number,\n camera: THREE.Camera,\n domElement: HTMLElement,\n axis: SkeletonOverlayAxisKey,\n ): AxisGizmoPointerData | null {\n if (!this.axisGizmoGroup.visible || !this.selectedBone) {\n return null;\n }\n this.updateAxisGizmo(camera, domElement);\n if (!this.axisGizmoGroup.visible) return null;\n const base = this.getSelectedBonePointerData();\n if (!base) return null;\n if (!setRayFromPointer(clientX, clientY, camera, domElement)) {\n return null;\n }\n\n const normal = this.getAxisPlaneNormal(axis, base.quaternion);\n _dragPlane.setFromNormalAndCoplanarPoint(normal, base.origin);\n const hit = _raycaster.ray.intersectPlane(_dragPlane, _planeHit);\n if (!hit) return null;\n\n return {\n ...base,\n axis,\n channel: DEFAULT_AXIS_CHANNELS[axis],\n point: hit.clone(),\n };\n }\n\n private isSelectedContextBone(boneName: string): boolean {\n if (!this.selectedBone || boneName === this.selectedBone) return false;\n const selectedBone = this.boneLookup.get(this.selectedBone);\n const bone = this.boneLookup.get(boneName);\n if (!selectedBone || !bone) return false;\n return bone.parent === selectedBone || selectedBone.parent === bone;\n }\n\n private resolveBoneMaterial(boneName: string, isMapped: boolean): THREE.MeshBasicMaterial {\n if (boneName === this.selectedBone) {\n return this.selectedMaterial;\n }\n if (boneName === this.highlightedBone) {\n return this.highlightMaterial;\n }\n if (this.focusSelectedBone && this.selectedBone) {\n return this.isSelectedContextBone(boneName) ? this.contextMaterial : this.mutedMaterial;\n }\n return isMapped ? this.mappedMaterial : this.unmappedMaterial;\n }\n\n private refreshBoneMaterials(): void {\n for (const vis of this.visualizations) {\n vis.mesh.material = this.resolveBoneMaterial(vis.boneName, vis.isMapped);\n }\n }\n\n private clear(): void {\n // Dispose sentinel mesh resources before clearing\n if (this.sentinelMesh) {\n this.sentinelMesh.geometry.dispose();\n (this.sentinelMesh.material as THREE.Material).dispose();\n this.sentinelMesh = null;\n }\n // Remove all children from group\n while (this.group.children.length > 0) {\n this.group.remove(this.group.children[0]);\n }\n this.visualizations = [];\n this.boneTree = [];\n this.boneLookup.clear();\n this.axisGizmoGroup.visible = false;\n this.group.visible = false;\n }\n\n dispose(): void {\n this.scene.remove(this.group);\n this.clear();\n\n this.sharedGeometry.dispose();\n this.mappedMaterial.dispose();\n this.unmappedMaterial.dispose();\n this.highlightMaterial.dispose();\n this.selectedMaterial.dispose();\n this.contextMaterial.dispose();\n this.mutedMaterial.dispose();\n this.axisRingGeometry.dispose();\n this.axisRingHitGeometry.dispose();\n this.axisCenterGeometry.dispose();\n this.pitchRingMaterial.dispose();\n this.yawRingMaterial.dispose();\n this.rollRingMaterial.dispose();\n this.axisHitMaterial.dispose();\n this.axisCenterMaterial.dispose();\n }\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nexport function collectSkeletonBones(root: THREE.Object3D): THREE.Bone[] {\n const startBone = resolveBodyDisplayRoot(root);\n return collectBones(startBone ?? root);\n}\n\n/**\n * Find the model root from a scene by locating the first bone\n * and walking up to the top-level scene child.\n */\nexport function findModelRoot(scene: THREE.Scene): THREE.Object3D | null {\n const roots: {\n tagged?: THREE.Object3D;\n bone?: THREE.Object3D;\n skinned?: THREE.Object3D;\n } = {};\n\n scene.traverse((obj) => {\n if (!roots.tagged && (obj.userData?.embodyCharacterModel === true || obj.userData?.loomlargeCharacterModel === true)) {\n roots.tagged = obj;\n }\n if (!roots.bone && (obj as THREE.Bone).isBone) {\n roots.bone = obj;\n }\n if (!roots.skinned && (obj as THREE.SkinnedMesh).isSkinnedMesh) {\n roots.skinned = obj;\n }\n });\n\n if (roots.tagged) return roots.tagged;\n\n const anchor = roots.bone ?? roots.skinned;\n if (!anchor) return null;\n\n // Walk up to find the direct child of the scene\n let current: THREE.Object3D | null = anchor;\n while (current && current.parent && current.parent !== scene) {\n current = current.parent;\n }\n\n return current;\n}\n\n/**\n * Build a set of mapped bone names and a semantic key lookup\n * from an engine's profile configuration.\n */\nexport function buildMappedBoneInfo(profile: {\n boneNodes?: Record<string, string>;\n bonePrefix?: string;\n boneSuffix?: string;\n suffixPattern?: string;\n}, actualBoneNames: Iterable<string> = []): { mappedNames: Set<string>; semanticKeyMap: Map<string, string>; semanticKeysMap: Map<string, string[]> } {\n const mappedNames = new Set<string>();\n const semanticKeyMap = new Map<string, string>();\n const semanticKeysMap = new Map<string, string[]>();\n const actualNames = Array.from(new Set(actualBoneNames));\n\n const boneNodes = profile.boneNodes || {};\n const prefix = profile.bonePrefix || '';\n const suffix = profile.boneSuffix || '';\n const addSemanticKey = (boneName: string, semanticKey: string) => {\n mappedNames.add(boneName);\n if (!semanticKeyMap.has(boneName)) {\n semanticKeyMap.set(boneName, semanticKey);\n }\n\n const existing = semanticKeysMap.get(boneName) ?? [];\n if (!existing.includes(semanticKey)) {\n semanticKeysMap.set(boneName, [...existing, semanticKey]);\n }\n };\n\n for (const [semanticKey, nodeName] of Object.entries(boneNodes)) {\n const fullName = prefix + nodeName + suffix;\n addSemanticKey(fullName, semanticKey);\n // Also add raw name for fuzzy matching\n if (fullName !== nodeName) {\n addSemanticKey(nodeName, semanticKey);\n }\n actualNames.forEach((actualName) => {\n if (\n fuzzyNameMatch(actualName, fullName, profile.suffixPattern)\n || fuzzyNameMatch(actualName, nodeName, profile.suffixPattern)\n ) {\n addSemanticKey(actualName, semanticKey);\n }\n });\n }\n\n return { mappedNames, semanticKeyMap, semanticKeysMap };\n}\n","import * as THREE from 'three';\n\nconst DEFAULT_THRESHOLD = 1e-4;\nconst DEFAULT_MAX_POINTS = 12000;\n\nconst COLOR_LOW = { r: 1.0, g: 0.78, b: 0.28 };\nconst COLOR_HIGH = { r: 1.0, g: 0.36, b: 0.16 };\n\nexport interface MorphVertexPreviewOptions {\n threshold?: number;\n maxPoints?: number;\n}\n\nexport interface MorphVertexPreviewSample {\n indices: Uint32Array;\n intensities: Float32Array;\n}\n\nexport interface MorphVertexPreviewRenderData {\n positions: Float32Array;\n colors: Float32Array;\n pointCount: number;\n meshCount: number;\n}\n\nfunction getMorphPositionAttribute(\n mesh: THREE.Mesh,\n morphName: string,\n): THREE.BufferAttribute | THREE.InterleavedBufferAttribute | null {\n const morphIndex = mesh.morphTargetDictionary?.[morphName];\n if (morphIndex == null) return null;\n\n const morphPositions = mesh.geometry.morphAttributes.position;\n return morphPositions?.[morphIndex] ?? null;\n}\n\nfunction getDeltaMagnitudeAtIndex(\n mesh: THREE.Mesh,\n morphAttribute: THREE.BufferAttribute | THREE.InterleavedBufferAttribute,\n index: number,\n): number {\n const geometry = mesh.geometry;\n const relative = geometry.morphTargetsRelative;\n const basePositions = geometry.getAttribute('position');\n if (!basePositions) return 0;\n\n const dx = morphAttribute.getX(index) - (relative ? 0 : basePositions.getX(index));\n const dy = morphAttribute.getY(index) - (relative ? 0 : basePositions.getY(index));\n const dz = morphAttribute.getZ(index) - (relative ? 0 : basePositions.getZ(index));\n return Math.hypot(dx, dy, dz);\n}\n\nexport function resolveMorphPreviewMeshes(\n root: THREE.Object3D,\n morphName: string,\n meshNames?: string[],\n): THREE.Mesh[] {\n const nameFilter = meshNames ? new Set(meshNames) : null;\n const meshes: THREE.Mesh[] = [];\n\n root.traverse((obj) => {\n const mesh = obj as THREE.Mesh;\n if (!mesh.isMesh) return;\n if (nameFilter && !nameFilter.has(mesh.name)) return;\n if (mesh.morphTargetDictionary?.[morphName] == null) return;\n meshes.push(mesh);\n });\n\n return meshes;\n}\n\nexport function buildMorphVertexPreviewSample(\n mesh: THREE.Mesh,\n morphName: string,\n options: MorphVertexPreviewOptions = {},\n): MorphVertexPreviewSample | null {\n const threshold = options.threshold ?? DEFAULT_THRESHOLD;\n const maxPoints = options.maxPoints ?? DEFAULT_MAX_POINTS;\n const morphAttribute = getMorphPositionAttribute(mesh, morphName);\n if (!morphAttribute) return null;\n\n const candidateIndices: number[] = [];\n const magnitudes: number[] = [];\n\n for (let index = 0; index < morphAttribute.count; index += 1) {\n const magnitude = getDeltaMagnitudeAtIndex(mesh, morphAttribute, index);\n if (magnitude <= threshold) continue;\n candidateIndices.push(index);\n magnitudes.push(magnitude);\n }\n\n if (candidateIndices.length === 0) return null;\n\n const stride = candidateIndices.length > maxPoints ? Math.ceil(candidateIndices.length / maxPoints) : 1;\n const sampleCount = Math.ceil(candidateIndices.length / stride);\n const indices = new Uint32Array(sampleCount);\n const intensities = new Float32Array(sampleCount);\n\n let maxMagnitude = 0;\n let cursor = 0;\n for (let i = 0; i < candidateIndices.length; i += stride) {\n const magnitude = magnitudes[i] ?? 0;\n indices[cursor] = candidateIndices[i] ?? 0;\n intensities[cursor] = magnitude;\n maxMagnitude = Math.max(maxMagnitude, magnitude);\n cursor += 1;\n }\n\n const normalizer = maxMagnitude > 0 ? 1 / maxMagnitude : 1;\n for (let i = 0; i < intensities.length; i += 1) {\n intensities[i] *= normalizer;\n }\n\n return { indices, intensities };\n}\n\nfunction writePointColor(colors: Float32Array, offset: number, intensity: number): void {\n colors[offset] = COLOR_LOW.r + (COLOR_HIGH.r - COLOR_LOW.r) * intensity;\n colors[offset + 1] = COLOR_LOW.g + (COLOR_HIGH.g - COLOR_LOW.g) * intensity;\n colors[offset + 2] = COLOR_LOW.b + (COLOR_HIGH.b - COLOR_LOW.b) * intensity;\n}\n\nexport function buildMorphVertexPreviewRenderData(\n meshes: THREE.Mesh[],\n morphName: string,\n cache: Map<string, MorphVertexPreviewSample>,\n options: MorphVertexPreviewOptions = {},\n previous: MorphVertexPreviewRenderData | null = null,\n): MorphVertexPreviewRenderData | null {\n const threshold = options.threshold ?? DEFAULT_THRESHOLD;\n const maxPoints = options.maxPoints ?? DEFAULT_MAX_POINTS;\n const sampledMeshes: Array<{ mesh: THREE.Mesh; sample: MorphVertexPreviewSample }> = [];\n let pointCount = 0;\n\n for (const mesh of meshes) {\n const cacheKey = `${mesh.uuid}:${morphName}:${threshold}:${maxPoints}`;\n let sample = cache.get(cacheKey) ?? null;\n if (!sample) {\n sample = buildMorphVertexPreviewSample(mesh, morphName, { threshold, maxPoints });\n if (sample) cache.set(cacheKey, sample);\n }\n if (!sample) continue;\n sampledMeshes.push({ mesh, sample });\n pointCount += sample.indices.length;\n }\n\n if (pointCount === 0) return null;\n\n const positions = previous?.positions.length === pointCount * 3\n ? previous.positions : new Float32Array(pointCount * 3);\n const colors = previous?.colors.length === pointCount * 3\n ? previous.colors : new Float32Array(pointCount * 3);\n const vertex = new THREE.Vector3();\n let cursor = 0;\n\n for (const { mesh, sample } of sampledMeshes) {\n mesh.updateWorldMatrix(true, false);\n const skinnedMesh = mesh as THREE.SkinnedMesh;\n if (skinnedMesh.isSkinnedMesh && skinnedMesh.skeleton) {\n skinnedMesh.skeleton.update();\n }\n\n for (let i = 0; i < sample.indices.length; i += 1) {\n mesh.getVertexPosition(sample.indices[i] ?? 0, vertex);\n vertex.applyMatrix4(mesh.matrixWorld);\n\n const offset = cursor * 3;\n positions[offset] = vertex.x;\n positions[offset + 1] = vertex.y;\n positions[offset + 2] = vertex.z;\n writePointColor(colors, offset, sample.intensities[i] ?? 0);\n cursor += 1;\n }\n }\n\n return {\n positions,\n colors,\n pointCount,\n meshCount: sampledMeshes.length,\n };\n}\n\ntype PreviewRenderBinding = {\n callbacks: Set<() => void>;\n previous: THREE.Scene['onBeforeRender'];\n render: THREE.Scene['onBeforeRender'];\n};\nconst previewRenderBindings = new WeakMap<THREE.Scene, PreviewRenderBinding>();\n\nfunction bindPreviewRender(scene: THREE.Scene, update: () => void): () => void {\n let binding = previewRenderBindings.get(scene);\n if (!binding) {\n const previous = scene.onBeforeRender;\n const callbacks = new Set<() => void>();\n const render: THREE.Scene['onBeforeRender'] = function (...args) {\n previous.apply(scene, args);\n callbacks.forEach(callback => callback());\n };\n binding = { callbacks, previous, render };\n scene.onBeforeRender = render;\n previewRenderBindings.set(scene, binding);\n }\n binding.callbacks.add(update);\n const current = binding;\n return () => {\n current.callbacks.delete(update);\n if (current.callbacks.size > 0) return;\n if (scene.onBeforeRender === current.render) scene.onBeforeRender = current.previous;\n if (previewRenderBindings.get(scene) === current) previewRenderBindings.delete(scene);\n };\n}\n\n/** Editor overlay sampled by the existing Three render loop, without a separate frame timer. */\nexport class MorphVertexPreview {\n private readonly cache = new Map<string, MorphVertexPreviewSample>();\n private points: THREE.Points<THREE.BufferGeometry, THREE.PointsMaterial> | null = null;\n private active: { morphName: string; meshNames?: string[] } | null = null;\n private renderData: MorphVertexPreviewRenderData | null = null;\n private disposed = false;\n private unbindRender: (() => void) | null = null;\n\n constructor(\n private readonly scene: THREE.Scene,\n private readonly options: MorphVertexPreviewOptions = {},\n ) {}\n\n show(morphName: string, meshNames?: string[]): void {\n if (this.disposed) return;\n if (meshNames?.length === 0) {\n this.hide();\n return;\n }\n if (this.active?.morphName !== morphName\n || this.active?.meshNames?.length !== meshNames?.length\n || meshNames?.some((name, index) => name !== this.active?.meshNames?.[index])) {\n this.cache.clear();\n this.renderData = null;\n }\n this.active = { morphName, meshNames: meshNames?.slice() };\n this.unbindRender ??= bindPreviewRender(this.scene, () => this.update());\n this.update();\n }\n\n hide(): void {\n this.active = null;\n this.cache.clear();\n this.renderData = null;\n this.unbindRender?.();\n this.unbindRender = null;\n if (this.points) this.points.visible = false;\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.hide();\n this.cache.clear();\n if (!this.points) return;\n this.points.removeFromParent();\n this.points.geometry.dispose();\n this.points.material.dispose();\n this.points = null;\n }\n\n private createPoints(): THREE.Points<THREE.BufferGeometry, THREE.PointsMaterial> {\n const points = new THREE.Points(new THREE.BufferGeometry(), new THREE.PointsMaterial({\n size: 0.012,\n sizeAttenuation: true,\n transparent: true,\n opacity: 0.9,\n depthWrite: false,\n vertexColors: true,\n toneMapped: false,\n }));\n points.name = 'MorphVertexPreviewPoints';\n points.renderOrder = 500;\n points.frustumCulled = false;\n points.visible = false;\n this.scene.add(points);\n this.points = points;\n return points;\n }\n\n private update(): void {\n if (this.disposed || !this.active) return;\n const { morphName, meshNames } = this.active;\n const meshes = resolveMorphPreviewMeshes(this.scene, morphName, meshNames);\n const data = buildMorphVertexPreviewRenderData(meshes, morphName, this.cache, this.options, this.renderData);\n this.renderData = data;\n if (!data) {\n if (this.points) this.points.visible = false;\n return;\n }\n const points = this.points ?? this.createPoints();\n this.updateGeometry(points.geometry, data);\n points.geometry.computeBoundingSphere();\n points.material.size = data.pointCount > 6000 ? 0.009 : 0.012;\n points.visible = true;\n }\n\n private updateGeometry(\n geometry: THREE.BufferGeometry,\n data: MorphVertexPreviewRenderData,\n ): void {\n const position = geometry.getAttribute('position') as THREE.BufferAttribute | undefined;\n const color = geometry.getAttribute('color') as THREE.BufferAttribute | undefined;\n if (!position || !color || position.count !== data.pointCount || color.count !== data.pointCount) {\n // Let Three release the old GPU attributes before replacing their handles.\n if (position || color) geometry.dispose();\n geometry.setAttribute('position', new THREE.BufferAttribute(data.positions, 3));\n geometry.setAttribute('color', new THREE.BufferAttribute(data.colors, 3));\n return;\n }\n if (position.array !== data.positions) position.array.set(data.positions);\n if (color.array !== data.colors) color.array.set(data.colors);\n position.needsUpdate = true;\n color.needsUpdate = true;\n }\n}\n","import type { MeshHighlightFrame } from '../wasm/highlighting';\nimport {\n AdditiveBlending,\n AnimationClip,\n BufferAttribute,\n Euler,\n InterpolateDiscrete,\n MeshBasicMaterial,\n MultiplyBlending,\n NoBlending,\n NormalBlending,\n NumberKeyframeTrack,\n PropertyBinding,\n Quaternion,\n QuaternionKeyframeTrack,\n SubtractiveBlending,\n VectorKeyframeTrack,\n} from 'three';\nexport * from './annotations/index';\nexport * from './vrm-animation';\nexport * from './authoring';\nexport * from './character';\nexport * from './characterHost';\nexport { renderScenePlayback, createScenePlaybackFrame } from './playbackRendering';\nimport { bindModelReferencePose } from './reference-pose';\nimport { concreteTrackName, withComponentTracks } from './clipBindings';\nimport type { ThreeModelReferencePose, ThreeReferencePoseNode } from './reference-pose';\nimport type { BlendingMode, MeshMaterialSettings, ThreeResolvedMaterialConfig } from './authoringTypes';\n\nexport { captureModelReferencePose, bindModelReferencePose, extendModelReferencePose } from './reference-pose';\nexport type { ThreeModelReferencePose, ThreeReferencePoseNode } from './reference-pose';\nexport { ThreeNativePlaybackConnector } from './nativePlayback';\nexport type {\n ThreeNativeLoop,\n ThreeNativePlaybackOptions,\n ThreeNativePlaybackControl,\n ThreeNativePlaybackEvent,\n ThreeNativePlaybackBinding,\n} from './nativePlayback';\nimport type {\n KeyframeTrack,\n Material,\n Mesh,\n Object3D,\n} from 'three';\n\nexport const THREE_BLENDING_MODES = {\n Normal: NormalBlending,\n Additive: AdditiveBlending,\n Subtractive: SubtractiveBlending,\n Multiply: MultiplyBlending,\n None: NoBlending,\n} as const;\nexport const BLENDING_MODES = THREE_BLENDING_MODES;\n\ntype BoneEntry = {\n obj: Object3D;\n basePos: { x: number; y: number; z: number };\n baseQuat: ReturnType<Object3D['quaternion']['clone']>;\n baseEuler: { x: number; y: number; z: number; order: string };\n};\n\nconst MORPH_ATTRIBUTE_SEMANTICS = ['position', 'normal', 'tangent', 'color'] as const;\ntype MorphAttributeSemantic = typeof MORPH_ATTRIBUTE_SEMANTICS[number];\n\ntype MorphTargetInput = {\n meshName: string;\n name: string;\n relative?: boolean;\n position: ArrayLike<number>;\n normal?: ArrayLike<number>;\n tangent?: ArrayLike<number>;\n color?: ArrayLike<number>;\n};\n\ntype AddMorphTargetOptions = {\n forceGeometryReplacement?: boolean;\n replace?: boolean;\n resetInfluence?: boolean;\n};\n\ntype MorphMutationStage = {\n mesh: Mesh;\n sourceGeometry: Mesh['geometry'];\n geometry: Mesh['geometry'];\n dictionary: Record<string, number>;\n influences: number[];\n};\n\nconst createNeutralMorphAttribute = (\n geometry: Mesh['geometry'],\n semantic: MorphAttributeSemantic,\n name: string,\n) => {\n const base = geometry.getAttribute(semantic);\n if (!base) throw new Error(`Cannot create ${semantic} morph data without a base attribute`);\n\n const values = new Float32Array(base.count * base.itemSize);\n if (!geometry.morphTargetsRelative) {\n for (let vertexIndex = 0; vertexIndex < base.count; vertexIndex += 1) {\n for (let component = 0; component < base.itemSize; component += 1) {\n values[vertexIndex * base.itemSize + component] = base.getComponent(vertexIndex, component);\n }\n }\n }\n\n const attribute = new BufferAttribute(values, base.itemSize);\n attribute.name = name;\n return attribute;\n};\n\nconst createMorphAttribute = (\n geometry: Mesh['geometry'],\n semantic: MorphAttributeSemantic,\n name: string,\n data: ArrayLike<number>,\n sourceIsRelative: boolean,\n) => {\n const base = geometry.getAttribute(semantic);\n if (!base || data.length !== base.count * base.itemSize) {\n throw new Error(`Invalid ${semantic} morph data length`);\n }\n\n const values = new Float32Array(Array.from(data));\n const destinationIsRelative = geometry.morphTargetsRelative;\n if (sourceIsRelative !== destinationIsRelative) {\n for (let vertexIndex = 0; vertexIndex < base.count; vertexIndex += 1) {\n for (let component = 0; component < base.itemSize; component += 1) {\n const offset = vertexIndex * base.itemSize + component;\n const baseValue = base.getComponent(vertexIndex, component);\n values[offset] = destinationIsRelative\n ? values[offset] - baseValue\n : values[offset] + baseValue;\n }\n }\n }\n\n const attribute = new BufferAttribute(values, base.itemSize);\n attribute.name = name;\n return attribute;\n};\n\nexport type ThreeModelInspection = {\n descriptor: Record<string, unknown> & {\n morphTargets: Array<{\n id: number;\n meshId: number | undefined;\n name: string;\n hostIndex: number;\n initialValue: number;\n }>;\n };\n meshByName: Map<string, Mesh>;\n allMeshes: Mesh[];\n morphMeshes: Mesh[];\n bones: Record<string, BoneEntry>;\n meshBindings: Map<number, Mesh>;\n morphBindings: Map<number, { mesh: Mesh; index: number }>;\n boneBindings: Map<number, Object3D>;\n objectBindings: Map<number, Object3D>;\n};\n\nconst transform = (obj: Object3D) => ({\n position: { x: obj.position.x, y: obj.position.y, z: obj.position.z },\n rotation: { x: obj.quaternion.x, y: obj.quaternion.y, z: obj.quaternion.z, w: obj.quaternion.w },\n scale: { x: obj.scale.x, y: obj.scale.y, z: obj.scale.z },\n});\n\nconst snapshot = (obj: Object3D, reference?: ThreeReferencePoseNode): BoneEntry => {\n if (!reference) {\n return {\n obj,\n basePos: { x: obj.position.x, y: obj.position.y, z: obj.position.z },\n baseQuat: obj.quaternion.clone(),\n baseEuler: { x: obj.rotation.x, y: obj.rotation.y, z: obj.rotation.z, order: obj.rotation.order },\n };\n }\n const { position, rotation } = reference.transform;\n const baseQuat = new Quaternion(rotation.x, rotation.y, rotation.z, rotation.w);\n const euler = reference.rotationEuler ?? new Euler().setFromQuaternion(baseQuat, reference.rotationOrder);\n return {\n obj,\n basePos: { ...position },\n baseQuat,\n baseEuler: { x: euler.x, y: euler.y, z: euler.z, order: reference.rotationOrder },\n };\n};\n\nconst boneDepth = (obj: Object3D) => {\n let depth = 0;\n let parent = obj.parent;\n while (parent) {\n if ((parent as any).isBone || parent.type === 'Bone') depth += 1;\n parent = parent.parent;\n }\n return depth;\n};\n\nconst morphEntries = (mesh: Mesh) => {\n const dictionary = mesh.morphTargetDictionary\n ?? (mesh.geometry as unknown as { morphTargetDictionary?: Record<string, number> }).morphTargetDictionary;\n if (dictionary) {\n return Object.entries(dictionary)\n .map(([name, index]) => ({ name, index }))\n .sort((left, right) => left.index - right.index);\n }\n return (mesh.morphTargetInfluences ?? []).map((_, index) => ({ name: `morph_${index}`, index }));\n};\n\nexport class ThreeModelInspector {\n inspectModel(model: Object3D, options: {\n meshes?: Mesh[];\n profile?: any;\n /** Explicit reference captured before playback; omitted keeps legacy current-pose inspection. */\n referencePose?: ThreeModelReferencePose;\n } = {}): ThreeModelInspection {\n const references = options.referencePose ? bindModelReferencePose(model, options.referencePose) : undefined;\n const restTransform = (object: Object3D) => {\n const reference = references?.get(object);\n return reference ? {\n position: { ...reference.transform.position },\n rotation: { ...reference.transform.rotation },\n scale: { ...reference.transform.scale },\n } : transform(object);\n };\n const objects: Object3D[] = [];\n const allMeshes: Mesh[] = [];\n const boneObjects: Object3D[] = [];\n model.traverse((obj: any) => {\n if (highlightOverlays.has(obj)) return;\n objects.push(obj);\n if (obj.isMesh) allMeshes.push(obj);\n if (obj.isBone || obj.type === 'Bone') boneObjects.push(obj);\n });\n const inputMeshes = options.meshes ?? [];\n const morphMeshes = Array.from(new Set([...inputMeshes, ...allMeshes.filter((mesh) => morphEntries(mesh).length > 0)]));\n const meshByName = new Map(allMeshes.filter((mesh) => mesh.name).map((mesh) => [mesh.name, mesh]));\n const meshBindings = new Map(allMeshes.map((mesh, index) => [index + 1, mesh]));\n const boneBindings = new Map(boneObjects.map((bone, index) => [index + 1, bone]));\n const objectBindings = new Map(objects.map((object, index) => [index + 1, object]));\n const meshIds = new Map(Array.from(meshBindings, ([id, mesh]) => [mesh, id]));\n const boneIds = new Map(Array.from(boneBindings, ([id, bone]) => [bone, id]));\n const objectIds = new Map(Array.from(objectBindings, ([id, object]) => [object, id]));\n const morphBindings = new Map<number, { mesh: Mesh; index: number }>();\n const morphTargets: ThreeModelInspection['descriptor']['morphTargets'] = [];\n const morphIdsByMesh = new Map<Mesh, number[]>();\n let morphId = 1;\n for (const mesh of allMeshes) {\n const ids: number[] = [];\n for (const entry of morphEntries(mesh)) {\n ids.push(morphId);\n morphBindings.set(morphId, { mesh, index: entry.index });\n morphTargets.push({\n id: morphId,\n meshId: meshIds.get(mesh),\n name: entry.name,\n hostIndex: entry.index,\n initialValue: mesh.morphTargetInfluences?.[entry.index] ?? 0,\n });\n morphId += 1;\n }\n morphIdsByMesh.set(mesh, ids);\n }\n const bones: Record<string, BoneEntry> = {};\n for (const bone of boneObjects) {\n if (bone.name) bones[bone.name] = snapshot(bone, references?.get(bone));\n }\n const profile = options.profile;\n if (profile?.boneNodes) {\n for (const [key, base] of Object.entries(profile.boneNodes as Record<string, string>)) {\n const prefix = profile.bonePrefix ?? '';\n const suffix = profile.boneSuffix ?? '';\n const name = `${base.startsWith(prefix) ? '' : prefix}${base}${base.endsWith(suffix) ? '' : suffix}`;\n const object = model.getObjectByName(name) ?? model.getObjectByName(base);\n if (object) bones[key] = bones[object.name] ?? snapshot(object, references?.get(object));\n }\n }\n return {\n descriptor: {\n id: model.uuid,\n name: model.name || undefined,\n meshes: allMeshes.map((mesh) => ({\n id: meshIds.get(mesh),\n name: mesh.name,\n morphTargetIds: morphIdsByMesh.get(mesh) ?? [],\n visible: mesh.visible,\n })),\n morphTargets,\n bones: boneObjects.map((bone) => {\n const world = references?.get(bone)?.worldPosition ?? bone.getWorldPosition(bone.position.clone());\n const parent = bone.parent && ((bone.parent as any).isBone || bone.parent.type === 'Bone')\n ? bone.parent.name || null\n : null;\n return {\n id: boneIds.get(bone),\n name: bone.name,\n parentName: parent,\n worldPosition: { x: world.x, y: world.y, z: world.z },\n depth: boneDepth(bone),\n restTransform: restTransform(bone),\n };\n }),\n objects: objects.map((object) => ({\n id: objectIds.get(object),\n name: object.name,\n isBone: !!((object as any).isBone || object.type === 'Bone'),\n isCamera: !!(object as any).isCamera,\n restTransform: restTransform(object),\n })),\n },\n meshByName,\n allMeshes,\n morphMeshes,\n bones,\n meshBindings,\n morphBindings,\n boneBindings,\n objectBindings,\n };\n }\n}\n\nconst findTrackTarget = (model: Object3D, track: KeyframeTrack) => {\n try {\n const parsed = PropertyBinding.parseTrackName(track.name);\n const key = parsed.objectName === 'bones' && parsed.objectIndex\n ? String(parsed.objectIndex)\n : parsed.nodeName;\n const object = key\n ? model.getObjectByProperty('uuid', key) ?? PropertyBinding.findNode(model, key)\n : model;\n return { parsed, object };\n } catch {\n return null;\n }\n};\n\nexport type ClipIRTrack = {\n id?: number;\n channelId?: number;\n target: {\n kind?: string;\n meshId?: number;\n morphTargetId?: number;\n boneId?: number;\n objectId?: number;\n property?: string;\n };\n valueType: string;\n times: number[];\n values: number[];\n interpolation?: string;\n /** Replace the first sample with the bound property's current value. */\n inheritStart?: boolean;\n sourceName?: string;\n};\n\nexport type ClipIR = {\n name: string;\n durationSeconds?: number;\n channels?: Array<{ id: number; kind: string; name?: string }>;\n tracks: ClipIRTrack[];\n};\n\n/**\n * Convert host-neutral ClipIR (concrete morph/bone tracks) into a Three.js\n * AnimationClip. The host AnimationMixer owns playback and lerping.\n *\n * Inherited starts are captured from the current scene during this call. Cache\n * the ClipIR and call this again immediately before each play/replay, including\n * utterance replacement. Reusing a returned AnimationClip retains its old start.\n * The source ClipIR is never modified. A delayed inherited first key holds the\n * captured pose until that timestamp, matching ordinary Three track sampling.\n */\nexport function createAnimationClipFromClipIR(\n clip: ClipIR,\n inspection: ThreeModelInspection,\n): AnimationClip {\n const tracks: KeyframeTrack[] = [];\n for (const track of clip.tracks ?? []) {\n const kind = track.target?.kind;\n const trackName = concreteTrackName(track.target, inspection);\n if (!trackName) continue;\n const times = Array.from(track.times ?? []);\n const values = Array.from(track.values ?? []);\n if (!times.length || !values.length) continue;\n // Imported step tracks must keep their hold semantics on the host mixer.\n // Omitted/linear interpolation retains the existing Three default.\n const interpolation = track.interpolation === 'step' ? InterpolateDiscrete : undefined;\n\n if (kind === 'morphTarget') {\n const binding = inspection.morphBindings.get(Number(track.target.morphTargetId));\n if (!binding?.mesh) continue;\n if (track.inheritStart) {\n values[0] = binding.mesh.morphTargetInfluences?.[binding.index] ?? 0;\n }\n tracks.push(new NumberKeyframeTrack(trackName, times, values, interpolation));\n continue;\n }\n\n if (kind === 'boneTransform' || kind === 'objectTransform') {\n const object = kind === 'boneTransform'\n ? inspection.boneBindings.get(Number(track.target.boneId))\n : inspection.objectBindings.get(Number(track.target.objectId));\n if (!object) continue;\n const property = track.target.property ?? 'rotation';\n if (property === 'rotation' || property === 'quaternion') {\n if (track.inheritStart) object.quaternion.toArray(values, 0);\n tracks.push(new QuaternionKeyframeTrack(trackName, times, values, interpolation));\n } else if (property === 'eulerX' || property === 'eulerY' || property === 'eulerZ') {\n const axis = property.slice(-1).toLowerCase() as 'x' | 'y' | 'z';\n if (track.inheritStart) values[0] = object.rotation[axis];\n tracks.push(new NumberKeyframeTrack(trackName, times, values, interpolation));\n } else if (property === 'position') {\n if (track.inheritStart) object.position.toArray(values, 0);\n tracks.push(new VectorKeyframeTrack(trackName, times, values, interpolation));\n } else if (property === 'scale') {\n if (track.inheritStart) object.scale.toArray(values, 0);\n tracks.push(new VectorKeyframeTrack(trackName, times, values, interpolation));\n }\n continue;\n }\n\n if (kind === 'meshVisibility') {\n const mesh = inspection.meshBindings.get(Number(track.target.meshId));\n if (!mesh) continue;\n if (track.inheritStart) values[0] = Number(mesh.visible);\n tracks.push(new NumberKeyframeTrack(trackName, times, values, interpolation));\n }\n }\n\n const duration = Number.isFinite(clip.durationSeconds)\n ? Number(clip.durationSeconds)\n : -1;\n return new AnimationClip(clip.name || 'clip', duration, tracks);\n}\n\nexport function serializeAnimationClips(\n model: Object3D,\n clips: readonly AnimationClip[],\n inspection: ThreeModelInspection,\n) {\n const meshIds = new Map(Array.from(inspection.meshBindings, ([id, mesh]) => [mesh, id]));\n const boneIds = new Map<object, number>(Array.from(inspection.boneBindings, ([id, bone]) => [bone, id]));\n const objectIds = new Map<object, number>(Array.from(inspection.objectBindings, ([id, object]) => [object, id]));\n const morphIds = new Map<Mesh, Map<number, number>>();\n for (const [id, { mesh, index }] of inspection.morphBindings) {\n let indices = morphIds.get(mesh);\n if (!indices) { indices = new Map(); morphIds.set(mesh, indices); }\n if (!indices.has(index)) indices.set(index, id);\n }\n // A catalog commonly repeats the same destinations in many clips. Resolve\n // each track name once per call; nothing survives a model/profile rebind.\n const destinations = new Map<string, ReturnType<typeof findTrackTarget>>();\n return clips.map((clip) => {\n const tracks: ClipIRTrack[] = [];\n const channelKinds = new Map<string, number>();\n const channelId = (kind: 'face' | 'body' | 'scene') => {\n const existing = channelKinds.get(kind);\n if (existing) return existing;\n const id = channelKinds.size + 1;\n channelKinds.set(kind, id);\n return id;\n };\n withComponentTracks(clip).tracks.forEach((track, index) => {\n let found = destinations.get(track.name);\n if (found === undefined) {\n found = findTrackTarget(model, track);\n destinations.set(track.name, found);\n }\n if (!found?.object) return;\n const { parsed, object } = found;\n let target: ClipIRTrack['target'] | null = null;\n const property = parsed.propertyName;\n if ((property === 'morphTargetInfluences' || property === 'weights') && (object as any).isMesh) {\n const mesh = object as Mesh;\n const requested = parsed.propertyIndex;\n const indexValue = typeof requested === 'number'\n ? requested\n : Number.isFinite(Number(requested))\n ? Number(requested)\n : mesh.morphTargetDictionary?.[String(requested)];\n if (indexValue === undefined) return;\n const morphTargetId = morphIds.get(mesh)?.get(indexValue);\n if (morphTargetId !== undefined) target = { kind: 'morphTarget', meshId: meshIds.get(mesh), morphTargetId };\n } else if (property === 'visible' && (object as any).isMesh) {\n target = { kind: 'meshVisibility', meshId: meshIds.get(object as Mesh) };\n } else {\n const transformProperty = property === 'rotation' && ['x', 'y', 'z'].includes(String(parsed.propertyIndex))\n ? `euler${String(parsed.propertyIndex).toUpperCase()}`\n : property === 'quaternion'\n ? 'rotation'\n : property === 'position'\n ? 'position'\n : property === 'scale'\n ? 'scale'\n : null;\n if (transformProperty) {\n const boneId = boneIds.get(object);\n target = boneId\n ? { kind: 'boneTransform', boneId, property: transformProperty }\n : { kind: 'objectTransform', objectId: objectIds.get(object), property: transformProperty };\n }\n }\n if (!target) return;\n const kind = target.kind === 'morphTarget'\n ? 'face'\n : target.kind === 'boneTransform'\n ? 'body'\n : 'scene';\n // glTF cubic tracks store in-tangent/value/out-tangent per key. The\n // registry/validation view describes values; native playback retains\n // the original track and its Three interpolant, including its tangents.\n const cubic = !!(track as KeyframeTrack & {\n createInterpolant: { isInterpolantFactoryMethodGLTFCubicSpline?: boolean };\n }).createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline;\n const size = track.getValueSize() / (cubic ? 3 : 1);\n if (!track.values.every(Number.isFinite)) {\n throw new Error(`Animation track ${JSON.stringify(track.name)} contains non-finite samples.`);\n }\n const values = cubic\n ? Array.from(track.times).flatMap((_, key) => Array.from(track.values.slice((key * 3 + 1) * size, (key * 3 + 2) * size)))\n : Array.from(track.values);\n tracks.push({\n id: index + 1,\n channelId: channelId(kind),\n target,\n valueType: size === 4 ? 'quat' : size === 3 ? 'vec3' : 'scalar',\n times: Array.from(track.times),\n values,\n interpolation: track.getInterpolation() === InterpolateDiscrete ? 'step' : 'linear',\n sourceName: track.name,\n });\n });\n return {\n name: clip.name,\n durationSeconds: clip.duration,\n channels: Array.from(channelKinds, ([kind, id]) => ({ id, kind, name: kind })),\n tracks,\n };\n });\n}\n\ntype MaterialConfig = MeshMaterialSettings;\n\nconst materials = (value: Material | Material[] | undefined): Material[] =>\n value ? (Array.isArray(value) ? value : [value]) : [];\n\nconst highlightOverlays = new WeakSet<Object3D>();\n\nexport class ThreeFrameApplier {\n private meshes = new Map<number, Mesh>();\n private morphs = new Map<number, { mesh: Mesh; index: number }>();\n private bones = new Map<number, Object3D>();\n private objects = new Map<number, Object3D>();\n private highlighted = new Map<Mesh, { original: Material | Material[]; overlay: Mesh }>();\n\n setBindings(inspection: ThreeModelInspection) {\n this.clearMeshHighlights();\n this.meshes = new Map(inspection.meshBindings);\n this.morphs = new Map(inspection.morphBindings);\n this.bones = new Map(inspection.boneBindings);\n this.objects = new Map(inspection.objectBindings);\n }\n\n applyPackedMorphFrameDelta(values: ArrayLike<number>, stride = 4) {\n for (let offset = 0; offset + stride <= values.length; offset += stride) {\n const binding = this.morphs.get(values[offset + 1]);\n if (binding?.mesh.morphTargetInfluences) {\n binding.mesh.morphTargetInfluences[binding.index] = values[offset + 2] ?? 0;\n }\n }\n }\n\n applyPackedBoneFrameDelta(values: ArrayLike<number>, stride = 9) {\n for (let offset = 0; offset + stride <= values.length; offset += stride) {\n const bone = this.bones.get(values[offset]);\n if (!bone) continue;\n const flags = values[offset + 8] ?? 0;\n if (flags & 1) bone.position.set(values[offset + 1], values[offset + 2], values[offset + 3]);\n if (flags & 2) bone.quaternion.set(values[offset + 4], values[offset + 5], values[offset + 6], values[offset + 7]).normalize();\n bone.updateMatrixWorld(false);\n }\n }\n\n applySceneFrame(frame: string | Record<string, any>) {\n const value = typeof frame === 'string' ? JSON.parse(frame) : frame;\n for (const write of value.boneScales ?? []) this.bones.get(write.boneId)?.scale.fromArray(write.scale);\n for (const write of value.objects ?? []) {\n const object = this.objects.get(write.objectId);\n if (!object) continue;\n if (write.position) object.position.fromArray(write.position);\n if (write.rotation) object.quaternion.fromArray(write.rotation).normalize();\n if (write.scale) object.scale.fromArray(write.scale);\n object.updateMatrixWorld(false);\n }\n for (const write of value.meshes ?? []) {\n const mesh = this.meshes.get(write.meshId);\n if (mesh) mesh.visible = write.visible;\n }\n }\n\n applyMeshMaterialConfigs(root: Object3D, configs: Record<string, { visible?: boolean; material?: MaterialConfig }>) {\n root.traverse((object: any) => {\n if (!object.isMesh || !object.name) return;\n const config = configs[object.name];\n if (!config) return;\n // Profile replay runs when a model binds and when its profile changes.\n // A visibility-only entry is just as authored as a material override.\n if (typeof config.visible === 'boolean') object.visible = config.visible;\n if (config.material) this.applyHighlightedMeshMaterial(object, config.material);\n });\n }\n\n getMeshMaterialConfig(root: Object3D, name: string): ThreeResolvedMaterialConfig | null {\n let result: ThreeResolvedMaterialConfig | null = null;\n this.visitMesh(root, name, (mesh) => {\n const material: any = materials((mesh as any).material)[0];\n if (!material) return;\n const blending = (Object.keys(THREE_BLENDING_MODES) as BlendingMode[]).find(key => THREE_BLENDING_MODES[key] === material.blending) ?? 'Normal';\n result = { renderOrder: mesh.renderOrder, transparent: material.transparent, opacity: material.opacity, depthWrite: material.depthWrite, depthTest: material.depthTest, blending };\n });\n return result;\n }\n\n setMeshMaterialConfig(root: Object3D, name: string, config: MaterialConfig) {\n this.visitMesh(root, name, (mesh) => this.applyHighlightedMeshMaterial(mesh, config));\n }\n\n private applyHighlightedMeshMaterial(mesh: Mesh, config: MaterialConfig): void {\n this.applyMaterial(mesh, config);\n const original = this.highlighted.get(mesh)?.original;\n if (!original) return;\n const highlighted = mesh.material;\n try {\n mesh.material = original;\n this.applyMaterial(mesh, config);\n } finally {\n mesh.material = highlighted;\n }\n }\n\n setMeshVisible(root: Object3D, name: string, visible: boolean) {\n this.visitMesh(root, name, (mesh) => { mesh.visible = visible; });\n }\n\n /** Apply a complete Rust snapshot. Only native resources and ID bindings live here. */\n applyMeshHighlightFrame(frame: MeshHighlightFrame): void {\n if (frame.version !== 1) throw new Error(`Unsupported mesh highlight frame version: ${frame.version}`);\n const selected = new Set(frame.highlights.map(write => this.meshes.get(write.meshId)));\n for (const mesh of this.highlighted.keys()) {\n if (!selected.has(mesh)) this.clearMeshHighlight(mesh);\n }\n for (const write of frame.highlights) {\n if (write.edgeMode !== 'triangles') throw new Error(`Unsupported highlight edge mode: ${write.edgeMode}`);\n const mesh = this.meshes.get(write.meshId);\n if (!mesh) continue;\n let state = this.highlighted.get(mesh);\n if (!state) {\n const original = mesh.material;\n // Isolate temporary fill changes when several meshes share a material.\n const copies = materials(original).map(material => {\n const copy = material.clone();\n // Offset the fill just enough to keep coplanar wire edges visible.\n copy.polygonOffset = true;\n copy.polygonOffsetFactor = 1;\n copy.polygonOffsetUnits = 1;\n return copy;\n });\n mesh.material = Array.isArray(original) ? copies : copies[0];\n const overlay = mesh.clone(false);\n overlay.name = '';\n overlay.userData = {};\n overlay.position.set(0, 0, 0);\n overlay.quaternion.identity();\n overlay.scale.set(1, 1, 1);\n overlay.matrix.identity();\n overlay.matrixAutoUpdate = true;\n overlay.visible = true;\n overlay.castShadow = overlay.receiveShadow = false;\n overlay.raycast = () => {};\n overlay.material = new MeshBasicMaterial({ wireframe: write.edgeMode === 'triangles', transparent: true, depthWrite: false, toneMapped: false });\n overlay.onBeforeRender = () => {\n overlay.geometry = mesh.geometry;\n overlay.morphTargetInfluences = mesh.morphTargetInfluences;\n };\n highlightOverlays.add(overlay);\n mesh.add(overlay);\n state = { original, overlay };\n this.highlighted.set(mesh, state);\n }\n for (const material of materials(mesh.material) as any[]) {\n if (!material.emissive) continue;\n material.emissive.setRGB(...write.fillColor);\n material.emissiveIntensity = write.fillIntensity;\n }\n const edges = state.overlay.material as MeshBasicMaterial;\n edges.color.setRGB(...write.edgeColor);\n edges.opacity = write.edgeOpacity;\n edges.side = materials(mesh.material)[0]?.side ?? edges.side;\n state.overlay.renderOrder = mesh.renderOrder + 1;\n }\n }\n\n clearMeshHighlights(): void {\n for (const mesh of this.highlighted.keys()) this.clearMeshHighlight(mesh);\n }\n\n private clearMeshHighlight(mesh: Mesh): void {\n const state = this.highlighted.get(mesh)!;\n state.overlay.removeFromParent();\n (state.overlay.material as Material).dispose();\n // Geometry and skeleton belong to the source mesh and must stay alive.\n for (const material of materials(mesh.material)) material.dispose();\n mesh.material = state.original;\n this.highlighted.delete(mesh);\n }\n\n applyHairAppearance(meshes: readonly Mesh[], appearance: any) {\n for (const mesh of meshes) {\n for (const material of materials((mesh as any).material) as any[]) {\n if (appearance.baseColor && material.color) material.color.set(appearance.baseColor);\n if (appearance.emissive && material.emissive) material.emissive.set(appearance.emissive);\n if (typeof appearance.emissiveIntensity === 'number') material.emissiveIntensity = appearance.emissiveIntensity;\n material.needsUpdate = true;\n }\n }\n }\n\n addMorphTarget(\n root: Object3D,\n target: MorphTargetInput,\n options: AddMorphTargetOptions = {},\n ) {\n return this.addMorphTargets(root, [target], options)[`${target.meshName}:${target.name}`];\n }\n\n addMorphTargets(\n root: Object3D,\n targets: readonly MorphTargetInput[],\n options: AddMorphTargetOptions = {},\n ) {\n if (targets.length === 0) return {};\n\n const stages = new Map<string, MorphMutationStage>();\n const result: Record<string, number> = {};\n const batchKeys = new Set<string>();\n\n try {\n for (const target of targets) {\n const key = `${target.meshName}:${target.name}`;\n if (batchKeys.has(key)) throw new Error(`Morph target appears more than once in batch: ${key}`);\n batchKeys.add(key);\n\n let stage = stages.get(target.meshName);\n if (!stage) {\n const mesh = root.getObjectByName(target.meshName) as Mesh | null;\n if (!mesh || !(mesh as any).isMesh) throw new Error(`Mesh not found: ${target.meshName}`);\n stage = {\n mesh,\n sourceGeometry: mesh.geometry,\n geometry: mesh.geometry.clone(),\n dictionary: {\n ...(mesh.morphTargetDictionary\n ?? (mesh.geometry as unknown as { morphTargetDictionary?: Record<string, number> })\n .morphTargetDictionary\n ?? {}),\n },\n influences: [...(mesh.morphTargetInfluences ?? [])],\n };\n stages.set(target.meshName, stage);\n }\n\n result[key] = this.applyMorphTargetToStage(stage, target, options);\n }\n } catch (error) {\n for (const stage of stages.values()) stage.geometry.dispose();\n throw error;\n }\n\n const replaceGeometry = options.forceGeometryReplacement !== false;\n for (const stage of stages.values()) {\n const committedGeometry: any = replaceGeometry ? stage.geometry : stage.sourceGeometry;\n if (!replaceGeometry) {\n committedGeometry.morphAttributes = stage.geometry.morphAttributes;\n committedGeometry.morphTargetsRelative = stage.geometry.morphTargetsRelative;\n committedGeometry.boundingBox = stage.geometry.boundingBox;\n committedGeometry.boundingSphere = stage.geometry.boundingSphere;\n }\n committedGeometry.morphTargetDictionary = { ...stage.dictionary };\n stage.mesh.geometry = committedGeometry;\n stage.mesh.morphTargetDictionary = { ...stage.dictionary };\n stage.mesh.morphTargetInfluences = [...stage.influences];\n if (!replaceGeometry) stage.geometry.dispose();\n }\n if (replaceGeometry) {\n const replacedGeometries = new Set(Array.from(stages.values(), (stage) => stage.sourceGeometry));\n for (const sourceGeometry of replacedGeometries) {\n let stillInUse = false;\n root.traverse((object: any) => {\n if (object.isMesh && object.geometry === sourceGeometry) stillInUse = true;\n });\n if (!stillInUse) sourceGeometry.dispose();\n }\n }\n\n return result;\n }\n\n private applyMorphTargetToStage(\n stage: MorphMutationStage,\n target: MorphTargetInput,\n options: AddMorphTargetOptions,\n ) {\n const geometry: any = stage.geometry;\n const dictionary = stage.dictionary;\n if (!target.name?.trim()) throw new Error(`Morph target name is required for mesh: ${target.meshName}`);\n const configuredIndex = dictionary[target.name];\n const existing = Number.isInteger(configuredIndex) && configuredIndex >= 0\n ? configuredIndex\n : undefined;\n if (existing !== undefined && !options.replace) throw new Error(`Morph target already exists: ${target.name}`);\n\n const usedIndices = Object.values(dictionary)\n .map((value) => {\n if (!Number.isInteger(value) || value < 0) throw new Error(`Invalid morph target index on ${target.meshName}: ${value}`);\n return value;\n });\n const currentTargetCount = Math.max(\n 0,\n ...Object.values(geometry.morphAttributes as Record<string, unknown[]>).map((attributes) => attributes?.length ?? 0),\n usedIndices.length > 0 ? Math.max(...usedIndices) + 1 : 0,\n stage.influences.length,\n );\n const index = existing ?? currentTargetCount;\n const targetCount = Math.max(currentTargetCount, index + 1);\n const sourceIsRelative = target.relative !== false;\n if (currentTargetCount === 0) geometry.morphTargetsRelative = sourceIsRelative;\n\n for (const semantic of MORPH_ATTRIBUTE_SEMANTICS) {\n const data = target[semantic] as ArrayLike<number> | undefined;\n const existingAttributes = geometry.morphAttributes[semantic] as Array<BufferAttribute | undefined> | undefined;\n if (!data && existingAttributes?.length === 0) {\n delete geometry.morphAttributes[semantic];\n continue;\n }\n if (!data && !existingAttributes) continue;\n\n const base = geometry.getAttribute(semantic);\n if (!base || (data && data.length !== base.count * base.itemSize)) {\n throw new Error(`Invalid ${semantic} morph data length`);\n }\n\n const attributes = [...(existingAttributes ?? [])];\n for (let targetIndex = 0; targetIndex < targetCount; targetIndex += 1) {\n if (targetIndex === index && data) {\n attributes[targetIndex] = createMorphAttribute(\n geometry,\n semantic,\n target.name,\n data,\n sourceIsRelative,\n );\n } else if (!attributes[targetIndex] || targetIndex === index) {\n attributes[targetIndex] = createNeutralMorphAttribute(\n geometry,\n semantic,\n targetIndex === index ? target.name : `morph_${targetIndex}`,\n );\n }\n }\n geometry.morphAttributes[semantic] = attributes;\n }\n\n dictionary[target.name] = index;\n geometry.morphTargetDictionary = { ...dictionary };\n while (stage.influences.length < targetCount) stage.influences.push(0);\n if (options.resetInfluence !== false) stage.influences[index] = 0;\n geometry.computeBoundingBox?.();\n geometry.computeBoundingSphere?.();\n return index;\n }\n\n private applyMaterial(mesh: Mesh, config: MaterialConfig) {\n if (typeof config.renderOrder === 'number') mesh.renderOrder = config.renderOrder;\n for (const material of materials((mesh as any).material) as any[]) {\n let changed = false;\n const assign = (key: string, value: unknown) => {\n if (material[key] === value) return;\n material[key] = value;\n changed = true;\n };\n if (typeof config.opacity === 'number') assign('opacity', config.opacity);\n if (typeof config.transparent === 'boolean') assign('transparent', config.transparent);\n else if (typeof config.opacity === 'number' && config.opacity < 1) assign('transparent', true);\n if (typeof config.depthWrite === 'boolean') assign('depthWrite', config.depthWrite);\n if (typeof config.depthTest === 'boolean') assign('depthTest', config.depthTest);\n if (config.blending) assign('blending', THREE_BLENDING_MODES[config.blending]);\n // Profile replacement also replays unchanged materials after mapping edits.\n // Invalidate renderer programs only when an authored material value changes.\n if (changed) material.needsUpdate = true;\n }\n }\n\n private visitMesh(root: Object3D, name: string, visit: (mesh: Mesh) => void) {\n root.traverse((object: any) => { if (object.isMesh && object.name === name) visit(object); });\n }\n}\n\nexport const collectMorphMeshes = (root: Object3D) => {\n const meshes: Mesh[] = [];\n root.traverse((object: any) => { if (object.isMesh && !highlightOverlays.has(object) && morphEntries(object).length > 0) meshes.push(object); });\n return meshes;\n};\n\nexport * from './model';\nexport * from './scene';\nexport { acquireCharacterSceneVideoCapture } from './sceneVideoCapture';\nexport type { CharacterSceneVideoCapture, CharacterSceneVideoCaptureOptions } from './sceneVideoCapture';\nexport * from './scenery';\n\nexport * from './editor/SkeletonOverlay';\nexport * from './editor/morphVertexPreview';\n"]}