react-native-nitro-pose-exercises 1.0.8 → 1.0.9

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 (79) hide show
  1. package/android/build.gradle +9 -10
  2. package/android/src/main/java/com/margelo/nitro/nitroposeexercises/NitroPoseExercises.kt +73 -127
  3. package/lib/module/config/bicep-curl.js +61 -0
  4. package/lib/module/config/bicep-curl.js.map +1 -0
  5. package/lib/module/config/chair-pose.js +64 -0
  6. package/lib/module/config/chair-pose.js.map +1 -0
  7. package/lib/module/config/cobra-pose.js +57 -0
  8. package/lib/module/config/cobra-pose.js.map +1 -0
  9. package/lib/module/config/downward-dog.js +65 -0
  10. package/lib/module/config/downward-dog.js.map +1 -0
  11. package/lib/module/config/lunge.js +62 -0
  12. package/lib/module/config/lunge.js.map +1 -0
  13. package/lib/module/config/plank.js +57 -0
  14. package/lib/module/config/plank.js.map +1 -0
  15. package/lib/module/config/shoulder-press.js +62 -0
  16. package/lib/module/config/shoulder-press.js.map +1 -0
  17. package/lib/module/config/situp.js +48 -0
  18. package/lib/module/config/situp.js.map +1 -0
  19. package/lib/module/config/squat.js +69 -0
  20. package/lib/module/config/squat.js.map +1 -0
  21. package/lib/module/config/tree-pose.js +57 -0
  22. package/lib/module/config/tree-pose.js.map +1 -0
  23. package/lib/module/config/tricep-dip.js +55 -0
  24. package/lib/module/config/tricep-dip.js.map +1 -0
  25. package/lib/module/config/wall-sit.js +57 -0
  26. package/lib/module/config/wall-sit.js.map +1 -0
  27. package/lib/module/config/warrior-i.js +79 -0
  28. package/lib/module/config/warrior-i.js.map +1 -0
  29. package/lib/module/config/warrior-ii.js +86 -0
  30. package/lib/module/config/warrior-ii.js.map +1 -0
  31. package/lib/module/index.js +19 -0
  32. package/lib/module/index.js.map +1 -1
  33. package/lib/typescript/src/config/bicep-curl.d.ts +3 -0
  34. package/lib/typescript/src/config/bicep-curl.d.ts.map +1 -0
  35. package/lib/typescript/src/config/chair-pose.d.ts +3 -0
  36. package/lib/typescript/src/config/chair-pose.d.ts.map +1 -0
  37. package/lib/typescript/src/config/cobra-pose.d.ts +3 -0
  38. package/lib/typescript/src/config/cobra-pose.d.ts.map +1 -0
  39. package/lib/typescript/src/config/downward-dog.d.ts +3 -0
  40. package/lib/typescript/src/config/downward-dog.d.ts.map +1 -0
  41. package/lib/typescript/src/config/lunge.d.ts +3 -0
  42. package/lib/typescript/src/config/lunge.d.ts.map +1 -0
  43. package/lib/typescript/src/config/plank.d.ts +3 -0
  44. package/lib/typescript/src/config/plank.d.ts.map +1 -0
  45. package/lib/typescript/src/config/shoulder-press.d.ts +3 -0
  46. package/lib/typescript/src/config/shoulder-press.d.ts.map +1 -0
  47. package/lib/typescript/src/config/situp.d.ts +3 -0
  48. package/lib/typescript/src/config/situp.d.ts.map +1 -0
  49. package/lib/typescript/src/config/squat.d.ts +3 -0
  50. package/lib/typescript/src/config/squat.d.ts.map +1 -0
  51. package/lib/typescript/src/config/tree-pose.d.ts +3 -0
  52. package/lib/typescript/src/config/tree-pose.d.ts.map +1 -0
  53. package/lib/typescript/src/config/tricep-dip.d.ts +3 -0
  54. package/lib/typescript/src/config/tricep-dip.d.ts.map +1 -0
  55. package/lib/typescript/src/config/wall-sit.d.ts +3 -0
  56. package/lib/typescript/src/config/wall-sit.d.ts.map +1 -0
  57. package/lib/typescript/src/config/warrior-i.d.ts +3 -0
  58. package/lib/typescript/src/config/warrior-i.d.ts.map +1 -0
  59. package/lib/typescript/src/config/warrior-ii.d.ts +3 -0
  60. package/lib/typescript/src/config/warrior-ii.d.ts.map +1 -0
  61. package/lib/typescript/src/index.d.ts +14 -0
  62. package/lib/typescript/src/index.d.ts.map +1 -1
  63. package/nitro.json +8 -1
  64. package/package.json +1 -1
  65. package/src/config/bicep-curl.ts +64 -0
  66. package/src/config/chair-pose.ts +67 -0
  67. package/src/config/cobra-pose.ts +59 -0
  68. package/src/config/downward-dog.ts +68 -0
  69. package/src/config/lunge.ts +65 -0
  70. package/src/config/plank.ts +59 -0
  71. package/src/config/shoulder-press.ts +63 -0
  72. package/src/config/situp.ts +51 -0
  73. package/src/config/squat.ts +71 -0
  74. package/src/config/tree-pose.ts +59 -0
  75. package/src/config/tricep-dip.ts +58 -0
  76. package/src/config/wall-sit.ts +59 -0
  77. package/src/config/warrior-i.ts +82 -0
  78. package/src/config/warrior-ii.ts +88 -0
  79. package/src/index.tsx +19 -0
@@ -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
+ };
@@ -0,0 +1,51 @@
1
+ import type { ExerciseConfig } from '../NitroPoseExercises.nitro';
2
+
3
+ // MediaPipe Pose Landmark indices
4
+ // 11 = left shoulder, 12 = right shoulder
5
+ // 23 = left hip, 24 = right hip
6
+ // 25 = left knee, 26 = right knee
7
+
8
+ export const SITUP_CONFIG: ExerciseConfig = {
9
+ name: 'Sit-Up',
10
+ type: 'rep',
11
+ angles: [
12
+ {
13
+ name: 'leftHip',
14
+ landmarkA: 11, // left shoulder
15
+ landmarkB: 23, // left hip (vertex)
16
+ landmarkC: 25, // left knee
17
+ },
18
+ {
19
+ name: 'rightHip',
20
+ landmarkA: 12, // right shoulder
21
+ landmarkB: 24, // right hip (vertex)
22
+ landmarkC: 26, // right knee
23
+ },
24
+ ],
25
+ phases: [
26
+ {
27
+ phase: 'down',
28
+ angleName: 'leftHip',
29
+ minAngle: 130,
30
+ maxAngle: 180,
31
+ },
32
+ {
33
+ phase: 'up',
34
+ angleName: 'leftHip',
35
+ minAngle: 40,
36
+ maxAngle: 90,
37
+ },
38
+ ],
39
+ repSequence: ['down', 'up', 'down'],
40
+ formRules: [
41
+ {
42
+ name: 'neckStrain',
43
+ message: "Don't pull on your neck — lead with your chest",
44
+ severity: 'warning',
45
+ angleName: 'leftHip',
46
+ minAngle: 30,
47
+ maxAngle: 180,
48
+ },
49
+ ],
50
+ holdDurationMs: 0,
51
+ };
@@ -0,0 +1,71 @@
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 SQUAT_CONFIG: ExerciseConfig = {
9
+ name: 'Squat',
10
+ type: 'rep',
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: 'rightKnee',
20
+ landmarkA: 24, // right hip
21
+ landmarkB: 26, // right knee (vertex)
22
+ landmarkC: 28, // right ankle
23
+ },
24
+ {
25
+ name: 'leftHip',
26
+ landmarkA: 11, // left shoulder
27
+ landmarkB: 23, // left hip (vertex)
28
+ landmarkC: 25, // left knee
29
+ },
30
+ {
31
+ name: 'rightHip',
32
+ landmarkA: 12, // right shoulder
33
+ landmarkB: 24, // right hip (vertex)
34
+ landmarkC: 26, // right knee
35
+ },
36
+ ],
37
+ phases: [
38
+ {
39
+ phase: 'up',
40
+ angleName: 'leftKnee',
41
+ minAngle: 155,
42
+ maxAngle: 180,
43
+ },
44
+ {
45
+ phase: 'down',
46
+ angleName: 'leftKnee',
47
+ minAngle: 50,
48
+ maxAngle: 105,
49
+ },
50
+ ],
51
+ repSequence: ['up', 'down', 'up'],
52
+ formRules: [
53
+ {
54
+ name: 'kneesCaving',
55
+ message: 'Push your knees out over your toes',
56
+ severity: 'warning',
57
+ angleName: 'leftKnee',
58
+ minAngle: 40,
59
+ maxAngle: 180,
60
+ },
61
+ {
62
+ name: 'leaningForward',
63
+ message: "Keep your torso upright — don't lean too far forward",
64
+ severity: 'warning',
65
+ angleName: 'leftHip',
66
+ minAngle: 70,
67
+ maxAngle: 180,
68
+ },
69
+ ],
70
+ holdDurationMs: 0,
71
+ };
@@ -0,0 +1,59 @@
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 TREE_POSE_CONFIG: ExerciseConfig = {
9
+ name: 'Tree Pose (Vrksasana)',
10
+ type: 'hold',
11
+ angles: [
12
+ {
13
+ name: 'standingLeg',
14
+ landmarkA: 23, // left hip
15
+ landmarkB: 25, // left knee (vertex)
16
+ landmarkC: 27, // left ankle
17
+ },
18
+ {
19
+ name: 'raisedKnee',
20
+ landmarkA: 24, // right hip
21
+ landmarkB: 26, // right knee (vertex)
22
+ landmarkC: 28, // right ankle
23
+ },
24
+ {
25
+ name: 'torso',
26
+ landmarkA: 11, // left shoulder
27
+ landmarkB: 23, // left hip (vertex)
28
+ landmarkC: 25, // left knee
29
+ },
30
+ ],
31
+ phases: [
32
+ {
33
+ phase: 'hold',
34
+ angleName: 'standingLeg',
35
+ minAngle: 165,
36
+ maxAngle: 180,
37
+ },
38
+ ],
39
+ repSequence: [],
40
+ formRules: [
41
+ {
42
+ name: 'standingLegBent',
43
+ message: 'Straighten your standing leg',
44
+ severity: 'warning',
45
+ angleName: 'standingLeg',
46
+ minAngle: 165,
47
+ maxAngle: 180,
48
+ },
49
+ {
50
+ name: 'leaningTorso',
51
+ message: 'Keep your torso straight and centered',
52
+ severity: 'warning',
53
+ angleName: 'torso',
54
+ minAngle: 160,
55
+ maxAngle: 180,
56
+ },
57
+ ],
58
+ holdDurationMs: 30000, // 30 seconds per side
59
+ };
@@ -0,0 +1,58 @@
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 TRICEP_DIP_CONFIG: ExerciseConfig = {
9
+ name: 'Tricep Dip',
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: 'shoulderDrop',
26
+ landmarkA: 23, // left hip
27
+ landmarkB: 11, // left shoulder (vertex)
28
+ landmarkC: 13, // left elbow
29
+ },
30
+ ],
31
+ phases: [
32
+ {
33
+ phase: 'up',
34
+ angleName: 'leftElbow',
35
+ minAngle: 150,
36
+ maxAngle: 180,
37
+ },
38
+ {
39
+ phase: 'down',
40
+ angleName: 'leftElbow',
41
+ minAngle: 60,
42
+ maxAngle: 100,
43
+ },
44
+ ],
45
+ repSequence: ['up', 'down', 'up'],
46
+ formRules: [
47
+ {
48
+ name: 'goingTooDeep',
49
+ message:
50
+ "Don't go too deep — stop at 90 degrees to protect your shoulders",
51
+ severity: 'error',
52
+ angleName: 'leftElbow',
53
+ minAngle: 55,
54
+ maxAngle: 180,
55
+ },
56
+ ],
57
+ holdDurationMs: 0,
58
+ };
@@ -0,0 +1,59 @@
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 WALL_SIT_CONFIG: ExerciseConfig = {
9
+ name: 'Wall Sit',
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: 'rightKnee',
20
+ landmarkA: 24, // right hip
21
+ landmarkB: 26, // right knee (vertex)
22
+ landmarkC: 28, // right ankle
23
+ },
24
+ {
25
+ name: 'leftHip',
26
+ landmarkA: 11, // left shoulder
27
+ landmarkB: 23, // left hip (vertex)
28
+ landmarkC: 25, // left knee
29
+ },
30
+ ],
31
+ phases: [
32
+ {
33
+ phase: 'hold',
34
+ angleName: 'leftKnee',
35
+ minAngle: 80,
36
+ maxAngle: 110,
37
+ },
38
+ ],
39
+ repSequence: [],
40
+ formRules: [
41
+ {
42
+ name: 'tooHigh',
43
+ message: 'Sit lower — your thighs should be parallel to the ground',
44
+ severity: 'warning',
45
+ angleName: 'leftKnee',
46
+ minAngle: 80,
47
+ maxAngle: 110,
48
+ },
49
+ {
50
+ name: 'leaningForward',
51
+ message: 'Press your back flat against the wall',
52
+ severity: 'warning',
53
+ angleName: 'leftHip',
54
+ minAngle: 80,
55
+ maxAngle: 110,
56
+ },
57
+ ],
58
+ holdDurationMs: 45000, // 45 seconds default
59
+ };
@@ -0,0 +1,82 @@
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 WARRIOR_I_CONFIG: ExerciseConfig = {
10
+ name: 'Warrior I (Virabhadrasana I)',
11
+ type: 'hold',
12
+ angles: [
13
+ {
14
+ name: 'frontKnee',
15
+ landmarkA: 23, // left hip
16
+ landmarkB: 25, // left knee (vertex)
17
+ landmarkC: 27, // left ankle
18
+ },
19
+ {
20
+ name: 'backLeg',
21
+ landmarkA: 24, // right hip
22
+ landmarkB: 26, // right knee (vertex)
23
+ landmarkC: 28, // right ankle
24
+ },
25
+ {
26
+ name: 'leftArm',
27
+ landmarkA: 11, // left shoulder
28
+ landmarkB: 13, // left elbow (vertex)
29
+ landmarkC: 15, // left wrist
30
+ },
31
+ {
32
+ name: 'torso',
33
+ landmarkA: 11, // left shoulder
34
+ landmarkB: 23, // left hip (vertex)
35
+ landmarkC: 25, // left knee
36
+ },
37
+ ],
38
+ phases: [
39
+ {
40
+ phase: 'hold',
41
+ angleName: 'frontKnee',
42
+ minAngle: 80,
43
+ maxAngle: 110,
44
+ },
45
+ ],
46
+ repSequence: [],
47
+ formRules: [
48
+ {
49
+ name: 'frontKneeTooStraight',
50
+ message: 'Bend your front knee deeper — aim for 90 degrees',
51
+ severity: 'warning',
52
+ angleName: 'frontKnee',
53
+ minAngle: 80,
54
+ maxAngle: 110,
55
+ },
56
+ {
57
+ name: 'backLegBent',
58
+ message: 'Keep your back leg straight and strong',
59
+ severity: 'warning',
60
+ angleName: 'backLeg',
61
+ minAngle: 155,
62
+ maxAngle: 180,
63
+ },
64
+ {
65
+ name: 'armsNotExtended',
66
+ message: 'Reach your arms up fully — straighten your elbows',
67
+ severity: 'info',
68
+ angleName: 'leftArm',
69
+ minAngle: 160,
70
+ maxAngle: 180,
71
+ },
72
+ {
73
+ name: 'torsoLeaning',
74
+ message: 'Keep your torso upright over your hips',
75
+ severity: 'warning',
76
+ angleName: 'torso',
77
+ minAngle: 80,
78
+ maxAngle: 110,
79
+ },
80
+ ],
81
+ holdDurationMs: 30000, // 30 seconds per side
82
+ };
@@ -0,0 +1,88 @@
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 WARRIOR_II_CONFIG: ExerciseConfig = {
10
+ name: 'Warrior II (Virabhadrasana II)',
11
+ type: 'hold',
12
+ angles: [
13
+ {
14
+ name: 'frontKnee',
15
+ landmarkA: 23, // left hip
16
+ landmarkB: 25, // left knee (vertex)
17
+ landmarkC: 27, // left ankle
18
+ },
19
+ {
20
+ name: 'backLeg',
21
+ landmarkA: 24, // right hip
22
+ landmarkB: 26, // right knee (vertex)
23
+ landmarkC: 28, // right ankle
24
+ },
25
+ {
26
+ name: 'leftArm',
27
+ landmarkA: 11, // left shoulder
28
+ landmarkB: 13, // left elbow (vertex)
29
+ landmarkC: 15, // left wrist
30
+ },
31
+ {
32
+ name: 'rightArm',
33
+ landmarkA: 12, // right shoulder
34
+ landmarkB: 14, // right elbow (vertex)
35
+ landmarkC: 16, // right wrist
36
+ },
37
+ {
38
+ name: 'torso',
39
+ landmarkA: 11, // left shoulder
40
+ landmarkB: 23, // left hip (vertex)
41
+ landmarkC: 25, // left knee
42
+ },
43
+ ],
44
+ phases: [
45
+ {
46
+ phase: 'hold',
47
+ angleName: 'frontKnee',
48
+ minAngle: 80,
49
+ maxAngle: 110,
50
+ },
51
+ ],
52
+ repSequence: [],
53
+ formRules: [
54
+ {
55
+ name: 'frontKneeTooStraight',
56
+ message: 'Bend your front knee deeper — stack it over your ankle',
57
+ severity: 'warning',
58
+ angleName: 'frontKnee',
59
+ minAngle: 80,
60
+ maxAngle: 110,
61
+ },
62
+ {
63
+ name: 'backLegBent',
64
+ message: 'Straighten your back leg fully',
65
+ severity: 'warning',
66
+ angleName: 'backLeg',
67
+ minAngle: 160,
68
+ maxAngle: 180,
69
+ },
70
+ {
71
+ name: 'leftArmDrooping',
72
+ message: 'Extend your arms out fully — keep them level',
73
+ severity: 'info',
74
+ angleName: 'leftArm',
75
+ minAngle: 160,
76
+ maxAngle: 180,
77
+ },
78
+ {
79
+ name: 'rightArmDrooping',
80
+ message: 'Extend your back arm out fully',
81
+ severity: 'info',
82
+ angleName: 'rightArm',
83
+ minAngle: 160,
84
+ maxAngle: 180,
85
+ },
86
+ ],
87
+ holdDurationMs: 30000, // 30 seconds per side
88
+ };
package/src/index.tsx CHANGED
@@ -25,4 +25,23 @@ export type {
25
25
  SessionResult,
26
26
  } from './NitroPoseExercises.nitro';
27
27
 
28
+ // ─── Rep-Based Exercises ─────────────────────────────────────
28
29
  export { PUSHUP_CONFIG } from './config/pushup';
30
+ export { SQUAT_CONFIG } from './config/squat';
31
+ export { BICEP_CURL_CONFIG } from './config/bicep-curl';
32
+ export { SHOULDER_PRESS_CONFIG } from './config/shoulder-press';
33
+ export { LUNGE_CONFIG } from './config/lunge';
34
+ export { SITUP_CONFIG } from './config/situp';
35
+ export { TRICEP_DIP_CONFIG } from './config/tricep-dip';
36
+
37
+ // ─── Hold-Based Exercises ────────────────────────────────────
38
+ export { PLANK_CONFIG } from './config/plank';
39
+ export { WALL_SIT_CONFIG } from './config/wall-sit';
40
+
41
+ // ─── Yoga Poses ──────────────────────────────────────────────
42
+ export { TREE_POSE_CONFIG } from './config/tree-pose';
43
+ export { WARRIOR_I_CONFIG } from './config/warrior-i';
44
+ export { WARRIOR_II_CONFIG } from './config/warrior-ii';
45
+ export { DOWNWARD_DOG_CONFIG } from './config/downward-dog';
46
+ export { CHAIR_POSE_CONFIG } from './config/chair-pose';
47
+ export { COBRA_POSE_CONFIG } from './config/cobra-pose';