@dreamerbird/camera-studio 0.0.0-stage → 0.1.0
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/assets/models/Y Bot.glb +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-base-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-base-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-point-relaxed-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-point-relaxed-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-point-straight-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-point-straight-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-01-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-01-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-02-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-02-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-03-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-03-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-04-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-04-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-05-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-05-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-06-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-01-base-relaxed-06-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-bowl-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-bowl-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-card-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-card-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-claw-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-claw-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-fist-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-fist-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-grip-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-grip-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-ko-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-ko-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-nail-check-01-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-nail-check-01-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-nail-check-02-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-nail-check-02-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-offer-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-offer-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-push-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-push-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-push-the-button-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-push-the-button-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-scratch-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-scratch-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-spread-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-spread-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-write-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-02-other-write-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-cobblepot-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-cobblepot-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-fingers-crossed-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-fingers-crossed-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-five-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-five-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-four-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-four-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-four-ring-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-four-ring-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-fu-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-fu-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-index-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-index-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-martian-reactor-switch-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-martian-reactor-switch-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-one-does-not-simply-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-one-does-not-simply-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-peace-flipped-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-peace-flipped.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-peace-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-peace-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-perfect-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-perfect-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-pinky-swear-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-pinky-swear-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-rock-out-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-rock-out-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-scout-salute-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-scout-salute-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-spock-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-spock-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-stop-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-stop-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-surf-s-up-flipped-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-surf-s-up-flipped-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-surf-s-up-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-surf-s-up-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-three-hicox-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-three-hicox-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-three-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-three-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-three-ring-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-three-ring-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-thumbs-up-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-03-signs-thumbs-up-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-detonator-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-detonator-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-grip-sword-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-grip-sword-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-gun-01-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-gun-01-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-gun-02-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-gun-02-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-gun-03-l-cock-the-hammer.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-gun-03-r-cock-the-hammer.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-hadoken-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-hadoken-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-pistol-double-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-pistol-double-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-pistol-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-pistol-r.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-throw-l.png +0 -0
- package/assets/poseThumbs/qbx-hands-04-weapons-throw-r.png +0 -0
- package/dist/Anchors.d.ts +11 -0
- package/dist/Anchors.d.ts.map +1 -0
- package/dist/Anchors.js +315 -0
- package/dist/App.hostFlows.test.d.ts +2 -0
- package/dist/App.hostFlows.test.d.ts.map +1 -0
- package/dist/App.hostFlows.test.js +48 -0
- package/dist/CameraPath.d.ts +130 -0
- package/dist/CameraPath.d.ts.map +1 -0
- package/dist/CameraPath.js +920 -0
- package/dist/CameraScene.d.ts +45 -0
- package/dist/CameraScene.d.ts.map +1 -0
- package/dist/CameraScene.js +1716 -0
- package/dist/CameraScene.test.d.ts +2 -0
- package/dist/CameraScene.test.d.ts.map +1 -0
- package/dist/CameraScene.test.js +259 -0
- package/dist/PathPresetDropRig.d.ts +27 -0
- package/dist/PathPresetDropRig.d.ts.map +1 -0
- package/dist/PathPresetDropRig.js +192 -0
- package/dist/PathPresetThumb.d.ts +11 -0
- package/dist/PathPresetThumb.d.ts.map +1 -0
- package/dist/PathPresetThumb.js +85 -0
- package/dist/PipCameraSelector.d.ts +15 -0
- package/dist/PipCameraSelector.d.ts.map +1 -0
- package/dist/PipCameraSelector.js +92 -0
- package/dist/PlacementManager.d.ts +252 -0
- package/dist/PlacementManager.d.ts.map +1 -0
- package/dist/PlacementManager.js +1525 -0
- package/dist/ShotCamera.d.ts +21 -0
- package/dist/ShotCamera.d.ts.map +1 -0
- package/dist/ShotCamera.js +568 -0
- package/dist/TopToolbar.d.ts +43 -0
- package/dist/TopToolbar.d.ts.map +1 -0
- package/dist/TopToolbar.js +167 -0
- package/dist/TopToolbar.test.d.ts +2 -0
- package/dist/TopToolbar.test.d.ts.map +1 -0
- package/dist/TopToolbar.test.js +107 -0
- package/dist/agent/api.d.ts +95 -0
- package/dist/agent/api.d.ts.map +1 -0
- package/dist/agent/api.js +337 -0
- package/dist/agent/api.test.d.ts +2 -0
- package/dist/agent/api.test.d.ts.map +1 -0
- package/dist/agent/api.test.js +907 -0
- package/dist/agent/bridgeClient.d.ts +62 -0
- package/dist/agent/bridgeClient.d.ts.map +1 -0
- package/dist/agent/bridgeClient.js +277 -0
- package/dist/agent/bridgeClient.test.d.ts +2 -0
- package/dist/agent/bridgeClient.test.d.ts.map +1 -0
- package/dist/agent/bridgeClient.test.js +413 -0
- package/dist/agent/bridgeFiles.d.ts +33 -0
- package/dist/agent/bridgeFiles.d.ts.map +1 -0
- package/dist/agent/bridgeFiles.js +193 -0
- package/dist/agent/bridgeFiles.test.d.ts +2 -0
- package/dist/agent/bridgeFiles.test.d.ts.map +1 -0
- package/dist/agent/bridgeFiles.test.js +220 -0
- package/dist/agent/commands/anchors.d.ts +43 -0
- package/dist/agent/commands/anchors.d.ts.map +1 -0
- package/dist/agent/commands/anchors.js +331 -0
- package/dist/agent/commands/anchors.test.d.ts +2 -0
- package/dist/agent/commands/anchors.test.d.ts.map +1 -0
- package/dist/agent/commands/anchors.test.js +447 -0
- package/dist/agent/commands/animations.d.ts +47 -0
- package/dist/agent/commands/animations.d.ts.map +1 -0
- package/dist/agent/commands/animations.js +245 -0
- package/dist/agent/commands/animations.test.d.ts +2 -0
- package/dist/agent/commands/animations.test.d.ts.map +1 -0
- package/dist/agent/commands/animations.test.js +426 -0
- package/dist/agent/commands/assets.d.ts +34 -0
- package/dist/agent/commands/assets.d.ts.map +1 -0
- package/dist/agent/commands/assets.js +367 -0
- package/dist/agent/commands/assets.test.d.ts +2 -0
- package/dist/agent/commands/assets.test.d.ts.map +1 -0
- package/dist/agent/commands/assets.test.js +405 -0
- package/dist/agent/commands/bindings.realStudio.test.d.ts +21 -0
- package/dist/agent/commands/bindings.realStudio.test.d.ts.map +1 -0
- package/dist/agent/commands/bindings.realStudio.test.js +281 -0
- package/dist/agent/commands/cameras.d.ts +65 -0
- package/dist/agent/commands/cameras.d.ts.map +1 -0
- package/dist/agent/commands/cameras.js +498 -0
- package/dist/agent/commands/cameras.test.d.ts +2 -0
- package/dist/agent/commands/cameras.test.d.ts.map +1 -0
- package/dist/agent/commands/cameras.test.js +560 -0
- package/dist/agent/commands/delete.test.d.ts +2 -0
- package/dist/agent/commands/delete.test.d.ts.map +1 -0
- package/dist/agent/commands/delete.test.js +518 -0
- package/dist/agent/commands/exports.d.ts +12 -0
- package/dist/agent/commands/exports.d.ts.map +1 -0
- package/dist/agent/commands/exports.js +132 -0
- package/dist/agent/commands/exports.test.d.ts +2 -0
- package/dist/agent/commands/exports.test.d.ts.map +1 -0
- package/dist/agent/commands/exports.test.js +402 -0
- package/dist/agent/commands/history.d.ts +17 -0
- package/dist/agent/commands/history.d.ts.map +1 -0
- package/dist/agent/commands/history.js +96 -0
- package/dist/agent/commands/history.test.d.ts +2 -0
- package/dist/agent/commands/history.test.d.ts.map +1 -0
- package/dist/agent/commands/history.test.js +140 -0
- package/dist/agent/commands/jobs.d.ts +23 -0
- package/dist/agent/commands/jobs.d.ts.map +1 -0
- package/dist/agent/commands/jobs.js +66 -0
- package/dist/agent/commands/keyframes.d.ts +42 -0
- package/dist/agent/commands/keyframes.d.ts.map +1 -0
- package/dist/agent/commands/keyframes.js +310 -0
- package/dist/agent/commands/keyframes.realStudio.test.d.ts +11 -0
- package/dist/agent/commands/keyframes.realStudio.test.d.ts.map +1 -0
- package/dist/agent/commands/keyframes.realStudio.test.js +95 -0
- package/dist/agent/commands/keyframes.test.d.ts +2 -0
- package/dist/agent/commands/keyframes.test.d.ts.map +1 -0
- package/dist/agent/commands/keyframes.test.js +474 -0
- package/dist/agent/commands/models.d.ts +34 -0
- package/dist/agent/commands/models.d.ts.map +1 -0
- package/dist/agent/commands/models.js +137 -0
- package/dist/agent/commands/models.test.d.ts +2 -0
- package/dist/agent/commands/models.test.d.ts.map +1 -0
- package/dist/agent/commands/models.test.js +268 -0
- package/dist/agent/commands/objects.d.ts +4 -0
- package/dist/agent/commands/objects.d.ts.map +1 -0
- package/dist/agent/commands/objects.js +182 -0
- package/dist/agent/commands/objects.test.d.ts +2 -0
- package/dist/agent/commands/objects.test.d.ts.map +1 -0
- package/dist/agent/commands/objects.test.js +316 -0
- package/dist/agent/commands/paths.d.ts +111 -0
- package/dist/agent/commands/paths.d.ts.map +1 -0
- package/dist/agent/commands/paths.js +576 -0
- package/dist/agent/commands/paths.test.d.ts +2 -0
- package/dist/agent/commands/paths.test.d.ts.map +1 -0
- package/dist/agent/commands/paths.test.js +773 -0
- package/dist/agent/commands/poses.d.ts +101 -0
- package/dist/agent/commands/poses.d.ts.map +1 -0
- package/dist/agent/commands/poses.js +500 -0
- package/dist/agent/commands/poses.realStudio.test.d.ts +15 -0
- package/dist/agent/commands/poses.realStudio.test.d.ts.map +1 -0
- package/dist/agent/commands/poses.realStudio.test.js +161 -0
- package/dist/agent/commands/poses.test.d.ts +2 -0
- package/dist/agent/commands/poses.test.d.ts.map +1 -0
- package/dist/agent/commands/poses.test.js +735 -0
- package/dist/agent/commands/project.d.ts +12 -0
- package/dist/agent/commands/project.d.ts.map +1 -0
- package/dist/agent/commands/project.js +42 -0
- package/dist/agent/commands/project.test.d.ts +2 -0
- package/dist/agent/commands/project.test.d.ts.map +1 -0
- package/dist/agent/commands/project.test.js +125 -0
- package/dist/agent/commands/revision.realStudio.test.d.ts +14 -0
- package/dist/agent/commands/revision.realStudio.test.d.ts.map +1 -0
- package/dist/agent/commands/revision.realStudio.test.js +129 -0
- package/dist/agent/commands/scene.d.ts +32 -0
- package/dist/agent/commands/scene.d.ts.map +1 -0
- package/dist/agent/commands/scene.js +100 -0
- package/dist/agent/commands/scene.test.d.ts +2 -0
- package/dist/agent/commands/scene.test.d.ts.map +1 -0
- package/dist/agent/commands/scene.test.js +147 -0
- package/dist/agent/commands/selection.d.ts +21 -0
- package/dist/agent/commands/selection.d.ts.map +1 -0
- package/dist/agent/commands/selection.js +101 -0
- package/dist/agent/commands/selection.test.d.ts +2 -0
- package/dist/agent/commands/selection.test.d.ts.map +1 -0
- package/dist/agent/commands/selection.test.js +173 -0
- package/dist/agent/commands/sequence.d.ts +25 -0
- package/dist/agent/commands/sequence.d.ts.map +1 -0
- package/dist/agent/commands/sequence.js +174 -0
- package/dist/agent/commands/sequence.test.d.ts +2 -0
- package/dist/agent/commands/sequence.test.d.ts.map +1 -0
- package/dist/agent/commands/sequence.test.js +264 -0
- package/dist/agent/commands/ui.d.ts +40 -0
- package/dist/agent/commands/ui.d.ts.map +1 -0
- package/dist/agent/commands/ui.js +166 -0
- package/dist/agent/commands/view.d.ts +61 -0
- package/dist/agent/commands/view.d.ts.map +1 -0
- package/dist/agent/commands/view.js +229 -0
- package/dist/agent/commands/view.test.d.ts +2 -0
- package/dist/agent/commands/view.test.d.ts.map +1 -0
- package/dist/agent/commands/view.test.js +347 -0
- package/dist/agent/contractCoverage.test.d.ts +2 -0
- package/dist/agent/contractCoverage.test.d.ts.map +1 -0
- package/dist/agent/contractCoverage.test.js +87 -0
- package/dist/agent/deleteHandlers.d.ts +61 -0
- package/dist/agent/deleteHandlers.d.ts.map +1 -0
- package/dist/agent/deleteHandlers.js +41 -0
- package/dist/agent/errors.d.ts +24 -0
- package/dist/agent/errors.d.ts.map +1 -0
- package/dist/agent/errors.js +59 -0
- package/dist/agent/errors.test.d.ts +2 -0
- package/dist/agent/errors.test.d.ts.map +1 -0
- package/dist/agent/errors.test.js +25 -0
- package/dist/agent/expectedCommands.d.ts +9 -0
- package/dist/agent/expectedCommands.d.ts.map +1 -0
- package/dist/agent/expectedCommands.js +79 -0
- package/dist/agent/jobs.d.ts +52 -0
- package/dist/agent/jobs.d.ts.map +1 -0
- package/dist/agent/jobs.js +175 -0
- package/dist/agent/jobs.test.d.ts +2 -0
- package/dist/agent/jobs.test.d.ts.map +1 -0
- package/dist/agent/jobs.test.js +281 -0
- package/dist/agent/keyframeTracks.d.ts +57 -0
- package/dist/agent/keyframeTracks.d.ts.map +1 -0
- package/dist/agent/keyframeTracks.js +127 -0
- package/dist/agent/objectIds.d.ts +7 -0
- package/dist/agent/objectIds.d.ts.map +1 -0
- package/dist/agent/objectIds.js +20 -0
- package/dist/agent/objectIds.test.d.ts +2 -0
- package/dist/agent/objectIds.test.d.ts.map +1 -0
- package/dist/agent/objectIds.test.js +10 -0
- package/dist/agent/objectResolver.d.ts +34 -0
- package/dist/agent/objectResolver.d.ts.map +1 -0
- package/dist/agent/objectResolver.js +112 -0
- package/dist/agent/pathCommands.d.ts +78 -0
- package/dist/agent/pathCommands.d.ts.map +1 -0
- package/dist/agent/pathCommands.js +240 -0
- package/dist/agent/propAccess.d.ts +42 -0
- package/dist/agent/propAccess.d.ts.map +1 -0
- package/dist/agent/propAccess.js +181 -0
- package/dist/agent/registerCommands.d.ts +9 -0
- package/dist/agent/registerCommands.d.ts.map +1 -0
- package/dist/agent/registerCommands.js +77 -0
- package/dist/agent/registry.d.ts +33 -0
- package/dist/agent/registry.d.ts.map +1 -0
- package/dist/agent/registry.js +55 -0
- package/dist/agent/registry.test.d.ts +2 -0
- package/dist/agent/registry.test.d.ts.map +1 -0
- package/dist/agent/registry.test.js +106 -0
- package/dist/agent/runtime/animationStatus.d.ts +25 -0
- package/dist/agent/runtime/animationStatus.d.ts.map +1 -0
- package/dist/agent/runtime/animationStatus.js +13 -0
- package/dist/agent/runtime/cameraLifecycle.d.ts +37 -0
- package/dist/agent/runtime/cameraLifecycle.d.ts.map +1 -0
- package/dist/agent/runtime/cameraLifecycle.js +112 -0
- package/dist/agent/runtime/directorView.d.ts +42 -0
- package/dist/agent/runtime/directorView.d.ts.map +1 -0
- package/dist/agent/runtime/directorView.js +27 -0
- package/dist/agent/runtime/exportRuntime.d.ts +95 -0
- package/dist/agent/runtime/exportRuntime.d.ts.map +1 -0
- package/dist/agent/runtime/exportRuntime.js +227 -0
- package/dist/agent/runtime/objectRuntime.d.ts +26 -0
- package/dist/agent/runtime/objectRuntime.d.ts.map +1 -0
- package/dist/agent/runtime/objectRuntime.js +29 -0
- package/dist/agent/runtime/pathRuntime.d.ts +21 -0
- package/dist/agent/runtime/pathRuntime.d.ts.map +1 -0
- package/dist/agent/runtime/pathRuntime.js +13 -0
- package/dist/agent/runtime/placementLifecycle.d.ts +34 -0
- package/dist/agent/runtime/placementLifecycle.d.ts.map +1 -0
- package/dist/agent/runtime/placementLifecycle.js +63 -0
- package/dist/agent/runtime/placementLifecycle.test.d.ts +2 -0
- package/dist/agent/runtime/placementLifecycle.test.d.ts.map +1 -0
- package/dist/agent/runtime/placementLifecycle.test.js +68 -0
- package/dist/agent/runtime/poseSessionRuntime.d.ts +17 -0
- package/dist/agent/runtime/poseSessionRuntime.d.ts.map +1 -0
- package/dist/agent/runtime/poseSessionRuntime.js +64 -0
- package/dist/agent/runtime.d.ts +67 -0
- package/dist/agent/runtime.d.ts.map +1 -0
- package/dist/agent/runtime.js +214 -0
- package/dist/agent/runtime.test.d.ts +2 -0
- package/dist/agent/runtime.test.d.ts.map +1 -0
- package/dist/agent/runtime.test.js +142 -0
- package/dist/agent/sequenceLength.d.ts +20 -0
- package/dist/agent/sequenceLength.d.ts.map +1 -0
- package/dist/agent/sequenceLength.js +18 -0
- package/dist/agent/types.d.ts +70 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +6 -0
- package/dist/agent/validation.d.ts +7 -0
- package/dist/agent/validation.d.ts.map +1 -0
- package/dist/agent/validation.js +39 -0
- package/dist/aimTargets.d.ts +128 -0
- package/dist/aimTargets.d.ts.map +1 -0
- package/dist/aimTargets.js +367 -0
- package/dist/aimTargets.test.d.ts +2 -0
- package/dist/aimTargets.test.d.ts.map +1 -0
- package/dist/aimTargets.test.js +84 -0
- package/dist/anchorParenting.test.d.ts +2 -0
- package/dist/anchorParenting.test.d.ts.map +1 -0
- package/dist/anchorParenting.test.js +87 -0
- package/dist/anchorsRegistry.d.ts +45 -0
- package/dist/anchorsRegistry.d.ts.map +1 -0
- package/dist/anchorsRegistry.js +101 -0
- package/dist/anchorsRegistry.test.d.ts +2 -0
- package/dist/anchorsRegistry.test.d.ts.map +1 -0
- package/dist/anchorsRegistry.test.js +29 -0
- package/dist/assetLibrary/AssetLibraryPanel.d.ts +35 -0
- package/dist/assetLibrary/AssetLibraryPanel.d.ts.map +1 -0
- package/dist/assetLibrary/AssetLibraryPanel.js +544 -0
- package/dist/assetLibrary/AssetLibraryPanel.viewer.test.d.ts +2 -0
- package/dist/assetLibrary/AssetLibraryPanel.viewer.test.d.ts.map +1 -0
- package/dist/assetLibrary/AssetLibraryPanel.viewer.test.js +133 -0
- package/dist/assetLibrary/ModelPickerSlot.d.ts +24 -0
- package/dist/assetLibrary/ModelPickerSlot.d.ts.map +1 -0
- package/dist/assetLibrary/ModelPickerSlot.js +32 -0
- package/dist/assetLibrary/catalogThumbs.d.ts +7 -0
- package/dist/assetLibrary/catalogThumbs.d.ts.map +1 -0
- package/dist/assetLibrary/catalogThumbs.js +75 -0
- package/dist/assetLibrary/classify.d.ts +14 -0
- package/dist/assetLibrary/classify.d.ts.map +1 -0
- package/dist/assetLibrary/classify.js +43 -0
- package/dist/assetLibrary/classify.test.d.ts +2 -0
- package/dist/assetLibrary/classify.test.d.ts.map +1 -0
- package/dist/assetLibrary/classify.test.js +44 -0
- package/dist/assetLibrary/contract.indexeddb.test.d.ts +2 -0
- package/dist/assetLibrary/contract.indexeddb.test.d.ts.map +1 -0
- package/dist/assetLibrary/contract.indexeddb.test.js +10 -0
- package/dist/assetLibrary/contractTests.d.ts +12 -0
- package/dist/assetLibrary/contractTests.d.ts.map +1 -0
- package/dist/assetLibrary/contractTests.js +51 -0
- package/dist/assetLibrary/dispose.d.ts +4 -0
- package/dist/assetLibrary/dispose.d.ts.map +1 -0
- package/dist/assetLibrary/dispose.js +21 -0
- package/dist/assetLibrary/draco.d.ts +6 -0
- package/dist/assetLibrary/draco.d.ts.map +1 -0
- package/dist/assetLibrary/draco.js +45 -0
- package/dist/assetLibrary/draco.test.d.ts +2 -0
- package/dist/assetLibrary/draco.test.d.ts.map +1 -0
- package/dist/assetLibrary/draco.test.js +93 -0
- package/dist/assetLibrary/exportGLB.d.ts +20 -0
- package/dist/assetLibrary/exportGLB.d.ts.map +1 -0
- package/dist/assetLibrary/exportGLB.js +83 -0
- package/dist/assetLibrary/exportGLB.test.d.ts +2 -0
- package/dist/assetLibrary/exportGLB.test.d.ts.map +1 -0
- package/dist/assetLibrary/exportGLB.test.js +73 -0
- package/dist/assetLibrary/gltfLoader.d.ts +8 -0
- package/dist/assetLibrary/gltfLoader.d.ts.map +1 -0
- package/dist/assetLibrary/gltfLoader.js +11 -0
- package/dist/assetLibrary/hash.d.ts +7 -0
- package/dist/assetLibrary/hash.d.ts.map +1 -0
- package/dist/assetLibrary/hash.js +17 -0
- package/dist/assetLibrary/importModelFile.d.ts +5 -0
- package/dist/assetLibrary/importModelFile.d.ts.map +1 -0
- package/dist/assetLibrary/importModelFile.js +19 -0
- package/dist/assetLibrary/importModelFile.test.d.ts +2 -0
- package/dist/assetLibrary/importModelFile.test.d.ts.map +1 -0
- package/dist/assetLibrary/importModelFile.test.js +77 -0
- package/dist/assetLibrary/importPipeline.d.ts +61 -0
- package/dist/assetLibrary/importPipeline.d.ts.map +1 -0
- package/dist/assetLibrary/importPipeline.js +253 -0
- package/dist/assetLibrary/importPipeline.test.d.ts +2 -0
- package/dist/assetLibrary/importPipeline.test.d.ts.map +1 -0
- package/dist/assetLibrary/importPipeline.test.js +188 -0
- package/dist/assetLibrary/indexedDBBackend.d.ts +31 -0
- package/dist/assetLibrary/indexedDBBackend.d.ts.map +1 -0
- package/dist/assetLibrary/indexedDBBackend.js +134 -0
- package/dist/assetLibrary/indexedDBBackend.test.d.ts +2 -0
- package/dist/assetLibrary/indexedDBBackend.test.d.ts.map +1 -0
- package/dist/assetLibrary/indexedDBBackend.test.js +148 -0
- package/dist/assetLibrary/legacySeedCleanup.d.ts +19 -0
- package/dist/assetLibrary/legacySeedCleanup.d.ts.map +1 -0
- package/dist/assetLibrary/legacySeedCleanup.js +50 -0
- package/dist/assetLibrary/legacySeedCleanup.test.d.ts +2 -0
- package/dist/assetLibrary/legacySeedCleanup.test.d.ts.map +1 -0
- package/dist/assetLibrary/legacySeedCleanup.test.js +74 -0
- package/dist/assetLibrary/library.d.ts +122 -0
- package/dist/assetLibrary/library.d.ts.map +1 -0
- package/dist/assetLibrary/library.js +424 -0
- package/dist/assetLibrary/library.test.d.ts +2 -0
- package/dist/assetLibrary/library.test.d.ts.map +1 -0
- package/dist/assetLibrary/library.test.js +520 -0
- package/dist/assetLibrary/options.d.ts +9 -0
- package/dist/assetLibrary/options.d.ts.map +1 -0
- package/dist/assetLibrary/options.js +20 -0
- package/dist/assetLibrary/options.test.d.ts +2 -0
- package/dist/assetLibrary/options.test.d.ts.map +1 -0
- package/dist/assetLibrary/options.test.js +70 -0
- package/dist/assetLibrary/pose.d.ts +15 -0
- package/dist/assetLibrary/pose.d.ts.map +1 -0
- package/dist/assetLibrary/pose.js +41 -0
- package/dist/assetLibrary/pose.test.d.ts +2 -0
- package/dist/assetLibrary/pose.test.d.ts.map +1 -0
- package/dist/assetLibrary/pose.test.js +45 -0
- package/dist/assetLibrary/poseThumbnail.d.ts +30 -0
- package/dist/assetLibrary/poseThumbnail.d.ts.map +1 -0
- package/dist/assetLibrary/poseThumbnail.js +144 -0
- package/dist/assetLibrary/poseThumbnail.test.d.ts +2 -0
- package/dist/assetLibrary/poseThumbnail.test.d.ts.map +1 -0
- package/dist/assetLibrary/poseThumbnail.test.js +111 -0
- package/dist/assetLibrary/rig.d.ts +14 -0
- package/dist/assetLibrary/rig.d.ts.map +1 -0
- package/dist/assetLibrary/rig.js +33 -0
- package/dist/assetLibrary/rig.test.d.ts +2 -0
- package/dist/assetLibrary/rig.test.d.ts.map +1 -0
- package/dist/assetLibrary/rig.test.js +55 -0
- package/dist/assetLibrary/seedAssetsManifest.d.ts +24 -0
- package/dist/assetLibrary/seedAssetsManifest.d.ts.map +1 -0
- package/dist/assetLibrary/seedAssetsManifest.js +347 -0
- package/dist/assetLibrary/seedBuiltinPoses.d.ts +29 -0
- package/dist/assetLibrary/seedBuiltinPoses.d.ts.map +1 -0
- package/dist/assetLibrary/seedBuiltinPoses.js +114 -0
- package/dist/assetLibrary/seedBuiltinPoses.test.d.ts +2 -0
- package/dist/assetLibrary/seedBuiltinPoses.test.d.ts.map +1 -0
- package/dist/assetLibrary/seedBuiltinPoses.test.js +176 -0
- package/dist/assetLibrary/seedPoses.d.ts +8 -0
- package/dist/assetLibrary/seedPoses.d.ts.map +1 -0
- package/dist/assetLibrary/seedPoses.js +2414 -0
- package/dist/assetLibrary/seedPosesDpl.d.ts +8 -0
- package/dist/assetLibrary/seedPosesDpl.d.ts.map +1 -0
- package/dist/assetLibrary/seedPosesDpl.js +11660 -0
- package/dist/assetLibrary/seedPosesQbx.d.ts +8 -0
- package/dist/assetLibrary/seedPosesQbx.d.ts.map +1 -0
- package/dist/assetLibrary/seedPosesQbx.js +5612 -0
- package/dist/assetLibrary/seedPosesQbx.test.d.ts +2 -0
- package/dist/assetLibrary/seedPosesQbx.test.d.ts.map +1 -0
- package/dist/assetLibrary/seedPosesQbx.test.js +181 -0
- package/dist/assetLibrary/source.d.ts +45 -0
- package/dist/assetLibrary/source.d.ts.map +1 -0
- package/dist/assetLibrary/source.js +11 -0
- package/dist/assetLibrary/source.test.d.ts +2 -0
- package/dist/assetLibrary/source.test.d.ts.map +1 -0
- package/dist/assetLibrary/source.test.js +28 -0
- package/dist/assetLibrary/staticCatalogSource.d.ts +48 -0
- package/dist/assetLibrary/staticCatalogSource.d.ts.map +1 -0
- package/dist/assetLibrary/staticCatalogSource.js +140 -0
- package/dist/assetLibrary/staticCatalogSource.test.d.ts +2 -0
- package/dist/assetLibrary/staticCatalogSource.test.d.ts.map +1 -0
- package/dist/assetLibrary/staticCatalogSource.test.js +154 -0
- package/dist/assetLibrary/thumbnail.d.ts +14 -0
- package/dist/assetLibrary/thumbnail.d.ts.map +1 -0
- package/dist/assetLibrary/thumbnail.js +70 -0
- package/dist/assetLibrary/types.d.ts +54 -0
- package/dist/assetLibrary/types.d.ts.map +1 -0
- package/dist/assetLibrary/types.js +1 -0
- package/dist/assetLibrary/useModelThumbUrl.d.ts +10 -0
- package/dist/assetLibrary/useModelThumbUrl.d.ts.map +1 -0
- package/dist/assetLibrary/useModelThumbUrl.js +56 -0
- package/dist/boneAnchorWiring.test.d.ts +2 -0
- package/dist/boneAnchorWiring.test.d.ts.map +1 -0
- package/dist/boneAnchorWiring.test.js +173 -0
- package/dist/boneAnchors.d.ts +30 -0
- package/dist/boneAnchors.d.ts.map +1 -0
- package/dist/boneAnchors.js +111 -0
- package/dist/boneAnchors.test.d.ts +2 -0
- package/dist/boneAnchors.test.d.ts.map +1 -0
- package/dist/boneAnchors.test.js +98 -0
- package/dist/bootstrap.d.ts +37 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +394 -0
- package/dist/bootstrap.test.d.ts +2 -0
- package/dist/bootstrap.test.d.ts.map +1 -0
- package/dist/bootstrap.test.js +647 -0
- package/dist/cameraRegistry.d.ts +65 -0
- package/dist/cameraRegistry.d.ts.map +1 -0
- package/dist/cameraRegistry.js +151 -0
- package/dist/cameraRegistry.test.d.ts +2 -0
- package/dist/cameraRegistry.test.d.ts.map +1 -0
- package/dist/cameraRegistry.test.js +68 -0
- package/dist/config.d.ts +92 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +1 -0
- package/dist/contextMenu.d.ts +16 -0
- package/dist/contextMenu.d.ts.map +1 -0
- package/dist/contextMenu.js +10 -0
- package/dist/dropPoint.d.ts +61 -0
- package/dist/dropPoint.d.ts.map +1 -0
- package/dist/dropPoint.js +97 -0
- package/dist/dropPoint.test.d.ts +2 -0
- package/dist/dropPoint.test.d.ts.map +1 -0
- package/dist/dropPoint.test.js +174 -0
- package/dist/editorOnly.d.ts +6 -0
- package/dist/editorOnly.d.ts.map +1 -0
- package/dist/editorOnly.js +32 -0
- package/dist/errors.d.ts +24 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +13 -0
- package/dist/gestureProps.d.ts +99 -0
- package/dist/gestureProps.d.ts.map +1 -0
- package/dist/gestureProps.js +118 -0
- package/dist/gestureProps.test.d.ts +2 -0
- package/dist/gestureProps.test.d.ts.map +1 -0
- package/dist/gestureProps.test.js +182 -0
- package/dist/gesturePropsEditor.d.ts +27 -0
- package/dist/gesturePropsEditor.d.ts.map +1 -0
- package/dist/gesturePropsEditor.js +121 -0
- package/dist/getDeep.d.ts +8 -0
- package/dist/getDeep.d.ts.map +1 -0
- package/dist/getDeep.js +15 -0
- package/dist/gizmoRegistry.test.d.ts +2 -0
- package/dist/gizmoRegistry.test.d.ts.map +1 -0
- package/dist/gizmoRegistry.test.js +40 -0
- package/dist/hostFlows.d.ts +55 -0
- package/dist/hostFlows.d.ts.map +1 -0
- package/dist/hostFlows.js +77 -0
- package/dist/hostFlows.test.d.ts +2 -0
- package/dist/hostFlows.test.d.ts.map +1 -0
- package/dist/hostFlows.test.js +191 -0
- package/dist/i18n.d.ts +26 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +271 -0
- package/dist/i18n.test.d.ts +2 -0
- package/dist/i18n.test.d.ts.map +1 -0
- package/dist/i18n.test.js +41 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/menuModel.d.ts +51 -0
- package/dist/menuModel.d.ts.map +1 -0
- package/dist/menuModel.js +111 -0
- package/dist/menuModel.test.d.ts +2 -0
- package/dist/menuModel.test.d.ts.map +1 -0
- package/dist/menuModel.test.js +197 -0
- package/dist/modalGrab.d.ts +29 -0
- package/dist/modalGrab.d.ts.map +1 -0
- package/dist/modalGrab.js +127 -0
- package/dist/outlineObjectMenu.d.ts +41 -0
- package/dist/outlineObjectMenu.d.ts.map +1 -0
- package/dist/outlineObjectMenu.js +58 -0
- package/dist/outlineObjectMenu.test.d.ts +2 -0
- package/dist/outlineObjectMenu.test.d.ts.map +1 -0
- package/dist/outlineObjectMenu.test.js +83 -0
- package/dist/pathBinding.d.ts +16 -0
- package/dist/pathBinding.d.ts.map +1 -0
- package/dist/pathBinding.js +19 -0
- package/dist/pathBinding.test.d.ts +2 -0
- package/dist/pathBinding.test.d.ts.map +1 -0
- package/dist/pathBinding.test.js +14 -0
- package/dist/pathModel.d.ts +123 -0
- package/dist/pathModel.d.ts.map +1 -0
- package/dist/pathModel.js +343 -0
- package/dist/pathModel.test.d.ts +2 -0
- package/dist/pathModel.test.d.ts.map +1 -0
- package/dist/pathModel.test.js +394 -0
- package/dist/pathPresets.d.ts +38 -0
- package/dist/pathPresets.d.ts.map +1 -0
- package/dist/pathPresets.js +180 -0
- package/dist/pathPresets.test.d.ts +2 -0
- package/dist/pathPresets.test.d.ts.map +1 -0
- package/dist/pathPresets.test.js +154 -0
- package/dist/pathRegistry.d.ts +46 -0
- package/dist/pathRegistry.d.ts.map +1 -0
- package/dist/pathRegistry.js +105 -0
- package/dist/pathRegistry.test.d.ts +2 -0
- package/dist/pathRegistry.test.d.ts.map +1 -0
- package/dist/pathRegistry.test.js +23 -0
- package/dist/pickerRegistry.d.ts +49 -0
- package/dist/pickerRegistry.d.ts.map +1 -0
- package/dist/pickerRegistry.js +17 -0
- package/dist/pickerRegistry.test.d.ts +2 -0
- package/dist/pickerRegistry.test.d.ts.map +1 -0
- package/dist/pickerRegistry.test.js +31 -0
- package/dist/pipLayout.d.ts +7 -0
- package/dist/pipLayout.d.ts.map +1 -0
- package/dist/pipLayout.js +58 -0
- package/dist/placementKey.test.d.ts +2 -0
- package/dist/placementKey.test.d.ts.map +1 -0
- package/dist/placementKey.test.js +32 -0
- package/dist/placementPoseProps.d.ts +29 -0
- package/dist/placementPoseProps.d.ts.map +1 -0
- package/dist/placementPoseProps.js +43 -0
- package/dist/placementPoseProps.test.d.ts +2 -0
- package/dist/placementPoseProps.test.d.ts.map +1 -0
- package/dist/placementPoseProps.test.js +35 -0
- package/dist/poseMode/PoseModeBar.d.ts +18 -0
- package/dist/poseMode/PoseModeBar.d.ts.map +1 -0
- package/dist/poseMode/PoseModeBar.js +127 -0
- package/dist/poseMode/PoseModeRig.d.ts +9 -0
- package/dist/poseMode/PoseModeRig.d.ts.map +1 -0
- package/dist/poseMode/PoseModeRig.js +300 -0
- package/dist/poseMode/PosePickerFrame.d.ts +42 -0
- package/dist/poseMode/PosePickerFrame.d.ts.map +1 -0
- package/dist/poseMode/PosePickerFrame.js +164 -0
- package/dist/poseMode/PosePropEditor.d.ts +30 -0
- package/dist/poseMode/PosePropEditor.d.ts.map +1 -0
- package/dist/poseMode/PosePropEditor.js +139 -0
- package/dist/poseMode/controlSpec.d.ts +26 -0
- package/dist/poseMode/controlSpec.d.ts.map +1 -0
- package/dist/poseMode/controlSpec.js +157 -0
- package/dist/poseMode/controlSpec.test.d.ts +2 -0
- package/dist/poseMode/controlSpec.test.d.ts.map +1 -0
- package/dist/poseMode/controlSpec.test.js +196 -0
- package/dist/poseMode/dragState.d.ts +16 -0
- package/dist/poseMode/dragState.d.ts.map +1 -0
- package/dist/poseMode/dragState.js +15 -0
- package/dist/poseMode/dragState.test.d.ts +2 -0
- package/dist/poseMode/dragState.test.d.ts.map +1 -0
- package/dist/poseMode/dragState.test.js +23 -0
- package/dist/poseMode/poseDisplayText.d.ts +18 -0
- package/dist/poseMode/poseDisplayText.d.ts.map +1 -0
- package/dist/poseMode/poseDisplayText.js +13 -0
- package/dist/poseMode/poseDisplayText.test.d.ts +2 -0
- package/dist/poseMode/poseDisplayText.test.d.ts.map +1 -0
- package/dist/poseMode/poseDisplayText.test.js +35 -0
- package/dist/poseMode/poseExitGuard.d.ts +8 -0
- package/dist/poseMode/poseExitGuard.d.ts.map +1 -0
- package/dist/poseMode/poseExitGuard.js +13 -0
- package/dist/poseMode/poseExitGuard.test.d.ts +2 -0
- package/dist/poseMode/poseExitGuard.test.d.ts.map +1 -0
- package/dist/poseMode/poseExitGuard.test.js +41 -0
- package/dist/poseMode/poseFrame.d.ts +11 -0
- package/dist/poseMode/poseFrame.d.ts.map +1 -0
- package/dist/poseMode/poseFrame.js +7 -0
- package/dist/poseMode/poseFrame.test.d.ts +2 -0
- package/dist/poseMode/poseFrame.test.d.ts.map +1 -0
- package/dist/poseMode/poseFrame.test.js +25 -0
- package/dist/poseMode/poseInterpolate.d.ts +4 -0
- package/dist/poseMode/poseInterpolate.d.ts.map +1 -0
- package/dist/poseMode/poseInterpolate.js +75 -0
- package/dist/poseMode/poseInterpolate.test.d.ts +2 -0
- package/dist/poseMode/poseInterpolate.test.d.ts.map +1 -0
- package/dist/poseMode/poseInterpolate.test.js +61 -0
- package/dist/poseMode/poseLibResolve.d.ts +9 -0
- package/dist/poseMode/poseLibResolve.d.ts.map +1 -0
- package/dist/poseMode/poseLibResolve.js +49 -0
- package/dist/poseMode/poseLibResolve.test.d.ts +2 -0
- package/dist/poseMode/poseLibResolve.test.d.ts.map +1 -0
- package/dist/poseMode/poseLibResolve.test.js +59 -0
- package/dist/poseMode/poseMigration.d.ts +5 -0
- package/dist/poseMode/poseMigration.d.ts.map +1 -0
- package/dist/poseMode/poseMigration.js +16 -0
- package/dist/poseMode/poseMigration.test.d.ts +2 -0
- package/dist/poseMode/poseMigration.test.d.ts.map +1 -0
- package/dist/poseMode/poseMigration.test.js +25 -0
- package/dist/poseMode/poseOptions.d.ts +45 -0
- package/dist/poseMode/poseOptions.d.ts.map +1 -0
- package/dist/poseMode/poseOptions.js +39 -0
- package/dist/poseMode/poseOptions.test.d.ts +2 -0
- package/dist/poseMode/poseOptions.test.d.ts.map +1 -0
- package/dist/poseMode/poseOptions.test.js +83 -0
- package/dist/poseMode/poseOverride.d.ts +13 -0
- package/dist/poseMode/poseOverride.d.ts.map +1 -0
- package/dist/poseMode/poseOverride.js +26 -0
- package/dist/poseMode/poseOverride.test.d.ts +2 -0
- package/dist/poseMode/poseOverride.test.d.ts.map +1 -0
- package/dist/poseMode/poseOverride.test.js +23 -0
- package/dist/poseMode/poseRetarget.d.ts +17 -0
- package/dist/poseMode/poseRetarget.d.ts.map +1 -0
- package/dist/poseMode/poseRetarget.js +53 -0
- package/dist/poseMode/poseRetarget.test.d.ts +2 -0
- package/dist/poseMode/poseRetarget.test.d.ts.map +1 -0
- package/dist/poseMode/poseRetarget.test.js +88 -0
- package/dist/poseMode/poseSession.d.ts +58 -0
- package/dist/poseMode/poseSession.d.ts.map +1 -0
- package/dist/poseMode/poseSession.js +183 -0
- package/dist/poseMode/poseSession.test.d.ts +2 -0
- package/dist/poseMode/poseSession.test.d.ts.map +1 -0
- package/dist/poseMode/poseSession.test.js +159 -0
- package/dist/poseMode/poseSessionHooks.test.d.ts +2 -0
- package/dist/poseMode/poseSessionHooks.test.d.ts.map +1 -0
- package/dist/poseMode/poseSessionHooks.test.js +49 -0
- package/dist/poseMode/poseTrack.d.ts +30 -0
- package/dist/poseMode/poseTrack.d.ts.map +1 -0
- package/dist/poseMode/poseTrack.js +155 -0
- package/dist/poseMode/poseTrack.test.d.ts +2 -0
- package/dist/poseMode/poseTrack.test.d.ts.map +1 -0
- package/dist/poseMode/poseTrack.test.js +84 -0
- package/dist/poseMode/poseValue.d.ts +22 -0
- package/dist/poseMode/poseValue.d.ts.map +1 -0
- package/dist/poseMode/poseValue.js +73 -0
- package/dist/poseMode/poseValue.test.d.ts +2 -0
- package/dist/poseMode/poseValue.test.d.ts.map +1 -0
- package/dist/poseMode/poseValue.test.js +62 -0
- package/dist/poseMode/savePose.d.ts +23 -0
- package/dist/poseMode/savePose.d.ts.map +1 -0
- package/dist/poseMode/savePose.js +29 -0
- package/dist/poseMode/selectionModes.d.ts +14 -0
- package/dist/poseMode/selectionModes.d.ts.map +1 -0
- package/dist/poseMode/selectionModes.js +39 -0
- package/dist/poseMode/selectionModes.test.d.ts +2 -0
- package/dist/poseMode/selectionModes.test.d.ts.map +1 -0
- package/dist/poseMode/selectionModes.test.js +91 -0
- package/dist/poseNameMessages.d.ts +13 -0
- package/dist/poseNameMessages.d.ts.map +1 -0
- package/dist/poseNameMessages.js +370 -0
- package/dist/poseNames.d.ts +14 -0
- package/dist/poseNames.d.ts.map +1 -0
- package/dist/poseNames.js +21 -0
- package/dist/poseNames.test.d.ts +2 -0
- package/dist/poseNames.test.d.ts.map +1 -0
- package/dist/poseNames.test.js +41 -0
- package/dist/poseStatusText.d.ts +2 -0
- package/dist/poseStatusText.d.ts.map +1 -0
- package/dist/poseStatusText.js +11 -0
- package/dist/poseStatusText.test.d.ts +2 -0
- package/dist/poseStatusText.test.d.ts.map +1 -0
- package/dist/poseStatusText.test.js +21 -0
- package/dist/presetThumbGeometry.d.ts +26 -0
- package/dist/presetThumbGeometry.d.ts.map +1 -0
- package/dist/presetThumbGeometry.js +103 -0
- package/dist/presetThumbGeometry.test.d.ts +2 -0
- package/dist/presetThumbGeometry.test.d.ts.map +1 -0
- package/dist/presetThumbGeometry.test.js +83 -0
- package/dist/selectionOutline.d.ts +42 -0
- package/dist/selectionOutline.d.ts.map +1 -0
- package/dist/selectionOutline.js +174 -0
- package/dist/selectionOutline.test.d.ts +2 -0
- package/dist/selectionOutline.test.d.ts.map +1 -0
- package/dist/selectionOutline.test.js +58 -0
- package/dist/smoke.test.d.ts +1 -0
- package/dist/smoke.test.d.ts.map +1 -0
- package/dist/smoke.test.js +17 -0
- package/dist/uiConfig.d.ts +16 -0
- package/dist/uiConfig.d.ts.map +1 -0
- package/dist/uiConfig.js +13 -0
- package/dist/uiConfig.test.d.ts +2 -0
- package/dist/uiConfig.test.d.ts.map +1 -0
- package/dist/uiConfig.test.js +98 -0
- package/dist/undoShortcuts.d.ts +28 -0
- package/dist/undoShortcuts.d.ts.map +1 -0
- package/dist/undoShortcuts.js +59 -0
- package/dist/undoShortcuts.test.d.ts +2 -0
- package/dist/undoShortcuts.test.d.ts.map +1 -0
- package/dist/undoShortcuts.test.js +37 -0
- package/dist/useCameraStudio.d.ts +3 -0
- package/dist/useCameraStudio.d.ts.map +1 -0
- package/dist/useCameraStudio.js +86 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +11 -0
- package/dist/videoExport/BlobCollectSink.d.ts +25 -0
- package/dist/videoExport/BlobCollectSink.d.ts.map +1 -0
- package/dist/videoExport/BlobCollectSink.js +56 -0
- package/dist/videoExport/BlobCollectSink.test.d.ts +2 -0
- package/dist/videoExport/BlobCollectSink.test.d.ts.map +1 -0
- package/dist/videoExport/BlobCollectSink.test.js +78 -0
- package/dist/videoExport/encoder.d.ts +34 -0
- package/dist/videoExport/encoder.d.ts.map +1 -0
- package/dist/videoExport/encoder.js +61 -0
- package/dist/videoExport/encoder.test.d.ts +2 -0
- package/dist/videoExport/encoder.test.d.ts.map +1 -0
- package/dist/videoExport/encoder.test.js +21 -0
- package/dist/videoExport/exporter.d.ts +24 -0
- package/dist/videoExport/exporter.d.ts.map +1 -0
- package/dist/videoExport/exporter.js +74 -0
- package/dist/videoExport/sinks.d.ts +55 -0
- package/dist/videoExport/sinks.d.ts.map +1 -0
- package/dist/videoExport/sinks.js +69 -0
- package/package.json +59 -3
- package/README.md +0 -3
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export type { PoseFrameMode } from './poseFrame';
|
|
2
|
+
import type { PoseFrameMode } from './poseFrame';
|
|
3
|
+
export type PoseSession = {
|
|
4
|
+
key: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function getPoseSession(): PoseSession | null;
|
|
7
|
+
export declare function onPoseSessionChange(cb: (s: PoseSession | null) => void): () => void;
|
|
8
|
+
/** PoseModeRig 订阅:外部请求退出时回调(提交 + clearPoseSession) */
|
|
9
|
+
export declare function onPoseExitRequested(cb: (key: string) => void): () => void;
|
|
10
|
+
/** 请求退出当前会话;监听者没清会话时兜底清掉,防状态卡死。
|
|
11
|
+
* try/finally:监听抛异常(如 capturePose 失败)也兜底清理,异常照常上抛 */
|
|
12
|
+
export declare function requestPoseExit(): void;
|
|
13
|
+
/** 会话唯一:已在摆别的模型时,先按退出流程提交旧会话再开新的 */
|
|
14
|
+
export declare function enterPoseSession(key: string): void;
|
|
15
|
+
/** PoseModeRig 的 canvas pointerdown 监听调用:按下即记脏(见上)。
|
|
16
|
+
* 无会话不记:清会话后、监听卸载前的窗口期按下不污染下一个会话 */
|
|
17
|
+
export declare function markPoseDirty(): void;
|
|
18
|
+
/** 退出提交门控读;clearPoseSession 时已随会话清零 */
|
|
19
|
+
export declare function isPoseDirty(): boolean;
|
|
20
|
+
/** PoseModeRig 卸载清理用:按键清会话——只清自己的。
|
|
21
|
+
* A→B 直接切换时 enterPoseSession('B') 先同步落 session,A 的 rig 后卸载,
|
|
22
|
+
* 无条件的 clearPoseSession 会把 B 的新会话抹掉(切换坍塌) */
|
|
23
|
+
export declare function clearPoseSessionIfCurrent(key: string): void;
|
|
24
|
+
export declare function clearPoseSession(): void;
|
|
25
|
+
/** 记录当前会话的帧信息;非当前会话 key 忽略(A→B 切换防护,同 clearPoseSessionIfCurrent) */
|
|
26
|
+
export declare function setPoseSessionFrame(key: string, frame: PoseFrameMode): void;
|
|
27
|
+
export declare function getPoseSessionFrame(): PoseFrameMode | null;
|
|
28
|
+
/** React 订阅hook:会话的帧模式,无会话为 null(与 usePoseSessionKey 同构) */
|
|
29
|
+
export declare function usePoseFrameMode(): PoseFrameMode | null;
|
|
30
|
+
export type PoseManipulatorMode = 'move' | 'rotate';
|
|
31
|
+
export declare function getPoseManipulatorMode(): PoseManipulatorMode;
|
|
32
|
+
export declare function setPoseManipulatorMode(m: PoseManipulatorMode): void;
|
|
33
|
+
/** PoseModeRig 订阅(转发 threeIK)与浮动小条订阅(高亮当前模式) */
|
|
34
|
+
export declare function onPoseManipulatorModeChange(cb: (m: PoseManipulatorMode) => void): () => void;
|
|
35
|
+
export type PoseModeSupport = {
|
|
36
|
+
move: boolean;
|
|
37
|
+
rotate: boolean;
|
|
38
|
+
};
|
|
39
|
+
/** PoseModeRig 轮询 threeIK 选中态后写入;值没变不发通知(轮询每帧跑) */
|
|
40
|
+
export declare function setPoseSelectionModes(m: PoseModeSupport): void;
|
|
41
|
+
export declare function getPoseSelectionModes(): PoseModeSupport;
|
|
42
|
+
/** React 订阅hook:选中目标的模式支持集(订阅先回读,同 usePoseFrameMode) */
|
|
43
|
+
export declare function usePoseSelectionModes(): PoseModeSupport;
|
|
44
|
+
/** React 订阅hook:会话命中的 placementKey,无会话为 null */
|
|
45
|
+
export declare function usePoseSessionKey(): string | null;
|
|
46
|
+
/** 模型的 onDoubleClick 第一件事就是记录 timeStamp:落在模型上的双击不算空白 */
|
|
47
|
+
export declare function noteModelDoubleClick(timeStamp: number): void;
|
|
48
|
+
export declare function isModelDoubleClick(timeStamp: number): boolean;
|
|
49
|
+
/** PoseModeRig 注册/注销命中测试(被摆模型 + 控制球) */
|
|
50
|
+
export declare function setPoseHitTester(fn: ((ev: {
|
|
51
|
+
clientX: number;
|
|
52
|
+
clientY: number;
|
|
53
|
+
}) => boolean) | null): void;
|
|
54
|
+
export declare function poseHitTest(ev: {
|
|
55
|
+
clientX: number;
|
|
56
|
+
clientY: number;
|
|
57
|
+
}): boolean;
|
|
58
|
+
//# sourceMappingURL=poseSession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poseSession.d.ts","sourceRoot":"","sources":["../../src/poseMode/poseSession.ts"],"names":[],"mappings":"AASA,YAAY,EAAC,aAAa,EAAC,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,aAAa,CAAA;AAE9C,MAAM,MAAM,WAAW,GAAG;IAAC,GAAG,EAAE,MAAM,CAAA;CAAC,CAAA;AAQvC,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAEnD;AAED,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,GAClC,MAAM,IAAI,CAKZ;AAED,sDAAsD;AACtD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAKzE;AAMD;sDACsD;AACtD,wBAAgB,eAAe,IAAI,IAAI,CAStC;AAED,oCAAoC;AACpC,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAOlD;AAWD;qCACqC;AACrC,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,uCAAuC;AACvC,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;8CAE8C;AAC9C,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3D;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAOvC;AAID,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAI3E;AAED,wBAAgB,mBAAmB,IAAI,aAAa,GAAG,IAAI,CAE1D;AAED,4DAA4D;AAC5D,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,IAAI,CAavD;AAID,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,QAAQ,CAAA;AAMnD,wBAAgB,sBAAsB,IAAI,mBAAmB,CAE5D;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAInE;AAED,gDAAgD;AAChD,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,CAAC,CAAC,EAAE,mBAAmB,KAAK,IAAI,GACnC,MAAM,IAAI,CAKZ;AAID,MAAM,MAAM,eAAe,GAAG;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAC,CAAA;AAO9D,mDAAmD;AACnD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CAK9D;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD;AAED,wDAAwD;AACxD,wBAAgB,qBAAqB,IAAI,eAAe,CASvD;AAED,gDAAgD;AAChD,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAIjD;AAMD,wDAAwD;AACxD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE5D;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE7D;AAKD,wCAAwC;AACxC,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,KAAK,OAAO,CAAC,GAAG,IAAI,GAC/D,IAAI,CAEN;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,GAAG,OAAO,CAE3E"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
// packages/camera-studio/src/poseMode/poseSession.ts
|
|
2
|
+
/**
|
|
3
|
+
* 姿势会话:哪个模型正在摆姿势(placementKey),全局唯一。
|
|
4
|
+
* App 管进入/退出的触发;PoseModeRig 订阅退出请求,负责提交骨骼写回。
|
|
5
|
+
* 双击空白退出的判定需要两处共享状态:模型双击的 timeStamp 去重、
|
|
6
|
+
* PoseModeRig 注册的命中测试(控制球/被摆模型不算空白)。
|
|
7
|
+
*/
|
|
8
|
+
import { useEffect, useState } from 'react';
|
|
9
|
+
let session = null;
|
|
10
|
+
// 会话的帧信息(帧模式判定结果):进会话时由 PoseModeRig 写入,随会话生灭
|
|
11
|
+
let sessionFrame = null;
|
|
12
|
+
const changeListeners = new Set();
|
|
13
|
+
const exitListeners = new Set();
|
|
14
|
+
export function getPoseSession() {
|
|
15
|
+
return session;
|
|
16
|
+
}
|
|
17
|
+
export function onPoseSessionChange(cb) {
|
|
18
|
+
changeListeners.add(cb);
|
|
19
|
+
return () => {
|
|
20
|
+
changeListeners.delete(cb);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/** PoseModeRig 订阅:外部请求退出时回调(提交 + clearPoseSession) */
|
|
24
|
+
export function onPoseExitRequested(cb) {
|
|
25
|
+
exitListeners.add(cb);
|
|
26
|
+
return () => {
|
|
27
|
+
exitListeners.delete(cb);
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function emitChange() {
|
|
31
|
+
for (const cb of changeListeners)
|
|
32
|
+
cb(session);
|
|
33
|
+
}
|
|
34
|
+
/** 请求退出当前会话;监听者没清会话时兜底清掉,防状态卡死。
|
|
35
|
+
* try/finally:监听抛异常(如 capturePose 失败)也兜底清理,异常照常上抛 */
|
|
36
|
+
export function requestPoseExit() {
|
|
37
|
+
if (!session)
|
|
38
|
+
return;
|
|
39
|
+
// 先快照 key:监听者可能在回调里清会话,循环里再读 session.key 会崩
|
|
40
|
+
const key = session.key;
|
|
41
|
+
try {
|
|
42
|
+
for (const cb of exitListeners)
|
|
43
|
+
cb(key);
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
if (session)
|
|
47
|
+
clearPoseSession();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** 会话唯一:已在摆别的模型时,先按退出流程提交旧会话再开新的 */
|
|
51
|
+
export function enterPoseSession(key) {
|
|
52
|
+
if (session?.key === key)
|
|
53
|
+
return;
|
|
54
|
+
if (session)
|
|
55
|
+
requestPoseExit();
|
|
56
|
+
session = { key };
|
|
57
|
+
sessionFrame = null; // 帧信息由新会话的 Rig 挂载后写入
|
|
58
|
+
selectionModes = BOTH_MODES; // 选中支持集同理(新会话从无限制造起)
|
|
59
|
+
emitChange();
|
|
60
|
+
}
|
|
61
|
+
// —— 退出提交的脏标记 ——
|
|
62
|
+
/** 会话脏标记:用户在会话里按下过指针(可能拖了控制点)即为脏。
|
|
63
|
+
* 退出提交门控读它:空进空出不写 poseOverride、不产生幻影撤销步
|
|
64
|
+
* (对齐 modalGrab 的 moved 语义)。
|
|
65
|
+
* threeIK 的 isDragging 只能覆盖完整帧间隙的拖动;同帧间隙内按下-拖-松
|
|
66
|
+
* (帧没跑、骨骼没动)也会被这里的按下事件记脏——多提交无害,漏提交才是 bug。 */
|
|
67
|
+
let poseDirty = false;
|
|
68
|
+
/** PoseModeRig 的 canvas pointerdown 监听调用:按下即记脏(见上)。
|
|
69
|
+
* 无会话不记:清会话后、监听卸载前的窗口期按下不污染下一个会话 */
|
|
70
|
+
export function markPoseDirty() {
|
|
71
|
+
if (!session)
|
|
72
|
+
return;
|
|
73
|
+
poseDirty = true;
|
|
74
|
+
}
|
|
75
|
+
/** 退出提交门控读;clearPoseSession 时已随会话清零 */
|
|
76
|
+
export function isPoseDirty() {
|
|
77
|
+
return poseDirty;
|
|
78
|
+
}
|
|
79
|
+
/** PoseModeRig 卸载清理用:按键清会话——只清自己的。
|
|
80
|
+
* A→B 直接切换时 enterPoseSession('B') 先同步落 session,A 的 rig 后卸载,
|
|
81
|
+
* 无条件的 clearPoseSession 会把 B 的新会话抹掉(切换坍塌) */
|
|
82
|
+
export function clearPoseSessionIfCurrent(key) {
|
|
83
|
+
if (session?.key === key)
|
|
84
|
+
clearPoseSession();
|
|
85
|
+
}
|
|
86
|
+
export function clearPoseSession() {
|
|
87
|
+
if (!session)
|
|
88
|
+
return;
|
|
89
|
+
session = null;
|
|
90
|
+
sessionFrame = null;
|
|
91
|
+
selectionModes = BOTH_MODES;
|
|
92
|
+
poseDirty = false;
|
|
93
|
+
emitChange();
|
|
94
|
+
}
|
|
95
|
+
// —— 会话帧信息(帧上=编辑该帧/帧间=新建帧,spec §8.1)——
|
|
96
|
+
/** 记录当前会话的帧信息;非当前会话 key 忽略(A→B 切换防护,同 clearPoseSessionIfCurrent) */
|
|
97
|
+
export function setPoseSessionFrame(key, frame) {
|
|
98
|
+
if (!session || session.key !== key)
|
|
99
|
+
return;
|
|
100
|
+
sessionFrame = frame;
|
|
101
|
+
emitChange();
|
|
102
|
+
}
|
|
103
|
+
export function getPoseSessionFrame() {
|
|
104
|
+
return session ? sessionFrame : null;
|
|
105
|
+
}
|
|
106
|
+
/** React 订阅hook:会话的帧模式,无会话为 null(与 usePoseSessionKey 同构) */
|
|
107
|
+
export function usePoseFrameMode() {
|
|
108
|
+
const [frame, setFrame] = useState(getPoseSessionFrame());
|
|
109
|
+
useEffect(() => {
|
|
110
|
+
// 先回读再订阅:帧信息由 Rig 的挂载 effect 写入,订阅者(浮动小条)
|
|
111
|
+
// 与 Rig 同渲染批时,Rig 的通知先于本订阅注册——不回读就永远停在
|
|
112
|
+
// 初值 null(浮条帧文案缺失)。usePoseSessionKey 无此问题:会话本身
|
|
113
|
+
// 在触发渲染的事件里就已建立,useState 初值即正确。
|
|
114
|
+
setFrame(getPoseSessionFrame());
|
|
115
|
+
return onPoseSessionChange(() => setFrame(getPoseSessionFrame()));
|
|
116
|
+
}, []);
|
|
117
|
+
return frame;
|
|
118
|
+
}
|
|
119
|
+
/** 记住偏好:不随 clearPoseSession 清零,下次进入沿用上次的(Maya 习惯) */
|
|
120
|
+
let manipulatorMode = 'move';
|
|
121
|
+
const modeListeners = new Set();
|
|
122
|
+
export function getPoseManipulatorMode() {
|
|
123
|
+
return manipulatorMode;
|
|
124
|
+
}
|
|
125
|
+
export function setPoseManipulatorMode(m) {
|
|
126
|
+
if (m === manipulatorMode)
|
|
127
|
+
return;
|
|
128
|
+
manipulatorMode = m;
|
|
129
|
+
for (const cb of modeListeners)
|
|
130
|
+
cb(m);
|
|
131
|
+
}
|
|
132
|
+
/** PoseModeRig 订阅(转发 threeIK)与浮动小条订阅(高亮当前模式) */
|
|
133
|
+
export function onPoseManipulatorModeChange(cb) {
|
|
134
|
+
modeListeners.add(cb);
|
|
135
|
+
return () => {
|
|
136
|
+
modeListeners.delete(cb);
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
const BOTH_MODES = { move: true, rotate: true };
|
|
140
|
+
/** 当前选中目标支持的模式;无选中/双通道=BOTH。随会话生灭(enter/clear 复位) */
|
|
141
|
+
let selectionModes = BOTH_MODES;
|
|
142
|
+
/** PoseModeRig 轮询 threeIK 选中态后写入;值没变不发通知(轮询每帧跑) */
|
|
143
|
+
export function setPoseSelectionModes(m) {
|
|
144
|
+
if (m.move === selectionModes.move && m.rotate === selectionModes.rotate)
|
|
145
|
+
return;
|
|
146
|
+
selectionModes = m;
|
|
147
|
+
emitChange();
|
|
148
|
+
}
|
|
149
|
+
export function getPoseSelectionModes() {
|
|
150
|
+
return selectionModes;
|
|
151
|
+
}
|
|
152
|
+
/** React 订阅hook:选中目标的模式支持集(订阅先回读,同 usePoseFrameMode) */
|
|
153
|
+
export function usePoseSelectionModes() {
|
|
154
|
+
const [modes, setModes] = useState(() => getPoseSelectionModes());
|
|
155
|
+
useEffect(() => {
|
|
156
|
+
setModes(getPoseSelectionModes());
|
|
157
|
+
return onPoseSessionChange(() => setModes(getPoseSelectionModes()));
|
|
158
|
+
}, []);
|
|
159
|
+
return modes;
|
|
160
|
+
}
|
|
161
|
+
/** React 订阅hook:会话命中的 placementKey,无会话为 null */
|
|
162
|
+
export function usePoseSessionKey() {
|
|
163
|
+
const [key, setKey] = useState(getPoseSession()?.key ?? null);
|
|
164
|
+
useEffect(() => onPoseSessionChange((s) => setKey(s?.key ?? null)), []);
|
|
165
|
+
return key;
|
|
166
|
+
}
|
|
167
|
+
// —— 双击空白退出判定的共享状态 ——
|
|
168
|
+
let lastModelDblClickAt = -1;
|
|
169
|
+
/** 模型的 onDoubleClick 第一件事就是记录 timeStamp:落在模型上的双击不算空白 */
|
|
170
|
+
export function noteModelDoubleClick(timeStamp) {
|
|
171
|
+
lastModelDblClickAt = timeStamp;
|
|
172
|
+
}
|
|
173
|
+
export function isModelDoubleClick(timeStamp) {
|
|
174
|
+
return timeStamp === lastModelDblClickAt;
|
|
175
|
+
}
|
|
176
|
+
let hitTester = null;
|
|
177
|
+
/** PoseModeRig 注册/注销命中测试(被摆模型 + 控制球) */
|
|
178
|
+
export function setPoseHitTester(fn) {
|
|
179
|
+
hitTester = fn;
|
|
180
|
+
}
|
|
181
|
+
export function poseHitTest(ev) {
|
|
182
|
+
return hitTester?.(ev) ?? false;
|
|
183
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poseSession.test.d.ts","sourceRoot":"","sources":["../../src/poseMode/poseSession.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
// packages/camera-studio/src/poseMode/poseSession.test.ts
|
|
2
|
+
import { enterPoseSession, getPoseSession, clearPoseSession, clearPoseSessionIfCurrent, requestPoseExit, onPoseSessionChange, onPoseExitRequested, noteModelDoubleClick, isModelDoubleClick, setPoseHitTester, poseHitTest, markPoseDirty, isPoseDirty, getPoseManipulatorMode, setPoseManipulatorMode, onPoseManipulatorModeChange, setPoseSessionFrame, getPoseSessionFrame, } from './poseSession';
|
|
3
|
+
beforeEach(() => {
|
|
4
|
+
clearPoseSession();
|
|
5
|
+
setPoseHitTester(null);
|
|
6
|
+
});
|
|
7
|
+
test('进入会话后 getPoseSession 返回该模型;清空后回到 null', () => {
|
|
8
|
+
expect(getPoseSession()).toBeNull();
|
|
9
|
+
enterPoseSession('m1');
|
|
10
|
+
expect(getPoseSession()).toEqual({ key: 'm1' });
|
|
11
|
+
clearPoseSession();
|
|
12
|
+
expect(getPoseSession()).toBeNull();
|
|
13
|
+
});
|
|
14
|
+
test('会话唯一:已进入 A 再进入 B,先对 A 发退出请求再切到 B', () => {
|
|
15
|
+
const exited = [];
|
|
16
|
+
const off = onPoseExitRequested((key) => {
|
|
17
|
+
exited.push(key);
|
|
18
|
+
clearPoseSession(); // 仿 PoseModeRig:提交后清会话
|
|
19
|
+
});
|
|
20
|
+
enterPoseSession('A');
|
|
21
|
+
enterPoseSession('B');
|
|
22
|
+
expect(exited).toEqual(['A']);
|
|
23
|
+
expect(getPoseSession()).toEqual({ key: 'B' });
|
|
24
|
+
off();
|
|
25
|
+
});
|
|
26
|
+
test('重复进入同一会话是空操作,不发退出请求', () => {
|
|
27
|
+
const exited = [];
|
|
28
|
+
onPoseExitRequested((key) => exited.push(key));
|
|
29
|
+
enterPoseSession('A');
|
|
30
|
+
enterPoseSession('A');
|
|
31
|
+
expect(exited).toEqual([]);
|
|
32
|
+
expect(getPoseSession()).toEqual({ key: 'A' });
|
|
33
|
+
});
|
|
34
|
+
test('requestPoseExit 通知监听者;监听者没清会话时兜底清掉', () => {
|
|
35
|
+
const exited = [];
|
|
36
|
+
enterPoseSession('A');
|
|
37
|
+
const off = onPoseExitRequested((key) => exited.push(key));
|
|
38
|
+
requestPoseExit();
|
|
39
|
+
expect(exited).toEqual(['A']);
|
|
40
|
+
expect(getPoseSession()).toBeNull(); // 监听者没调 clear,模块兜底
|
|
41
|
+
off();
|
|
42
|
+
});
|
|
43
|
+
test('无会话时 requestPoseExit 空操作', () => {
|
|
44
|
+
const exited = [];
|
|
45
|
+
onPoseExitRequested((key) => exited.push(key));
|
|
46
|
+
requestPoseExit();
|
|
47
|
+
expect(exited).toEqual([]);
|
|
48
|
+
});
|
|
49
|
+
test('onPoseSessionChange 订阅进出', () => {
|
|
50
|
+
const seen = [];
|
|
51
|
+
onPoseSessionChange((s) => seen.push(s));
|
|
52
|
+
enterPoseSession('A');
|
|
53
|
+
clearPoseSession();
|
|
54
|
+
expect(seen).toEqual([{ key: 'A' }, null]);
|
|
55
|
+
});
|
|
56
|
+
test('双击判定:记录模型的双击 timeStamp 后判定命中', () => {
|
|
57
|
+
expect(isModelDoubleClick(111)).toBe(false);
|
|
58
|
+
noteModelDoubleClick(111);
|
|
59
|
+
expect(isModelDoubleClick(111)).toBe(true);
|
|
60
|
+
expect(isModelDoubleClick(222)).toBe(false);
|
|
61
|
+
});
|
|
62
|
+
test('命中测试:注册后代理调用,null 时恒 false', () => {
|
|
63
|
+
expect(poseHitTest({ clientX: 1, clientY: 2 })).toBe(false);
|
|
64
|
+
setPoseHitTester(() => true);
|
|
65
|
+
expect(poseHitTest({ clientX: 1, clientY: 2 })).toBe(true);
|
|
66
|
+
setPoseHitTester(null);
|
|
67
|
+
expect(poseHitTest({ clientX: 1, clientY: 2 })).toBe(false);
|
|
68
|
+
});
|
|
69
|
+
test('markPoseDirty 与 isDragging 轮询双通道或语义:任一通道记脏即提交', () => {
|
|
70
|
+
// 同帧间隙拖动(帧没跑,isDragging 轮询漏检)由按下事件兜底记脏
|
|
71
|
+
enterPoseSession('k');
|
|
72
|
+
expect(isPoseDirty()).toBe(false);
|
|
73
|
+
markPoseDirty(); // pointerdown 监听在帧外调用
|
|
74
|
+
expect(isPoseDirty()).toBe(true);
|
|
75
|
+
// 门控读后照常清理
|
|
76
|
+
clearPoseSession();
|
|
77
|
+
expect(isPoseDirty()).toBe(false);
|
|
78
|
+
});
|
|
79
|
+
test('脏标记随 clearPoseSession 清零(requestPoseExit 兜底清理同样生效)', () => {
|
|
80
|
+
enterPoseSession('k');
|
|
81
|
+
markPoseDirty();
|
|
82
|
+
expect(isPoseDirty()).toBe(true);
|
|
83
|
+
requestPoseExit(); // 无监听者,模块兜底 clearPoseSession
|
|
84
|
+
expect(getPoseSession()).toBeNull();
|
|
85
|
+
expect(isPoseDirty()).toBe(false);
|
|
86
|
+
});
|
|
87
|
+
test('clearPoseSessionIfCurrent:A→B 切换时 A 的卸载清理不能把 B 的新会话抹掉', () => {
|
|
88
|
+
// 镜像组件生命周期:enter(A) → enter(B)(A 的 rig 随后卸载,清理按键清)
|
|
89
|
+
enterPoseSession('A');
|
|
90
|
+
enterPoseSession('B');
|
|
91
|
+
clearPoseSessionIfCurrent('A'); // A 的 PoseModeRig 卸载清理
|
|
92
|
+
expect(getPoseSession()).toEqual({ key: 'B' }); // B 的会话必须存活
|
|
93
|
+
clearPoseSessionIfCurrent('B'); // B 自己卸载时才清得掉
|
|
94
|
+
expect(getPoseSession()).toBeNull();
|
|
95
|
+
});
|
|
96
|
+
test('clearPoseSessionIfCurrent:无会话时安全空操作', () => {
|
|
97
|
+
clearPoseSessionIfCurrent('A'); // 不抛即可
|
|
98
|
+
expect(getPoseSession()).toBeNull();
|
|
99
|
+
});
|
|
100
|
+
test('无会话时 markPoseDirty 不记脏(清理窗口期的按下不污染下一个会话)', () => {
|
|
101
|
+
markPoseDirty(); // 会话已清、监听未卸的窗口期按下
|
|
102
|
+
expect(isPoseDirty()).toBe(false);
|
|
103
|
+
enterPoseSession('k'); // 下一个会话进来是干净的
|
|
104
|
+
expect(isPoseDirty()).toBe(false);
|
|
105
|
+
markPoseDirty(); // 会话中的按下才记脏
|
|
106
|
+
expect(isPoseDirty()).toBe(true);
|
|
107
|
+
});
|
|
108
|
+
test('requestPoseExit:监听抛异常也兜底清会话(异常照常上抛)', () => {
|
|
109
|
+
enterPoseSession('k');
|
|
110
|
+
const off = onPoseExitRequested(() => {
|
|
111
|
+
throw new Error('listener boom');
|
|
112
|
+
});
|
|
113
|
+
expect(() => requestPoseExit()).toThrow('listener boom');
|
|
114
|
+
expect(getPoseSession()).toBeNull(); // 不卡死
|
|
115
|
+
off();
|
|
116
|
+
});
|
|
117
|
+
// —— 操纵器模式(浮动小条与 W/E 键共用)——
|
|
118
|
+
test('操纵器模式默认 move', () => {
|
|
119
|
+
expect(getPoseManipulatorMode()).toBe('move');
|
|
120
|
+
});
|
|
121
|
+
test('setPoseManipulatorMode 切换并通知订阅;重复设同值不重复通知', () => {
|
|
122
|
+
const seen = [];
|
|
123
|
+
const off = onPoseManipulatorModeChange((m) => seen.push(m));
|
|
124
|
+
setPoseManipulatorMode('rotate');
|
|
125
|
+
expect(getPoseManipulatorMode()).toBe('rotate');
|
|
126
|
+
setPoseManipulatorMode('rotate'); // 同值去重
|
|
127
|
+
setPoseManipulatorMode('move');
|
|
128
|
+
expect(seen).toEqual(['rotate', 'move']);
|
|
129
|
+
off();
|
|
130
|
+
});
|
|
131
|
+
test('操纵器模式记住偏好:清会话/退出都不重置', () => {
|
|
132
|
+
setPoseManipulatorMode('rotate');
|
|
133
|
+
enterPoseSession('k');
|
|
134
|
+
clearPoseSession();
|
|
135
|
+
expect(getPoseManipulatorMode()).toBe('rotate'); // 下次进入沿用上次的
|
|
136
|
+
setPoseManipulatorMode('move'); // 复原,免得影响后面的用例
|
|
137
|
+
});
|
|
138
|
+
test('onPoseManipulatorModeChange 退订后不再收到', () => {
|
|
139
|
+
const seen = [];
|
|
140
|
+
const off = onPoseManipulatorModeChange((m) => seen.push(m));
|
|
141
|
+
off();
|
|
142
|
+
setPoseManipulatorMode('rotate');
|
|
143
|
+
expect(seen).toEqual([]);
|
|
144
|
+
setPoseManipulatorMode('move');
|
|
145
|
+
});
|
|
146
|
+
// —— 会话帧信息(帧模式:帧上=编辑/帧间=新建,随会话生灭)——
|
|
147
|
+
test('会话帧信息随会话生灭:set/get/clear', () => {
|
|
148
|
+
enterPoseSession('k1');
|
|
149
|
+
setPoseSessionFrame('k1', { mode: 'edit', position: 2 });
|
|
150
|
+
expect(getPoseSessionFrame()).toEqual({ mode: 'edit', position: 2 });
|
|
151
|
+
clearPoseSession();
|
|
152
|
+
expect(getPoseSessionFrame()).toBe(null);
|
|
153
|
+
});
|
|
154
|
+
test('非当前会话 key 写入帧信息被忽略(A→B 切换防护)', () => {
|
|
155
|
+
enterPoseSession('kB');
|
|
156
|
+
setPoseSessionFrame('kA', { mode: 'edit', position: 2 });
|
|
157
|
+
expect(getPoseSessionFrame()).toBe(null);
|
|
158
|
+
clearPoseSession();
|
|
159
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poseSessionHooks.test.d.ts","sourceRoot":"","sources":["../../src/poseMode/poseSessionHooks.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @jest-environment jsdom
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* usePoseFrameMode 同渲染批竞态回归:
|
|
6
|
+
* PoseModeBar 与 PoseModeRig 在同一渲染批挂载(PlacementManager L1414 条件内),
|
|
7
|
+
* Rig 的挂载 effect 先跑——setPoseSessionFrame + emitChange 时 Bar 的订阅
|
|
8
|
+
* effect 还没注册,通知被错过。hook 必须在订阅时回读当前值,
|
|
9
|
+
* 而不是停在 useState 初值 null(浮条帧模式文案缺失)。
|
|
10
|
+
*/
|
|
11
|
+
import React from 'react';
|
|
12
|
+
import { act } from 'react';
|
|
13
|
+
import ReactDOM from 'react-dom/client';
|
|
14
|
+
import { enterPoseSession, setPoseSessionFrame, clearPoseSession, usePoseFrameMode, } from './poseSession';
|
|
15
|
+
/** 模拟 PoseModeRig:挂载 effect 里写帧信息(先挂载,effect 先跑) */
|
|
16
|
+
function Writer({ frame }) {
|
|
17
|
+
React.useEffect(() => {
|
|
18
|
+
setPoseSessionFrame('M', frame);
|
|
19
|
+
}, [frame]);
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
/** 模拟 PoseModeBar:订阅帧模式(后挂载) */
|
|
23
|
+
function Reader({ observed }) {
|
|
24
|
+
const frame = usePoseFrameMode();
|
|
25
|
+
observed.push(frame);
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
test('同渲染批内写入先于订阅:hook 收敛到帧信息而非停在 null', () => {
|
|
29
|
+
const frame = { mode: 'new', position: 2 };
|
|
30
|
+
// 对齐真实时序:双击事件先进会话,随后才渲染 Rig/Bar
|
|
31
|
+
enterPoseSession('M');
|
|
32
|
+
const observed = [];
|
|
33
|
+
const el = document.createElement('div');
|
|
34
|
+
document.body.appendChild(el);
|
|
35
|
+
const root = ReactDOM.createRoot(el);
|
|
36
|
+
try {
|
|
37
|
+
act(() => {
|
|
38
|
+
root.render(React.createElement(React.Fragment, null,
|
|
39
|
+
React.createElement(Writer, { frame: frame }),
|
|
40
|
+
React.createElement(Reader, { observed: observed })));
|
|
41
|
+
});
|
|
42
|
+
expect(observed[observed.length - 1]).toEqual(frame);
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
act(() => root.unmount());
|
|
46
|
+
el.remove();
|
|
47
|
+
clearPoseSession();
|
|
48
|
+
}
|
|
49
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ISheetObject } from '@dreamerbird/core';
|
|
2
|
+
import type { $IntentionalAny } from '@dreamerbird/core/types/public';
|
|
3
|
+
/** 仅测试:getPointerParts 依赖 dataverse 内部注册表,真指针无法伪造 */
|
|
4
|
+
export declare function __setPointerRootResolverForTest(fn: (() => $IntentionalAny) | null): void;
|
|
5
|
+
export declare function getTrackIdForProp(sheetObject: ISheetObject<$IntentionalAny>, propName: string): string | undefined;
|
|
6
|
+
export declare function getPoseTrackId(sheetObject: ISheetObject<$IntentionalAny>): string | undefined;
|
|
7
|
+
export declare function getPoseKeyframePositions(sheetObject: ISheetObject<$IntentionalAny>): number[];
|
|
8
|
+
export declare function getPoseKeyframeCount(sheetObject: ISheetObject<$IntentionalAny>): number;
|
|
9
|
+
/** 当前值 + 轨道全部帧值里的 lib 引用 id(prefetchLibPoses 的输入) */
|
|
10
|
+
export declare function collectLibPoseIds(sheetObject: ISheetObject<$IntentionalAny>): string[];
|
|
11
|
+
/** 多属性版(姿势 + 左手势/右手势):一并收集,预取一次全覆盖 */
|
|
12
|
+
export declare function collectLibPoseIdsForProps(sheetObject: ISheetObject<$IntentionalAny>, propNames: string[]): string[];
|
|
13
|
+
export declare function writePoseKeyframe(sheetObject: ISheetObject<$IntentionalAny>, json: string): void;
|
|
14
|
+
export declare function setPoseValue(sheetObject: ISheetObject<$IntentionalAny>, json: string): void;
|
|
15
|
+
/**
|
|
16
|
+
* 清除姿势值与轨道(CameraScene 清除按钮与 Agent poses.clear 共用):
|
|
17
|
+
* 单个事务 = 一个撤销步骤。经内部 Studio 的 stateEditors 直改 historic:
|
|
18
|
+
* setPrimitivePropAsStatic(有轨时把当前值落为静态)紧接着
|
|
19
|
+
* unsetValueOfPrimitiveProp(删掉落下来的静态)——两个编辑器都是幂等直写,
|
|
20
|
+
* 不经指针读轨道树,绕开「单事务里 unsequenceProp 后 unset(pointer) 读到
|
|
21
|
+
* 事务前轨道树、错走删播放头帧分支」的指针级限制(2026-10-01 冒烟记录),
|
|
22
|
+
* 无需拆两事务。行为由 agent/commands/poses.realStudio.test.ts 验证
|
|
23
|
+
* (删轨+清值一步撤销,undo 一并恢复)。
|
|
24
|
+
*
|
|
25
|
+
* 返回 'cleared' | 'empty' | 'unavailable':空姿势(无轨无静态)不开空事务,
|
|
26
|
+
* 调用方据此返回明确结果而非静默 no-op;Studio 不可用由调用方决定
|
|
27
|
+
* 报错(Agent SCENE_UNAVAILABLE)还是静默(UI)。
|
|
28
|
+
*/
|
|
29
|
+
export declare function clearPoseValue(sheetObject: ISheetObject<$IntentionalAny>): 'cleared' | 'empty' | 'unavailable';
|
|
30
|
+
//# sourceMappingURL=poseTrack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poseTrack.d.ts","sourceRoot":"","sources":["../../src/poseMode/poseTrack.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAA;AAiBnE,qDAAqD;AACrD,wBAAgB,+BAA+B,CAC7C,EAAE,EAAE,CAAC,MAAM,eAAe,CAAC,GAAG,IAAI,GACjC,IAAI,CAEN;AAWD,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,YAAY,CAAC,eAAe,CAAC,EAC1C,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,SAAS,CAMpB;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,YAAY,CAAC,eAAe,CAAC,GACzC,MAAM,GAAG,SAAS,CAEpB;AA4BD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,YAAY,CAAC,eAAe,CAAC,GACzC,MAAM,EAAE,CAIV;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,YAAY,CAAC,eAAe,CAAC,GACzC,MAAM,CAER;AAED,qDAAqD;AACrD,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,YAAY,CAAC,eAAe,CAAC,GACzC,MAAM,EAAE,CAEV;AAED,sCAAsC;AACtC,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,YAAY,CAAC,eAAe,CAAC,EAC1C,SAAS,EAAE,MAAM,EAAE,GAClB,MAAM,EAAE,CAgBV;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,YAAY,CAAC,eAAe,CAAC,EAC1C,IAAI,EAAE,MAAM,GACX,IAAI,CAaN;AAED,wBAAgB,YAAY,CAC1B,WAAW,EAAE,YAAY,CAAC,eAAe,CAAC,EAC1C,IAAI,EAAE,MAAM,GACX,IAAI,CAQN;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,YAAY,CAAC,eAAe,CAAC,GACzC,SAAS,GAAG,OAAO,GAAG,aAAa,CAsBrC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 姿势轨道的读取与写入通道(spec §7)。
|
|
3
|
+
*
|
|
4
|
+
* 读取:theatre 没有公共的轨道查询 API,经 props 指针根(内部 SheetObject)
|
|
5
|
+
* 的 template.getMapOfValidSequenceTracks_forStudio 取轨道映射——与
|
|
6
|
+
* createTransactionPrivateApi 内部读取同一数据源。getPointerParts 走
|
|
7
|
+
* dataverse 内部注册表,单测无法伪造真指针,根解析经
|
|
8
|
+
* __setPointerRootResolverForTest 注入(仅测试用)。
|
|
9
|
+
*
|
|
10
|
+
* 写入(spec §7.2/§7.3 两条通道):
|
|
11
|
+
* writePoseKeyframe:摆姿势退出提交。有轨道 = scrub set(theatre 按当前
|
|
12
|
+
* position 写贝塞尔帧,同 position 覆盖);无轨道 = transaction
|
|
13
|
+
* sequenceProp 建轨 + scrub set 写首帧——两步事务为已知限制
|
|
14
|
+
* (setPrimitivePropAsSequenced 的 trackId 随机生成,set 看不到同事务
|
|
15
|
+
* 草稿里的新轨道,spec §2.4)。面板打帧走属性行原生打帧钮,不经这里。
|
|
16
|
+
* setPoseValue:右键菜单/弹框应用姿势。永不建轨:有轨道写帧、无轨道
|
|
17
|
+
* 写静态,theatre track-aware set 原生行为。
|
|
18
|
+
*/
|
|
19
|
+
import { getStudioSync } from '@dreamerbird/core';
|
|
20
|
+
import { getPointerParts, val } from '@dreamerbird/dataverse';
|
|
21
|
+
// clearPoseValue 需要 stateEditors 直改 historic(公共 transaction api
|
|
22
|
+
// 不暴露),走内部 Studio 通道——与 agent/keyframeTracks、CameraScene
|
|
23
|
+
// 诊断钩子同路径
|
|
24
|
+
import getStudio from '@dreamerbird/studio/getStudio';
|
|
25
|
+
import { parsePoseValue } from './poseValue';
|
|
26
|
+
let pointerRootResolverForTest = null;
|
|
27
|
+
/** 仅测试:getPointerParts 依赖 dataverse 内部注册表,真指针无法伪造 */
|
|
28
|
+
export function __setPointerRootResolverForTest(fn) {
|
|
29
|
+
pointerRootResolverForTest = fn;
|
|
30
|
+
}
|
|
31
|
+
function internalRoot(sheetObject) {
|
|
32
|
+
if (pointerRootResolverForTest)
|
|
33
|
+
return pointerRootResolverForTest();
|
|
34
|
+
const { root } = getPointerParts(sheetObject.props.pose);
|
|
35
|
+
// props 指针的根恒为内部 SheetObject(sheet 对象属性的定义域)
|
|
36
|
+
return root;
|
|
37
|
+
}
|
|
38
|
+
export function getTrackIdForProp(sheetObject, propName) {
|
|
39
|
+
const tree = internalRoot(sheetObject)
|
|
40
|
+
.template.getMapOfValidSequenceTracks_forStudio()
|
|
41
|
+
.getValue();
|
|
42
|
+
const trackId = tree[propName];
|
|
43
|
+
return typeof trackId === 'string' ? trackId : undefined;
|
|
44
|
+
}
|
|
45
|
+
export function getPoseTrackId(sheetObject) {
|
|
46
|
+
return getTrackIdForProp(sheetObject, 'pose');
|
|
47
|
+
}
|
|
48
|
+
/** 轨道 BasicKeyframedTrack 的帧数据;无轨道回 undefined */
|
|
49
|
+
function propTrackData(sheetObject, propName) {
|
|
50
|
+
const trackId = getTrackIdForProp(sheetObject, propName);
|
|
51
|
+
if (!trackId)
|
|
52
|
+
return undefined;
|
|
53
|
+
const root = internalRoot(sheetObject);
|
|
54
|
+
const { sheetId, objectKey } = sheetObject.address;
|
|
55
|
+
// 与 useEditingToolsForSimpleProp.tsx:181-187 同一读取路径
|
|
56
|
+
return val(root.template.project.pointers.historic.sheetsById[sheetId].sequence
|
|
57
|
+
.tracksByObject[objectKey].trackData[trackId]);
|
|
58
|
+
}
|
|
59
|
+
function poseTrackData(sheetObject) {
|
|
60
|
+
return propTrackData(sheetObject, 'pose');
|
|
61
|
+
}
|
|
62
|
+
export function getPoseKeyframePositions(sheetObject) {
|
|
63
|
+
const track = poseTrackData(sheetObject);
|
|
64
|
+
if (!track)
|
|
65
|
+
return [];
|
|
66
|
+
return Object.values(track.keyframes.byId).map((kf) => kf.position);
|
|
67
|
+
}
|
|
68
|
+
export function getPoseKeyframeCount(sheetObject) {
|
|
69
|
+
return getPoseKeyframePositions(sheetObject).length;
|
|
70
|
+
}
|
|
71
|
+
/** 当前值 + 轨道全部帧值里的 lib 引用 id(prefetchLibPoses 的输入) */
|
|
72
|
+
export function collectLibPoseIds(sheetObject) {
|
|
73
|
+
return collectLibPoseIdsForProps(sheetObject, ['pose']);
|
|
74
|
+
}
|
|
75
|
+
/** 多属性版(姿势 + 左手势/右手势):一并收集,预取一次全覆盖 */
|
|
76
|
+
export function collectLibPoseIdsForProps(sheetObject, propNames) {
|
|
77
|
+
const ids = new Set();
|
|
78
|
+
for (const propName of propNames) {
|
|
79
|
+
const current = parsePoseValue(val(sheetObject.props[propName]) ?? '');
|
|
80
|
+
if (current?.kind === 'lib')
|
|
81
|
+
ids.add(current.id);
|
|
82
|
+
const track = propTrackData(sheetObject, propName);
|
|
83
|
+
if (track) {
|
|
84
|
+
for (const kf of Object.values(track.keyframes.byId)) {
|
|
85
|
+
const v = parsePoseValue(typeof kf.value === 'string' ? kf.value : '');
|
|
86
|
+
if (v?.kind === 'lib')
|
|
87
|
+
ids.add(v.id);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return [...ids];
|
|
92
|
+
}
|
|
93
|
+
export function writePoseKeyframe(sheetObject, json) {
|
|
94
|
+
const studio = getStudioSync();
|
|
95
|
+
if (!studio)
|
|
96
|
+
return;
|
|
97
|
+
if (!getPoseTrackId(sheetObject)) {
|
|
98
|
+
studio.transaction(({ sequenceProp }) => {
|
|
99
|
+
sequenceProp(sheetObject.props.pose);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
const scrub = studio.scrub();
|
|
103
|
+
scrub.capture(({ set }) => {
|
|
104
|
+
set(sheetObject.props.pose, json);
|
|
105
|
+
});
|
|
106
|
+
scrub.commit();
|
|
107
|
+
}
|
|
108
|
+
export function setPoseValue(sheetObject, json) {
|
|
109
|
+
const studio = getStudioSync();
|
|
110
|
+
if (!studio)
|
|
111
|
+
return;
|
|
112
|
+
const scrub = studio.scrub();
|
|
113
|
+
scrub.capture(({ set }) => {
|
|
114
|
+
set(sheetObject.props.pose, json);
|
|
115
|
+
});
|
|
116
|
+
scrub.commit();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 清除姿势值与轨道(CameraScene 清除按钮与 Agent poses.clear 共用):
|
|
120
|
+
* 单个事务 = 一个撤销步骤。经内部 Studio 的 stateEditors 直改 historic:
|
|
121
|
+
* setPrimitivePropAsStatic(有轨时把当前值落为静态)紧接着
|
|
122
|
+
* unsetValueOfPrimitiveProp(删掉落下来的静态)——两个编辑器都是幂等直写,
|
|
123
|
+
* 不经指针读轨道树,绕开「单事务里 unsequenceProp 后 unset(pointer) 读到
|
|
124
|
+
* 事务前轨道树、错走删播放头帧分支」的指针级限制(2026-10-01 冒烟记录),
|
|
125
|
+
* 无需拆两事务。行为由 agent/commands/poses.realStudio.test.ts 验证
|
|
126
|
+
* (删轨+清值一步撤销,undo 一并恢复)。
|
|
127
|
+
*
|
|
128
|
+
* 返回 'cleared' | 'empty' | 'unavailable':空姿势(无轨无静态)不开空事务,
|
|
129
|
+
* 调用方据此返回明确结果而非静默 no-op;Studio 不可用由调用方决定
|
|
130
|
+
* 报错(Agent SCENE_UNAVAILABLE)还是静默(UI)。
|
|
131
|
+
*/
|
|
132
|
+
export function clearPoseValue(sheetObject) {
|
|
133
|
+
const studio = getStudio();
|
|
134
|
+
if (!studio)
|
|
135
|
+
return 'unavailable';
|
|
136
|
+
const hadTrack = Boolean(getPoseTrackId(sheetObject));
|
|
137
|
+
const current = val(sheetObject.props.pose) ?? '';
|
|
138
|
+
if (!hadTrack && current === '')
|
|
139
|
+
return 'empty';
|
|
140
|
+
studio.transaction(({ stateEditors }) => {
|
|
141
|
+
const editors = stateEditors.coreByProject.historic.sheetsById;
|
|
142
|
+
const address = {
|
|
143
|
+
projectId: sheetObject.address.projectId,
|
|
144
|
+
sheetId: sheetObject.address.sheetId,
|
|
145
|
+
objectKey: sheetObject.address.objectKey,
|
|
146
|
+
pathToProp: ['pose'],
|
|
147
|
+
};
|
|
148
|
+
if (hadTrack) {
|
|
149
|
+
// 先把当前求值落为静态(编辑器语义),随即删掉——净效果=回默认绑定
|
|
150
|
+
editors.sequence.setPrimitivePropAsStatic({ ...address, value: current });
|
|
151
|
+
}
|
|
152
|
+
editors.staticOverrides.byObject.unsetValueOfPrimitiveProp(address);
|
|
153
|
+
});
|
|
154
|
+
return 'cleared';
|
|
155
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poseTrack.test.d.ts","sourceRoot":"","sources":["../../src/poseMode/poseTrack.test.ts"],"names":[],"mappings":""}
|