diff --git a/assets/images/facebook.svg b/assets/images/facebook.svg
new file mode 100644
index 00000000..929d3861
--- /dev/null
+++ b/assets/images/facebook.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/images/google.svg b/assets/images/google.svg
new file mode 100644
index 00000000..27788e84
--- /dev/null
+++ b/assets/images/google.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/images/lift_line.png b/assets/images/lift_line.png
new file mode 100644
index 00000000..8dacf6d7
Binary files /dev/null and b/assets/images/lift_line.png differ
diff --git a/assets/images/right_line.png b/assets/images/right_line.png
new file mode 100644
index 00000000..805d1c0a
Binary files /dev/null and b/assets/images/right_line.png differ
diff --git a/lib/main.dart b/lib/main.dart
index 09a1c6ab..629a8725 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,6 +1,6 @@
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
-import 'package:syncrow_web/pages/auth/view/login_page.dart';
+import 'package:syncrow_web/pages/auth/login/view/login_page.dart';
import 'package:syncrow_web/services/locator.dart';
void main() {
diff --git a/lib/pages/auth/forget_password/bloc/forget_password_bloc.dart b/lib/pages/auth/forget_password/bloc/forget_password_bloc.dart
new file mode 100644
index 00000000..07b61a24
--- /dev/null
+++ b/lib/pages/auth/forget_password/bloc/forget_password_bloc.dart
@@ -0,0 +1,195 @@
+import 'dart:async';
+import 'package:flutter/material.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:syncrow_web/pages/auth/forget_password/bloc/forget_password_event.dart';
+import 'package:syncrow_web/pages/auth/forget_password/bloc/forget_password_state.dart';
+import 'package:syncrow_web/services/auth_api.dart';
+
+class ForgetPasswordBloc
+ extends Bloc {
+ ForgetPasswordBloc() : super(InitialForgetState()) {
+ on(changePassword);
+ on(_onStartTimer);
+ on(_onStopTimer);
+ on(_onUpdateTimer);
+ }
+
+ void _onUpdateTimer(UpdateTimerEvent event, Emitter emit) {
+ emit(TimerState(
+ isButtonEnabled: event.isButtonEnabled,
+ remainingTime: event.remainingTime));
+ }
+
+ final TextEditingController emailController = TextEditingController();
+ final TextEditingController passwordController = TextEditingController();
+ final TextEditingController otp = TextEditingController();
+ final formKey = GlobalKey();
+
+ Timer? _timer;
+ int _remainingTime = 0;
+
+ Future _onStartTimer(
+ StartTimerEvent event, Emitter emit) async {
+ if (_validateInputs(emit)) return;
+ print("StartTimerEvent received");
+ if (_timer != null && _timer!.isActive) {
+ print("Timer is already active");
+ return;
+ }
+ _remainingTime = 60;
+ add(UpdateTimerEvent(
+ remainingTime: _remainingTime, isButtonEnabled: false));
+ print("Timer started, initial remaining time: $_remainingTime");
+ await AuthenticationAPI.sendOtp(email: emailController.text);
+ _timer = Timer.periodic(const Duration(seconds: 1), (timer) {
+ _remainingTime--;
+ print("Timer tick, remaining time: $_remainingTime"); // Debug print
+ if (_remainingTime <= 0) {
+ _timer?.cancel();
+ add(const UpdateTimerEvent(remainingTime: 0, isButtonEnabled: true));
+ print("Timer finished"); // Debug print
+ } else {
+ add(UpdateTimerEvent(remainingTime: _remainingTime, isButtonEnabled: false));
+ }
+ });
+ }
+
+ void _onStopTimer(StopTimerEvent event, Emitter emit) {
+ _timer?.cancel();
+ emit(TimerState(isButtonEnabled: true, remainingTime: 0));
+ }
+
+ Future changePassword(
+ ChangePasswordEvent event, Emitter emit) async {
+ try {
+ emit(LoadingForgetState());
+ await AuthenticationAPI.forgetPassword(
+ password: passwordController.text, email: emailController.text);
+ emit(SuccessForgetState());
+ } catch (failure) {
+ print(failure);
+ emit(FailureForgetState(error: failure.toString()));
+ }
+ }
+
+ String? validateEmail(String? value) {
+ if (value == null || value.isEmpty) {
+ return 'Email is required';
+ } else if (!RegExp(r'^[^@]+@[^@]+\.[^@]+').hasMatch(value)) {
+ return 'Enter a valid email address';
+ }
+ return null;
+ }
+
+ String? validateRegion(String? value) {
+ if (value == null || value.isEmpty) {
+ return 'Please select a region';
+ }
+ return null;
+ }
+
+ String? otpValidate(String? value) {
+ if (value == null || value.isEmpty) {
+ return 'Please select a region';
+ }
+ return null;
+ }
+
+ String? passwordValidator(String? value) {
+ if (value == null || value.isEmpty) {
+ return 'Please enter your password';
+ }
+ List validationErrors = [];
+ if (!RegExp(r'^(?=.*[a-z])').hasMatch(value)) {
+ validationErrors.add(' - one lowercase letter');
+ }
+ if (!RegExp(r'^(?=.*[A-Z])').hasMatch(value)) {
+ validationErrors.add(' - one uppercase letter');
+ }
+ if (!RegExp(r'^(?=.*\d)').hasMatch(value)) {
+ validationErrors.add(' - one number');
+ }
+ if (!RegExp(r'^(?=.*[@$!%*?&])').hasMatch(value)) {
+ validationErrors.add(' - one special character');
+ }
+ if (value.length < 8) {
+ validationErrors.add(' - minimum 8 characters');
+ }
+ if (validationErrors.isNotEmpty) {
+ return 'Password must contain at least:\n${validationErrors.join('\n')}';
+ }
+ return null;
+ }
+
+ final List regions = [
+ 'North America',
+ 'South America',
+ 'Europe',
+ 'Asia',
+ 'Africa',
+ 'Australia',
+ 'Antarctica',
+ ];
+
+
+ bool _validateInputs(Emitter emit) {
+ emit(LoadingForgetState());
+ final nameError = validateEmail(emailController.text);
+ if (nameError != null) {
+ emit(FailureForgetState(error:nameError )) ;
+ // CustomSnackBar.displaySnackBar(nameError);
+ return true;
+ }
+ return false;
+ }
+}
+
+
+
+
+
+//
+//
+// _login(LoginButtonPressed event, Emitter emit) async {
+// emit(LoginLoading());
+// if(isChecked) {
+// try {
+// if (event.username.isEmpty || event.password.isEmpty) {
+// CustomSnackBar.displaySnackBar('Please enter your credentials');
+// emit(const LoginFailure(error: 'Something went wrong'));
+// return;
+// }
+// token = await AuthenticationAPI.loginWithEmail(
+// model: LoginWithEmailModel(
+// email: event.username,
+// password: event.password,
+// ),
+// );
+// }
+// catch (failure) {
+// emit(const LoginFailure(error: 'Something went wrong'));
+// // emit(LoginFailure(error: failure.toString()));
+// return;
+// }
+// if (token.accessTokenIsNotEmpty) {
+// debugPrint('token: ${token.accessToken}');
+// FlutterSecureStorage storage = const FlutterSecureStorage();
+// await storage.write(
+// key: Token.loginAccessTokenKey, value: token.accessToken);
+//
+// const FlutterSecureStorage().write(
+// key: UserModel.userUuidKey,
+// value: Token.decodeToken(token.accessToken)['uuid'].toString()
+// );
+// user = UserModel.fromToken(token);
+// emailController.clear();
+// passwordController.clear();
+// emit(LoginSuccess());
+// } else {
+// emit(const LoginFailure(error: 'Something went wrong'));
+// }
+// }
+// else{
+// emit(const LoginFailure(error: 'Accept terms and condition'));
+// }
+// }
diff --git a/lib/pages/auth/forget_password/bloc/forget_password_event.dart b/lib/pages/auth/forget_password/bloc/forget_password_event.dart
new file mode 100644
index 00000000..3a42ef76
--- /dev/null
+++ b/lib/pages/auth/forget_password/bloc/forget_password_event.dart
@@ -0,0 +1,26 @@
+
+import 'package:equatable/equatable.dart';
+
+abstract class ForgetPasswordEvent extends Equatable {
+const ForgetPasswordEvent();
+ @override
+ List