@lovelace_lol/embody 0.0.14 → 0.0.15
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/README.md +29 -0
- package/dist/index.js +80 -31
- package/dist/index.js.map +1 -1
- package/dist/three/authoring.d.ts +4 -0
- package/dist/three/authoringTypes.d.ts +7 -0
- package/dist/three/editor/morphVertexPreview.d.ts +3 -2
- package/dist/three.js +80 -31
- package/dist/three.js.map +1 -1
- package/dist/wasm/README.md +29 -0
- package/dist/wasm/embody_wasm.d.ts +62 -62
- package/dist/wasm/embody_wasm_bg.wasm +0 -0
- package/dist/wasm/embody_wasm_bg.wasm.d.ts +62 -62
- package/package.json +2 -2
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 });\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 });\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 const scalar = track.clone();\n scalar.name = `${track.name}[${euler ? ['x', 'y', 'z'][component] : component}]`;\n // Keep tangent/value/tangent storage and the native interpolation factory.\n scalar.values = track.values.slice(0, track.times.length * parts);\n for (let sample = 0; sample < scalar.values.length; sample += 1) scalar.values[sample] = track.values[sample * width + component];\n return scalar;\n });\n });\n if (!expanded) return clip;\n const indexed = clip.clone();\n indexed.tracks = tracks;\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?.length ? 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): 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 = new Float32Array(pointCount * 3);\n const 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 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 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.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);\n if (!data) {\n if (this.points) this.points.visible = false;\n return;\n }\n const points = this.points ?? this.createPoints();\n this.updateAttribute(points.geometry, 'position', data.positions, data.pointCount);\n this.updateAttribute(points.geometry, 'color', data.colors, data.pointCount);\n points.geometry.computeBoundingSphere();\n points.material.size = data.pointCount > 6000 ? 0.009 : 0.012;\n points.visible = true;\n }\n\n private updateAttribute(\n geometry: THREE.BufferGeometry,\n name: string,\n values: Float32Array,\n pointCount: number,\n ): void {\n const attribute = geometry.getAttribute(name) as THREE.BufferAttribute | undefined;\n if (!attribute || attribute.count !== pointCount) {\n geometry.setAttribute(name, new THREE.BufferAttribute(values, 3));\n return;\n }\n attribute.array.set(values);\n attribute.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 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 const found = findTrackTarget(model, track);\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 const binding = Array.from(inspection.morphBindings).find(([, entry]) => entry.mesh === mesh && entry.index === indexValue);\n if (binding) target = { kind: 'morphTarget', meshId: meshIds.get(mesh), morphTargetId: binding[0] };\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 (!Array.from(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 if (typeof config.opacity === 'number') material.opacity = config.opacity;\n if (typeof config.transparent === 'boolean') material.transparent = config.transparent;\n else if (typeof config.opacity === 'number' && config.opacity < 1) material.transparent = true;\n if (typeof config.depthWrite === 'boolean') material.depthWrite = config.depthWrite;\n if (typeof config.depthTest === 'boolean') material.depthTest = config.depthTest;\n if (config.blending) material.blending = THREE_BLENDING_MODES[config.blending];\n 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/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"]}
|