@konitif/viewer-3d 0.284.1

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.
Files changed (175) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +34 -0
  3. package/dist/balanceFootprintDefinition.d.ts +7 -0
  4. package/dist/balanceFootprintDefinition.d.ts.map +1 -0
  5. package/dist/balanceFootprintDefinition.js +2 -0
  6. package/dist/balanceFootprintDefinition.js.map +1 -0
  7. package/dist/diagnosticContactDefinition.d.ts +7 -0
  8. package/dist/diagnosticContactDefinition.d.ts.map +1 -0
  9. package/dist/diagnosticContactDefinition.js +2 -0
  10. package/dist/diagnosticContactDefinition.js.map +1 -0
  11. package/dist/handTipDefinition.d.ts +13 -0
  12. package/dist/handTipDefinition.d.ts.map +1 -0
  13. package/dist/handTipDefinition.js +2 -0
  14. package/dist/handTipDefinition.js.map +1 -0
  15. package/dist/index.d.ts +41 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +19 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/jointHandleDefinition.d.ts +23 -0
  20. package/dist/jointHandleDefinition.d.ts.map +1 -0
  21. package/dist/jointHandleDefinition.js +2 -0
  22. package/dist/jointHandleDefinition.js.map +1 -0
  23. package/dist/ledPlacementDefinition.d.ts +38 -0
  24. package/dist/ledPlacementDefinition.d.ts.map +1 -0
  25. package/dist/ledPlacementDefinition.js +2 -0
  26. package/dist/ledPlacementDefinition.js.map +1 -0
  27. package/dist/ledReferenceFrame.d.ts +26 -0
  28. package/dist/ledReferenceFrame.d.ts.map +1 -0
  29. package/dist/ledReferenceFrame.js +2 -0
  30. package/dist/ledReferenceFrame.js.map +1 -0
  31. package/dist/ledRingCalibration.d.ts +22 -0
  32. package/dist/ledRingCalibration.d.ts.map +1 -0
  33. package/dist/ledRingCalibration.js +2 -0
  34. package/dist/ledRingCalibration.js.map +1 -0
  35. package/dist/renderer/AnimationLoop.d.ts +18 -0
  36. package/dist/renderer/AnimationLoop.d.ts.map +1 -0
  37. package/dist/renderer/AnimationLoop.js +39 -0
  38. package/dist/renderer/AnimationLoop.js.map +1 -0
  39. package/dist/renderer/CameraController.d.ts +154 -0
  40. package/dist/renderer/CameraController.d.ts.map +1 -0
  41. package/dist/renderer/CameraController.js +469 -0
  42. package/dist/renderer/CameraController.js.map +1 -0
  43. package/dist/renderer/NavigationPhysicsObservation.d.ts +25 -0
  44. package/dist/renderer/NavigationPhysicsObservation.d.ts.map +1 -0
  45. package/dist/renderer/NavigationPhysicsObservation.js +81 -0
  46. package/dist/renderer/NavigationPhysicsObservation.js.map +1 -0
  47. package/dist/renderer/ObservedRobotGroundingProjection.d.ts +206 -0
  48. package/dist/renderer/ObservedRobotGroundingProjection.d.ts.map +1 -0
  49. package/dist/renderer/ObservedRobotGroundingProjection.js +522 -0
  50. package/dist/renderer/ObservedRobotGroundingProjection.js.map +1 -0
  51. package/dist/renderer/ObservedRobotPresentationBuffer.d.ts +71 -0
  52. package/dist/renderer/ObservedRobotPresentationBuffer.d.ts.map +1 -0
  53. package/dist/renderer/ObservedRobotPresentationBuffer.js +226 -0
  54. package/dist/renderer/ObservedRobotPresentationBuffer.js.map +1 -0
  55. package/dist/renderer/PerformanceMonitor.d.ts +38 -0
  56. package/dist/renderer/PerformanceMonitor.d.ts.map +1 -0
  57. package/dist/renderer/PerformanceMonitor.js +84 -0
  58. package/dist/renderer/PerformanceMonitor.js.map +1 -0
  59. package/dist/renderer/ProjectileInteraction.d.ts +57 -0
  60. package/dist/renderer/ProjectileInteraction.d.ts.map +1 -0
  61. package/dist/renderer/ProjectileInteraction.js +152 -0
  62. package/dist/renderer/ProjectileInteraction.js.map +1 -0
  63. package/dist/renderer/RobotComparisonVisibilityTransition.d.ts +12 -0
  64. package/dist/renderer/RobotComparisonVisibilityTransition.d.ts.map +1 -0
  65. package/dist/renderer/RobotComparisonVisibilityTransition.js +23 -0
  66. package/dist/renderer/RobotComparisonVisibilityTransition.js.map +1 -0
  67. package/dist/renderer/RobotPoseTransition.d.ts +34 -0
  68. package/dist/renderer/RobotPoseTransition.d.ts.map +1 -0
  69. package/dist/renderer/RobotPoseTransition.js +66 -0
  70. package/dist/renderer/RobotPoseTransition.js.map +1 -0
  71. package/dist/renderer/RobotPostureCompensation.d.ts +31 -0
  72. package/dist/renderer/RobotPostureCompensation.d.ts.map +1 -0
  73. package/dist/renderer/RobotPostureCompensation.js +60 -0
  74. package/dist/renderer/RobotPostureCompensation.js.map +1 -0
  75. package/dist/renderer/SelectionController.d.ts +24 -0
  76. package/dist/renderer/SelectionController.d.ts.map +1 -0
  77. package/dist/renderer/SelectionController.js +68 -0
  78. package/dist/renderer/SelectionController.js.map +1 -0
  79. package/dist/renderer/TemporalProjectionModel.d.ts +71 -0
  80. package/dist/renderer/TemporalProjectionModel.d.ts.map +1 -0
  81. package/dist/renderer/TemporalProjectionModel.js +363 -0
  82. package/dist/renderer/TemporalProjectionModel.js.map +1 -0
  83. package/dist/renderer/Viewer3DRenderer.d.ts +1137 -0
  84. package/dist/renderer/Viewer3DRenderer.d.ts.map +1 -0
  85. package/dist/renderer/Viewer3DRenderer.js +10655 -0
  86. package/dist/renderer/Viewer3DRenderer.js.map +1 -0
  87. package/dist/renderer/ViewerExperimentCollector.d.ts +27 -0
  88. package/dist/renderer/ViewerExperimentCollector.d.ts.map +1 -0
  89. package/dist/renderer/ViewerExperimentCollector.js +2 -0
  90. package/dist/renderer/ViewerExperimentCollector.js.map +1 -0
  91. package/dist/renderer/ViewerExperimentPort.d.ts +19 -0
  92. package/dist/renderer/ViewerExperimentPort.d.ts.map +1 -0
  93. package/dist/renderer/ViewerExperimentPort.js +2 -0
  94. package/dist/renderer/ViewerExperimentPort.js.map +1 -0
  95. package/dist/renderer/ViewerFrameSignals.d.ts +13 -0
  96. package/dist/renderer/ViewerFrameSignals.d.ts.map +1 -0
  97. package/dist/renderer/ViewerFrameSignals.js +73 -0
  98. package/dist/renderer/ViewerFrameSignals.js.map +1 -0
  99. package/dist/renderer/ViewerHistoryData.d.ts +59 -0
  100. package/dist/renderer/ViewerHistoryData.d.ts.map +1 -0
  101. package/dist/renderer/ViewerHistoryData.js +2 -0
  102. package/dist/renderer/ViewerHistoryData.js.map +1 -0
  103. package/dist/renderer/ViewerHistoryPort.d.ts +15 -0
  104. package/dist/renderer/ViewerHistoryPort.d.ts.map +1 -0
  105. package/dist/renderer/ViewerHistoryPort.js +2 -0
  106. package/dist/renderer/ViewerHistoryPort.js.map +1 -0
  107. package/dist/renderer/ViewerIncarnationHealth.d.ts +14 -0
  108. package/dist/renderer/ViewerIncarnationHealth.d.ts.map +1 -0
  109. package/dist/renderer/ViewerIncarnationHealth.js +13 -0
  110. package/dist/renderer/ViewerIncarnationHealth.js.map +1 -0
  111. package/dist/renderer/ViewerInputBindings.d.ts +19 -0
  112. package/dist/renderer/ViewerInputBindings.d.ts.map +1 -0
  113. package/dist/renderer/ViewerInputBindings.js +44 -0
  114. package/dist/renderer/ViewerInputBindings.js.map +1 -0
  115. package/dist/renderer/ViewerMetadata.d.ts +11 -0
  116. package/dist/renderer/ViewerMetadata.d.ts.map +1 -0
  117. package/dist/renderer/ViewerMetadata.js +8 -0
  118. package/dist/renderer/ViewerMetadata.js.map +1 -0
  119. package/dist/renderer/ViewerPlaybackCompletionPolicy.d.ts +29 -0
  120. package/dist/renderer/ViewerPlaybackCompletionPolicy.d.ts.map +1 -0
  121. package/dist/renderer/ViewerPlaybackCompletionPolicy.js +27 -0
  122. package/dist/renderer/ViewerPlaybackCompletionPolicy.js.map +1 -0
  123. package/dist/renderer/ViewerProjectileParticleRenderer.d.ts +21 -0
  124. package/dist/renderer/ViewerProjectileParticleRenderer.d.ts.map +1 -0
  125. package/dist/renderer/ViewerProjectileParticleRenderer.js +134 -0
  126. package/dist/renderer/ViewerProjectileParticleRenderer.js.map +1 -0
  127. package/dist/renderer/ViewerResizePresentation.d.ts +16 -0
  128. package/dist/renderer/ViewerResizePresentation.d.ts.map +1 -0
  129. package/dist/renderer/ViewerResizePresentation.js +12 -0
  130. package/dist/renderer/ViewerResizePresentation.js.map +1 -0
  131. package/dist/renderer/ViewerTemporalProjectionExperimentAdapter.d.ts +34 -0
  132. package/dist/renderer/ViewerTemporalProjectionExperimentAdapter.d.ts.map +1 -0
  133. package/dist/renderer/ViewerTemporalProjectionExperimentAdapter.js +130 -0
  134. package/dist/renderer/ViewerTemporalProjectionExperimentAdapter.js.map +1 -0
  135. package/dist/renderer/ViewerTemporalScheduler.d.ts +6 -0
  136. package/dist/renderer/ViewerTemporalScheduler.d.ts.map +1 -0
  137. package/dist/renderer/ViewerTemporalScheduler.js +12 -0
  138. package/dist/renderer/ViewerTemporalScheduler.js.map +1 -0
  139. package/dist/renderer/VisualGroundLayer.d.ts +110 -0
  140. package/dist/renderer/VisualGroundLayer.d.ts.map +1 -0
  141. package/dist/renderer/VisualGroundLayer.js +576 -0
  142. package/dist/renderer/VisualGroundLayer.js.map +1 -0
  143. package/dist/renderer/displayFrameRate.d.ts +5 -0
  144. package/dist/renderer/displayFrameRate.d.ts.map +1 -0
  145. package/dist/renderer/displayFrameRate.js +23 -0
  146. package/dist/renderer/displayFrameRate.js.map +1 -0
  147. package/dist/renderer/index.d.ts +20 -0
  148. package/dist/renderer/index.d.ts.map +1 -0
  149. package/dist/renderer/index.js +18 -0
  150. package/dist/renderer/index.js.map +1 -0
  151. package/dist/renderer/physics/ViewerJointResolution.d.ts +19 -0
  152. package/dist/renderer/physics/ViewerJointResolution.d.ts.map +1 -0
  153. package/dist/renderer/physics/ViewerJointResolution.js +24 -0
  154. package/dist/renderer/physics/ViewerJointResolution.js.map +1 -0
  155. package/dist/renderer/physics/ViewerPhysicsFrame.d.ts +9 -0
  156. package/dist/renderer/physics/ViewerPhysicsFrame.d.ts.map +1 -0
  157. package/dist/renderer/physics/ViewerPhysicsFrame.js +26 -0
  158. package/dist/renderer/physics/ViewerPhysicsFrame.js.map +1 -0
  159. package/dist/renderer/physics/ViewerPhysicsJointMapping.d.ts +11 -0
  160. package/dist/renderer/physics/ViewerPhysicsJointMapping.d.ts.map +1 -0
  161. package/dist/renderer/physics/ViewerPhysicsJointMapping.js +20 -0
  162. package/dist/renderer/physics/ViewerPhysicsJointMapping.js.map +1 -0
  163. package/dist/renderer/physics/ViewerPhysicsMetadata.d.ts +20 -0
  164. package/dist/renderer/physics/ViewerPhysicsMetadata.d.ts.map +1 -0
  165. package/dist/renderer/physics/ViewerPhysicsMetadata.js +49 -0
  166. package/dist/renderer/physics/ViewerPhysicsMetadata.js.map +1 -0
  167. package/dist/renderer/robotViewerMotion.d.ts +49 -0
  168. package/dist/renderer/robotViewerMotion.d.ts.map +1 -0
  169. package/dist/renderer/robotViewerMotion.js +253 -0
  170. package/dist/renderer/robotViewerMotion.js.map +1 -0
  171. package/dist/supportDefinition.d.ts +11 -0
  172. package/dist/supportDefinition.d.ts.map +1 -0
  173. package/dist/supportDefinition.js +2 -0
  174. package/dist/supportDefinition.js.map +1 -0
  175. package/package.json +52 -0
@@ -0,0 +1,20 @@
1
+ /** Explicit-provider renderer entry. Deliberately excludes historical defaults and campaigns. */
2
+ export * from './Viewer3DRenderer.js';
3
+ export * from './displayFrameRate.js';
4
+ export { resolveViewerFrameSignalIntervalMs, VIEWER_FRAME_SIGNAL_CATALOG, type ViewerFrameSignalCadence, type ViewerFrameSignalDefinition, type ViewerFrameSignalId } from './ViewerFrameSignals.js';
5
+ export * from './ProjectileInteraction.js';
6
+ export { createInteractionKeyboardSignal, DEFAULT_VIEWER_INPUT_BINDINGS, VIEWER_PROJECTILE_CHARGE_ACTION_ID, VIEWER_PROJECTILE_LAUNCH_ACTION_ID } from './ViewerInputBindings.js';
7
+ export * from './RobotComparisonVisibilityTransition.js';
8
+ export * from './NavigationPhysicsObservation.js';
9
+ export * from './VisualGroundLayer.js';
10
+ export * from './TemporalProjectionModel.js';
11
+ export * from './ObservedRobotPresentationBuffer.js';
12
+ export * from './RobotPoseTransition.js';
13
+ export * from './RobotPostureCompensation.js';
14
+ export * from './ObservedRobotGroundingProjection.js';
15
+ export * from './PerformanceMonitor.js';
16
+ export * from './ViewerTemporalProjectionExperimentAdapter.js';
17
+ export type { ViewerExperimentCollector } from './ViewerExperimentCollector.js';
18
+ export type { ViewerExperimentPort, ViewerExperimentStart } from './ViewerExperimentPort.js';
19
+ export * from './robotViewerMotion.js';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EACL,kCAAkC,EAClC,2BAA2B,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,kCAAkC,EAClC,kCAAkC,EACnC,MAAM,0BAA0B,CAAC;AAClC,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sCAAsC,CAAC;AACrD,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,yBAAyB,CAAC;AACxC,cAAc,gDAAgD,CAAC;AAC/D,YAAY,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAC7F,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /** Explicit-provider renderer entry. Deliberately excludes historical defaults and campaigns. */
2
+ export * from './Viewer3DRenderer.js';
3
+ export * from './displayFrameRate.js';
4
+ export { resolveViewerFrameSignalIntervalMs, VIEWER_FRAME_SIGNAL_CATALOG } from './ViewerFrameSignals.js';
5
+ export * from './ProjectileInteraction.js';
6
+ export { createInteractionKeyboardSignal, DEFAULT_VIEWER_INPUT_BINDINGS, VIEWER_PROJECTILE_CHARGE_ACTION_ID, VIEWER_PROJECTILE_LAUNCH_ACTION_ID } from './ViewerInputBindings.js';
7
+ export * from './RobotComparisonVisibilityTransition.js';
8
+ export * from './NavigationPhysicsObservation.js';
9
+ export * from './VisualGroundLayer.js';
10
+ export * from './TemporalProjectionModel.js';
11
+ export * from './ObservedRobotPresentationBuffer.js';
12
+ export * from './RobotPoseTransition.js';
13
+ export * from './RobotPostureCompensation.js';
14
+ export * from './ObservedRobotGroundingProjection.js';
15
+ export * from './PerformanceMonitor.js';
16
+ export * from './ViewerTemporalProjectionExperimentAdapter.js';
17
+ export * from './robotViewerMotion.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EACL,kCAAkC,EAClC,2BAA2B,EAI5B,MAAM,yBAAyB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,kCAAkC,EAClC,kCAAkC,EACnC,MAAM,0BAA0B,CAAC;AAClC,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sCAAsC,CAAC;AACrD,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,yBAAyB,CAAC;AACxC,cAAc,gDAAgD,CAAC;AAG/D,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /** Fields read by selection, not the caller's complete calibration contract. */
2
+ export interface ViewerJointResolutionEntry {
3
+ readonly mode: string;
4
+ readonly visualJointName?: string;
5
+ readonly physicsJointName?: string;
6
+ }
7
+ /** Only the implicit case is authored here; explicit entries keep their type and identity. */
8
+ export interface ViewerImplicitJointMapping {
9
+ mode: 'direct';
10
+ visualJointName: string;
11
+ physicsJointName: string;
12
+ }
13
+ /** Local model correspondence rules; inputs remain owned by the caller. */
14
+ export declare function resolveViewerJointMapping<Mapping extends ViewerJointResolutionEntry>(jointName: string, mappings: ReadonlyMap<string, Mapping>, auxiliaryJointNames: ReadonlySet<string>): Mapping | ViewerImplicitJointMapping | null;
15
+ export declare function selectDirectViewerJointMappings<Joint, Mapping extends ViewerJointResolutionEntry>(joints: Readonly<Record<string, Joint>>, mappings: ReadonlyMap<string, Mapping>, auxiliaryJointNames: ReadonlySet<string>): Array<{
16
+ joint: Joint;
17
+ mapping: Mapping | ViewerImplicitJointMapping;
18
+ }>;
19
+ //# sourceMappingURL=ViewerJointResolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewerJointResolution.d.ts","sourceRoot":"","sources":["../../../src/renderer/physics/ViewerJointResolution.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,8FAA8F;AAC9F,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,QAAQ,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,2EAA2E;AAC3E,wBAAgB,yBAAyB,CAAC,OAAO,SAAS,0BAA0B,EAClF,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAC,GACvC,OAAO,GAAG,0BAA0B,GAAG,IAAI,CAK7C;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,SAAS,0BAA0B,EAC/F,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EACvC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAC,GACvC,KAAK,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,OAAO,GAAG,0BAA0B,CAAA;CAAE,CAAC,CAaxE"}
@@ -0,0 +1,24 @@
1
+ /** Local model correspondence rules; inputs remain owned by the caller. */
2
+ export function resolveViewerJointMapping(jointName, mappings, auxiliaryJointNames) {
3
+ const explicitMapping = mappings.get(jointName);
4
+ if (explicitMapping)
5
+ return explicitMapping;
6
+ if (mappings.size > 0 || auxiliaryJointNames.has(jointName))
7
+ return null;
8
+ return { mode: 'direct', visualJointName: jointName, physicsJointName: jointName };
9
+ }
10
+ export function selectDirectViewerJointMappings(joints, mappings, auxiliaryJointNames) {
11
+ if (mappings.size > 0) {
12
+ return Array.from(mappings.values())
13
+ .filter(mapping => mapping.mode === 'direct' && !!mapping.visualJointName && !!mapping.physicsJointName)
14
+ .map(mapping => ({ joint: joints[mapping.visualJointName], mapping }))
15
+ .filter(entry => !!entry.joint);
16
+ }
17
+ return Object.entries(joints)
18
+ .filter(([jointName]) => !auxiliaryJointNames.has(jointName))
19
+ .map(([jointName, joint]) => ({
20
+ joint,
21
+ mapping: { mode: 'direct', visualJointName: jointName, physicsJointName: jointName }
22
+ }));
23
+ }
24
+ //# sourceMappingURL=ViewerJointResolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewerJointResolution.js","sourceRoot":"","sources":["../../../src/renderer/physics/ViewerJointResolution.ts"],"names":[],"mappings":"AAcA,2EAA2E;AAC3E,MAAM,UAAU,yBAAyB,CACvC,SAAiB,EACjB,QAAsC,EACtC,mBAAwC;IAExC,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,eAAe;QAAE,OAAO,eAAe,CAAC;IAC5C,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACzE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,MAAuC,EACvC,QAAsC,EACtC,mBAAwC;IAExC,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;aACvG,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,eAAyB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;aAC/E,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SAC1B,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;SAC5D,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5B,KAAK;QACL,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE;KACrF,CAAC,CAAC,CAAC;AACR,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Matrix4, Quaternion, Vector3 } from 'three';
2
+ /** Legacy viewer convention, not a universal coordinate-system default. */
3
+ export declare function resolveViewerSceneYaw(value: unknown, profileYaw: unknown): number;
4
+ export declare function createViewerPhysicsFrameQuaternion(coordinateFrame: unknown, sceneYawRadians: number): Quaternion;
5
+ /** Preserves the legacy in-place impulse conversion; frame is not mutated. */
6
+ export declare function projectViewerImpulseByFrame(impulse: Vector3, frame: Quaternion): Vector3;
7
+ /** Points are copied and include the presentation-root inverse before the frame inverse. */
8
+ export declare function projectViewerPointByFrame(point: Vector3, rootWorld: Matrix4, frame: Quaternion): Vector3;
9
+ //# sourceMappingURL=ViewerPhysicsFrame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewerPhysicsFrame.d.ts","sourceRoot":"","sources":["../../../src/renderer/physics/ViewerPhysicsFrame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAIrD,2EAA2E;AAC3E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,CAIjF;AAED,wBAAgB,kCAAkC,CAChD,eAAe,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,GAChD,UAAU,CAKZ;AAED,8EAA8E;AAC9E,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAExF;AAED,4FAA4F;AAC5F,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAExG"}
@@ -0,0 +1,26 @@
1
+ import { Matrix4, Quaternion, Vector3 } from 'three';
2
+ const Z_UP_TO_Y_UP = new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), -Math.PI / 2);
3
+ /** Legacy viewer convention, not a universal coordinate-system default. */
4
+ export function resolveViewerSceneYaw(value, profileYaw) {
5
+ if (typeof value === 'number' && Number.isFinite(value))
6
+ return value;
7
+ if (typeof profileYaw === 'number' && Number.isFinite(profileYaw))
8
+ return profileYaw;
9
+ return -Math.PI;
10
+ }
11
+ export function createViewerPhysicsFrameQuaternion(coordinateFrame, sceneYawRadians) {
12
+ if (coordinateFrame !== 'mujoco-z-up' && coordinateFrame !== 'z-up')
13
+ return new Quaternion();
14
+ return new Quaternion()
15
+ .setFromAxisAngle(new Vector3(0, 1, 0), sceneYawRadians)
16
+ .multiply(Z_UP_TO_Y_UP);
17
+ }
18
+ /** Preserves the legacy in-place impulse conversion; frame is not mutated. */
19
+ export function projectViewerImpulseByFrame(impulse, frame) {
20
+ return impulse.applyQuaternion(frame.clone().invert());
21
+ }
22
+ /** Points are copied and include the presentation-root inverse before the frame inverse. */
23
+ export function projectViewerPointByFrame(point, rootWorld, frame) {
24
+ return point.clone().applyMatrix4(rootWorld.clone().invert()).applyQuaternion(frame.clone().invert());
25
+ }
26
+ //# sourceMappingURL=ViewerPhysicsFrame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewerPhysicsFrame.js","sourceRoot":"","sources":["../../../src/renderer/physics/ViewerPhysicsFrame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAErD,MAAM,YAAY,GAAG,IAAI,UAAU,EAAE,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAE3F,2EAA2E;AAC3E,MAAM,UAAU,qBAAqB,CAAC,KAAc,EAAE,UAAmB;IACvE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtE,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IACrF,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,eAAwB,EAAE,eAAuB;IAEjD,IAAI,eAAe,KAAK,aAAa,IAAI,eAAe,KAAK,MAAM;QAAE,OAAO,IAAI,UAAU,EAAE,CAAC;IAC7F,OAAO,IAAI,UAAU,EAAE;SACpB,gBAAgB,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC;SACvD,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,2BAA2B,CAAC,OAAgB,EAAE,KAAiB;IAC7E,OAAO,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,yBAAyB,CAAC,KAAc,EAAE,SAAkB,EAAE,KAAiB;IAC7F,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AACxG,CAAC"}
@@ -0,0 +1,11 @@
1
+ /** Local compatibility coefficients, not an invertibility or unit guarantee. */
2
+ export interface ViewerJointValueCoefficients {
3
+ readonly scale?: number;
4
+ readonly sign?: number;
5
+ readonly offset?: number;
6
+ }
7
+ export declare function createPhysicsJointTargetValue(mapping: ViewerJointValueCoefficients, value: number): number;
8
+ export declare function createVisualJointValueFromPhysics(mapping: ViewerJointValueCoefficients, value: number): number;
9
+ export declare function createVisualJointValueFromSource(mapping: ViewerJointValueCoefficients, value: number): number;
10
+ export declare function resolvePhysicsJointMappingScale(mapping: ViewerJointValueCoefficients): number;
11
+ //# sourceMappingURL=ViewerPhysicsJointMapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewerPhysicsJointMapping.d.ts","sourceRoot":"","sources":["../../../src/renderer/physics/ViewerPhysicsJointMapping.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAGD,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,4BAA4B,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK1G;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,4BAA4B,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK9G;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,4BAA4B,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7G;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,4BAA4B,GAAG,MAAM,CAK7F"}
@@ -0,0 +1,20 @@
1
+ // Scalar adaptation only: selection, limits and coordinate frames belong to callers.
2
+ export function createPhysicsJointTargetValue(mapping, value) {
3
+ const scale = resolvePhysicsJointMappingScale(mapping);
4
+ const offset = typeof mapping.offset === 'number' && Number.isFinite(mapping.offset) ? mapping.offset : 0;
5
+ return value * scale + offset;
6
+ }
7
+ export function createVisualJointValueFromPhysics(mapping, value) {
8
+ const scale = resolvePhysicsJointMappingScale(mapping);
9
+ const offset = typeof mapping.offset === 'number' && Number.isFinite(mapping.offset) ? mapping.offset : 0;
10
+ return scale === 0 ? value : (value - offset) / scale;
11
+ }
12
+ export function createVisualJointValueFromSource(mapping, value) {
13
+ return createPhysicsJointTargetValue(mapping, value);
14
+ }
15
+ export function resolvePhysicsJointMappingScale(mapping) {
16
+ const scale = typeof mapping.scale === 'number' && Number.isFinite(mapping.scale) ? mapping.scale : 1;
17
+ const sign = typeof mapping.sign === 'number' && Number.isFinite(mapping.sign) ? mapping.sign : 1;
18
+ return scale * sign;
19
+ }
20
+ //# sourceMappingURL=ViewerPhysicsJointMapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewerPhysicsJointMapping.js","sourceRoot":"","sources":["../../../src/renderer/physics/ViewerPhysicsJointMapping.ts"],"names":[],"mappings":"AAOA,qFAAqF;AACrF,MAAM,UAAU,6BAA6B,CAAC,OAAqC,EAAE,KAAa;IAChG,MAAM,KAAK,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1G,OAAO,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,OAAqC,EAAE,KAAa;IACpG,MAAM,KAAK,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1G,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,OAAqC,EAAE,KAAa;IACnG,OAAO,6BAA6B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,OAAqC;IACnF,MAAM,KAAK,GAAG,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAElG,OAAO,KAAK,GAAG,IAAI,CAAC;AACtB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { ViewerJointResolutionEntry } from './ViewerJointResolution.js';
2
+ import type { ViewerJointValueCoefficients } from './ViewerPhysicsJointMapping.js';
3
+ /** Viewer input requirements, not the full authored calibration or a validated mode. */
4
+ export interface ViewerPhysicsJointBinding extends ViewerJointResolutionEntry, ViewerJointValueCoefficients {
5
+ readonly sourceJointName?: string;
6
+ }
7
+ /** Only the legacy alignment fields read by the viewer, not simulation policy. */
8
+ export interface ViewerPhysicsAlignment {
9
+ coordinateFrame?: string;
10
+ sceneYawRadians?: number;
11
+ jointMappings?: ViewerPhysicsJointBinding[];
12
+ visualRootBodyName?: string;
13
+ bodyVisualObjectNames?: Record<string, string[]>;
14
+ }
15
+ export declare function resolvePhysicsSourceString(value: unknown): string | null;
16
+ export declare function resolvePhysicsSourceStringListMap(value: unknown): Map<string, readonly string[]>;
17
+ export declare function resolvePhysicsSourceStringSet(value: unknown): Set<string>;
18
+ export declare function resolvePhysicsJointMappings(value: unknown): Map<string, ViewerPhysicsJointBinding>;
19
+ export declare function resolvePhysicsVisualAlignmentProfile(value: unknown): ViewerPhysicsAlignment | null;
20
+ //# sourceMappingURL=ViewerPhysicsMetadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewerPhysicsMetadata.d.ts","sourceRoot":"","sources":["../../../src/renderer/physics/ViewerPhysicsMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAEnF,wFAAwF;AACxF,MAAM,WAAW,yBAA0B,SAAQ,0BAA0B,EAAE,4BAA4B;IACzG,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,kFAAkF;AAClF,MAAM,WAAW,sBAAsB;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAClD;AAID,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAExE;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAkBhG;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAMzE;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAwBlG;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,GAAG,IAAI,CAIlG"}
@@ -0,0 +1,49 @@
1
+ // Viewer-side legacy interpretation; intentionally distinct from MuJoCo rules.
2
+ // Pure data functions: no renderer, host effects or session state.
3
+ export function resolvePhysicsSourceString(value) {
4
+ return typeof value === 'string' && value.length > 0 ? value : null;
5
+ }
6
+ export function resolvePhysicsSourceStringListMap(value) {
7
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
8
+ return new Map();
9
+ }
10
+ const entries = Object.entries(value)
11
+ .map(([key, candidates]) => [
12
+ key,
13
+ Array.isArray(candidates)
14
+ ? candidates.filter((entry) => typeof entry === 'string' && entry.length > 0)
15
+ : []
16
+ ])
17
+ .filter((entry) => entry[0].length > 0 && entry[1].length > 0);
18
+ return new Map(entries);
19
+ }
20
+ export function resolvePhysicsSourceStringSet(value) {
21
+ if (!Array.isArray(value)) {
22
+ return new Set();
23
+ }
24
+ return new Set(value.filter((entry) => typeof entry === 'string' && entry.length > 0));
25
+ }
26
+ export function resolvePhysicsJointMappings(value) {
27
+ if (!Array.isArray(value)) {
28
+ return new Map();
29
+ }
30
+ const entries = value
31
+ .filter((entry) => {
32
+ return (!!entry &&
33
+ typeof entry === 'object' &&
34
+ !Array.isArray(entry) &&
35
+ typeof entry.mode === 'string');
36
+ })
37
+ .map((mapping) => [
38
+ mapping.visualJointName ?? mapping.physicsJointName ?? mapping.sourceJointName ?? '',
39
+ mapping
40
+ ])
41
+ .filter((entry) => entry[0].length > 0);
42
+ return new Map(entries);
43
+ }
44
+ export function resolvePhysicsVisualAlignmentProfile(value) {
45
+ return value && typeof value === 'object' && !Array.isArray(value)
46
+ ? value
47
+ : null;
48
+ }
49
+ //# sourceMappingURL=ViewerPhysicsMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewerPhysicsMetadata.js","sourceRoot":"","sources":["../../../src/renderer/physics/ViewerPhysicsMetadata.ts"],"names":[],"mappings":"AAiBA,+EAA+E;AAC/E,mEAAmE;AACnE,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,KAAc;IAC9D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAClC,GAAG,CACF,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,EAAE,CACpB;QACE,GAAG;QACH,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YACvB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9F,CAAC,CAAC,EAAE;KACE,CACb;SACA,MAAM,CAAC,CAAC,KAAK,EAAwC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEvG,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAc;IAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1G,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACxD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK;SAClB,MAAM,CAAC,CAAC,KAAK,EAAsC,EAAE;QACpD,OAAO,CACL,CAAC,CAAC,KAAK;YACP,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACrB,OAAQ,KAAmC,CAAC,IAAI,KAAK,QAAQ,CAC9D,CAAC;IACJ,CAAC,CAAC;SACD,GAAG,CACF,CAAC,OAAO,EAAE,EAAE,CACV;QACE,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,eAAe,IAAI,EAAE;QACpF,OAAO;KACC,CACb;SACA,MAAM,CAAC,CAAC,KAAK,EAAyD,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEjG,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,oCAAoC,CAAC,KAAc;IACjE,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAChE,CAAC,CAAE,KAAgC;QACnC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC"}
@@ -0,0 +1,49 @@
1
+ export type RobotInterpolationCurve = {
2
+ x1: number;
3
+ y1: number;
4
+ x2: number;
5
+ y2: number;
6
+ };
7
+ export type RobotInterpolationPreset = 'step_or_linear' | 'step' | 'linear' | 'ease_in' | 'ease_out' | 'ease_in_out';
8
+ export type RobotSegmentInterpolation = RobotInterpolationPreset | 'custom';
9
+ export type RobotMotionTrack = {
10
+ target: string | null;
11
+ property: 'angle' | 'ratio';
12
+ unitKind?: string | null;
13
+ interpolation: RobotInterpolationPreset;
14
+ keys: Array<{
15
+ frame: number;
16
+ time: number | null;
17
+ value: number | null;
18
+ interpolationToNext?: RobotSegmentInterpolation;
19
+ interpolationCurveToNext?: RobotInterpolationCurve;
20
+ }>;
21
+ };
22
+ export type RobotMotionAnimation = {
23
+ motion: {
24
+ hasMotion: boolean;
25
+ tracks: RobotMotionTrack[];
26
+ };
27
+ timeline?: {
28
+ durationSeconds?: number | null;
29
+ };
30
+ composition?: {
31
+ clips?: Array<{
32
+ time: number | null;
33
+ durationSeconds: number;
34
+ }>;
35
+ };
36
+ };
37
+ export declare function getRobotMotionAnimationDuration(animation: RobotMotionAnimation): number;
38
+ /**
39
+ * Resolves the complete playback domain. The product projection may extend
40
+ * beyond motion keys (for example while audio continues), so the Viewer must
41
+ * not shorten that domain back to its locally observable motion duration.
42
+ */
43
+ export declare function resolveRobotMotionPlaybackDuration(animation: RobotMotionAnimation, projectionDurationSeconds?: number | null): number;
44
+ export declare function interpolateRobotMotionTrackValueAtTime(track: RobotMotionTrack, time: number): number | null;
45
+ /** Viewer joints consume radians; authored keys remain in their declared units.
46
+ * Undeclared/legacy units preserve the historical radians contract.
47
+ */
48
+ export declare function toRobotMotionJointValue(track: Pick<RobotMotionTrack, 'property' | 'unitKind'>, value: number): number;
49
+ //# sourceMappingURL=robotViewerMotion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"robotViewerMotion.d.ts","sourceRoot":"","sources":["../../src/renderer/robotViewerMotion.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAChC,gBAAgB,GAChB,MAAM,GACN,QAAQ,GACR,SAAS,GACT,UAAU,GACV,aAAa,CAAC;AAElB,MAAM,MAAM,yBAAyB,GAAG,wBAAwB,GAAG,QAAQ,CAAC;AAE5E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,wBAAwB,CAAC;IACxC,IAAI,EAAE,KAAK,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,mBAAmB,CAAC,EAAE,yBAAyB,CAAC;QAChD,wBAAwB,CAAC,EAAE,uBAAuB,CAAC;KACpD,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE;QACN,SAAS,EAAE,OAAO,CAAC;QACnB,MAAM,EAAE,gBAAgB,EAAE,CAAC;KAC5B,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACjC,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,KAAK,CAAC;YACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;YACpB,eAAe,EAAE,MAAM,CAAC;SACzB,CAAC,CAAC;KACJ,CAAC;CACH,CAAC;AAyCF,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,oBAAoB,GAAG,MAAM,CAuBvF;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAChD,SAAS,EAAE,oBAAoB,EAC/B,yBAAyB,CAAC,EAAE,MAAM,GAAG,IAAI,GACxC,MAAM,CAQR;AAED,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG3G;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAErH"}
@@ -0,0 +1,253 @@
1
+ const defaultCurve = {
2
+ x1: 0.22,
3
+ y1: 0,
4
+ x2: 0.18,
5
+ y2: 1
6
+ };
7
+ const presetCurves = {
8
+ step_or_linear: null,
9
+ linear: { x1: 0, y1: 0, x2: 1, y2: 1 },
10
+ step: null,
11
+ ease_in: { x1: 0.42, y1: 0, x2: 1, y2: 1 },
12
+ ease_out: { x1: 0, y1: 0, x2: 0.58, y2: 1 },
13
+ ease_in_out: { x1: 0.42, y1: 0, x2: 0.58, y2: 1 }
14
+ };
15
+ const animationDurationCache = new WeakMap();
16
+ const renderableTrackKeyCache = new WeakMap();
17
+ const renderableTrackCursorCache = new WeakMap();
18
+ export function getRobotMotionAnimationDuration(animation) {
19
+ const cachedDuration = animationDurationCache.get(animation);
20
+ if (typeof cachedDuration === 'number') {
21
+ return cachedDuration;
22
+ }
23
+ const keyTimes = animation.motion.tracks.flatMap((track) => track.keys.map((key) => key.time).filter((time) => typeof time === 'number'));
24
+ const compositionTimes = (animation.composition?.clips ?? [])
25
+ .map((clip) => (typeof clip.time === 'number' ? clip.time + Math.max(0, clip.durationSeconds) : null))
26
+ .filter((time) => typeof time === 'number');
27
+ const candidates = [
28
+ animation.timeline?.durationSeconds && animation.timeline.durationSeconds > 0 ? animation.timeline.durationSeconds : null,
29
+ ...keyTimes,
30
+ ...compositionTimes
31
+ ].filter((time) => typeof time === 'number' && Number.isFinite(time) && time > 0);
32
+ const duration = candidates.length > 0 ? Math.max(...candidates) : 0;
33
+ animationDurationCache.set(animation, duration);
34
+ return duration;
35
+ }
36
+ /**
37
+ * Resolves the complete playback domain. The product projection may extend
38
+ * beyond motion keys (for example while audio continues), so the Viewer must
39
+ * not shorten that domain back to its locally observable motion duration.
40
+ */
41
+ export function resolveRobotMotionPlaybackDuration(animation, projectionDurationSeconds) {
42
+ const motionDuration = getRobotMotionAnimationDuration(animation);
43
+ const projectionDuration = typeof projectionDurationSeconds === 'number' &&
44
+ Number.isFinite(projectionDurationSeconds) && projectionDurationSeconds > 0
45
+ ? projectionDurationSeconds
46
+ : 0;
47
+ return Math.max(motionDuration, projectionDuration);
48
+ }
49
+ export function interpolateRobotMotionTrackValueAtTime(track, time) {
50
+ const value = interpolateRawRobotMotionTrackValueAtTime(track, time);
51
+ return value === null ? null : toRobotMotionJointValue(track, value);
52
+ }
53
+ /** Viewer joints consume radians; authored keys remain in their declared units.
54
+ * Undeclared/legacy units preserve the historical radians contract.
55
+ */
56
+ export function toRobotMotionJointValue(track, value) {
57
+ return track.property === 'angle' && track.unitKind === 'angle_deg' ? value * Math.PI / 180 : value;
58
+ }
59
+ function interpolateRawRobotMotionTrackValueAtTime(track, time) {
60
+ const normalizedKeys = getRenderableTrackKeys(track);
61
+ if (normalizedKeys.length === 0) {
62
+ return null;
63
+ }
64
+ const first = normalizedKeys[0];
65
+ const last = normalizedKeys[normalizedKeys.length - 1];
66
+ if (time < (first.time ?? 0)) {
67
+ return null;
68
+ }
69
+ if ((first.time ?? 0) >= time) {
70
+ return first.value;
71
+ }
72
+ if ((last.time ?? 0) <= time) {
73
+ return last.value;
74
+ }
75
+ const segmentIndex = resolveRenderableTrackSegmentIndex(track, normalizedKeys, time);
76
+ const current = normalizedKeys[segmentIndex];
77
+ const next = normalizedKeys[segmentIndex + 1];
78
+ if (current && next) {
79
+ const span = next.time - current.time;
80
+ if (span <= 0) {
81
+ return current.value;
82
+ }
83
+ const resolvedInterpolation = resolveTrackSegmentInterpolation(track, current.sourceIndex);
84
+ const progress = applyInterpolationProgress(resolvedInterpolation.interpolation, (time - current.time) / span, resolvedInterpolation.curve);
85
+ return current.value + (next.value - current.value) * progress;
86
+ }
87
+ return last.value;
88
+ }
89
+ function resolveRenderableTrackSegmentIndex(track, keys, time) {
90
+ const cached = renderableTrackCursorCache.get(track);
91
+ if (cached?.keys === keys && isRenderableTrackSegmentMatch(keys, cached.segmentIndex, time)) {
92
+ return cached.segmentIndex;
93
+ }
94
+ const cachedIndex = cached?.keys === keys ? cached.segmentIndex : -1;
95
+ if (cachedIndex >= 0) {
96
+ const nearbyIndex = resolveNearbyRenderableTrackSegmentIndex(keys, cachedIndex, time);
97
+ if (nearbyIndex !== null) {
98
+ renderableTrackCursorCache.set(track, { keys, segmentIndex: nearbyIndex });
99
+ return nearbyIndex;
100
+ }
101
+ }
102
+ let low = 0;
103
+ let high = keys.length - 2;
104
+ while (low <= high) {
105
+ const mid = Math.floor((low + high) / 2);
106
+ const current = keys[mid];
107
+ const next = keys[mid + 1];
108
+ if (!current || !next) {
109
+ break;
110
+ }
111
+ if (time < current.time) {
112
+ high = mid - 1;
113
+ }
114
+ else if (time > next.time) {
115
+ low = mid + 1;
116
+ }
117
+ else {
118
+ renderableTrackCursorCache.set(track, { keys, segmentIndex: mid });
119
+ return mid;
120
+ }
121
+ }
122
+ const fallbackIndex = Math.max(0, Math.min(keys.length - 2, low));
123
+ renderableTrackCursorCache.set(track, { keys, segmentIndex: fallbackIndex });
124
+ return fallbackIndex;
125
+ }
126
+ function resolveNearbyRenderableTrackSegmentIndex(keys, segmentIndex, time) {
127
+ const nextIndex = segmentIndex + 1;
128
+ const previousIndex = segmentIndex - 1;
129
+ if (isRenderableTrackSegmentMatch(keys, nextIndex, time)) {
130
+ return nextIndex;
131
+ }
132
+ if (isRenderableTrackSegmentMatch(keys, previousIndex, time)) {
133
+ return previousIndex;
134
+ }
135
+ return null;
136
+ }
137
+ function isRenderableTrackSegmentMatch(keys, segmentIndex, time) {
138
+ const current = keys[segmentIndex];
139
+ const next = keys[segmentIndex + 1];
140
+ return !!current && !!next && current.time <= time && next.time >= time;
141
+ }
142
+ function getRenderableTrackKeys(track) {
143
+ const cached = renderableTrackKeyCache.get(track);
144
+ const firstSourceKey = track.keys[0];
145
+ const lastSourceKey = track.keys[track.keys.length - 1];
146
+ if (cached &&
147
+ cached.sourceKeys === track.keys &&
148
+ cached.sourceKeyCount === track.keys.length &&
149
+ cached.firstSourceKey === firstSourceKey &&
150
+ cached.lastSourceKey === lastSourceKey) {
151
+ return cached.keys;
152
+ }
153
+ let previousTime = Number.NEGATIVE_INFINITY;
154
+ let needsSort = false;
155
+ const normalizedKeys = [];
156
+ for (let sourceIndex = 0; sourceIndex < track.keys.length; sourceIndex += 1) {
157
+ const key = track.keys[sourceIndex];
158
+ if (key.time === null || key.value === null) {
159
+ continue;
160
+ }
161
+ if (key.time < previousTime) {
162
+ needsSort = true;
163
+ }
164
+ previousTime = key.time;
165
+ normalizedKeys.push({
166
+ sourceIndex,
167
+ time: key.time,
168
+ value: key.value
169
+ });
170
+ }
171
+ const keys = needsSort ? normalizedKeys.sort((left, right) => left.time - right.time) : normalizedKeys;
172
+ renderableTrackKeyCache.set(track, {
173
+ sourceKeys: track.keys,
174
+ sourceKeyCount: track.keys.length,
175
+ firstSourceKey,
176
+ lastSourceKey,
177
+ keys
178
+ });
179
+ return keys;
180
+ }
181
+ function resolveTrackSegmentInterpolation(track, fromKeyIndex) {
182
+ if (fromKeyIndex < 0 || fromKeyIndex >= track.keys.length - 1) {
183
+ return {
184
+ interpolation: track.interpolation,
185
+ curve: null
186
+ };
187
+ }
188
+ const override = track.keys[fromKeyIndex]?.interpolationToNext;
189
+ const overrideCurve = track.keys[fromKeyIndex]?.interpolationCurveToNext ?? null;
190
+ if (!override || override === 'step_or_linear') {
191
+ return {
192
+ interpolation: track.interpolation,
193
+ curve: null
194
+ };
195
+ }
196
+ return {
197
+ interpolation: override,
198
+ curve: override === 'custom' ? normalizeInterpolationCurve(overrideCurve) : null
199
+ };
200
+ }
201
+ function applyInterpolationProgress(interpolation, progress, curve = null) {
202
+ const clampedProgress = clampUnit(progress);
203
+ if (interpolation === 'step') {
204
+ return clampedProgress < 1 ? 0 : 1;
205
+ }
206
+ const interpolationCurve = getInterpolationCurve(interpolation, curve);
207
+ if (!interpolationCurve) {
208
+ return clampedProgress;
209
+ }
210
+ return solveBezierProgress(clampedProgress, interpolationCurve);
211
+ }
212
+ function getInterpolationCurve(interpolation, curve = null) {
213
+ if (interpolation === 'custom') {
214
+ return normalizeInterpolationCurve(curve);
215
+ }
216
+ return presetCurves[interpolation];
217
+ }
218
+ function normalizeInterpolationCurve(curve) {
219
+ return {
220
+ x1: clampUnit(curve?.x1 ?? defaultCurve.x1),
221
+ y1: clampUnit(curve?.y1 ?? defaultCurve.y1),
222
+ x2: clampUnit(curve?.x2 ?? defaultCurve.x2),
223
+ y2: clampUnit(curve?.y2 ?? defaultCurve.y2)
224
+ };
225
+ }
226
+ function clampUnit(value) {
227
+ if (!Number.isFinite(value)) {
228
+ return 0;
229
+ }
230
+ return Math.max(0, Math.min(1, value));
231
+ }
232
+ function sampleCubicBezierAtT(t, control1, control2) {
233
+ const inverse = 1 - t;
234
+ return 3 * inverse * inverse * t * control1 + 3 * inverse * t * t * control2 + t * t * t;
235
+ }
236
+ function sampleCubicBezierSlopeAtT(t, control1, control2) {
237
+ const inverse = 1 - t;
238
+ return 3 * inverse * inverse * control1 + 6 * inverse * t * (control2 - control1) + 3 * t * t * (1 - control2);
239
+ }
240
+ function solveBezierProgress(progress, curve) {
241
+ let parameter = clampUnit(progress);
242
+ for (let iteration = 0; iteration < 6; iteration += 1) {
243
+ const currentX = sampleCubicBezierAtT(parameter, curve.x1, curve.x2) - progress;
244
+ const slope = sampleCubicBezierSlopeAtT(parameter, curve.x1, curve.x2);
245
+ if (Math.abs(currentX) < 0.0001 || Math.abs(slope) < 0.0001) {
246
+ break;
247
+ }
248
+ parameter -= currentX / slope;
249
+ parameter = clampUnit(parameter);
250
+ }
251
+ return clampUnit(sampleCubicBezierAtT(parameter, curve.y1, curve.y2));
252
+ }
253
+ //# sourceMappingURL=robotViewerMotion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"robotViewerMotion.js","sourceRoot":"","sources":["../../src/renderer/robotViewerMotion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /** Visual support anchors; their existence does not confirm physical contact. */
2
+ export interface ViewerSupportDefinition {
3
+ readonly contacts: readonly {
4
+ readonly id: string;
5
+ readonly groupId: string;
6
+ readonly names: readonly string[];
7
+ }[];
8
+ /** Each ordered list selects the first candidate with rendered geometry. */
9
+ readonly geometryGroups: readonly (readonly string[])[];
10
+ }
11
+ //# sourceMappingURL=supportDefinition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supportDefinition.d.ts","sourceRoot":"","sources":["../src/supportDefinition.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;KACnC,EAAE,CAAC;IACJ,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;CACzD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=supportDefinition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supportDefinition.js","sourceRoot":"","sources":["../src/supportDefinition.ts"],"names":[],"mappings":""}