feat: Add leftTranslateByVector2 method to Matrix4 (#351)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index d599586..d3b8e92 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,7 @@
 ## 2.3.0-wip
 
+- Add `leftTranslateByVector2` method to `Matrix4`.
+  Equivalent to the `leftTranslate` set of methods, that multiplies this matrix by a translation matrix from the left.
 - Added `Matrix4.leftMultiply` method.
 - Add translateByVector2 method to Matrix4.
 - Require `sdk: ^3.7.0`.
diff --git a/lib/src/vector_math/matrix4.dart b/lib/src/vector_math/matrix4.dart
index ff9e21c..90b6f55 100644
--- a/lib/src/vector_math/matrix4.dart
+++ b/lib/src/vector_math/matrix4.dart
@@ -842,6 +842,13 @@
   @pragma('wasm:prefer-inline')
   @pragma('vm:prefer-inline')
   @pragma('dart2js:prefer-inline')
+  void leftTranslateByVector2(Vector2 v2) =>
+      leftTranslateByDouble(v2.x, v2.y, 0.0, 1.0);
+
+  /// Multiply this by a translation from the left.
+  @pragma('wasm:prefer-inline')
+  @pragma('vm:prefer-inline')
+  @pragma('dart2js:prefer-inline')
   void leftTranslateByVector3(Vector3 v3) =>
       leftTranslateByDouble(v3.x, v3.y, v3.z, 1.0);
 
diff --git a/lib/src/vector_math_64/matrix4.dart b/lib/src/vector_math_64/matrix4.dart
index 2ad5b51..bd7e532 100644
--- a/lib/src/vector_math_64/matrix4.dart
+++ b/lib/src/vector_math_64/matrix4.dart
@@ -842,6 +842,13 @@
   @pragma('wasm:prefer-inline')
   @pragma('vm:prefer-inline')
   @pragma('dart2js:prefer-inline')
+  void leftTranslateByVector2(Vector2 v2) =>
+      leftTranslateByDouble(v2.x, v2.y, 0.0, 1.0);
+
+  /// Multiply this by a translation from the left.
+  @pragma('wasm:prefer-inline')
+  @pragma('vm:prefer-inline')
+  @pragma('dart2js:prefer-inline')
   void leftTranslateByVector3(Vector3 v3) =>
       leftTranslateByDouble(v3.x, v3.y, v3.z, 1.0);
 
diff --git a/test/matrix4_test.dart b/test/matrix4_test.dart
index fd3ea77..71440a6 100644
--- a/test/matrix4_test.dart
+++ b/test/matrix4_test.dart
@@ -862,6 +862,20 @@
   expect(result.x, equals(3.0));
   expect(result.y, equals(0.0));
   expect(result.z, equals(0.0));
+
+  // Matrix4 alternative methods
+  final m2 = Matrix4.diagonal3Values(2.0, 3.0, 4.0);
+  final result2 = Matrix4.columns(
+    Vector4(2.0, 0.0, 0.0, 0.0),
+    Vector4(0.0, 3.0, 0.0, 0.0),
+    Vector4(0.0, 0.0, 4.0, 0.0),
+    Vector4(1.0, 0.0, 0.0, 1.0),
+  );
+
+  expect(m2.clone()..leftTranslateByDouble(1, 0, 0, 1), result2);
+  expect(m2.clone()..leftTranslateByVector2(Vector2(1, 0)), result2);
+  expect(m2.clone()..leftTranslateByVector3(Vector3(1, 0, 0)), result2);
+  expect(m2.clone()..leftTranslateByVector4(Vector4(1, 0, 0, 1)), result2);
 }
 
 void testMatrixClassifiers() {