Explorar o código

Работал с экраном библиотеки и поиска

ZryachevTA hai 1 semana
pai
achega
0e83f552ae

+ 9 - 1
Frontend/app/src/main/java/com/example/neurea/navigation/Navigation.kt

@@ -8,13 +8,15 @@ import androidx.navigation.compose.composable
 import androidx.navigation.compose.rememberNavController
 import com.example.neurea.views.screens.AuthorizationScreen
 import com.example.neurea.views.screens.BookScreen
+import com.example.neurea.views.screens.HomeScreen
 import com.example.neurea.views.screens.ReadingScreen
+import com.example.neurea.views.screens.SearchScreen
 import com.example.neurea.views.screens.SplashScreen
 
 @Composable
 fun Navigation(){
     val navController = rememberNavController()
-    var start = "splashScreen"
+    var start = "homeScreen"
 
     NavHost(navController = navController, startDestination = start) {
         composable("splashScreen"){
@@ -29,6 +31,12 @@ fun Navigation(){
         composable ("readingScreen"){
             ReadingScreen()
         }
+        composable("homeScreen") {
+            HomeScreen(navController)
+        }
+        composable("searchScreen"){
+            SearchScreen()
+        }
     }
 
 }

+ 134 - 6
Frontend/app/src/main/java/com/example/neurea/views/screens/HomeScreen.kt

@@ -2,17 +2,24 @@ package com.example.neurea.views.screens
 
 import androidx.compose.foundation.background
 import androidx.compose.foundation.border
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.horizontalScroll
+import androidx.compose.foundation.interaction.MutableInteractionSource
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.offset
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.lazy.LazyRow
+import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.foundation.text.KeyboardOptions
 import androidx.compose.material3.Button
@@ -45,19 +52,20 @@ import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.tooling.preview.Preview
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
+import androidx.navigation.NavController
 import com.example.neurea.R
 import com.example.neurea.views.ui.theme.NeureaTheme
 
 @Preview()
 @OptIn(ExperimentalMaterial3Api::class)
 @Composable
-fun HomeScreen() { // navController: NavController
+fun HomeScreen(navController: NavController) { // navController: NavController
     var email = remember { mutableStateOf("") }
     var password = remember { mutableStateOf("") }
     val maxLength = 20
     val emailPattern = Regex("[^@ \\t\\r\\n]+@[^@ \\t\\r\\n]+\\.[^@ \\t\\r\\n]+")
     var passwordVisibility: Boolean by remember { mutableStateOf(false) }
-
+    val interactionSource = remember { MutableInteractionSource() }
     NeureaTheme {
         Column(
             modifier = Modifier
@@ -69,7 +77,7 @@ fun HomeScreen() { // navController: NavController
                     .fillMaxWidth()
                     .padding(start = 20.dp, end = 20.dp, top = 45.dp, bottom = 25.dp)
                     .clip(shape = RoundedCornerShape(54.dp))
-                    ,
+                    .clickable(interactionSource = interactionSource, indication = null) { navController.navigate("searchScreen") },
                 value = password.value,
                 colors = TextFieldDefaults.textFieldColors(
                     containerColor = MaterialTheme.colorScheme.surface,
@@ -99,8 +107,43 @@ fun HomeScreen() { // navController: NavController
             )
             Text("Ваши рекомендации", fontWeight = FontWeight.Bold, fontSize = 18.sp, modifier = Modifier.padding(start = 25.dp) )
             // Тут скорее всего будет LazyRow
-            Row(modifier = Modifier.padding(top = 22.dp, bottom = 22.dp, start = 24.dp))
+            Row(modifier = Modifier
+                .fillMaxWidth()
+                .padding(top = 22.dp, bottom = 22.dp, start = 24.dp)
+                .horizontalScroll(rememberScrollState()))
             {
+                Column(modifier = Modifier
+                    .height(216.dp)
+                    .width(150.dp)
+
+                    .clip(RoundedCornerShape(15.dp))
+
+                    .background(MaterialTheme.colorScheme.surface)
+                ) {
+                    Column(modifier = Modifier.padding(horizontal = 10.dp)) {
+                        Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.End) {
+                            Box(modifier = Modifier
+                                .padding(top = 5.dp)
+                                .size(7.dp)
+                                .clip(RoundedCornerShape(8.dp))
+                                .background(Color(0xFFD9D9D9)))
+                        }
+
+                        Column(modifier = Modifier
+                            .height(130.dp)
+                            .fillMaxWidth(),
+                            horizontalAlignment = Alignment.CenterHorizontally){
+                            Box(modifier = Modifier
+                                .background(Color.Gray)
+                                .height(130.dp)
+                                .width(80.dp), )
+
+                        }
+                        Text("Человек в высоком замке", fontSize = 15.sp, fontWeight = FontWeight.SemiBold)
+                        Text("Филип Дик", fontSize = 15.sp)
+                    }
+                }
+                Spacer(modifier = Modifier.width(15.dp))
                 Column(modifier = Modifier
 
                     .height(216.dp)
@@ -113,7 +156,7 @@ fun HomeScreen() { // navController: NavController
                     Column(modifier = Modifier.padding(horizontal = 10.dp)) {
                         Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.End) {
                             Box(modifier = Modifier
-                                .padding(top=5.dp)
+                                .padding(top = 5.dp)
                                 .size(7.dp)
                                 .clip(RoundedCornerShape(8.dp))
                                 .background(Color(0xFFD9D9D9),))
@@ -123,7 +166,92 @@ fun HomeScreen() { // navController: NavController
                             .height(130.dp)
                             .fillMaxWidth(),
                             horizontalAlignment = Alignment.CenterHorizontally){
-                            Box(modifier = Modifier.background(Color.Gray).height(130.dp).width(80.dp), )
+                            Box(modifier = Modifier
+                                .background(Color.Gray)
+                                .height(130.dp)
+                                .width(80.dp), )
+
+                        }
+                        Text("Человек в высоком замке", fontSize = 15.sp, fontWeight = FontWeight.SemiBold)
+                        Text("Филип Дик", fontSize = 15.sp)
+                    }
+                }
+            }
+            Text("По жанру", fontWeight = FontWeight.Bold, fontSize = 18.sp, modifier = Modifier.padding(start = 25.dp) )
+            Row(modifier = Modifier.fillMaxWidth().horizontalScroll(rememberScrollState())){
+                Button(onClick = {/**is-selected = uuid жанра если они не равны*/}, colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.surface),
+                    modifier = Modifier.padding(end = 5.dp))
+                {
+                    Text("Научная фантастика", color = MaterialTheme.colorScheme.onSecondary, fontSize = 12.sp)
+                }
+                Button(onClick = {}, colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.surface))
+                {
+                    Text("Комедия", color = MaterialTheme.colorScheme.onSecondary, fontSize = 12.sp)
+                }
+            }
+            Row(modifier = Modifier
+                .fillMaxWidth()
+                .padding(top = 22.dp, bottom = 22.dp, start = 24.dp)
+                .horizontalScroll(rememberScrollState()))
+            {
+                Column(modifier = Modifier
+                    .height(216.dp)
+                    .width(150.dp)
+
+                    .clip(RoundedCornerShape(15.dp))
+
+                    .background(MaterialTheme.colorScheme.surface)
+                ) {
+                    Column(modifier = Modifier.padding(horizontal = 10.dp)) {
+                        Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.End) {
+                            Box(modifier = Modifier
+                                .padding(top = 5.dp)
+                                .size(7.dp)
+                                .clip(RoundedCornerShape(8.dp))
+                                .background(Color(0xFFD9D9D9)))
+                        }
+
+                        Column(modifier = Modifier
+                            .height(130.dp)
+                            .fillMaxWidth(),
+                            horizontalAlignment = Alignment.CenterHorizontally){
+                            Box(modifier = Modifier
+                                .background(Color.Gray)
+                                .height(130.dp)
+                                .width(80.dp), )
+
+                        }
+                        Text("Человек в высоком замке", fontSize = 15.sp, fontWeight = FontWeight.SemiBold)
+                        Text("Филип Дик", fontSize = 15.sp)
+                    }
+                }
+                Spacer(modifier = Modifier.width(15.dp))
+                Column(modifier = Modifier
+
+                    .height(216.dp)
+                    .width(150.dp)
+
+                    .clip(RoundedCornerShape(15.dp))
+
+                    .background(MaterialTheme.colorScheme.surface)
+                ) {
+                    Column(modifier = Modifier.padding(horizontal = 10.dp)) {
+                        Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.End) {
+                            Box(modifier = Modifier
+                                .padding(top = 5.dp)
+                                .size(7.dp)
+                                .clip(RoundedCornerShape(8.dp))
+                                .background(Color(0xFFD9D9D9),))
+                        }
+
+                        Column(modifier = Modifier
+                            .height(130.dp)
+                            .fillMaxWidth(),
+                            horizontalAlignment = Alignment.CenterHorizontally){
+                            Box(modifier = Modifier
+                                .background(Color.Gray)
+                                .height(130.dp)
+                                .width(80.dp), )
 
                         }
                         Text("Человек в высоком замке", fontSize = 15.sp, fontWeight = FontWeight.SemiBold)

+ 241 - 0
Frontend/app/src/main/java/com/example/neurea/views/screens/LibraryScreen.kt

@@ -0,0 +1,241 @@
+package com.example.neurea.views.screens
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.horizontalScroll
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.HorizontalDivider
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Switch
+import androidx.compose.material3.SwitchDefaults
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.example.neurea.R
+import com.example.neurea.views.ui.theme.NeureaTheme
+
+
+@Preview()
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun LibraryScreen() { // navController: NavController
+    NeureaTheme {
+        Column(
+            modifier = Modifier
+                .fillMaxSize()
+                .background(color = MaterialTheme.colorScheme.surface)
+        ) {
+            Text("Время почитать!", color = MaterialTheme.colorScheme.primary, fontWeight = FontWeight.Bold, fontSize = 20.sp,
+                modifier = Modifier
+                    .align(Alignment.CenterHorizontally)
+                    .padding(vertical = 30.dp))
+            Column(
+                modifier = Modifier.verticalScroll(rememberScrollState())
+                    .fillMaxSize()
+                    .clip(RoundedCornerShape(45.dp, 45.dp))
+                    .background(color = MaterialTheme.colorScheme.secondary)
+            ){
+
+                Text("Отложенные книги", fontWeight = FontWeight.Bold, fontSize = 18.sp, modifier = Modifier.padding(start = 25.dp, top = 30.dp) )
+                // Тут скорее всего будет LazyRow
+                Row(modifier = Modifier
+                    .fillMaxWidth()
+                    .padding(top = 22.dp, bottom = 22.dp, start = 24.dp)
+                    .horizontalScroll(rememberScrollState()))
+                {
+                    Column(modifier = Modifier
+                        .height(216.dp)
+                        .width(150.dp)
+
+                        .clip(RoundedCornerShape(15.dp))
+
+                        .background(MaterialTheme.colorScheme.surface)
+                    ) {
+                        Column(modifier = Modifier.padding(horizontal = 10.dp)) {
+                            Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.End) {
+                                Box(modifier = Modifier
+                                    .padding(top = 5.dp)
+                                    .size(7.dp)
+                                    .clip(RoundedCornerShape(8.dp))
+                                    .background(Color(0xFFD9D9D9)))
+                            }
+
+                            Column(modifier = Modifier
+                                .height(130.dp)
+                                .fillMaxWidth(),
+                                horizontalAlignment = Alignment.CenterHorizontally){
+                                Box(modifier = Modifier
+                                    .background(Color.Gray)
+                                    .height(130.dp)
+                                    .width(80.dp), )
+
+                            }
+                            Text("Человек в высоком замке", fontSize = 15.sp, fontWeight = FontWeight.SemiBold)
+                            Text("Филип Дик", fontSize = 15.sp)
+                        }
+                    }
+                    Spacer(modifier = Modifier.width(15.dp))
+                    Column(modifier = Modifier
+
+                        .height(216.dp)
+                        .width(150.dp)
+
+                        .clip(RoundedCornerShape(15.dp))
+
+                        .background(MaterialTheme.colorScheme.surface)
+                    ) {
+                        Column(modifier = Modifier.padding(horizontal = 10.dp)) {
+                            Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.End) {
+                                Box(modifier = Modifier
+                                    .padding(top = 5.dp)
+                                    .size(7.dp)
+                                    .clip(RoundedCornerShape(8.dp))
+                                    .background(Color(0xFFD9D9D9),))
+                            }
+
+                            Column(modifier = Modifier
+                                .height(130.dp)
+                                .fillMaxWidth(),
+                                horizontalAlignment = Alignment.CenterHorizontally){
+                                Box(modifier = Modifier
+                                    .background(Color.Gray)
+                                    .height(130.dp)
+                                    .width(80.dp), )
+
+                            }
+                            Text("Человек в высоком замке", fontSize = 15.sp, fontWeight = FontWeight.SemiBold)
+                            Text("Филип Дик", fontSize = 15.sp)
+                        }
+                    }
+                }
+                HorizontalDivider(color= MaterialTheme.colorScheme.onSecondary, thickness = 0.5.dp, modifier = Modifier.padding(horizontal = 24.dp))
+                Button(
+                    onClick = {
+                    },
+                    modifier = Modifier
+                        .fillMaxWidth()
+                        .height(55.dp)
+                        .padding(top = 10.dp, start = 20.dp, end = 30.dp)
+                        .height(50.dp)
+
+                    ,
+                    shape = RoundedCornerShape(8.dp),
+                    colors = ButtonDefaults.buttonColors(
+                        containerColor = MaterialTheme.colorScheme.primary
+                    ),
+
+                    ) {
+                    Text("Загрузить новую книгу", fontSize = 15.sp, color = MaterialTheme.colorScheme.secondary)
+
+                    }
+                HorizontalDivider(color= MaterialTheme.colorScheme.onSecondary, thickness = 0.5.dp, modifier = Modifier.padding(horizontal = 24.dp))
+                Text("Читаете сейчас", fontWeight = FontWeight.Bold, fontSize = 18.sp, modifier = Modifier.padding(start = 25.dp, top = 30.dp) )
+                Column(modifier = Modifier, horizontalAlignment = Alignment.CenterHorizontally){
+                    Row(modifier = Modifier
+                        .fillMaxWidth()
+                        .padding(top = 22.dp, bottom = 22.dp), horizontalArrangement = Arrangement.Center
+                        )
+                    {
+                        Column(modifier = Modifier
+                            .height(216.dp)
+                            .width(150.dp)
+
+                            .clip(RoundedCornerShape(15.dp))
+
+                            .background(MaterialTheme.colorScheme.surface)
+                        ) {
+                            Column(modifier = Modifier.padding(horizontal = 10.dp)) {
+                                Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.End) {
+                                    Box(modifier = Modifier
+                                        .padding(top = 5.dp)
+                                        .size(7.dp)
+                                        .clip(RoundedCornerShape(8.dp))
+                                        .background(Color(0xFFD9D9D9)))
+                                }
+
+                                Column(modifier = Modifier
+                                    .height(130.dp)
+                                    .fillMaxWidth(),
+                                    horizontalAlignment = Alignment.CenterHorizontally){
+                                    Box(modifier = Modifier
+                                        .background(Color.Gray)
+                                        .height(130.dp)
+                                        .width(80.dp), )
+
+                                }
+                                Text("Человек в высоком замке", fontSize = 15.sp, fontWeight = FontWeight.SemiBold)
+                                Text("Филип Дик", fontSize = 15.sp)
+                            }
+                        }
+                        Spacer(modifier = Modifier.width(15.dp))
+                        Column(modifier = Modifier
+
+                            .height(216.dp)
+                            .width(150.dp)
+
+                            .clip(RoundedCornerShape(15.dp))
+
+                            .background(MaterialTheme.colorScheme.surface)
+                        ) {
+                            Column(modifier = Modifier.padding(horizontal = 10.dp)) {
+                                Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.End) {
+                                    Box(modifier = Modifier
+                                        .padding(top = 5.dp)
+                                        .size(7.dp)
+                                        .clip(RoundedCornerShape(8.dp))
+                                        .background(Color(0xFFD9D9D9),))
+                                }
+
+                                Column(modifier = Modifier
+                                    .height(130.dp)
+                                    .fillMaxWidth(),
+                                    horizontalAlignment = Alignment.CenterHorizontally){
+                                    Box(modifier = Modifier
+                                        .background(Color.Gray)
+                                        .height(130.dp)
+                                        .width(80.dp), )
+
+                                }
+                                Text("Человек в высоком замке", fontSize = 15.sp, fontWeight = FontWeight.SemiBold)
+                                Text("Филип Дик", fontSize = 15.sp)
+                            }
+                        }
+                    }
+                }
+            }
+
+
+
+        }
+    }
+}

+ 20 - 7
Frontend/app/src/main/java/com/example/neurea/views/screens/ReadingScreen.kt

@@ -4,6 +4,7 @@ import androidx.compose.foundation.BorderStroke
 import androidx.compose.foundation.background
 import androidx.compose.foundation.border
 import androidx.compose.foundation.clickable
+import androidx.compose.foundation.interaction.MutableInteractionSource
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
@@ -17,6 +18,7 @@ import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.width
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.foundation.text.selection.SelectionContainer
 import androidx.compose.material3.Button
 import androidx.compose.material3.ButtonDefaults
 import androidx.compose.material3.ExperimentalMaterial3Api
@@ -63,6 +65,7 @@ import kotlin.math.roundToInt
 @Composable
 fun ReadingScreen() { // navController: NavController
     var menuVisibility by remember { mutableFloatStateOf(1f) }
+    val interactionSource = remember { MutableInteractionSource() }
     NeureaTheme {
         Box(modifier = Modifier.fillMaxSize()){
             Column(
@@ -70,12 +73,14 @@ fun ReadingScreen() { // navController: NavController
                     .fillMaxSize()
                     .background(color = MaterialTheme.colorScheme.secondary)
                     .padding(top = 50.dp, start = 20.dp, end = 20.dp, bottom = 50.dp)
-                    .clickable(onClick = { menuVisibility = if (menuVisibility == 1f) 0f else 1f }
-                    )
+                    .clickable(interactionSource = interactionSource,indication = null){ menuVisibility = if (menuVisibility == 1f) 0f else 1f }
             ) {
                 Column(modifier = Modifier.fillMaxSize()){
-                    Text("«Автостопом по Галактике», стартовав в качестве радиопостановки на Би-би-си, имел грандиозный успех. Одноименный роман в 1984 году возглавил список английских бестселлеров, а сам Адамс стал самым молодым писателем, получившим награду «Золотая ручка», вручаемую за 1 млн. проданных книг.\u2028Телепостановка 1982 года упрочила успех серии книг про «Автостоп», а полнометражный фильм 2005 года при бюджете в \$50 млн. дважды «отбил» расходы на экранизацию и был номинирован на 7 премий.",
-                        textAlign = TextAlign.Justify, fontSize = 16.sp)
+                    SelectionContainer {
+                        Text("«Автостопом по Галактике», стартовав в качестве радиопостановки на Би-би-си, имел грандиозный успех. Одноименный роман в 1984 году возглавил список английских бестселлеров, а сам Адамс стал самым молодым писателем, получившим награду «Золотая ручка», вручаемую за 1 млн. проданных книг.\u2028Телепостановка 1982 года упрочила успех серии книг про «Автостоп», а полнометражный фильм 2005 года при бюджете в \$50 млн. дважды «отбил» расходы на экранизацию и был номинирован на 7 премий.",
+                            textAlign = TextAlign.Justify, fontSize = 16.sp)
+                    }
+
                 }
 
             }
@@ -92,9 +97,15 @@ fun ReadingScreen() { // navController: NavController
                         valueRange = 1f..307f,
                         colors = SliderDefaults.colors(thumbColor = MaterialTheme.colorScheme.primary, inactiveTickColor = MaterialTheme.colorScheme.onSecondary)
                     )
-                    Row(modifier = Modifier.height(30.dp).clip(RoundedCornerShape(30.dp)).background(MaterialTheme.colorScheme.surface).fillMaxWidth(),
+                    Row(modifier = Modifier
+                        .height(30.dp)
+                        .clip(RoundedCornerShape(30.dp))
+                        .background(MaterialTheme.colorScheme.surface)
+                        .fillMaxWidth(),
                         horizontalArrangement = Arrangement.SpaceBetween){
-                        IconButton(onClick = { if (sliderPosition > 1f) sliderPosition-=1f }, modifier = Modifier.width(90.dp).clip(RoundedCornerShape(20.dp))
+                        IconButton(onClick = { if (sliderPosition > 1f) sliderPosition-=1f }, modifier = Modifier
+                            .width(90.dp)
+                            .clip(RoundedCornerShape(20.dp))
                             ,
                                 colors = IconButtonDefaults.iconButtonColors(
                                 containerColor = MaterialTheme.colorScheme.primary)
@@ -104,7 +115,9 @@ fun ReadingScreen() { // navController: NavController
 
                         }
                         Text("${(sliderPosition).roundToInt()}/307", color = MaterialTheme.colorScheme.onSecondary, modifier = Modifier.align(Alignment.CenterVertically))
-                        IconButton(onClick = { if (sliderPosition < 307f) sliderPosition+=1f }, modifier = Modifier.width(90.dp).clip(RoundedCornerShape(20.dp)),
+                        IconButton(onClick = { if (sliderPosition < 307f) sliderPosition+=1f }, modifier = Modifier
+                            .width(90.dp)
+                            .clip(RoundedCornerShape(20.dp)),
                             colors = IconButtonDefaults.iconButtonColors(
                                 containerColor = MaterialTheme.colorScheme.primary
                             )

+ 99 - 0
Frontend/app/src/main/java/com/example/neurea/views/screens/SearchScreen.kt

@@ -0,0 +1,99 @@
+package com.example.neurea.views.screens
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.horizontalScroll
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.material3.TextField
+import androidx.compose.material3.TextFieldDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.input.PasswordVisualTransformation
+import androidx.compose.ui.text.input.VisualTransformation
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.example.neurea.R
+import com.example.neurea.views.ui.theme.NeureaTheme
+
+@Preview()
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun SearchScreen() { // navController: NavController
+    var email = remember { mutableStateOf("") }
+    var password = remember { mutableStateOf("") }
+    val maxLength = 20
+    val emailPattern = Regex("[^@ \\t\\r\\n]+@[^@ \\t\\r\\n]+\\.[^@ \\t\\r\\n]+")
+    var passwordVisibility: Boolean by remember { mutableStateOf(false) }
+
+    /**is-selected = uuid жанра если они не равны*/
+    NeureaTheme {
+        /**is-selected = uuid жанра если они не равны*/
+        Column(
+            modifier = Modifier
+                .fillMaxSize()
+                .background(color = MaterialTheme.colorScheme.secondary)
+        ) {
+            TextField(
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .padding(start = 20.dp, end = 20.dp, top = 45.dp, bottom = 25.dp)
+                    .clip(shape = RoundedCornerShape(54.dp))
+                ,
+                value = password.value,
+                colors = TextFieldDefaults.textFieldColors(
+                    containerColor = MaterialTheme.colorScheme.surface,
+                    focusedIndicatorColor = MaterialTheme.colorScheme.secondary,
+                    focusedTextColor = MaterialTheme.colorScheme.onPrimary,
+                    unfocusedTextColor = MaterialTheme.colorScheme.secondary,
+                    disabledIndicatorColor = Color.Transparent,
+                    unfocusedIndicatorColor = Color.Transparent,
+                    cursorColor = MaterialTheme.colorScheme.primary,
+                    disabledPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
+                    focusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
+                    unfocusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary
+                ),
+                visualTransformation = if (passwordVisibility) VisualTransformation.None else PasswordVisualTransformation(),
+                trailingIcon = {
+                    Icon(
+                        painter = painterResource(id = R.drawable.baseline_search_24),
+                        contentDescription = "",
+                        tint = MaterialTheme.colorScheme.primary
+                    )
+                },
+                onValueChange = {
+                    if (it.length <= maxLength) password.value = it
+                },
+                placeholder = { Text("Поиск") },
+                singleLine = true
+            )
+
+        }
+
+    }
+}