@franzenzenhofer/asanakit 0.1.0 → 0.3.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.
Files changed (199) hide show
  1. package/README.md +84 -46
  2. package/dist/anatomy/muscles.d.ts +10 -7
  3. package/dist/anatomy/muscles.d.ts.map +1 -1
  4. package/dist/anatomy/muscles.js +21 -17
  5. package/dist/anatomy/muscles.js.map +1 -1
  6. package/dist/anatomy/validate.d.ts.map +1 -1
  7. package/dist/anatomy/validate.js +16 -10
  8. package/dist/anatomy/validate.js.map +1 -1
  9. package/dist/cli/commands/export.d.ts.map +1 -1
  10. package/dist/cli/commands/export.js +24 -2
  11. package/dist/cli/commands/export.js.map +1 -1
  12. package/dist/cli/commands/info.d.ts.map +1 -1
  13. package/dist/cli/commands/info.js +3 -1
  14. package/dist/cli/commands/info.js.map +1 -1
  15. package/dist/cli/commands/render.d.ts.map +1 -1
  16. package/dist/cli/commands/render.js +22 -4
  17. package/dist/cli/commands/render.js.map +1 -1
  18. package/dist/cli/commands/view.d.ts +3 -0
  19. package/dist/cli/commands/view.d.ts.map +1 -0
  20. package/dist/cli/commands/view.js +88 -0
  21. package/dist/cli/commands/view.js.map +1 -0
  22. package/dist/cli/index.js +7 -2
  23. package/dist/cli/index.js.map +1 -1
  24. package/dist/cli/resolve.d.ts +6 -0
  25. package/dist/cli/resolve.d.ts.map +1 -1
  26. package/dist/cli/resolve.js +40 -0
  27. package/dist/cli/resolve.js.map +1 -1
  28. package/dist/core/camera.d.ts +56 -0
  29. package/dist/core/camera.d.ts.map +1 -0
  30. package/dist/core/camera.js +20 -0
  31. package/dist/core/camera.js.map +1 -0
  32. package/dist/core/joints.d.ts +18 -0
  33. package/dist/core/joints.d.ts.map +1 -0
  34. package/dist/core/joints.js +27 -0
  35. package/dist/core/joints.js.map +1 -0
  36. package/dist/core/quat.d.ts +18 -0
  37. package/dist/core/quat.d.ts.map +1 -0
  38. package/dist/core/quat.js +25 -0
  39. package/dist/core/quat.js.map +1 -0
  40. package/dist/core/rig.d.ts +1 -6
  41. package/dist/core/rig.d.ts.map +1 -1
  42. package/dist/core/rig.js +45 -74
  43. package/dist/core/rig.js.map +1 -1
  44. package/dist/core/skeleton.d.ts +4 -13
  45. package/dist/core/skeleton.d.ts.map +1 -1
  46. package/dist/core/skeleton.js +39 -69
  47. package/dist/core/skeleton.js.map +1 -1
  48. package/dist/core/types.d.ts +62 -55
  49. package/dist/core/types.d.ts.map +1 -1
  50. package/dist/core/types.js.map +1 -1
  51. package/dist/core/vec3.d.ts +13 -0
  52. package/dist/core/vec3.d.ts.map +1 -0
  53. package/dist/core/vec3.js +26 -0
  54. package/dist/core/vec3.js.map +1 -0
  55. package/dist/export3d/gltf.d.ts +11 -0
  56. package/dist/export3d/gltf.d.ts.map +1 -0
  57. package/dist/export3d/gltf.js +28 -0
  58. package/dist/export3d/gltf.js.map +1 -0
  59. package/dist/export3d/index.d.ts +3 -0
  60. package/dist/export3d/index.d.ts.map +1 -0
  61. package/dist/export3d/index.js +3 -0
  62. package/dist/export3d/index.js.map +1 -0
  63. package/dist/export3d/shims.d.ts +7 -0
  64. package/dist/export3d/shims.d.ts.map +1 -0
  65. package/dist/export3d/shims.js +27 -0
  66. package/dist/export3d/shims.js.map +1 -0
  67. package/dist/index.d.ts +9 -0
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +9 -0
  70. package/dist/index.js.map +1 -1
  71. package/dist/library/index.js +4 -4
  72. package/dist/library/index.js.map +1 -1
  73. package/dist/model/pose.d.ts +11 -5
  74. package/dist/model/pose.d.ts.map +1 -1
  75. package/dist/model/pose.js +30 -16
  76. package/dist/model/pose.js.map +1 -1
  77. package/dist/model/schema.d.ts +69 -28
  78. package/dist/model/schema.d.ts.map +1 -1
  79. package/dist/model/schema.js +57 -17
  80. package/dist/model/schema.js.map +1 -1
  81. package/dist/physics/index.d.ts +3 -0
  82. package/dist/physics/index.d.ts.map +1 -0
  83. package/dist/physics/index.js +3 -0
  84. package/dist/physics/index.js.map +1 -0
  85. package/dist/physics/rapier-types.d.ts +60 -0
  86. package/dist/physics/rapier-types.d.ts.map +1 -0
  87. package/dist/physics/rapier-types.js +12 -0
  88. package/dist/physics/rapier-types.js.map +1 -0
  89. package/dist/physics/settle.d.ts +3 -0
  90. package/dist/physics/settle.d.ts.map +1 -0
  91. package/dist/physics/settle.js +108 -0
  92. package/dist/physics/settle.js.map +1 -0
  93. package/dist/physics/world.d.ts +4 -0
  94. package/dist/physics/world.d.ts.map +1 -0
  95. package/dist/physics/world.js +18 -0
  96. package/dist/physics/world.js.map +1 -0
  97. package/dist/render/anatomy.js +1 -1
  98. package/dist/render/anatomy.js.map +1 -1
  99. package/dist/render/annotations.d.ts +3 -2
  100. package/dist/render/annotations.d.ts.map +1 -1
  101. package/dist/render/annotations.js.map +1 -1
  102. package/dist/render/camera.d.ts +43 -0
  103. package/dist/render/camera.d.ts.map +1 -0
  104. package/dist/render/camera.js +57 -0
  105. package/dist/render/camera.js.map +1 -0
  106. package/dist/render/context.d.ts +5 -3
  107. package/dist/render/context.d.ts.map +1 -1
  108. package/dist/render/figure.d.ts +4 -2
  109. package/dist/render/figure.d.ts.map +1 -1
  110. package/dist/render/figure.js +29 -43
  111. package/dist/render/figure.js.map +1 -1
  112. package/dist/render/index.d.ts +1 -0
  113. package/dist/render/index.d.ts.map +1 -1
  114. package/dist/render/index.js +1 -0
  115. package/dist/render/index.js.map +1 -1
  116. package/dist/render/props.d.ts +4 -3
  117. package/dist/render/props.d.ts.map +1 -1
  118. package/dist/render/props.js.map +1 -1
  119. package/dist/render/scene.d.ts +7 -1
  120. package/dist/render/scene.d.ts.map +1 -1
  121. package/dist/render/scene.js +8 -1
  122. package/dist/render/scene.js.map +1 -1
  123. package/dist/render/sheet.d.ts +3 -0
  124. package/dist/render/sheet.d.ts.map +1 -1
  125. package/dist/render/sheet.js +2 -0
  126. package/dist/render/sheet.js.map +1 -1
  127. package/dist/solve.d.ts +14 -0
  128. package/dist/solve.d.ts.map +1 -0
  129. package/dist/solve.js +17 -0
  130. package/dist/solve.js.map +1 -0
  131. package/dist/standards/keypoints.d.ts +2 -10
  132. package/dist/standards/keypoints.d.ts.map +1 -1
  133. package/dist/standards/keypoints.js +33 -14
  134. package/dist/standards/keypoints.js.map +1 -1
  135. package/dist/three/index.d.ts +2 -0
  136. package/dist/three/index.d.ts.map +1 -0
  137. package/dist/three/index.js +2 -0
  138. package/dist/three/index.js.map +1 -0
  139. package/dist/three/scene.d.ts +22 -0
  140. package/dist/three/scene.d.ts.map +1 -0
  141. package/dist/three/scene.js +90 -0
  142. package/dist/three/scene.js.map +1 -0
  143. package/dist/viewer/html.d.ts +32 -0
  144. package/dist/viewer/html.d.ts.map +1 -0
  145. package/dist/viewer/html.js +163 -0
  146. package/dist/viewer/html.js.map +1 -0
  147. package/dist/viewer/index.d.ts +2 -0
  148. package/dist/viewer/index.d.ts.map +1 -0
  149. package/dist/viewer/index.js +2 -0
  150. package/dist/viewer/index.js.map +1 -0
  151. package/dist/viewer/viewer.bundle.js +4119 -0
  152. package/docs/AUTHORING.md +119 -58
  153. package/package.json +20 -6
  154. package/poses/surf/bottom-turn.pose.yaml +24 -24
  155. package/poses/surf/cutback.pose.yaml +24 -24
  156. package/poses/surf/duck-dive.pose.yaml +23 -23
  157. package/poses/surf/noseride.pose.yaml +23 -25
  158. package/poses/surf/paddling.pose.yaml +24 -24
  159. package/poses/surf/pop-up.pose.yaml +24 -24
  160. package/poses/surf/takeoff.pose.yaml +24 -24
  161. package/poses/surf/tube-stance.pose.yaml +24 -24
  162. package/poses/yoga/ashtanga/adho-mukha-svanasana.pose.yaml +22 -22
  163. package/poses/yoga/ashtanga/ardha-uttanasana.pose.yaml +22 -22
  164. package/poses/yoga/ashtanga/baddha-konasana.pose.yaml +21 -23
  165. package/poses/yoga/ashtanga/balasana.pose.yaml +23 -23
  166. package/poses/yoga/ashtanga/chaturanga-dandasana.pose.yaml +21 -21
  167. package/poses/yoga/ashtanga/dandasana.pose.yaml +21 -23
  168. package/poses/yoga/ashtanga/halasana.pose.yaml +23 -23
  169. package/poses/yoga/ashtanga/janu-sirsasana-a.pose.yaml +22 -22
  170. package/poses/yoga/ashtanga/karnapidasana.pose.yaml +23 -23
  171. package/poses/yoga/ashtanga/marichyasana-a.pose.yaml +22 -22
  172. package/poses/yoga/ashtanga/marichyasana-c.pose.yaml +21 -23
  173. package/poses/yoga/ashtanga/matsyasana.pose.yaml +23 -23
  174. package/poses/yoga/ashtanga/navasana.pose.yaml +22 -22
  175. package/poses/yoga/ashtanga/padahastasana.pose.yaml +22 -22
  176. package/poses/yoga/ashtanga/padangusthasana.pose.yaml +22 -22
  177. package/poses/yoga/ashtanga/padmasana.pose.yaml +22 -24
  178. package/poses/yoga/ashtanga/parsvottanasana.pose.yaml +22 -22
  179. package/poses/yoga/ashtanga/paschimottanasana.pose.yaml +22 -22
  180. package/poses/yoga/ashtanga/prasarita-padottanasana-a.pose.yaml +26 -26
  181. package/poses/yoga/ashtanga/prasarita-padottanasana-c.pose.yaml +26 -26
  182. package/poses/yoga/ashtanga/primary.seq.yaml +2 -4
  183. package/poses/yoga/ashtanga/purvottanasana.pose.yaml +22 -22
  184. package/poses/yoga/ashtanga/salamba-sarvangasana.pose.yaml +23 -23
  185. package/poses/yoga/ashtanga/samasthiti.pose.yaml +10 -10
  186. package/poses/yoga/ashtanga/savasana.pose.yaml +21 -21
  187. package/poses/yoga/ashtanga/setu-bandhasana.pose.yaml +22 -22
  188. package/poses/yoga/ashtanga/sirsasana.pose.yaml +23 -23
  189. package/poses/yoga/ashtanga/supta-padangusthasana.pose.yaml +22 -22
  190. package/poses/yoga/ashtanga/upavistha-konasana.pose.yaml +22 -22
  191. package/poses/yoga/ashtanga/urdhva-dhanurasana.pose.yaml +23 -23
  192. package/poses/yoga/ashtanga/urdhva-hastasana.pose.yaml +22 -22
  193. package/poses/yoga/ashtanga/urdhva-mukha-svanasana.pose.yaml +22 -22
  194. package/poses/yoga/ashtanga/utkatasana.pose.yaml +22 -22
  195. package/poses/yoga/ashtanga/uttanasana.pose.yaml +22 -22
  196. package/poses/yoga/ashtanga/utthita-parsvakonasana.pose.yaml +24 -24
  197. package/poses/yoga/ashtanga/utthita-trikonasana.pose.yaml +24 -24
  198. package/poses/yoga/ashtanga/virabhadrasana-a.pose.yaml +22 -22
  199. package/poses/yoga/ashtanga/virabhadrasana-b.pose.yaml +21 -23
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 3D point/vector helpers on top of gl-matrix (MIT).
3
+ *
4
+ * Conventions:
5
+ * - math coordinates: x = the figure's anatomical left, y = up, z = the
6
+ * direction the figure faces in anatomical neutral (toward the front camera)
7
+ * - points are plain `[x, y, z]` tuples
8
+ * - angles cross the API in degrees; radians live only inside gl-matrix calls
9
+ */
10
+ import { glMatrix, vec3 as gl } from 'gl-matrix';
11
+ // Float64 instead of gl-matrix's default Float32: poses are authored in degrees
12
+ // and small rounding drift is visible once a limb chain is five bones deep.
13
+ glMatrix.setMatrixArrayType(Array);
14
+ const out = () => [0, 0, 0];
15
+ export const vec3 = (x, y, z) => [x, y, z];
16
+ export const add3 = (a, b) => gl.add(out(), a, b);
17
+ export const sub3 = (a, b) => gl.sub(out(), a, b);
18
+ export const scale3 = (a, k) => gl.scale(out(), a, k);
19
+ export const len3 = (a) => gl.length(a);
20
+ export const dist3 = (a, b) => gl.dist(a, b);
21
+ export const dot3 = (a, b) => gl.dot(a, b);
22
+ export const cross3 = (a, b) => gl.cross(out(), a, b);
23
+ export const lerp3 = (a, b, t) => gl.lerp(out(), a, b, t);
24
+ export const midpoint3 = (a, b) => lerp3(a, b, 0.5);
25
+ export const normalize3 = (a) => gl.normalize(out(), a);
26
+ //# sourceMappingURL=vec3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vec3.js","sourceRoot":"","sources":["../../src/core/vec3.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,EAAE,MAAM,WAAW,CAAC;AAEjD,gFAAgF;AAChF,4EAA4E;AAC5E,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAInC,MAAM,GAAG,GAAG,GAA6B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEtD,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEzE,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAO,EAAE,CAAO,EAAQ,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAA6B,CAAC;AAEhG,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAO,EAAE,CAAO,EAAQ,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAA6B,CAAC;AAEhG,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAO,EAAE,CAAS,EAAQ,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAA6B,CAAC;AAEtG,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAO,EAAU,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAEtD,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAO,EAAE,CAAO,EAAU,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEjE,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAO,EAAE,CAAO,EAAU,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAO,EAAE,CAAO,EAAQ,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAA6B,CAAC;AAEpG,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAO,EAAE,CAAO,EAAE,CAAS,EAAQ,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAA6B,CAAC;AAEhH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAO,EAAE,CAAO,EAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAO,EAAQ,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,CAA6B,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Skeleton } from '../core/types.js';
2
+ import { type FigureSceneOptions } from '../three/scene.js';
3
+ export interface GltfExportOptions extends FigureSceneOptions {
4
+ /** Embed as binary GLB (default) or JSON .gltf with embedded buffers. */
5
+ readonly binary?: boolean;
6
+ }
7
+ /** A solved skeleton as a binary GLB: one file any 3D viewer can orbit and zoom. */
8
+ export declare const exportGlb: (skeleton: Skeleton, options?: GltfExportOptions) => Promise<Buffer>;
9
+ /** The same scene as embedded-buffer glTF JSON, for debugging and diffing. */
10
+ export declare const exportGltf: (skeleton: Skeleton, options?: GltfExportOptions) => Promise<string>;
11
+ //# sourceMappingURL=gltf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gltf.d.ts","sourceRoot":"","sources":["../../src/export3d/gltf.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG9E,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,yEAAyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAkBD,oFAAoF;AACpF,eAAO,MAAM,SAAS,GAAU,UAAU,QAAQ,EAAE,UAAS,iBAAsB,KAAG,OAAO,CAAC,MAAM,CAInG,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,UAAU,GAAU,UAAU,QAAQ,EAAE,UAAS,iBAAsB,KAAG,OAAO,CAAC,MAAM,CAIpG,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { GLTFExporter } from 'three/addons/exporters/GLTFExporter.js';
2
+ import { buildFigureScene } from '../three/scene.js';
3
+ import { installFileReaderShim } from './shims.js';
4
+ const exportScene = (skeleton, options) => {
5
+ installFileReaderShim();
6
+ const scene = buildFigureScene(skeleton, options);
7
+ const exporter = new GLTFExporter();
8
+ return new Promise((resolve, reject) => {
9
+ exporter.parse(scene, (result) => {
10
+ resolve(result);
11
+ }, reject, { binary: options.binary ?? true });
12
+ });
13
+ };
14
+ /** A solved skeleton as a binary GLB: one file any 3D viewer can orbit and zoom. */
15
+ export const exportGlb = async (skeleton, options = {}) => {
16
+ const result = await exportScene(skeleton, { ...options, binary: true });
17
+ if (!(result instanceof ArrayBuffer))
18
+ throw new Error('GLTFExporter did not return a binary buffer');
19
+ return Buffer.from(result);
20
+ };
21
+ /** The same scene as embedded-buffer glTF JSON, for debugging and diffing. */
22
+ export const exportGltf = async (skeleton, options = {}) => {
23
+ const result = await exportScene(skeleton, { ...options, binary: false });
24
+ if (result instanceof ArrayBuffer)
25
+ throw new Error('GLTFExporter returned binary for a JSON export');
26
+ return `${JSON.stringify(result, null, 2)}\n`;
27
+ };
28
+ //# sourceMappingURL=gltf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gltf.js","sourceRoot":"","sources":["../../src/export3d/gltf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAA2B,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAOnD,MAAM,WAAW,GAAG,CAAC,QAAkB,EAAE,OAA0B,EAAiC,EAAE;IACpG,qBAAqB,EAAE,CAAC;IACxB,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,QAAQ,CAAC,KAAK,CACZ,KAAK,EACL,CAAC,MAAM,EAAE,EAAE;YACT,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,EACD,MAAM,EACN,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,oFAAoF;AACpF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,QAAkB,EAAE,UAA6B,EAAE,EAAmB,EAAE;IACtG,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,IAAI,CAAC,CAAC,MAAM,YAAY,WAAW,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACrG,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,QAAkB,EAAE,UAA6B,EAAE,EAAmB,EAAE;IACvG,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1E,IAAI,MAAM,YAAY,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACrG,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './gltf.js';
2
+ export * from './shims.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/export3d/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './gltf.js';
2
+ export * from './shims.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/export3d/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * three's GLTFExporter was written for browsers: on the binary path it reads
3
+ * Blobs back through FileReader, which Node does not have. Blob itself is
4
+ * native in Node >= 18, so this one small shim is the entire gap.
5
+ */
6
+ export declare const installFileReaderShim: () => void;
7
+ //# sourceMappingURL=shims.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shims.d.ts","sourceRoot":"","sources":["../../src/export3d/shims.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,QAAO,IAuBxC,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * three's GLTFExporter was written for browsers: on the binary path it reads
3
+ * Blobs back through FileReader, which Node does not have. Blob itself is
4
+ * native in Node >= 18, so this one small shim is the entire gap.
5
+ */
6
+ export const installFileReaderShim = () => {
7
+ if ('FileReader' in globalThis)
8
+ return;
9
+ class NodeFileReader {
10
+ onloadend = null;
11
+ result = null;
12
+ readAsArrayBuffer(blob) {
13
+ void blob.arrayBuffer().then((buffer) => {
14
+ this.result = buffer;
15
+ this.onloadend?.();
16
+ });
17
+ }
18
+ readAsDataURL(blob) {
19
+ void blob.arrayBuffer().then((buffer) => {
20
+ this.result = `data:${blob.type || 'application/octet-stream'};base64,${Buffer.from(buffer).toString('base64')}`;
21
+ this.onloadend?.();
22
+ });
23
+ }
24
+ }
25
+ globalThis.FileReader = NodeFileReader;
26
+ };
27
+ //# sourceMappingURL=shims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shims.js","sourceRoot":"","sources":["../../src/export3d/shims.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAS,EAAE;IAC9C,IAAI,YAAY,IAAI,UAAU;QAAE,OAAO;IAEvC,MAAM,cAAc;QAClB,SAAS,GAAwB,IAAI,CAAC;QACtC,MAAM,GAAgC,IAAI,CAAC;QAE3C,iBAAiB,CAAC,IAAU;YAC1B,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBACtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACrB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,aAAa,CAAC,IAAU;YACtB,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBACtC,IAAI,CAAC,MAAM,GAAG,QAAQ,IAAI,CAAC,IAAI,IAAI,0BAA0B,WAAW,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjH,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACrB,CAAC,CAAC,CAAC;QACL,CAAC;KACF;IAEA,UAAsC,CAAC,UAAU,GAAG,cAAc,CAAC;AACtE,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,20 @@
1
1
  export * from './core/types.js';
2
+ export * from './core/camera.js';
2
3
  export * from './core/rig.js';
4
+ export * from './core/joints.js';
3
5
  export * from './core/skeleton.js';
4
6
  export * from './core/vec2.js';
7
+ export * from './core/vec3.js';
8
+ export * from './core/quat.js';
5
9
  export * from './core/angles.js';
6
10
  export * from './anatomy/muscles.js';
11
+ export * from './anatomy/validate.js';
7
12
  export * from './model/index.js';
8
13
  export * from './render/index.js';
14
+ export * from './three/index.js';
15
+ export * from './export3d/index.js';
16
+ export * from './viewer/index.js';
17
+ export * from './solve.js';
9
18
  export * from './library/index.js';
10
19
  export * from './standards/keypoints.js';
11
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
package/dist/index.js CHANGED
@@ -1,11 +1,20 @@
1
1
  export * from './core/types.js';
2
+ export * from './core/camera.js';
2
3
  export * from './core/rig.js';
4
+ export * from './core/joints.js';
3
5
  export * from './core/skeleton.js';
4
6
  export * from './core/vec2.js';
7
+ export * from './core/vec3.js';
8
+ export * from './core/quat.js';
5
9
  export * from './core/angles.js';
6
10
  export * from './anatomy/muscles.js';
11
+ export * from './anatomy/validate.js';
7
12
  export * from './model/index.js';
8
13
  export * from './render/index.js';
14
+ export * from './three/index.js';
15
+ export * from './export3d/index.js';
16
+ export * from './viewer/index.js';
17
+ export * from './solve.js';
9
18
  export * from './library/index.js';
10
19
  export * from './standards/keypoints.js';
11
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
@@ -55,12 +55,12 @@ export const expandSequence = (sequence, library) => {
55
55
  }
56
56
  const sides = step.side === 'both' ? ['left', 'right'] : [step.side];
57
57
  for (const side of sides) {
58
- // The second side is the mirror image, and reflecting the picture is all
59
- // that takes. Swapping the joints as well would reflect it twice and hand
60
- // you back the pose you started with.
58
+ // The second side is the true mirror of the asana: left and right
59
+ // joints swap and every absolute direction reflects across the
60
+ // sagittal plane. That is what `mirror` does.
61
61
  const mirrored = side === 'right';
62
62
  steps.push({
63
- pose: mirrored ? { ...pose, figure: { ...pose.figure, flip: !pose.figure.flip } } : pose,
63
+ pose: mirrored ? { ...pose, figure: { ...pose.figure, mirror: !pose.figure.mirror } } : pose,
64
64
  label: step.label ?? pose.name,
65
65
  section: section.name,
66
66
  ...(step.breath === undefined ? {} : { breath: step.breath }),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/library/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/library/index.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,17 @@
1
- import type { JointId, KinematicPose } from '../core/types.js';
1
+ import type { JointId, JointValue, KinematicPose, WorldDirection } from '../core/types.js';
2
2
  import type { FigureSpec } from './schema.js';
3
3
  /**
4
- * Swap every left angle with its right counterpart; centre bones stay put.
5
- * `mirror` swaps which limb plays which role. Reflecting the picture is `flip`'s
6
- * job - together they give you the other side of an asymmetric asana.
4
+ * Swap every left joint with its right counterpart; centre bones stay put.
5
+ * Joint values carry over untouched, because flex/abduct/twist are defined
6
+ * relative to each side's own anatomy - "abduct 30" means "30 away from the
7
+ * midline" on either side.
7
8
  */
8
- export declare const mirrorAngles: <T extends Partial<Record<JointId, number>>>(angles: T) => T;
9
+ export declare const mirrorJoints: (joints: Partial<Record<JointId, JointValue>>) => Partial<Record<JointId, JointValue>>;
10
+ /**
11
+ * World directions are absolute, so mirroring a pose across the sagittal plane
12
+ * must also flip which way they point: azimuth negates, elevation stays.
13
+ */
14
+ export declare const mirrorWorld: (world: Partial<Record<JointId, WorldDirection>>) => Partial<Record<JointId, WorldDirection>>;
9
15
  /** Turn the declarative figure block of a pose file into a solvable kinematic pose. */
10
16
  export declare const resolveFigure: (figure: FigureSpec) => KinematicPose;
11
17
  //# sourceMappingURL=pose.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pose.d.ts","sourceRoot":"","sources":["../../src/model/pose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAU9C;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAG,CACa,CAAC;AAEnG,uFAAuF;AACvF,eAAO,MAAM,aAAa,GAAI,QAAQ,UAAU,KAAG,aAWjD,CAAC"}
1
+ {"version":3,"file":"pose.d.ts","sourceRoot":"","sources":["../../src/model/pose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAa9C;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAC5F,CAAC;AAEpB;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,KAC9C,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAMvC,CAAC;AAEJ,uFAAuF;AACvF,eAAO,MAAM,aAAa,GAAI,QAAQ,UAAU,KAAG,aAelD,CAAC"}
@@ -4,23 +4,37 @@ const mirrorJointId = (id) => {
4
4
  const swapped = OTHER_SIDE[last];
5
5
  return swapped === undefined ? id : `${id.slice(0, -1)}${swapped}`;
6
6
  };
7
+ const swapSides = (angles) => Object.fromEntries(Object.entries(angles).map(([id, value]) => [mirrorJointId(id), value]));
7
8
  /**
8
- * Swap every left angle with its right counterpart; centre bones stay put.
9
- * `mirror` swaps which limb plays which role. Reflecting the picture is `flip`'s
10
- * job - together they give you the other side of an asymmetric asana.
9
+ * Swap every left joint with its right counterpart; centre bones stay put.
10
+ * Joint values carry over untouched, because flex/abduct/twist are defined
11
+ * relative to each side's own anatomy - "abduct 30" means "30 away from the
12
+ * midline" on either side.
11
13
  */
12
- export const mirrorAngles = (angles) => Object.fromEntries(Object.entries(angles).map(([id, angle]) => [mirrorJointId(id), angle]));
14
+ export const mirrorJoints = (joints) => swapSides(joints);
15
+ /**
16
+ * World directions are absolute, so mirroring a pose across the sagittal plane
17
+ * must also flip which way they point: azimuth negates, elevation stays.
18
+ */
19
+ export const mirrorWorld = (world) => Object.fromEntries(Object.entries(swapSides(world)).map(([id, dir]) => [
20
+ id,
21
+ { ...dir, azimuth: -dir.azimuth, ...(dir.twist === undefined ? {} : { twist: -dir.twist }) },
22
+ ]));
13
23
  /** Turn the declarative figure block of a pose file into a solvable kinematic pose. */
14
- export const resolveFigure = (figure) => ({
15
- view: figure.view,
16
- root: {
17
- position: figure.root.position,
18
- rotation: figure.root.rotation,
19
- scale: figure.root.scale,
20
- },
21
- joints: figure.mirror ? mirrorAngles(figure.joints) : figure.joints,
22
- world: figure.mirror ? mirrorAngles(figure.world) : figure.world,
23
- grounded: figure.grounded,
24
- flip: figure.flip,
25
- });
24
+ export const resolveFigure = (figure) => {
25
+ const m = figure.mirror;
26
+ const [px, py, pz] = figure.root.position;
27
+ return {
28
+ root: {
29
+ position: m ? [-px, py, pz] : [px, py, pz],
30
+ yaw: m ? -figure.root.yaw : figure.root.yaw,
31
+ pitch: figure.root.pitch,
32
+ roll: m ? -figure.root.roll : figure.root.roll,
33
+ scale: figure.root.scale,
34
+ },
35
+ joints: m ? mirrorJoints(figure.joints) : figure.joints,
36
+ world: m ? mirrorWorld(figure.world) : figure.world,
37
+ grounded: figure.grounded,
38
+ };
39
+ };
26
40
  //# sourceMappingURL=pose.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pose.js","sourceRoot":"","sources":["../../src/model/pose.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,GAA2B,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;AAE9D,MAAM,aAAa,GAAG,CAAC,EAAU,EAAU,EAAE;IAC3C,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC;AACrE,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAA6C,MAAS,EAAK,EAAE,CACvF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAM,CAAC;AAEnG,uFAAuF;AACvF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAkB,EAAiB,EAAE,CAAC,CAAC;IACnE,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;QAC9B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;QAC9B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;KACzB;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;IACnE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;IAChE,QAAQ,EAAE,MAAM,CAAC,QAAQ;IACzB,IAAI,EAAE,MAAM,CAAC,IAAI;CAClB,CAAC,CAAC"}
1
+ {"version":3,"file":"pose.js","sourceRoot":"","sources":["../../src/model/pose.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,GAA2B,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;AAE9D,MAAM,aAAa,GAAG,CAAC,EAAU,EAAU,EAAE;IAC3C,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAI,MAAmC,EAA+B,EAAE,CACxF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAE9F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAA4C,EAAwC,EAAE,CACjH,SAAS,CAAC,MAAM,CAAC,CAAC;AAEpB;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAA+C,EACL,EAAE,CAC5C,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;IAClD,EAAE;IACF,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE;CAC7F,CAAC,CACH,CAAC;AAEJ,uFAAuF;AACvF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAkB,EAAiB,EAAE;IACjE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC1C,OAAO;QACL,IAAI,EAAE;YACJ,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YAC1C,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG;YAC3C,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;YACxB,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;YAC9C,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;SACzB;QACD,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;QACvD,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;QACnD,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC;AACJ,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  /** Current version of the .pose file format. Bumped only on breaking changes. */
3
- export declare const POSE_FORMAT_VERSION = 1;
4
- /** Anything an annotation or prop can be pinned to: a named landmark or a raw point. */
3
+ export declare const POSE_FORMAT_VERSION = 2;
4
+ /** Anything an annotation or prop can be pinned to: a named landmark or a raw picture-plane point. */
5
5
  declare const anchor: z.ZodUnion<readonly [z.ZodEnum<{
6
6
  hipCenter: "hipCenter";
7
7
  waist: "waist";
@@ -47,20 +47,32 @@ export declare const jointsSchema: z.ZodRecord<z.ZodEnum<{
47
47
  thighR: "thighR";
48
48
  shinR: "shinR";
49
49
  footR: "footR";
50
- }> & z.core.$partial, z.ZodNumber>;
50
+ }> & z.core.$partial, z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
51
+ flex: z.ZodDefault<z.ZodNumber>;
52
+ abduct: z.ZodDefault<z.ZodNumber>;
53
+ twist: z.ZodDefault<z.ZodNumber>;
54
+ }, z.core.$strip>]>>;
55
+ export declare const cameraSchema: z.ZodUnion<readonly [z.ZodEnum<{
56
+ left: "left";
57
+ right: "right";
58
+ front: "front";
59
+ back: "back";
60
+ side: "side";
61
+ "three-quarter": "three-quarter";
62
+ top: "top";
63
+ }>, z.ZodObject<{
64
+ azimuth: z.ZodDefault<z.ZodNumber>;
65
+ elevation: z.ZodDefault<z.ZodNumber>;
66
+ roll: z.ZodDefault<z.ZodNumber>;
67
+ }, z.core.$strip>]>;
51
68
  export declare const figureSchema: z.ZodObject<{
52
- view: z.ZodDefault<z.ZodEnum<{
53
- front: "front";
54
- back: "back";
55
- side: "side";
56
- "three-quarter": "three-quarter";
57
- }>>;
58
- flip: z.ZodDefault<z.ZodBoolean>;
59
69
  mirror: z.ZodDefault<z.ZodBoolean>;
60
70
  grounded: z.ZodDefault<z.ZodBoolean>;
61
71
  root: z.ZodPrefault<z.ZodObject<{
62
- position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
63
- rotation: z.ZodDefault<z.ZodNumber>;
72
+ position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
73
+ yaw: z.ZodDefault<z.ZodNumber>;
74
+ pitch: z.ZodDefault<z.ZodNumber>;
75
+ roll: z.ZodDefault<z.ZodNumber>;
64
76
  scale: z.ZodDefault<z.ZodNumber>;
65
77
  }, z.core.$strip>>;
66
78
  joints: z.ZodDefault<z.ZodRecord<z.ZodEnum<{
@@ -84,7 +96,11 @@ export declare const figureSchema: z.ZodObject<{
84
96
  thighR: "thighR";
85
97
  shinR: "shinR";
86
98
  footR: "footR";
87
- }> & z.core.$partial, z.ZodNumber>>;
99
+ }> & z.core.$partial, z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
100
+ flex: z.ZodDefault<z.ZodNumber>;
101
+ abduct: z.ZodDefault<z.ZodNumber>;
102
+ twist: z.ZodDefault<z.ZodNumber>;
103
+ }, z.core.$strip>]>>>;
88
104
  world: z.ZodDefault<z.ZodRecord<z.ZodEnum<{
89
105
  head: "head";
90
106
  pelvis: "pelvis";
@@ -106,7 +122,11 @@ export declare const figureSchema: z.ZodObject<{
106
122
  thighR: "thighR";
107
123
  shinR: "shinR";
108
124
  footR: "footR";
109
- }> & z.core.$partial, z.ZodNumber>>;
125
+ }> & z.core.$partial, z.ZodObject<{
126
+ azimuth: z.ZodDefault<z.ZodNumber>;
127
+ elevation: z.ZodDefault<z.ZodNumber>;
128
+ twist: z.ZodOptional<z.ZodNumber>;
129
+ }, z.core.$strip>>>;
110
130
  }, z.core.$strip>;
111
131
  export declare const annotationSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
112
132
  label: z.ZodOptional<z.ZodString>;
@@ -519,7 +539,7 @@ export declare const propSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
519
539
  }>>;
520
540
  }, z.core.$strip>], "type">;
521
541
  export declare const poseSchema: z.ZodObject<{
522
- asanakit: z.ZodLiteral<1>;
542
+ asanakit: z.ZodLiteral<2>;
523
543
  id: z.ZodString;
524
544
  name: z.ZodString;
525
545
  sanskrit: z.ZodOptional<z.ZodString>;
@@ -542,18 +562,13 @@ export declare const poseSchema: z.ZodObject<{
542
562
  free: "free";
543
563
  }>>;
544
564
  figure: z.ZodPrefault<z.ZodObject<{
545
- view: z.ZodDefault<z.ZodEnum<{
546
- front: "front";
547
- back: "back";
548
- side: "side";
549
- "three-quarter": "three-quarter";
550
- }>>;
551
- flip: z.ZodDefault<z.ZodBoolean>;
552
565
  mirror: z.ZodDefault<z.ZodBoolean>;
553
566
  grounded: z.ZodDefault<z.ZodBoolean>;
554
567
  root: z.ZodPrefault<z.ZodObject<{
555
- position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
556
- rotation: z.ZodDefault<z.ZodNumber>;
568
+ position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
569
+ yaw: z.ZodDefault<z.ZodNumber>;
570
+ pitch: z.ZodDefault<z.ZodNumber>;
571
+ roll: z.ZodDefault<z.ZodNumber>;
557
572
  scale: z.ZodDefault<z.ZodNumber>;
558
573
  }, z.core.$strip>>;
559
574
  joints: z.ZodDefault<z.ZodRecord<z.ZodEnum<{
@@ -577,7 +592,11 @@ export declare const poseSchema: z.ZodObject<{
577
592
  thighR: "thighR";
578
593
  shinR: "shinR";
579
594
  footR: "footR";
580
- }> & z.core.$partial, z.ZodNumber>>;
595
+ }> & z.core.$partial, z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
596
+ flex: z.ZodDefault<z.ZodNumber>;
597
+ abduct: z.ZodDefault<z.ZodNumber>;
598
+ twist: z.ZodDefault<z.ZodNumber>;
599
+ }, z.core.$strip>]>>>;
581
600
  world: z.ZodDefault<z.ZodRecord<z.ZodEnum<{
582
601
  head: "head";
583
602
  pelvis: "pelvis";
@@ -599,8 +618,29 @@ export declare const poseSchema: z.ZodObject<{
599
618
  thighR: "thighR";
600
619
  shinR: "shinR";
601
620
  footR: "footR";
602
- }> & z.core.$partial, z.ZodNumber>>;
621
+ }> & z.core.$partial, z.ZodObject<{
622
+ azimuth: z.ZodDefault<z.ZodNumber>;
623
+ elevation: z.ZodDefault<z.ZodNumber>;
624
+ twist: z.ZodOptional<z.ZodNumber>;
625
+ }, z.core.$strip>>>;
603
626
  }, z.core.$strip>>;
627
+ camera: z.ZodDefault<z.ZodUnion<readonly [z.ZodEnum<{
628
+ left: "left";
629
+ right: "right";
630
+ front: "front";
631
+ back: "back";
632
+ side: "side";
633
+ "three-quarter": "three-quarter";
634
+ top: "top";
635
+ }>, z.ZodObject<{
636
+ azimuth: z.ZodDefault<z.ZodNumber>;
637
+ elevation: z.ZodDefault<z.ZodNumber>;
638
+ roll: z.ZodDefault<z.ZodNumber>;
639
+ }, z.core.$strip>]>>;
640
+ physics: z.ZodDefault<z.ZodEnum<{
641
+ none: "none";
642
+ settle: "settle";
643
+ }>>;
604
644
  contact: z.ZodDefault<z.ZodArray<z.ZodEnum<{
605
645
  hipCenter: "hipCenter";
606
646
  waist: "waist";
@@ -1084,11 +1124,12 @@ export declare const poseSchema: z.ZodObject<{
1084
1124
  export type PoseSpec = z.output<typeof poseSchema>;
1085
1125
  export type PoseSpecInput = z.input<typeof poseSchema>;
1086
1126
  export type FigureSpec = z.output<typeof figureSchema>;
1127
+ export type CameraSpec = z.output<typeof cameraSchema>;
1087
1128
  export type Annotation = z.output<typeof annotationSchema>;
1088
1129
  export type Prop = z.output<typeof propSchema>;
1089
1130
  export type Anchor = z.output<typeof anchor>;
1090
1131
  export declare const sequenceSchema: z.ZodObject<{
1091
- asanakit: z.ZodLiteral<1>;
1132
+ asanakit: z.ZodLiteral<2>;
1092
1133
  id: z.ZodString;
1093
1134
  name: z.ZodString;
1094
1135
  tradition: z.ZodOptional<z.ZodString>;
@@ -1108,8 +1149,8 @@ export declare const sequenceSchema: z.ZodObject<{
1108
1149
  side: z.ZodDefault<z.ZodEnum<{
1109
1150
  left: "left";
1110
1151
  right: "right";
1111
- both: "both";
1112
1152
  none: "none";
1153
+ both: "both";
1113
1154
  }>>;
1114
1155
  note: z.ZodOptional<z.ZodString>;
1115
1156
  }, z.core.$strip>>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/model/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/model/schema.ts"],"names":[],"mappings":"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"}