diff --git a/assets/fonts/BrandIcons.ttf b/assets/fonts/BrandIcons.ttf
index 7c975969..bf40d009 100644
Binary files a/assets/fonts/BrandIcons.ttf and b/assets/fonts/BrandIcons.ttf differ
diff --git a/assets/images/icon/check.svg b/assets/images/icon/check.svg
new file mode 100644
index 00000000..876185df
--- /dev/null
+++ b/assets/images/icon/check.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/images/onboarding/logos_line.png b/assets/images/onboarding/logos_line.png
new file mode 100644
index 00000000..eb8ecf82
Binary files /dev/null and b/assets/images/onboarding/logos_line.png differ
diff --git a/assets/images/onboarding/onboarding1.png b/assets/images/onboarding/onboarding1.png
new file mode 100644
index 00000000..fd9a7b2f
Binary files /dev/null and b/assets/images/onboarding/onboarding1.png differ
diff --git a/assets/images/onboarding/onboarding2.png b/assets/images/onboarding/onboarding2.png
new file mode 100644
index 00000000..5786558c
Binary files /dev/null and b/assets/images/onboarding/onboarding2.png differ
diff --git a/lib/config/bloc_config.dart b/lib/config/bloc_config.dart
index ac0d9874..414c2418 100644
--- a/lib/config/bloc_config.dart
+++ b/lib/config/bloc_config.dart
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:selfprivacy/logic/cubit/app_settings/app_settings_cubit.dart';
+import 'package:selfprivacy/logic/cubit/initializing/initializing_cubit.dart';
import 'package:selfprivacy/logic/cubit/providers/providers_cubit.dart';
import 'package:selfprivacy/logic/cubit/services/services_cubit.dart';
import 'package:selfprivacy/logic/cubit/users/users_cubit.dart';
@@ -20,6 +21,7 @@ class BlocAndProviderConfig extends StatelessWidget {
return MultiProvider(
providers: [
BlocProvider(create: (_) => AppSettingsCubit(isDarkModeOn: isDark)),
+ BlocProvider(create: (_) => InitializingCubit()),
BlocProvider(create: (_) => ServicesCubit()),
BlocProvider(create: (_) => ProvidersCubit()),
BlocProvider(create: (_) => UsersCubit()),
diff --git a/lib/config/brand_colors.dart b/lib/config/brand_colors.dart
index 1ca3f87f..0bd0c44c 100644
--- a/lib/config/brand_colors.dart
+++ b/lib/config/brand_colors.dart
@@ -30,7 +30,6 @@ class BrandColors {
/// ![](https://www.colorhexa.com/0F8849.png)
static const Color green2 = Color(0xFF0F8849);
-
static get navBackgroundLight => white.withOpacity(0.8);
static get navBackgroundDark => black.withOpacity(0.8);
@@ -42,12 +41,16 @@ class BrandColors {
Color(0xFF093CEF),
Color(0xFF14A1CB),
];
+
+ static const List progressGradientColors = [
+ Color(0xFF093CEF),
+ Color(0xFF14A1CB),
+ ];
static const List warningGradientColors = [
Color(0xFFEF4E09),
Color(0xFFEFD135),
];
-
static const primary = blue;
static const headlineColor = black;
static const inactive = gray2;
@@ -58,6 +61,4 @@ class BrandColors {
static const textColor2 = gray1;
static const dividerColor = gray5;
static const warning = red;
-
-
}
diff --git a/lib/config/text_themes.dart b/lib/config/text_themes.dart
index 5be2aa5c..acc9425f 100644
--- a/lib/config/text_themes.dart
+++ b/lib/config/text_themes.dart
@@ -18,7 +18,7 @@ final headline1Style = GoogleFonts.inter(
);
final headline2Style = GoogleFonts.inter(
- fontSize: 24,
+ fontSize: 30,
fontWeight: NamedFontWeight.extraBold,
color: BrandColors.headlineColor,
);
@@ -41,3 +41,19 @@ final body2Style = defaultTextStyle.copyWith(
);
final smallStyle = defaultTextStyle.copyWith(fontSize: 11, height: 1.45);
+
+final linkStyle = defaultTextStyle.copyWith(color: BrandColors.blue);
+
+final progressTextStyleLight = GoogleFonts.inter(
+ textStyle: TextStyle(
+ fontSize: 13,
+ color: BrandColors.textColor1,
+ ),
+);
+
+final progressTextStyleDark = GoogleFonts.inter(
+ textStyle: TextStyle(
+ fontSize: 13,
+ color: BrandColors.white,
+ ),
+);
diff --git a/lib/logic/cubit/forms/initializing/cloudflare_form_cubit.dart b/lib/logic/cubit/forms/initializing/cloudflare_form_cubit.dart
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/logic/cubit/forms/initializing/domain_form_cubit.dart b/lib/logic/cubit/forms/initializing/domain_form_cubit.dart
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/logic/cubit/forms/initializing/hetzner_form_cubit.dart b/lib/logic/cubit/forms/initializing/hetzner_form_cubit.dart
new file mode 100644
index 00000000..0a62d715
--- /dev/null
+++ b/lib/logic/cubit/forms/initializing/hetzner_form_cubit.dart
@@ -0,0 +1,44 @@
+import 'dart:async';
+
+import 'package:cubit_form/cubit_form.dart';
+import 'package:selfprivacy/logic/cubit/initializing/initializing_cubit.dart';
+
+class HetznerFormCubit extends FormCubit {
+ HetznerFormCubit(this.initializingCubit) {
+ var regExp = RegExp(r"\s+|[-!$%^&*()_@+|~=`{}\[\]:" ";<>?,.\/]");
+ apiKey = FieldCubit(
+ initalValue: '',
+ validations: [
+ RequiredStringValidation('required'),
+ ValidationModel(
+ (s) => regExp.hasMatch(s), 'invalid key format'),
+ LegnthStringValidation(11, 'length is [] shoud be 11')
+ ],
+ );
+
+ super.setFields([apiKey]);
+ }
+
+ @override
+ FutureOr onSubmit() async {
+ print(apiKey.state.value);
+ await Future.delayed(const Duration(milliseconds: 300));
+ // initializingCubit.setHetznerKey(apiKey.state.value);
+ }
+
+ final InitializingCubit initializingCubit;
+
+ FieldCubit apiKey;
+}
+
+class LegnthStringValidation extends ValidationModel {
+ LegnthStringValidation(int length, String errorText)
+ : super((n) => n.length != length, errorText);
+
+ @override
+ String check(String val) {
+ var length = val.length;
+ var errorMassage = this.errorMassage.replaceAll("[]", length.toString());
+ return test(val) ? errorMassage : null;
+ }
+}
diff --git a/lib/logic/cubit/forms/initializing/user_form_cubit.dart b/lib/logic/cubit/forms/initializing/user_form_cubit.dart
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/logic/cubit/initializing/initializing_cubit.dart b/lib/logic/cubit/initializing/initializing_cubit.dart
new file mode 100644
index 00000000..0fe6bcd9
--- /dev/null
+++ b/lib/logic/cubit/initializing/initializing_cubit.dart
@@ -0,0 +1,30 @@
+import 'package:bloc/bloc.dart';
+import 'package:equatable/equatable.dart';
+import 'package:selfprivacy/logic/models/config.dart';
+import 'package:selfprivacy/logic/models/user.dart';
+
+part 'initializing_state.dart';
+
+class InitializingCubit extends Cubit {
+ InitializingCubit() : super(InitialInitializingState());
+
+ void setHetznerKey(String key) {
+ var newCofig = state.appConfig.copyWith(hatzner: key);
+ emit(InitializingState(newCofig));
+ }
+
+ void setCloudFlare(String cloudFlareKey) {
+ var newCofig = state.appConfig.copyWith(cloudFlare: cloudFlareKey);
+ emit(InitializingState(newCofig));
+ }
+
+ void setDomain(String domain) {
+ var newCofig = state.appConfig.copyWith(domain: domain);
+ emit(InitializingState(newCofig));
+ }
+
+ void setRootUser(User rootUser) {
+ var newCofig = state.appConfig.copyWith(rootUser: rootUser);
+ emit(InitializingState(newCofig));
+ }
+}
diff --git a/lib/logic/cubit/initializing/initializing_state.dart b/lib/logic/cubit/initializing/initializing_state.dart
new file mode 100644
index 00000000..7827987d
--- /dev/null
+++ b/lib/logic/cubit/initializing/initializing_state.dart
@@ -0,0 +1,26 @@
+part of 'initializing_cubit.dart';
+
+class InitializingState extends Equatable {
+ const InitializingState(this.appConfig);
+
+ final AppConfig appConfig;
+
+ @override
+ List