react-native-nitro-pose-exercises 1.0.8 → 1.1.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 (82) hide show
  1. package/NitroPoseExercises.podspec +2 -1
  2. package/README.md +137 -92
  3. package/android/build.gradle +9 -10
  4. package/android/src/main/java/com/margelo/nitro/nitroposeexercises/NitroPoseExercises.kt +148 -125
  5. package/ios/NitroPoseExercises.swift +113 -88
  6. package/lib/module/config/bicep-curl.js +61 -0
  7. package/lib/module/config/bicep-curl.js.map +1 -0
  8. package/lib/module/config/chair-pose.js +64 -0
  9. package/lib/module/config/chair-pose.js.map +1 -0
  10. package/lib/module/config/cobra-pose.js +57 -0
  11. package/lib/module/config/cobra-pose.js.map +1 -0
  12. package/lib/module/config/downward-dog.js +65 -0
  13. package/lib/module/config/downward-dog.js.map +1 -0
  14. package/lib/module/config/lunge.js +62 -0
  15. package/lib/module/config/lunge.js.map +1 -0
  16. package/lib/module/config/plank.js +57 -0
  17. package/lib/module/config/plank.js.map +1 -0
  18. package/lib/module/config/shoulder-press.js +62 -0
  19. package/lib/module/config/shoulder-press.js.map +1 -0
  20. package/lib/module/config/situp.js +48 -0
  21. package/lib/module/config/situp.js.map +1 -0
  22. package/lib/module/config/squat.js +69 -0
  23. package/lib/module/config/squat.js.map +1 -0
  24. package/lib/module/config/tree-pose.js +57 -0
  25. package/lib/module/config/tree-pose.js.map +1 -0
  26. package/lib/module/config/tricep-dip.js +55 -0
  27. package/lib/module/config/tricep-dip.js.map +1 -0
  28. package/lib/module/config/wall-sit.js +57 -0
  29. package/lib/module/config/wall-sit.js.map +1 -0
  30. package/lib/module/config/warrior-i.js +79 -0
  31. package/lib/module/config/warrior-i.js.map +1 -0
  32. package/lib/module/config/warrior-ii.js +86 -0
  33. package/lib/module/config/warrior-ii.js.map +1 -0
  34. package/lib/module/index.js +19 -0
  35. package/lib/module/index.js.map +1 -1
  36. package/lib/typescript/src/config/bicep-curl.d.ts +3 -0
  37. package/lib/typescript/src/config/bicep-curl.d.ts.map +1 -0
  38. package/lib/typescript/src/config/chair-pose.d.ts +3 -0
  39. package/lib/typescript/src/config/chair-pose.d.ts.map +1 -0
  40. package/lib/typescript/src/config/cobra-pose.d.ts +3 -0
  41. package/lib/typescript/src/config/cobra-pose.d.ts.map +1 -0
  42. package/lib/typescript/src/config/downward-dog.d.ts +3 -0
  43. package/lib/typescript/src/config/downward-dog.d.ts.map +1 -0
  44. package/lib/typescript/src/config/lunge.d.ts +3 -0
  45. package/lib/typescript/src/config/lunge.d.ts.map +1 -0
  46. package/lib/typescript/src/config/plank.d.ts +3 -0
  47. package/lib/typescript/src/config/plank.d.ts.map +1 -0
  48. package/lib/typescript/src/config/shoulder-press.d.ts +3 -0
  49. package/lib/typescript/src/config/shoulder-press.d.ts.map +1 -0
  50. package/lib/typescript/src/config/situp.d.ts +3 -0
  51. package/lib/typescript/src/config/situp.d.ts.map +1 -0
  52. package/lib/typescript/src/config/squat.d.ts +3 -0
  53. package/lib/typescript/src/config/squat.d.ts.map +1 -0
  54. package/lib/typescript/src/config/tree-pose.d.ts +3 -0
  55. package/lib/typescript/src/config/tree-pose.d.ts.map +1 -0
  56. package/lib/typescript/src/config/tricep-dip.d.ts +3 -0
  57. package/lib/typescript/src/config/tricep-dip.d.ts.map +1 -0
  58. package/lib/typescript/src/config/wall-sit.d.ts +3 -0
  59. package/lib/typescript/src/config/wall-sit.d.ts.map +1 -0
  60. package/lib/typescript/src/config/warrior-i.d.ts +3 -0
  61. package/lib/typescript/src/config/warrior-i.d.ts.map +1 -0
  62. package/lib/typescript/src/config/warrior-ii.d.ts +3 -0
  63. package/lib/typescript/src/config/warrior-ii.d.ts.map +1 -0
  64. package/lib/typescript/src/index.d.ts +14 -0
  65. package/lib/typescript/src/index.d.ts.map +1 -1
  66. package/nitro.json +8 -1
  67. package/package.json +10 -10
  68. package/src/config/bicep-curl.ts +64 -0
  69. package/src/config/chair-pose.ts +67 -0
  70. package/src/config/cobra-pose.ts +59 -0
  71. package/src/config/downward-dog.ts +68 -0
  72. package/src/config/lunge.ts +65 -0
  73. package/src/config/plank.ts +59 -0
  74. package/src/config/shoulder-press.ts +63 -0
  75. package/src/config/situp.ts +51 -0
  76. package/src/config/squat.ts +71 -0
  77. package/src/config/tree-pose.ts +59 -0
  78. package/src/config/tricep-dip.ts +58 -0
  79. package/src/config/wall-sit.ts +59 -0
  80. package/src/config/warrior-i.ts +82 -0
  81. package/src/config/warrior-ii.ts +88 -0
  82. package/src/index.tsx +19 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chair-pose.d.ts","sourceRoot":"","sources":["../../../../src/config/chair-pose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAOlE,eAAO,MAAM,iBAAiB,EAAE,cA2D/B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+ export declare const COBRA_POSE_CONFIG: ExerciseConfig;
3
+ //# sourceMappingURL=cobra-pose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cobra-pose.d.ts","sourceRoot":"","sources":["../../../../src/config/cobra-pose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAOlE,eAAO,MAAM,iBAAiB,EAAE,cAmD/B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+ export declare const DOWNWARD_DOG_CONFIG: ExerciseConfig;
3
+ //# sourceMappingURL=downward-dog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downward-dog.d.ts","sourceRoot":"","sources":["../../../../src/config/downward-dog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAQlE,eAAO,MAAM,mBAAmB,EAAE,cA2DjC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+ export declare const LUNGE_CONFIG: ExerciseConfig;
3
+ //# sourceMappingURL=lunge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lunge.d.ts","sourceRoot":"","sources":["../../../../src/config/lunge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAOlE,eAAO,MAAM,YAAY,EAAE,cAyD1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+ export declare const PLANK_CONFIG: ExerciseConfig;
3
+ //# sourceMappingURL=plank.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plank.d.ts","sourceRoot":"","sources":["../../../../src/config/plank.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAOlE,eAAO,MAAM,YAAY,EAAE,cAmD1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+ export declare const SHOULDER_PRESS_CONFIG: ExerciseConfig;
3
+ //# sourceMappingURL=shoulder-press.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shoulder-press.d.ts","sourceRoot":"","sources":["../../../../src/config/shoulder-press.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAOlE,eAAO,MAAM,qBAAqB,EAAE,cAuDnC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+ export declare const SITUP_CONFIG: ExerciseConfig;
3
+ //# sourceMappingURL=situp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"situp.d.ts","sourceRoot":"","sources":["../../../../src/config/situp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAOlE,eAAO,MAAM,YAAY,EAAE,cA2C1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+ export declare const SQUAT_CONFIG: ExerciseConfig;
3
+ //# sourceMappingURL=squat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"squat.d.ts","sourceRoot":"","sources":["../../../../src/config/squat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAOlE,eAAO,MAAM,YAAY,EAAE,cA+D1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+ export declare const TREE_POSE_CONFIG: ExerciseConfig;
3
+ //# sourceMappingURL=tree-pose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-pose.d.ts","sourceRoot":"","sources":["../../../../src/config/tree-pose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAOlE,eAAO,MAAM,gBAAgB,EAAE,cAmD9B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+ export declare const TRICEP_DIP_CONFIG: ExerciseConfig;
3
+ //# sourceMappingURL=tricep-dip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tricep-dip.d.ts","sourceRoot":"","sources":["../../../../src/config/tricep-dip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAOlE,eAAO,MAAM,iBAAiB,EAAE,cAkD/B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+ export declare const WALL_SIT_CONFIG: ExerciseConfig;
3
+ //# sourceMappingURL=wall-sit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wall-sit.d.ts","sourceRoot":"","sources":["../../../../src/config/wall-sit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAOlE,eAAO,MAAM,eAAe,EAAE,cAmD7B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+ export declare const WARRIOR_I_CONFIG: ExerciseConfig;
3
+ //# sourceMappingURL=warrior-i.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warrior-i.d.ts","sourceRoot":"","sources":["../../../../src/config/warrior-i.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAQlE,eAAO,MAAM,gBAAgB,EAAE,cAyE9B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+ export declare const WARRIOR_II_CONFIG: ExerciseConfig;
3
+ //# sourceMappingURL=warrior-ii.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warrior-ii.d.ts","sourceRoot":"","sources":["../../../../src/config/warrior-ii.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAQlE,eAAO,MAAM,iBAAiB,EAAE,cA+E/B,CAAC"}
@@ -3,4 +3,18 @@ declare const nitroPoseExercises: NitroPoseExercises;
3
3
  export { nitroPoseExercises };
4
4
  export type { NitroPoseExercises, ExerciseConfig, ExerciseType, ExercisePhase, FormSeverity, SessionStatus, Landmark, AngleDefinition, PhaseThreshold, FormRule, RepData, AngleSnapshot, FormFeedback, HoldProgress, SessionResult, } from './NitroPoseExercises.nitro';
5
5
  export { PUSHUP_CONFIG } from './config/pushup';
6
+ export { SQUAT_CONFIG } from './config/squat';
7
+ export { BICEP_CURL_CONFIG } from './config/bicep-curl';
8
+ export { SHOULDER_PRESS_CONFIG } from './config/shoulder-press';
9
+ export { LUNGE_CONFIG } from './config/lunge';
10
+ export { SITUP_CONFIG } from './config/situp';
11
+ export { TRICEP_DIP_CONFIG } from './config/tricep-dip';
12
+ export { PLANK_CONFIG } from './config/plank';
13
+ export { WALL_SIT_CONFIG } from './config/wall-sit';
14
+ export { TREE_POSE_CONFIG } from './config/tree-pose';
15
+ export { WARRIOR_I_CONFIG } from './config/warrior-i';
16
+ export { WARRIOR_II_CONFIG } from './config/warrior-ii';
17
+ export { DOWNWARD_DOG_CONFIG } from './config/downward-dog';
18
+ export { CHAIR_POSE_CONFIG } from './config/chair-pose';
19
+ export { COBRA_POSE_CONFIG } from './config/cobra-pose';
6
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,QAAA,MAAM,kBAAkB,oBACmD,CAAC;AAE5E,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,eAAe,EACf,cAAc,EACd,QAAQ,EACR,OAAO,EACP,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,QAAA,MAAM,kBAAkB,oBACmD,CAAC;AAE5E,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,eAAe,EACf,cAAc,EACd,QAAQ,EACR,OAAO,EACP,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
package/nitro.json CHANGED
@@ -19,5 +19,12 @@
19
19
  }
20
20
  }
21
21
  },
22
- "ignorePaths": ["node_modules"]
22
+ "ignorePaths": [
23
+ "node_modules",
24
+ "example",
25
+ "nitrogen/generated/android/kotlin/com/margelo/nitro/camera",
26
+ "nitrogen/generated/android/kotlin/com/margelo/nitro/image",
27
+ "nitrogen/generated/ios/swift/VisionCamera",
28
+ "nitrogen/generated/ios/swift/NitroImage"
29
+ ]
23
30
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-nitro-pose-exercises",
3
- "version": "1.0.8",
3
+ "version": "1.1.1",
4
4
  "description": "Real-time on-device exercise tracking for React Native. Rep counting, form validation, and skeleton overlay powered by MediaPipe Pose Landmarker and VisionCamera v5 via Nitro Modules.",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -69,9 +69,9 @@
69
69
  "@eslint/eslintrc": "^3.3.1",
70
70
  "@eslint/js": "^9.35.0",
71
71
  "@jest/globals": "^30.0.0",
72
- "@react-native/babel-preset": "0.85.0",
73
- "@react-native/eslint-config": "0.85.0",
74
- "@react-native/jest-preset": "0.85.0",
72
+ "@react-native/babel-preset": "0.85.3",
73
+ "@react-native/eslint-config": "0.85.3",
74
+ "@react-native/jest-preset": "0.85.3",
75
75
  "@release-it/conventional-changelog": "^10.0.6",
76
76
  "@types/react": "^19.2.0",
77
77
  "commitlint": "^20.5.0",
@@ -82,16 +82,16 @@
82
82
  "eslint-plugin-prettier": "^5.5.4",
83
83
  "jest": "^30.3.0",
84
84
  "lefthook": "^2.1.4",
85
- "nitrogen": "^0.35.7",
85
+ "nitrogen": "^0.35.9",
86
86
  "prettier": "^3.8.1",
87
87
  "react": "19.2.3",
88
- "react-native": "0.85.0",
88
+ "react-native": "0.85.3",
89
89
  "react-native-builder-bob": "^0.41.0",
90
- "react-native-nitro-modules": "^0.35.7",
90
+ "react-native-nitro-modules": "^0.35.9",
91
91
  "react-native-svg": "^15.15.5",
92
- "react-native-vision-camera": "^5.0.10",
93
- "react-native-vision-camera-worklets": "^5.0.10",
94
- "react-native-worklets": "^0.8.3",
92
+ "react-native-vision-camera": "^5.0.11",
93
+ "react-native-vision-camera-worklets": "^5.0.11",
94
+ "react-native-worklets": "^0.9.1",
95
95
  "release-it": "^19.2.4",
96
96
  "turbo": "^2.8.21",
97
97
  "typescript": "^6.0.2"
@@ -0,0 +1,64 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+
3
+ // MediaPipe Pose Landmark indices
4
+ // 11 = left shoulder, 13 = left elbow, 15 = left wrist
5
+ // 12 = right shoulder, 14 = right elbow, 16 = right wrist
6
+
7
+ export const BICEP_CURL_CONFIG: ExerciseConfig = {
8
+ name: 'Bicep Curl',
9
+ type: 'rep',
10
+ angles: [
11
+ {
12
+ name: 'leftElbow',
13
+ landmarkA: 11, // left shoulder
14
+ landmarkB: 13, // left elbow (vertex)
15
+ landmarkC: 15, // left wrist
16
+ },
17
+ {
18
+ name: 'rightElbow',
19
+ landmarkA: 12, // right shoulder
20
+ landmarkB: 14, // right elbow (vertex)
21
+ landmarkC: 16, // right wrist
22
+ },
23
+ {
24
+ name: 'leftShoulder',
25
+ landmarkA: 23, // left hip
26
+ landmarkB: 11, // left shoulder (vertex)
27
+ landmarkC: 13, // left elbow
28
+ },
29
+ ],
30
+ phases: [
31
+ {
32
+ phase: 'down',
33
+ angleName: 'leftElbow',
34
+ minAngle: 150,
35
+ maxAngle: 180,
36
+ },
37
+ {
38
+ phase: 'up',
39
+ angleName: 'leftElbow',
40
+ minAngle: 25,
41
+ maxAngle: 70,
42
+ },
43
+ ],
44
+ repSequence: ['down', 'up', 'down'],
45
+ formRules: [
46
+ {
47
+ name: 'elbowFlare',
48
+ message: 'Keep your elbows pinned to your sides',
49
+ severity: 'warning',
50
+ angleName: 'leftShoulder',
51
+ minAngle: 0,
52
+ maxAngle: 30,
53
+ },
54
+ {
55
+ name: 'swinging',
56
+ message: "Don't swing — control the movement",
57
+ severity: 'error',
58
+ angleName: 'leftShoulder',
59
+ minAngle: 0,
60
+ maxAngle: 45,
61
+ },
62
+ ],
63
+ holdDurationMs: 0,
64
+ };
@@ -0,0 +1,67 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+
3
+ // MediaPipe Pose Landmark indices
4
+ // 11 = left shoulder, 13 = left elbow, 15 = left wrist
5
+ // 23 = left hip, 25 = left knee, 27 = left ankle
6
+ // 12 = right shoulder, 24 = right hip
7
+
8
+ export const CHAIR_POSE_CONFIG: ExerciseConfig = {
9
+ name: 'Chair Pose (Utkatasana)',
10
+ type: 'hold',
11
+ angles: [
12
+ {
13
+ name: 'leftKnee',
14
+ landmarkA: 23, // left hip
15
+ landmarkB: 25, // left knee (vertex)
16
+ landmarkC: 27, // left ankle
17
+ },
18
+ {
19
+ name: 'leftHip',
20
+ landmarkA: 11, // left shoulder
21
+ landmarkB: 23, // left hip (vertex)
22
+ landmarkC: 25, // left knee
23
+ },
24
+ {
25
+ name: 'leftArm',
26
+ landmarkA: 11, // left shoulder
27
+ landmarkB: 13, // left elbow (vertex)
28
+ landmarkC: 15, // left wrist
29
+ },
30
+ ],
31
+ phases: [
32
+ {
33
+ phase: 'hold',
34
+ angleName: 'leftKnee',
35
+ minAngle: 90,
36
+ maxAngle: 130,
37
+ },
38
+ ],
39
+ repSequence: [],
40
+ formRules: [
41
+ {
42
+ name: 'kneesTooStraight',
43
+ message: 'Sit deeper — bend your knees more',
44
+ severity: 'warning',
45
+ angleName: 'leftKnee',
46
+ minAngle: 90,
47
+ maxAngle: 130,
48
+ },
49
+ {
50
+ name: 'leaningForward',
51
+ message: "Keep your chest lifted — don't lean too far forward",
52
+ severity: 'warning',
53
+ angleName: 'leftHip',
54
+ minAngle: 70,
55
+ maxAngle: 130,
56
+ },
57
+ {
58
+ name: 'armsNotUp',
59
+ message: 'Reach your arms up overhead',
60
+ severity: 'info',
61
+ angleName: 'leftArm',
62
+ minAngle: 160,
63
+ maxAngle: 180,
64
+ },
65
+ ],
66
+ holdDurationMs: 30000, // 30 seconds
67
+ };
@@ -0,0 +1,59 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+
3
+ // MediaPipe Pose Landmark indices
4
+ // 11 = left shoulder, 13 = left elbow, 15 = left wrist
5
+ // 12 = right shoulder, 14 = right elbow, 16 = right wrist
6
+ // 23 = left hip, 25 = left knee, 27 = left ankle
7
+
8
+ export const COBRA_POSE_CONFIG: ExerciseConfig = {
9
+ name: 'Cobra Pose (Bhujangasana)',
10
+ type: 'hold',
11
+ angles: [
12
+ {
13
+ name: 'leftElbow',
14
+ landmarkA: 11, // left shoulder
15
+ landmarkB: 13, // left elbow (vertex)
16
+ landmarkC: 15, // left wrist
17
+ },
18
+ {
19
+ name: 'hipExtension',
20
+ landmarkA: 11, // left shoulder
21
+ landmarkB: 23, // left hip (vertex)
22
+ landmarkC: 25, // left knee
23
+ },
24
+ {
25
+ name: 'legStraight',
26
+ landmarkA: 23, // left hip
27
+ landmarkB: 25, // left knee (vertex)
28
+ landmarkC: 27, // left ankle
29
+ },
30
+ ],
31
+ phases: [
32
+ {
33
+ phase: 'hold',
34
+ angleName: 'hipExtension',
35
+ minAngle: 120,
36
+ maxAngle: 170,
37
+ },
38
+ ],
39
+ repSequence: [],
40
+ formRules: [
41
+ {
42
+ name: 'shouldersTensed',
43
+ message: 'Relax your shoulders away from your ears',
44
+ severity: 'info',
45
+ angleName: 'leftElbow',
46
+ minAngle: 140,
47
+ maxAngle: 180,
48
+ },
49
+ {
50
+ name: 'legsBending',
51
+ message: 'Keep your legs straight and pressed into the floor',
52
+ severity: 'warning',
53
+ angleName: 'legStraight',
54
+ minAngle: 160,
55
+ maxAngle: 180,
56
+ },
57
+ ],
58
+ holdDurationMs: 30000, // 30 seconds
59
+ };
@@ -0,0 +1,68 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+
3
+ // MediaPipe Pose Landmark indices
4
+ // 11 = left shoulder, 13 = left elbow, 15 = left wrist
5
+ // 12 = right shoulder, 14 = right elbow, 16 = right wrist
6
+ // 23 = left hip, 25 = left knee, 27 = left ankle
7
+ // 24 = right hip, 26 = right knee, 28 = right ankle
8
+
9
+ export const DOWNWARD_DOG_CONFIG: ExerciseConfig = {
10
+ name: 'Downward Dog (Adho Mukha Svanasana)',
11
+ type: 'hold',
12
+ angles: [
13
+ {
14
+ name: 'hipAngle',
15
+ landmarkA: 11, // left shoulder
16
+ landmarkB: 23, // left hip (vertex)
17
+ landmarkC: 27, // left ankle
18
+ },
19
+ {
20
+ name: 'leftArm',
21
+ landmarkA: 11, // left shoulder
22
+ landmarkB: 13, // left elbow (vertex)
23
+ landmarkC: 15, // left wrist
24
+ },
25
+ {
26
+ name: 'leftLeg',
27
+ landmarkA: 23, // left hip
28
+ landmarkB: 25, // left knee (vertex)
29
+ landmarkC: 27, // left ankle
30
+ },
31
+ ],
32
+ phases: [
33
+ {
34
+ phase: 'hold',
35
+ angleName: 'hipAngle',
36
+ minAngle: 55,
37
+ maxAngle: 100,
38
+ },
39
+ ],
40
+ repSequence: [],
41
+ formRules: [
42
+ {
43
+ name: 'armsBent',
44
+ message: 'Straighten your arms — push the floor away',
45
+ severity: 'warning',
46
+ angleName: 'leftArm',
47
+ minAngle: 160,
48
+ maxAngle: 180,
49
+ },
50
+ {
51
+ name: 'legsBent',
52
+ message: 'Straighten your legs — press your heels toward the ground',
53
+ severity: 'info',
54
+ angleName: 'leftLeg',
55
+ minAngle: 155,
56
+ maxAngle: 180,
57
+ },
58
+ {
59
+ name: 'hipsTooLow',
60
+ message: 'Push your hips up higher toward the ceiling',
61
+ severity: 'warning',
62
+ angleName: 'hipAngle',
63
+ minAngle: 55,
64
+ maxAngle: 100,
65
+ },
66
+ ],
67
+ holdDurationMs: 30000, // 30 seconds
68
+ };
@@ -0,0 +1,65 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+
3
+ // MediaPipe Pose Landmark indices
4
+ // 23 = left hip, 25 = left knee, 27 = left ankle
5
+ // 24 = right hip, 26 = right knee, 28 = right ankle
6
+ // 11 = left shoulder, 12 = right shoulder
7
+
8
+ export const LUNGE_CONFIG: ExerciseConfig = {
9
+ name: 'Lunge',
10
+ type: 'rep',
11
+ angles: [
12
+ {
13
+ name: 'frontKnee',
14
+ landmarkA: 23, // left hip
15
+ landmarkB: 25, // left knee (vertex)
16
+ landmarkC: 27, // left ankle
17
+ },
18
+ {
19
+ name: 'backKnee',
20
+ landmarkA: 24, // right hip
21
+ landmarkB: 26, // right knee (vertex)
22
+ landmarkC: 28, // right ankle
23
+ },
24
+ {
25
+ name: 'torsoAngle',
26
+ landmarkA: 11, // left shoulder
27
+ landmarkB: 23, // left hip (vertex)
28
+ landmarkC: 25, // left knee
29
+ },
30
+ ],
31
+ phases: [
32
+ {
33
+ phase: 'up',
34
+ angleName: 'frontKnee',
35
+ minAngle: 155,
36
+ maxAngle: 180,
37
+ },
38
+ {
39
+ phase: 'down',
40
+ angleName: 'frontKnee',
41
+ minAngle: 70,
42
+ maxAngle: 110,
43
+ },
44
+ ],
45
+ repSequence: ['up', 'down', 'up'],
46
+ formRules: [
47
+ {
48
+ name: 'kneeOverToe',
49
+ message: "Don't let your front knee go past your toes",
50
+ severity: 'warning',
51
+ angleName: 'frontKnee',
52
+ minAngle: 75,
53
+ maxAngle: 180,
54
+ },
55
+ {
56
+ name: 'torsoLean',
57
+ message: 'Keep your torso upright',
58
+ severity: 'warning',
59
+ angleName: 'torsoAngle',
60
+ minAngle: 75,
61
+ maxAngle: 180,
62
+ },
63
+ ],
64
+ holdDurationMs: 0,
65
+ };
@@ -0,0 +1,59 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+
3
+ // MediaPipe Pose Landmark indices
4
+ // 11 = left shoulder, 13 = left elbow, 15 = left wrist
5
+ // 23 = left hip, 27 = left ankle
6
+ // 12 = right shoulder, 24 = right hip, 28 = right ankle
7
+
8
+ export const PLANK_CONFIG: ExerciseConfig = {
9
+ name: 'Plank',
10
+ type: 'hold',
11
+ angles: [
12
+ {
13
+ name: 'leftHip',
14
+ landmarkA: 11, // left shoulder
15
+ landmarkB: 23, // left hip (vertex)
16
+ landmarkC: 27, // left ankle
17
+ },
18
+ {
19
+ name: 'rightHip',
20
+ landmarkA: 12, // right shoulder
21
+ landmarkB: 24, // right hip (vertex)
22
+ landmarkC: 28, // right ankle
23
+ },
24
+ {
25
+ name: 'leftElbow',
26
+ landmarkA: 11, // left shoulder
27
+ landmarkB: 13, // left elbow (vertex)
28
+ landmarkC: 15, // left wrist
29
+ },
30
+ ],
31
+ phases: [
32
+ {
33
+ phase: 'hold',
34
+ angleName: 'leftHip',
35
+ minAngle: 155,
36
+ maxAngle: 180,
37
+ },
38
+ ],
39
+ repSequence: [],
40
+ formRules: [
41
+ {
42
+ name: 'hipSag',
43
+ message: 'Hips are dropping — tighten your core',
44
+ severity: 'warning',
45
+ angleName: 'leftHip',
46
+ minAngle: 155,
47
+ maxAngle: 180,
48
+ },
49
+ {
50
+ name: 'hipPike',
51
+ message: "Lower your hips — you're piking up",
52
+ severity: 'warning',
53
+ angleName: 'leftHip',
54
+ minAngle: 155,
55
+ maxAngle: 180,
56
+ },
57
+ ],
58
+ holdDurationMs: 60000, // 60 seconds default
59
+ };
@@ -0,0 +1,63 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+
3
+ // MediaPipe Pose Landmark indices
4
+ // 11 = left shoulder, 13 = left elbow, 15 = left wrist
5
+ // 12 = right shoulder, 14 = right elbow, 16 = right wrist
6
+ // 23 = left hip
7
+
8
+ export const SHOULDER_PRESS_CONFIG: ExerciseConfig = {
9
+ name: 'Shoulder Press',
10
+ type: 'rep',
11
+ angles: [
12
+ {
13
+ name: 'leftElbow',
14
+ landmarkA: 11, // left shoulder
15
+ landmarkB: 13, // left elbow (vertex)
16
+ landmarkC: 15, // left wrist
17
+ },
18
+ {
19
+ name: 'rightElbow',
20
+ landmarkA: 12, // right shoulder
21
+ landmarkB: 14, // right elbow (vertex)
22
+ landmarkC: 16, // right wrist
23
+ },
24
+ {
25
+ name: 'leftShoulderAngle',
26
+ landmarkA: 23, // left hip
27
+ landmarkB: 11, // left shoulder (vertex)
28
+ landmarkC: 13, // left elbow
29
+ },
30
+ {
31
+ name: 'rightShoulderAngle',
32
+ landmarkA: 24, // right hip
33
+ landmarkB: 12, // right shoulder (vertex)
34
+ landmarkC: 14, // right elbow
35
+ },
36
+ ],
37
+ phases: [
38
+ {
39
+ phase: 'up',
40
+ angleName: 'leftElbow',
41
+ minAngle: 155,
42
+ maxAngle: 180,
43
+ },
44
+ {
45
+ phase: 'down',
46
+ angleName: 'leftElbow',
47
+ minAngle: 60,
48
+ maxAngle: 100,
49
+ },
50
+ ],
51
+ repSequence: ['down', 'up', 'down'],
52
+ formRules: [
53
+ {
54
+ name: 'backArch',
55
+ message: "Keep your core tight — don't arch your back",
56
+ severity: 'warning',
57
+ angleName: 'leftShoulderAngle',
58
+ minAngle: 80,
59
+ maxAngle: 180,
60
+ },
61
+ ],
62
+ holdDurationMs: 0,
63
+ };