oleg 4 days ago
parent
commit
d9dacfaa41
39 changed files with 2039 additions and 71 deletions
  1. 5 2
      app/build.gradle.kts
  2. 1 1
      app/src/main/assets/yandex.html
  3. 17 0
      app/src/main/assets/yandex_concert.html
  4. 17 0
      app/src/main/assets/yandex_exhibition.html
  5. 17 0
      app/src/main/assets/yandex_rest.html
  6. 17 0
      app/src/main/assets/yandex_сinema.html
  7. 1 0
      app/src/main/java/com/example/lectionsupabase/model/Restaurants.kt
  8. 10 0
      app/src/main/java/com/example/lectionsupabase/model/r_like.kt
  9. 38 4
      app/src/main/java/com/example/lectionsupabase/navigation/Navigation.kt
  10. 1 1
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Benchs.kt
  11. 7 2
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Cinema.kt
  12. 7 2
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Concerts.kt
  13. 7 2
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Exhibition.kt
  14. 196 0
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Insert.kt
  15. 250 0
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/InsertBench.kt
  16. 272 0
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/InsertConcert.kt
  17. 273 0
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/InsertExhibition.kt
  18. 272 0
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/InsertMovie.kt
  19. 248 0
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/InsertRestaurant.kt
  20. 0 19
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Maps.kt
  21. 46 0
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Maps_cinema.kt
  22. 46 0
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Maps_concert.kt
  23. 46 0
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Maps_exhibition.kt
  24. 46 0
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Maps_rest.kt
  25. 9 6
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Panel.kt
  26. 8 2
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Restaurants.kt
  27. 7 5
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/auth.kt
  28. 4 4
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/reg.kt
  29. 8 5
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/slide1.kt
  30. 9 5
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/slide2.kt
  31. 10 6
      app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/slide3.kt
  32. 15 0
      app/src/main/res/drawable/add.xml
  33. 5 5
      app/src/main/res/drawable/bench.xml
  34. 23 0
      app/src/main/res/drawable/gr1.xml
  35. 20 0
      app/src/main/res/drawable/mestoaddsvg.xml
  36. 23 0
      app/src/main/res/drawable/pic11.xml
  37. 23 0
      app/src/main/res/drawable/pic22.xml
  38. 23 0
      app/src/main/res/drawable/pic33.xml
  39. 12 0
      app/src/main/res/drawable/plus.xml

+ 5 - 2
app/build.gradle.kts

@@ -51,7 +51,11 @@ android {
 }
 
 dependencies {
-
+    implementation("androidx.compose.ui:ui:1.4.0")
+    implementation("androidx.compose.ui:ui-tooling-preview:1.4.0")
+    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.0")
+    implementation("androidx.activity:activity-compose:1.6.0")
+    implementation("androidx.compose.material3:material3:1.0.0") //
     implementation(libs.androidx.core.ktx)
     implementation(libs.androidx.lifecycle.runtime.ktx)
     implementation(libs.androidx.activity.compose)
@@ -75,7 +79,6 @@ dependencies {
     debugImplementation(libs.androidx.ui.test.manifest)
     implementation("androidx.compose.material:material:1.7.5")
     implementation("androidx.navigation:navigation-compose:2.8.4")
-    implementation("androidx.compose.material3:material3:1.0.0")
     implementation("androidx.compose.ui:ui:1.0.0")
     implementation("androidx.compose.ui:ui-tooling:1.7.5")
 

+ 1 - 1
app/src/main/assets/yandex.html

@@ -13,6 +13,6 @@
     </style>
 </head>
 <body>
-<script type="text/javascript" charset="utf-8" async src="https://api-maps.yandex.ru/services/constructor/1.0/js/?um=constructor%3Ad7c3bebd6d360800ad39f122059db7431c5606f83a03b1c0243d81794879a240&amp;width=1200&amp;height=1300&amp;lang=ru_RU&amp;scroll=true"></script>
+<script type="text/javascript" charset="utf-8" async src="https://api-maps.yandex.ru/services/constructor/1.0/js/?um=constructor%3Ad7c3bebd6d360800ad39f122059db7431c5606f83a03b1c0243d81794879a240&amp;width=1200&amp;height=2300&amp;lang=ru_RU&amp;scroll=true"></script>
 </body>
 </html>

+ 17 - 0
app/src/main/assets/yandex_concert.html

@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="ru">
+<head>
+    <meta charset="utf-8">
+    <style>
+        html, body {
+            margin: 0;
+            padding: 0;
+            width: 100%;
+            height: 100%
+        }
+
+    </style>
+</head>
+<body>
+<script type="text/javascript" charset="utf-8" async src="https://api-maps.yandex.ru/services/constructor/1.0/js/?um=constructor%3A9ada20c1bd6ce27b2657efc5b26fa80503c1a847bce3cb5720ec28dce2cbdf35&amp;width=1320&amp;height=2920&amp;lang=ru_RU&amp;scroll=true"></script></body>
+</html>

+ 17 - 0
app/src/main/assets/yandex_exhibition.html

@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="ru">
+<head>
+    <meta charset="utf-8">
+    <style>
+        html, body {
+            margin: 0;
+            padding: 0;
+            width: 100%;
+            height: 100%
+        }
+
+    </style>
+</head>
+<body>
+<script type="text/javascript" charset="utf-8" async src="https://api-maps.yandex.ru/services/constructor/1.0/js/?um=constructor%3Aba16eb6dc220a894d67bc4bdc0017ac46fc3d1ff5ffa6134b5e9cd6ecfb9ea0f&amp;width=1320&amp;height=2896&amp;lang=ru_RU&amp;scroll=true"></script></body>
+</html>

+ 17 - 0
app/src/main/assets/yandex_rest.html

@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="ru">
+<head>
+    <meta charset="utf-8">
+    <style>
+        html, body {
+            margin: 0;
+            padding: 0;
+            width: 100%;
+            height: 100%
+        }
+
+    </style>
+</head>
+<body>
+<script type="text/javascript" charset="utf-8" async src="https://api-maps.yandex.ru/services/constructor/1.0/js/?um=constructor%3Abf26de1423a0db22013c13e8c61336218d17231adc0324b34290cbfbcf499c60&amp;width=1320&amp;height=2920&amp;lang=ru_RU&amp;scroll=true"></script></body>
+</html>

+ 17 - 0
app/src/main/assets/yandex_сinema.html

@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="ru">
+<head>
+    <meta charset="utf-8">
+    <style>
+        html, body {
+            margin: 0;
+            padding: 0;
+            width: 100%;
+            height: 100%
+        }
+
+    </style>
+</head>
+<body>
+<script type="text/javascript" charset="utf-8" async src="https://api-maps.yandex.ru/services/constructor/1.0/js/?um=constructor%3A1270e81133d9c13d425ecf420531bbbe3472186fb493c9d362c873086c433112&amp;width=1320&amp;height=2911&amp;lang=ru_RU&amp;scroll=true"></script></body>
+</html>

+ 1 - 0
app/src/main/java/com/example/lectionsupabase/model/Restaurants.kt

@@ -9,4 +9,5 @@ data class Restaurants(
     val location: String,
     val cuisin: String,
     val picture: String?
+
 )

+ 10 - 0
app/src/main/java/com/example/lectionsupabase/model/r_like.kt

@@ -0,0 +1,10 @@
+package com.example.lectionsupabase.model
+
+import kotlinx.serialization.Serializable
+
+@Serializable
+data class r_like(
+    val id: Int,
+    val id_rest: Int,
+    val id_user: Int
+)

+ 38 - 4
app/src/main/java/com/example/lectionsupabase/navigation/Navigation.kt

@@ -11,8 +11,18 @@ import com.example.lectionsupabase.view.mainActivity.components.Cinema
 import com.example.lectionsupabase.view.mainActivity.components.Concerts
 import com.example.lectionsupabase.view.mainActivity.components.DealersList
 import com.example.lectionsupabase.view.mainActivity.components.Exhibition
+import com.example.lectionsupabase.view.mainActivity.components.Insert
+import com.example.lectionsupabase.view.mainActivity.components.InsertBench
 import com.example.lectionsupabase.view.mainActivity.components.InsertCar
+import com.example.lectionsupabase.view.mainActivity.components.InsertConcert
+import com.example.lectionsupabase.view.mainActivity.components.InsertExhibition
+import com.example.lectionsupabase.view.mainActivity.components.InsertMovie
+import com.example.lectionsupabase.view.mainActivity.components.InsertRestaurant
 import com.example.lectionsupabase.view.mainActivity.components.Maps
+import com.example.lectionsupabase.view.mainActivity.components.Maps_cinema
+import com.example.lectionsupabase.view.mainActivity.components.Maps_concert
+import com.example.lectionsupabase.view.mainActivity.components.Maps_exhibition
+import com.example.lectionsupabase.view.mainActivity.components.Maps_rest
 import com.example.lectionsupabase.view.mainActivity.components.Panel
 import com.example.lectionsupabase.view.mainActivity.components.Restaurants
 import com.example.lectionsupabase.view.mainActivity.components.reg
@@ -64,14 +74,38 @@ fun Navigation() {
             Benchs(navController)
         }
 
-        composable("Maps"){
-            Maps(navController)
+        composable("Maps_rest"){
+            Maps_rest(navController)
+        }
+        composable("Maps_exhibition"){
+            Maps_exhibition(navController)
+        }
+        composable("Maps_cinema"){
+            Maps_cinema(navController)
+        }
+        composable("Maps_concert"){
+            Maps_concert(navController)
         }
         composable("DealersList"){
             DealersList(navController)
         }
-        composable("InsertCar"){
-            InsertCar(navController)
+        composable("InsertRestaurant"){
+            InsertRestaurant(navController)
+        }
+        composable("InsertConcert"){
+            InsertConcert(navController)
+        }
+        composable("InsertMovie"){
+            InsertMovie(navController)
+        }
+        composable("InsertExhibition"){
+            InsertExhibition(navController)
+        }
+        composable("InsertBench"){
+            InsertBench(navController)
+        }
+        composable("Insert"){
+            Insert(navController)
         }
 
     }

+ 1 - 1
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Benchs.kt

@@ -150,7 +150,7 @@ fun Benchs(navHost: NavHostController) {
             LazyColumn(
                 modifier = Modifier
                     .weight(1f),
-                verticalArrangement = Arrangement.spacedBy(10.dp)
+                verticalArrangement = Arrangement.spacedBy(6.dp)
             ) {
                 items(benchs, key = { bench -> bench.id }) { bench ->
                     Card(

+ 7 - 2
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Cinema.kt

@@ -2,6 +2,7 @@ package com.example.lectionsupabase.view.mainActivity.components
 
 import androidx.compose.foundation.BorderStroke
 import androidx.compose.foundation.Image
+import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
@@ -217,8 +218,12 @@ fun Cinema(navHost: NavHostController) {
                                 style = MaterialTheme.typography.titleMedium,
                                 fontWeight = FontWeight.SemiBold,
                                 fontSize = 14.sp,
-                                modifier = Modifier.padding(horizontal = 10.dp)
-                                    .padding(start = 3.dp),
+                                modifier = Modifier
+                                    .padding(horizontal = 10.dp)
+                                    .padding(start = 3.dp)
+                                    .clickable {
+                                        navHost.navigate("Maps_cinema")
+                                    },
                                 fontFamily = montserratMedium,
                                 color = Color(0xFF72C3F1)
                             )

+ 7 - 2
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Concerts.kt

@@ -2,6 +2,7 @@ package com.example.lectionsupabase.view.mainActivity.components
 
 import androidx.compose.foundation.BorderStroke
 import androidx.compose.foundation.Image
+import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
@@ -218,8 +219,12 @@ fun Concerts(navHost: NavHostController) {
                                 style = MaterialTheme.typography.titleMedium,
                                 fontWeight = FontWeight.SemiBold,
                                 fontSize = 14.sp,
-                                modifier = Modifier.padding(horizontal = 10.dp)
-                                    .padding(start = 3.dp),
+                                modifier = Modifier
+                                    .padding(horizontal = 10.dp)
+                                    .padding(start = 3.dp)
+                                    .clickable {
+                                        navHost.navigate("Maps_concert") // Замените "MapScreen" на ваш маршрут
+                                    },
                                 fontFamily = montserratMedium,
                                 color = Color(0xFF72C3F1)
                             )

+ 7 - 2
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Exhibition.kt

@@ -2,6 +2,7 @@ package com.example.lectionsupabase.view.mainActivity.components
 
 import androidx.compose.foundation.BorderStroke
 import androidx.compose.foundation.Image
+import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
@@ -217,8 +218,12 @@ fun Exhibition(navHost: NavHostController) {
                                 style = MaterialTheme.typography.titleMedium,
                                 fontWeight = FontWeight.SemiBold,
                                 fontSize = 14.sp,
-                                modifier = Modifier.padding(horizontal = 10.dp)
-                                    .padding(start = 3.dp),
+                                modifier = Modifier
+                                    .padding(horizontal = 10.dp)
+                                    .padding(start = 3.dp)
+                                    .clickable {
+                                        navHost.navigate("Maps_exhibition")
+                                    },
                                 fontFamily = montserratMedium,
                                 color = Color(0xFF72C3F1)
                             )

+ 196 - 0
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Insert.kt

@@ -0,0 +1,196 @@
+package com.example.lectionsupabase.view.mainActivity.components
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+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.shape.RoundedCornerShape
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ArrowBack
+import androidx.compose.material.icons.filled.ArrowDropDown
+import androidx.compose.material.icons.filled.ArrowForward
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.material3.DropdownMenu
+import androidx.compose.material3.DropdownMenuItem
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.ExposedDropdownMenuBox
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.RadioButton
+import androidx.compose.material3.Slider
+import androidx.compose.material3.SliderDefaults
+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.layout.ContentScale
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import androidx.navigation.NavHostController
+import com.example.lectionsupabase.R
+
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun Insert(navHost: NavHostController) {
+    val options = listOf("Ресторан", "Концерт", "Выставка", "Фильм", "Лавочка")
+    val selectedIndex = remember { mutableStateOf(0) } // Индекс выбранного элемента
+    val montserratRegular = FontFamily(Font(R.font.mon_regular))
+    val montserratSemiBold = FontFamily(Font(R.font.mon_semibold))
+    val montserratMedium = FontFamily(Font(R.font.mon_medium))
+
+    Column(
+        modifier = Modifier
+            .fillMaxSize()
+            .padding(16.dp)
+            .padding(top = 20.dp),
+    ) {
+        Row(
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 6.dp),
+            verticalAlignment = Alignment.CenterVertically
+        ) {
+            // Стрелка влево
+            IconButton(
+                onClick = { navHost.navigate("Restaurants") },
+            ) {
+                Icon(
+                    imageVector = Icons.Default.ArrowBack,
+                    contentDescription = "Назад",
+                    tint = Color.Black
+                )
+            }
+
+            Text(
+                text = "  Добавьте новое место",
+                style = MaterialTheme.typography.headlineMedium,
+                fontWeight = FontWeight.Bold,
+                color = MaterialTheme.colorScheme.onBackground,
+                textAlign = TextAlign.Center,
+                fontSize = 20.sp,
+                fontFamily = montserratSemiBold,
+                modifier = Modifier.weight(1f)
+            )
+
+            // Стрелка с отступом
+            IconButton(
+                onClick = { navHost.navigate("Insert") },
+                modifier = Modifier.padding(start = 8.dp)
+            ) {
+                Icon(
+                    imageVector = Icons.Default.ArrowForward,
+                    contentDescription = "Перейти к киноафише",
+                    tint = Color.White
+                )
+            }
+        }
+        Spacer(modifier = Modifier.height(54.dp))
+        // Текст над изображением
+        Text(
+            text = "Выберите на слайдере раздел места, \n которое вы хотите добавить",
+            style = MaterialTheme.typography.bodyMedium,
+            fontSize = 14.sp,
+            fontFamily = montserratRegular,
+            color = Color.Gray,
+            textAlign = TextAlign.Center,
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 16.dp) // Отступы сверху и снизу
+        )
+        Spacer(modifier = Modifier.height(24.dp))
+        // Картинка по центру
+        Image(
+            painter = painterResource(id = R.drawable.add), // Замените на свой ресурс
+            contentDescription = "Изображение места",
+            modifier = Modifier
+                .size(220.dp)
+                .clip(RoundedCornerShape(16.dp))
+                .background(MaterialTheme.colorScheme.surface)
+                .align(Alignment.CenterHorizontally), // Центрируем изображение
+            contentScale = ContentScale.Crop
+        )
+
+        Spacer(modifier = Modifier.height(54.dp))
+
+        Box(
+            modifier = Modifier.fillMaxWidth(), // Занимает всю ширину
+            contentAlignment = Alignment.Center // Центрируем содержимое
+        ) {
+            Slider(
+                value = selectedIndex.value.toFloat(),
+                onValueChange = { selectedIndex.value = it.toInt() },
+                valueRange = 0f..(options.size - 1).toFloat(),
+                steps = options.size - 2,
+                modifier = Modifier.width(230.dp), // Устанавливаем ширину слайдера
+                colors = SliderDefaults.colors(
+                    thumbColor = Color(0xFFA3D5F1), // Цвет "пальца" слайдера
+                    activeTrackColor = Color(0xFFA3D5F1), // Цвет активной части слайдера
+                    inactiveTrackColor = Color(0xFFB0BEC5) // Цвет неактивной части слайдера
+                )
+
+            )
+
+        }
+        Text(
+            text = "Выбранное место: ${options[selectedIndex.value]}",
+            modifier = Modifier
+                .padding(vertical = 6.dp) // Отступы сверху и снизу
+                .padding(start = 70.dp), // Отступ слева
+            fontFamily = montserratRegular,
+            fontSize = 14.sp
+        )
+        // Отображение выбранного типа места
+
+
+        Spacer(modifier = Modifier.height(64.dp))
+
+        // Кнопка перехода к добавлению
+        Button(
+            onClick = {
+                when (options[selectedIndex.value]) {
+                    "Ресторан" -> navHost.navigate("InsertRestaurant")
+                    "Концерт" -> navHost.navigate("InsertConcert")
+                    "Выставка" -> navHost.navigate("InsertExhibition")
+                    "Фильм" -> navHost.navigate("InsertMovie")
+                    "Лавочка" -> navHost.navigate("InsertBench")
+                }
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .height(56.dp),
+            shape = RoundedCornerShape(8.dp),
+            colors = ButtonDefaults.buttonColors(
+                containerColor = Color(0XFFA3D5F1), // Голубой фон
+                contentColor = Color.White
+            )
+        ) {
+            Text("Перейти к добавлению", fontSize = 15.sp, fontFamily = montserratMedium)
+        }
+    }
+}

+ 250 - 0
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/InsertBench.kt

@@ -0,0 +1,250 @@
+package com.example.lectionsupabase.view.mainActivity.components
+
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import androidx.navigation.NavHostController
+import com.example.lectionsupabase.domain.utils.Constants
+import android.util.Log
+import android.widget.Toast
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+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.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ArrowBack
+import androidx.compose.material.icons.filled.ArrowForward
+import androidx.compose.material3.Button
+import androidx.compose.material3.Card
+import androidx.compose.material3.CardDefaults
+import androidx.compose.material3.CircularProgressIndicator
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material3.Text
+import androidx.compose.material3.TextField
+import androidx.compose.material.TextFieldDefaults
+import androidx.compose.runtime.LaunchedEffect
+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.layout.ContentScale
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import coil.compose.AsyncImagePainter
+import coil.compose.rememberAsyncImagePainter
+import coil.compose.rememberImagePainter
+import coil.request.ImageRequest
+import coil.size.Size
+import com.example.lectionsupabase.R
+import com.example.lectionsupabase.model.Benchs
+import com.example.lectionsupabase.model.Cars
+import com.example.lectionsupabase.model.Concerts
+import com.example.lectionsupabase.model.Dealers
+import com.example.lectionsupabase.model.Restaurants
+import io.github.jan.supabase.postgrest.from
+import io.github.jan.supabase.storage.BucketItem
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun InsertBench(navHost: NavHostController) {
+    val context = LocalContext.current
+    val supabase = Constants.supabase
+    val scope = rememberCoroutineScope()
+
+    // Поля для ввода данных о лавочках
+    val district = remember { mutableStateOf("") }
+    val coordinates = remember { mutableStateOf("") }
+    val state = remember { mutableStateOf("") }
+    val pictureUrl = remember { mutableStateOf("") }
+    val showSuccessMessage = remember { mutableStateOf(false) } // Для вывода сообщения
+    val montserratRegular = FontFamily(Font(R.font.mon_regular))
+    val montserratSemiBold = FontFamily(Font(R.font.mon_semibold))
+
+    Column(
+        modifier = Modifier
+            .fillMaxSize()
+            .padding(16.dp)
+    ) {
+        Spacer(modifier = Modifier.height(24.dp))
+        Box(
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 16.dp),
+            contentAlignment = Alignment.Center // Центрируем содержимое
+        ) {
+            Text(
+                text = "Добавить лавочку",
+                style = MaterialTheme.typography.headlineMedium,
+                fontWeight = FontWeight.Bold,
+                color = MaterialTheme.colorScheme.onBackground,
+                fontSize = 20.sp,
+                fontFamily = montserratSemiBold,
+            )
+        }
+
+        Spacer(modifier = Modifier.height(8.dp))
+
+        // Поля ввода
+        OutlinedTextField(
+            value = district.value,
+            onValueChange = { district.value = it },
+            label = {
+                Text(
+                    text = "Район",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = coordinates.value,
+            onValueChange = { coordinates.value = it },
+            label = {
+                Text(
+                    text = "Координаты",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = state.value,
+            onValueChange = { state.value = it },
+            label = {
+                Text(
+                    text = "Состояние",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = pictureUrl.value,
+            onValueChange = { pictureUrl.value = it },
+            label = {
+                Text(
+                    text = "Ссылка на изображение",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        Spacer(modifier = Modifier.height(24.dp))
+
+        // Кнопка добавления
+        Button(
+            onClick = {
+                scope.launch {
+                    // Получаем количество записей и добавляем новую лавочку
+                    val count = supabase.from("Benchs").select().decodeList<Benchs>().size
+                    val newBench = Benchs(
+                        id = count + 1, // Предполагаем, что id - это автоинкрементное поле
+                        district = district.value,
+                        coordinates = coordinates.value,
+                        state = state.value,
+                        picture = pictureUrl.value.ifBlank { null }
+                    )
+
+                    // Встав // Вставляем новую лавочку в базу данных
+                    supabase.from("Benchs").insert(newBench)
+
+                    Toast.makeText(context, "Лавочка добавлена", Toast.LENGTH_LONG).show()
+                    showSuccessMessage.value = true
+
+                    // Возврат на экран лавочек
+                    navHost.navigate("Benchs") {
+                        popUpTo("Benchs") { inclusive = true }
+                    }
+                }
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .height(56.dp),
+            shape = RoundedCornerShape(8.dp),
+            colors = ButtonDefaults.buttonColors(
+                containerColor = Color(0XFFA3D5F1),
+                contentColor = Color.White
+            )
+        ) {
+            Text("Добавить лавочку", fontSize = 16.sp)
+        }
+
+        // Сообщение об успешном добавлении
+        if (showSuccessMessage.value) {
+            Text(
+                text = "Лавочка успешно добавлена!",
+                color = Color.Black,
+                modifier = Modifier.padding(top = 8.dp)
+            )
+        }
+    }
+}

+ 272 - 0
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/InsertConcert.kt

@@ -0,0 +1,272 @@
+package com.example.lectionsupabase.view.mainActivity.components
+
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import androidx.navigation.NavHostController
+import com.example.lectionsupabase.domain.utils.Constants
+import android.util.Log
+import android.widget.Toast
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+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.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ArrowBack
+import androidx.compose.material.icons.filled.ArrowForward
+import androidx.compose.material3.Button
+import androidx.compose.material3.Card
+import androidx.compose.material3.CardDefaults
+import androidx.compose.material3.CircularProgressIndicator
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material3.Text
+import androidx.compose.material3.TextField
+import androidx.compose.material.TextFieldDefaults
+import androidx.compose.runtime.LaunchedEffect
+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.layout.ContentScale
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import coil.compose.AsyncImagePainter
+import coil.compose.rememberAsyncImagePainter
+import coil.compose.rememberImagePainter
+import coil.request.ImageRequest
+import coil.size.Size
+import com.example.lectionsupabase.R
+import com.example.lectionsupabase.model.Cars
+import com.example.lectionsupabase.model.Concerts
+import com.example.lectionsupabase.model.Dealers
+import com.example.lectionsupabase.model.Restaurants
+import io.github.jan.supabase.postgrest.from
+import io.github.jan.supabase.storage.BucketItem
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun InsertConcert(navHost: NavHostController) {
+    val context = LocalContext.current
+    val supabase = Constants.supabase
+    val scope = rememberCoroutineScope()
+
+    // Поля для ввода данных о концерте
+    val singer = remember { mutableStateOf("") }
+    val genre = remember { mutableStateOf("") }
+    val price = remember { mutableStateOf("") }
+    val date = remember { mutableStateOf("") }
+    val pictureUrl = remember { mutableStateOf("") }
+    val showSuccessMessage = remember { mutableStateOf(false) } // Для вывода сообщения
+    val montserratRegular = FontFamily(Font(R.font.mon_regular))
+    val montserratSemiBold = FontFamily(Font(R.font.mon_semibold))
+
+    Column(
+        modifier = Modifier
+            .fillMaxSize()
+            .padding(16.dp)
+    ) {
+        Spacer(modifier = Modifier.height(24.dp))
+        Box(
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 16.dp),
+            contentAlignment = Alignment.Center // Центрируем содержимое
+        ) {
+            Text(
+                text = "Добавить концерт",
+                style = MaterialTheme.typography.headlineMedium,
+                fontWeight = FontWeight.Bold,
+                color = MaterialTheme.colorScheme.onBackground,
+                fontSize = 20.sp,
+                fontFamily = montserratSemiBold,
+            )
+        }
+
+        Spacer(modifier = Modifier.height(8.dp))
+
+        // Поля ввода
+        OutlinedTextField(
+            value = singer.value,
+            onValueChange = { singer.value = it },
+            label = {
+                Text(
+                    text = "Исполнитель",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = genre.value,
+            onValueChange = { genre.value = it },
+            label = {
+                Text(
+                    text = "Жанр",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = price.value,
+            onValueChange = { price.value = it },
+            label = {
+                Text(
+                    text = "Цена",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = date.value,
+            onValueChange = { date.value = it },
+            label = {
+                Text(
+                    text = "Дата",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = pictureUrl.value,
+            onValueChange = { pictureUrl.value = it },
+            label = {
+                Text(
+                    text = "Ссылка на изображение",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color .Gray
+            )
+        )
+
+        Spacer(modifier = Modifier.height(24.dp))
+
+        // Кнопка добавления
+        Button(
+            onClick = {
+                scope.launch {
+                    // Получаем количество записей и добавляем новый концерт
+                    val count = supabase.from("Concerts").select().decodeList<Concerts>().size
+                    val newConcert = Concerts(
+                        id = count + 1, // Предполагаем, что id - это автоинкрементное поле
+                        singer = singer.value,
+                        genre = genre.value,
+                        price = price.value,
+                        date = date.value,
+                        picture = pictureUrl.value.ifBlank { null }
+                    )
+
+                    // Вставляем новый концерт в базу данных
+                    supabase.from("Concerts").insert(newConcert)
+
+                    Toast.makeText(context, "Концерт добавлен", Toast.LENGTH_LONG).show()
+                    showSuccessMessage.value = true
+
+                    // Возврат на экран концертов
+                    navHost.navigate("Concerts") {
+                        popUpTo("Concerts") { inclusive = true }
+                    }
+                }
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .height(56.dp),
+            shape = RoundedCornerShape(8.dp),
+            colors = ButtonDefaults.buttonColors(
+                containerColor = Color(0XFFA3D5F1),
+                contentColor = Color.White
+            )
+        ) {
+            Text("Добавить концерт", fontSize = 16.sp)
+        }
+
+        // Сообщение об успешном добавлении
+        if (showSuccessMessage.value) {
+            Text(
+                text = "Концерт успешно добавлен!",
+                color = Color.Black,
+                modifier = Modifier.padding(top = 8.dp)
+            )
+        }
+    }
+}

+ 273 - 0
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/InsertExhibition.kt

@@ -0,0 +1,273 @@
+package com.example.lectionsupabase.view.mainActivity.components
+
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import androidx.navigation.NavHostController
+import com.example.lectionsupabase.domain.utils.Constants
+import android.util.Log
+import android.widget.Toast
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+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.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ArrowBack
+import androidx.compose.material.icons.filled.ArrowForward
+import androidx.compose.material3.Button
+import androidx.compose.material3.Card
+import androidx.compose.material3.CardDefaults
+import androidx.compose.material3.CircularProgressIndicator
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material3.Text
+import androidx.compose.material3.TextField
+import androidx.compose.material.TextFieldDefaults
+import androidx.compose.runtime.LaunchedEffect
+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.layout.ContentScale
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import coil.compose.AsyncImagePainter
+import coil.compose.rememberAsyncImagePainter
+import coil.compose.rememberImagePainter
+import coil.request.ImageRequest
+import coil.size.Size
+import com.example.lectionsupabase.R
+import com.example.lectionsupabase.model.Cars
+import com.example.lectionsupabase.model.Concerts
+import com.example.lectionsupabase.model.Dealers
+import com.example.lectionsupabase.model.Exhibition
+import com.example.lectionsupabase.model.Restaurants
+import io.github.jan.supabase.postgrest.from
+import io.github.jan.supabase.storage.BucketItem
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun InsertExhibition(navHost: NavHostController) {
+    val context = LocalContext.current
+    val supabase = Constants.supabase
+    val scope = rememberCoroutineScope()
+
+    // Поля для ввода данных о выставке
+    val name = remember { mutableStateOf("") }
+    val location = remember { mutableStateOf("") }
+    val price = remember { mutableStateOf("") }
+    val date = remember { mutableStateOf("") }
+    val pictureUrl = remember { mutableStateOf("") }
+    val showSuccessMessage = remember { mutableStateOf(false) } // Для вывода сообщения
+    val montserratRegular = FontFamily(Font(R.font.mon_regular))
+    val montserratSemiBold = FontFamily(Font(R.font.mon_semibold))
+
+    Column(
+        modifier = Modifier
+            .fillMaxSize()
+            .padding(16.dp)
+    ) {
+        Spacer(modifier = Modifier.height(24.dp))
+        Box(
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 16.dp),
+            contentAlignment = Alignment.Center // Центрируем содержимое
+        ) {
+            Text(
+                text = "Добавить выставку",
+                style = MaterialTheme.typography.headlineMedium,
+                fontWeight = FontWeight.Bold,
+                color = MaterialTheme.colorScheme.onBackground,
+                fontSize = 20.sp,
+                fontFamily = montserratSemiBold,
+            )
+        }
+
+        Spacer(modifier = Modifier.height(8.dp))
+
+        // Поля ввода
+        OutlinedTextField(
+            value = name.value,
+            onValueChange = { name.value = it },
+            label = {
+                Text(
+                    text = "Название выставки",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = location.value,
+            onValueChange = { location.value = it },
+            label = {
+                Text(
+                    text = "Место проведения",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = price.value,
+            onValueChange = { price.value = it },
+            label = {
+                Text(
+                    text = "Цена",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = date.value,
+            onValueChange = { date.value = it },
+            label = {
+                Text(
+                    text = "Дата проведения",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = pictureUrl.value,
+            onValueChange = { pictureUrl.value = it },
+            label = {
+                Text(
+                    text = "Ссылка на изображение",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        Spacer(modifier = Modifier.height(24.dp))
+
+        // Кнопка добавления
+        Button(
+            onClick = {
+                scope.launch {
+                    // Получаем количество записей и добавляем новую выставку
+                    val count = supabase.from("Exhibition").select().decodeList<Exhibition>().size
+                    val newExhibition = Exhibition(
+                        id = count + 1, // Предполагаем, что id - это автоинкрементное поле
+                        name = name.value,
+                        location = location.value,
+                        price = price.value,
+                        date = date.value,
+                        picture = pictureUrl.value.ifBlank { null }
+                    )
+
+                    // Вставляем новую выставку в базу данных
+                    supabase.from("Exhibition").insert(newExhibition)
+
+                    Toast.makeText(context, "Выставка добавлена", Toast.LENGTH_LONG).show()
+                    showSuccessMessage.value = true
+
+                    // Возврат на экран выставок
+                    navHost.navigate("Exhibition") {
+                        popUpTo("Exhibition") { inclusive = true }
+                    }
+                }
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .height(56.dp),
+            shape = RoundedCornerShape(8.dp),
+            colors = ButtonDefaults.buttonColors(
+                containerColor = Color(0XFFA3D5F1),
+                contentColor = Color.White
+            )
+        ) {
+            Text("Добавить выставку", fontSize = 16.sp)
+        }
+
+        // Сообщение об успешном добавлении
+        if (showSuccessMessage.value) {
+            Text(
+                text = "Выставка успешно добавлена!",
+                color = Color.Black,
+                modifier = Modifier.padding(top = 8.dp)
+            )
+        }
+    }
+}

+ 272 - 0
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/InsertMovie.kt

@@ -0,0 +1,272 @@
+package com.example.lectionsupabase.view.mainActivity.components
+
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import androidx.navigation.NavHostController
+import com.example.lectionsupabase.domain.utils.Constants
+import android.util.Log
+import android.widget.Toast
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+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.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ArrowBack
+import androidx.compose.material.icons.filled.ArrowForward
+import androidx.compose.material3.Button
+import androidx.compose.material3.Card
+import androidx.compose.material3.CardDefaults
+import androidx.compose.material3.CircularProgressIndicator
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material3.Text
+import androidx.compose.material3.TextField
+import androidx.compose.material.TextFieldDefaults
+import androidx.compose.runtime.LaunchedEffect
+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.layout.ContentScale
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import coil.compose.AsyncImagePainter
+import coil.compose.rememberAsyncImagePainter
+import coil.compose.rememberImagePainter
+import coil.request.ImageRequest
+import coil.size.Size
+import com.example.lectionsupabase.R
+import com.example.lectionsupabase.model.Cars
+import com.example.lectionsupabase.model.Dealers
+import com.example.lectionsupabase.model.Movie
+import com.example.lectionsupabase.model.Restaurants
+import io.github.jan.supabase.postgrest.from
+import io.github.jan.supabase.storage.BucketItem
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun InsertMovie(navHost: NavHostController) {
+    val context = LocalContext.current
+    val supabase = Constants.supabase
+    val scope = rememberCoroutineScope()
+
+    // Поля для ввода данных о фильме
+    val name = remember { mutableStateOf("") }
+    val genre = remember { mutableStateOf("") }
+    val price = remember { mutableStateOf("") }
+    val date = remember { mutableStateOf("") }
+    val pictureUrl = remember { mutableStateOf("") }
+    val showSuccessMessage = remember { mutableStateOf(false) } // Для вывода сообщения
+    val montserratRegular = FontFamily(Font(R.font.mon_regular))
+    val montserratSemiBold = FontFamily(Font(R.font.mon_semibold))
+
+    Column(
+        modifier = Modifier
+            .fillMaxSize()
+            .padding(16.dp)
+    ) {
+        Spacer(modifier = Modifier.height(24.dp))
+        Box(
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 16.dp),
+            contentAlignment = Alignment.Center // Центрируем содержимое
+        ) {
+            Text(
+                text = "Добавить фильм",
+                style = MaterialTheme.typography.headlineMedium,
+                fontWeight = FontWeight.Bold,
+                color = MaterialTheme.colorScheme.onBackground,
+                fontSize = 20.sp,
+                fontFamily = montserratSemiBold,
+            )
+        }
+
+        Spacer(modifier = Modifier.height(8.dp))
+
+        // Поля ввода
+        OutlinedTextField(
+            value = name.value,
+            onValueChange = { name.value = it },
+            label = {
+                Text(
+                    text = "Название фильма",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = genre.value,
+            onValueChange = { genre.value = it },
+            label = {
+                Text(
+                    text = "Жанр",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = price.value,
+            onValueChange = { price.value = it },
+            label = {
+                Text(
+                    text = "Цена",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = date.value,
+            onValueChange = { date.value = it },
+            label = {
+                Text(
+                    text = "Дата выхода",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = pictureUrl.value,
+            onValueChange = { pictureUrl.value = it },
+            label = {
+                Text(
+                    text = "Ссылка на изображение",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        Spacer(modifier = Modifier.height(24.dp))
+
+        // Кнопка добавления
+        Button(
+            onClick = {
+                scope.launch {
+                    // Получаем количество записей и добавляем новый фильм
+                    val count = supabase.from("Movie").select().decodeList<Movie>().size
+                    val newMovie = Movie(
+                        id = count + 1, // Предполагаем, что id - это автоинкрементное поле
+                        name = name.value,
+                        genre = genre.value,
+                        price = price.value,
+                        date = date.value,
+                        picture = pictureUrl.value.ifBlank { null }
+                    )
+
+                    // Вставляем новый фильм в базу данных
+                    supabase.from("Movie").insert(newMovie)
+
+                    Toast.makeText(context, "Фильм добавлен", Toast.LENGTH_LONG).show()
+                    showSuccessMessage.value = true
+
+                    // Возврат на экран фильмов
+                    navHost.navigate("Cinema") {
+                        popUpTo("Cinema") { inclusive = true }
+                    }
+                }
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .height(56.dp),
+            shape = RoundedCornerShape(8.dp),
+            colors = ButtonDefaults.buttonColors(
+                containerColor = Color(0XFFA3D5F1),
+                contentColor = Color.White
+            )
+        ) {
+            Text("Добавить фильм", fontSize = 16.sp)
+        }
+
+        // Сообщение об успешном добавлении
+        if (showSuccessMessage.value) {
+            Text(
+                text = "Фильм успешно добавлен!",
+                color = Color.Black,
+                modifier = Modifier.padding(top = 8.dp)
+            )
+        }
+    }
+}

+ 248 - 0
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/InsertRestaurant.kt

@@ -0,0 +1,248 @@
+package com.example.lectionsupabase.view.mainActivity.components
+
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import androidx.navigation.NavHostController
+import com.example.lectionsupabase.domain.utils.Constants
+import android.util.Log
+import android.widget.Toast
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+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.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ArrowBack
+import androidx.compose.material.icons.filled.ArrowForward
+import androidx.compose.material3.Button
+import androidx.compose.material3.Card
+import androidx.compose.material3.CardDefaults
+import androidx.compose.material3.CircularProgressIndicator
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material3.Text
+import androidx.compose.material3.TextField
+import androidx.compose.material.TextFieldDefaults
+import androidx.compose.runtime.LaunchedEffect
+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.layout.ContentScale
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import coil.compose.AsyncImagePainter
+import coil.compose.rememberAsyncImagePainter
+import coil.compose.rememberImagePainter
+import coil.request.ImageRequest
+import coil.size.Size
+import com.example.lectionsupabase.R
+import com.example.lectionsupabase.model.Cars
+import com.example.lectionsupabase.model.Dealers
+import com.example.lectionsupabase.model.Restaurants
+import io.github.jan.supabase.postgrest.from
+import io.github.jan.supabase.storage.BucketItem
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun InsertRestaurant(navHost: NavHostController) {
+    val context = LocalContext.current
+    val supabase = Constants.supabase
+    val scope = rememberCoroutineScope()
+
+    // Поля для ввода данных о ресторане
+    val name = remember { mutableStateOf("") }
+    val location = remember { mutableStateOf("") }
+    val cuisin = remember { mutableStateOf("") }
+    val pictureUrl = remember { mutableStateOf("") }
+    val showSuccessMessage = remember { mutableStateOf(false) } // Для вывода сообщения
+    val montserratRegular = FontFamily(Font(R.font.mon_regular))
+    val montserratSemiBold = FontFamily(Font(R.font.mon_semibold))
+
+    Column(
+        modifier = Modifier
+            .fillMaxSize()
+            .padding(16.dp)
+    ) {
+        Spacer(modifier = Modifier.height(24.dp))
+        Box(
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 16.dp),
+            contentAlignment = Alignment.Center // Центрируем содержимое
+        ) {
+            Text(
+                text = "Добавить ресторан",
+                style = MaterialTheme.typography.headlineMedium,
+                fontWeight = FontWeight.Bold,
+                color = MaterialTheme.colorScheme.onBackground,
+                fontSize = 20.sp,
+                fontFamily = montserratSemiBold,
+            )
+        }
+
+        Spacer(modifier = Modifier.height(8.dp))
+
+        // Поля ввода
+        OutlinedTextField(
+            value = name.value,
+            onValueChange = { name.value = it },
+            label = {
+                Text(
+                    text = "Название ресторана",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = location.value,
+            onValueChange = { location.value = it },
+            label = {
+                Text(
+                    text = "Адрес",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = cuisin.value,
+            onValueChange = { cuisin.value = it },
+            label = {
+                Text(
+                    text = "Кухня",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        OutlinedTextField(
+            value = pictureUrl.value,
+            onValueChange = { pictureUrl.value = it },
+            label = {
+                Text(
+                    text = "Ссылка на изображение",
+                    fontSize = 14.sp,
+                    fontFamily = montserratRegular
+                )
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .padding(vertical = 8.dp),
+            singleLine = true,
+            shape = RoundedCornerShape(8.dp),
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                focusedLabelColor = Color.Black,
+                unfocusedLabelColor = Color.Gray
+            )
+        )
+
+        Spacer(modifier = Modifier.height(24.dp))
+
+        // Кнопка добавления
+        Button(
+            onClick = {
+                scope.launch {
+                    // Получаем количество записей и добавляем новый ресторан
+                    val count = supabase.from("Restaurants").select().decodeList<Restaurants>().size
+                    val newRestaurant = Restaurants(
+                        id = count + 1, // Предполагаем, что id - это автоинкрементное поле
+                        name = name.value,
+                        location = location.value,
+                        cuisin = cuisin.value,
+                        picture = pictureUrl.value.ifBlank { null }
+                    )
+
+                    // Вставляем новый ресторан в базу данных
+                    supabase.from("Restaurants").insert(newRestaurant)
+
+                    Toast.makeText(context, "Ресторан добавлен", Toast.LENGTH_LONG).show()
+                    showSuccessMessage.value = true
+
+                    // Возврат на экран ресторанов
+                    navHost.navigate("Restaurants") {
+                        popUpTo("Restaurants") { inclusive = true }
+                    }
+                }
+            },
+            modifier = Modifier
+                .fillMaxWidth()
+                .height(56.dp),
+            shape = RoundedCornerShape(8.dp),
+            colors = ButtonDefaults.buttonColors(
+                containerColor = Color(0XFFA3D5F1),
+                contentColor = Color.White
+            )
+        ) {
+            Text("Добавить ресторан", fontSize = 16.sp)
+        }
+
+        // Сообщение об успешном добавлении
+        if (showSuccessMessage.value) {
+            Text(
+                text = "Ресторан успешно добавлен!",
+                color = Color.Black,
+                modifier = Modifier.padding(top = 8.dp)
+            )
+        }
+    }
+}

+ 0 - 19
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Maps.kt

@@ -42,24 +42,5 @@ fun Maps(navHost: NavHostController) {
                 }
             }
         )
-
-        // Нижняя часть с информацией
-        Box(
-            modifier = Modifier
-                .weight(0.3f) // Занимает 0.3 части доступного пространства
-                .fillMaxWidth()
-                .background(Color.White) // Белая панель
-        ) {
-            // Здесь можно добавить текст или другую информацию о месте
-            Column(
-                modifier = Modifier.padding(16.dp)
-            ) {
-                Text(text = "Название места", style = MaterialTheme.typography.titleLarge)
-                Spacer(modifier = Modifier.height(8.dp))
-                Text(text = "Описание места", style = MaterialTheme.typography.bodyMedium)
-                Spacer(modifier = Modifier.height(8.dp))
-                Text(text = "Дополнительная информация", style = MaterialTheme.typography.bodySmall)
-            }
-        }
     }
 }

+ 46 - 0
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Maps_cinema.kt

@@ -0,0 +1,46 @@
+package com.example.lectionsupabase.view.mainActivity.components
+
+import android.os.Bundle
+import android.webkit.WebView
+import android.webkit.WebViewClient
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+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.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.viewinterop.AndroidView
+import androidx.navigation.NavHostController
+
+
+@Composable
+fun Maps_cinema(navHost: NavHostController) {
+    Column(modifier = Modifier.fillMaxSize()) {
+        // Верхняя часть с WebView (карта)
+        AndroidView(
+            modifier = Modifier
+                .weight(1f) // Занимает 1 часть доступного пространства
+                .fillMaxWidth(),
+            factory = { context ->
+                WebView(context).apply {
+                    webViewClient = WebViewClient()
+                    settings.javaScriptEnabled = true
+                    settings.loadWithOverviewMode = true
+                    settings.useWideViewPort = true
+                    settings.setSupportZoom(true)
+                    loadUrl("file:///android_asset/yandex_cinema.html") // Замените на ваш URL
+                }
+            }
+        )
+    }
+}

+ 46 - 0
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Maps_concert.kt

@@ -0,0 +1,46 @@
+package com.example.lectionsupabase.view.mainActivity.components
+
+import android.os.Bundle
+import android.webkit.WebView
+import android.webkit.WebViewClient
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+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.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.viewinterop.AndroidView
+import androidx.navigation.NavHostController
+
+
+@Composable
+fun Maps_concert(navHost: NavHostController) {
+    Column(modifier = Modifier.fillMaxSize()) {
+        // Верхняя часть с WebView (карта)
+        AndroidView(
+            modifier = Modifier
+                .weight(1f) // Занимает 1 часть доступного пространства
+                .fillMaxWidth(),
+            factory = { context ->
+                WebView(context).apply {
+                    webViewClient = WebViewClient()
+                    settings.javaScriptEnabled = true
+                    settings.loadWithOverviewMode = true
+                    settings.useWideViewPort = true
+                    settings.setSupportZoom(true)
+                    loadUrl("file:///android_asset/yandex_concert.html") // Замените на ваш URL
+                }
+            }
+        )
+    }
+}

+ 46 - 0
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Maps_exhibition.kt

@@ -0,0 +1,46 @@
+package com.example.lectionsupabase.view.mainActivity.components
+
+import android.os.Bundle
+import android.webkit.WebView
+import android.webkit.WebViewClient
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+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.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.viewinterop.AndroidView
+import androidx.navigation.NavHostController
+
+
+@Composable
+fun Maps_exhibition(navHost: NavHostController) {
+    Column(modifier = Modifier.fillMaxSize()) {
+        // Верхняя часть с WebView (карта)
+        AndroidView(
+            modifier = Modifier
+                .weight(1f) // Занимает 1 часть доступного пространства
+                .fillMaxWidth(),
+            factory = { context ->
+                WebView(context).apply {
+                    webViewClient = WebViewClient()
+                    settings.javaScriptEnabled = true
+                    settings.loadWithOverviewMode = true
+                    settings.useWideViewPort = true
+                    settings.setSupportZoom(true)
+                    loadUrl("file:///android_asset/yandex_exhibition.html") // Замените на ваш URL
+                }
+            }
+        )
+    }
+}

+ 46 - 0
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Maps_rest.kt

@@ -0,0 +1,46 @@
+package com.example.lectionsupabase.view.mainActivity.components
+
+import android.os.Bundle
+import android.webkit.WebView
+import android.webkit.WebViewClient
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+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.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.viewinterop.AndroidView
+import androidx.navigation.NavHostController
+
+
+@Composable
+fun Maps_rest(navHost: NavHostController) {
+    Column(modifier = Modifier.fillMaxSize()) {
+        // Верхняя часть с WebView (карта)
+        AndroidView(
+            modifier = Modifier
+                .weight(1f) // Занимает 1 часть доступного пространства
+                .fillMaxWidth(),
+            factory = { context ->
+                WebView(context).apply {
+                    webViewClient = WebViewClient()
+                    settings.javaScriptEnabled = true
+                    settings.loadWithOverviewMode = true
+                    settings.useWideViewPort = true
+                    settings.setSupportZoom(true)
+                    loadUrl("file:///android_asset/yandex_rest.html") // Замените на ваш URL
+                }
+            }
+        )
+    }
+}

+ 9 - 6
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Panel.kt

@@ -32,14 +32,15 @@ fun Panel(navHost: NavHostController) {
         R.drawable.micro, // Concerts
         R.drawable.films, // Movies
         R.drawable.cartina, // Exhibitions
-        R.drawable.bench  // Benches
+        R.drawable.bench,  // Benches
+        R.drawable.plus
     )
 
     // Размеры и отступы
     val iconSize = 20.dp // Уменьшенный размер иконок
     val padding = 0.dp // Уменьшенные отступы
     val panelHeight = 40.dp // Уменьшенная высота панели
-    val panelWidth = 257.dp // Уменьшенная ширина панели
+    val panelWidth = 310.dp // Уменьшенная ширина панели
     val bottomPadding = 14.dp // Отступ снизу
 
     Box(
@@ -68,10 +69,11 @@ fun Panel(navHost: NavHostController) {
                         onClick = {
                             val screen = when (index) {
                                 0 -> "Restaurants"
-                                1 -> "Cinema"
-                                2 -> "Concerts"
+                                1 -> "Concerts"
+                                2 -> "Cinema"
                                 3 -> "Exhibition"
                                 4 -> "Benchs"
+                                5 -> "Insert"
                                 else -> ""
                             }
                             navHost.navigate(screen) // Переход на экран
@@ -84,10 +86,11 @@ fun Panel(navHost: NavHostController) {
                             modifier = Modifier.size(iconSize),
                             tint = if (navHost.currentDestination?.route == when (index) {
                                     0 -> "Restaurants"
-                                    1 -> "Cinema"
-                                    2 -> "Concerts"
+                                    1 -> "Concerts"
+                                    2 -> "Cinema"
                                     3 -> "Exhibition"
                                     4 -> "Benchs"
+                                    5 -> "Insert"
                                     else -> ""
                                 }) Color(0xFF72C3F1) else Color.Gray // Цвет иконок
                         )

+ 8 - 2
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/Restaurants.kt

@@ -4,6 +4,7 @@ import androidx.compose.foundation.BorderStroke
 import androidx.compose.foundation.Image
 import androidx.compose.foundation.background
 import androidx.compose.foundation.border
+import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.material.BottomNavigation
@@ -76,6 +77,7 @@ fun Restaurants(navHost: NavHostController) {
     var selectedIndex by remember { mutableStateOf(0) }
     val montserratRegular = FontFamily(Font(R.font.mon_regular))
     val montserratMedium = FontFamily(Font(R.font.mon_medium))
+
     // Загружаем список ресторанов
     LaunchedEffect(Unit) {
         try {
@@ -222,8 +224,12 @@ fun Restaurants(navHost: NavHostController) {
                                 style = MaterialTheme.typography.titleMedium,
                                 fontWeight = FontWeight.SemiBold,
                                 fontSize = 14.sp,
-                                modifier = Modifier.padding(horizontal = 10.dp)
-                                    .padding(start = 3.dp),
+                                modifier = Modifier
+                                    .padding(horizontal = 10.dp)
+                                    .padding(start = 3.dp)
+                                    .clickable {
+                                        navHost.navigate("Maps_rest") // Замените "MapScreen" на ваш маршрут
+                                    },
                                 fontFamily = montserratMedium,
                                 color = Color(0xFF72C3F1)
                             )

+ 7 - 5
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/auth.kt

@@ -14,6 +14,7 @@ import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material3.TextFieldDefaults
 import androidx.compose.material3.Button
 import androidx.compose.material3.ButtonDefaults
 import androidx.compose.material3.ExperimentalMaterial3Api
@@ -24,7 +25,8 @@ import androidx.compose.material3.OutlinedTextField
 import androidx.compose.material3.Text
 import androidx.compose.material3.TextButton
 import androidx.compose.material3.TextField
-import androidx.compose.material3.TextFieldDefaults
+
+
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
@@ -91,7 +93,7 @@ fun auth(navHostController: NavHostController, viewModel: MainViewModel) {
         Text(
             text = "Найдите место куда сходить",
             style = TextStyle(
-                fontSize = 19.sp,
+                fontSize = 18.sp,
                 fontWeight = FontWeight.Normal,
                 fontFamily = montserratRegular
             ),
@@ -117,7 +119,7 @@ fun auth(navHostController: NavHostController, viewModel: MainViewModel) {
                         .height(49.dp) // Фиксированная высота для поля
                         .clip(RoundedCornerShape(5.dp)), // Закругление полей
                     keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email),
-                    textStyle = TextStyle(fontSize = 17.sp, color = Color.White),
+                    textStyle = TextStyle(fontSize = 15.sp, color = Color.White),
                     colors = TextFieldDefaults.textFieldColors(
                         focusedIndicatorColor = Color.Transparent,
                         unfocusedIndicatorColor = Color.Transparent,
@@ -148,7 +150,7 @@ fun auth(navHostController: NavHostController, viewModel: MainViewModel) {
                             )
                         }
                     },
-                    textStyle = TextStyle(fontSize = 17.sp, color = Color.White),
+                    textStyle = TextStyle(fontSize = 15.sp, color = Color.White),
                     colors = TextFieldDefaults.textFieldColors(
                         focusedIndicatorColor = Color.Transparent,
                         unfocusedIndicatorColor = Color.Transparent,
@@ -176,7 +178,7 @@ fun auth(navHostController: NavHostController, viewModel: MainViewModel) {
                     Text(
                         "Вход",
                         style = TextStyle(
-                            fontSize = 18.sp,
+                            fontSize = 16.sp,
                             fontWeight = FontWeight.SemiBold,
                             fontFamily = montserratSemiBold
                         )

+ 4 - 4
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/reg.kt

@@ -83,7 +83,7 @@ fun reg(navHostController: NavHostController, viewModel: MainViewModel) {
 
         Text(
             text = "Найдите место куда сходить",
-            style = TextStyle(fontSize = 19.sp, fontWeight = FontWeight.Normal, fontFamily = montserratRegular),
+            style = TextStyle(fontSize = 18.sp, fontWeight = FontWeight.Normal, fontFamily = montserratRegular),
             color = Color.White,
             modifier = Modifier.padding(bottom = 32.dp)
         )
@@ -106,7 +106,7 @@ fun reg(navHostController: NavHostController, viewModel: MainViewModel) {
                         .height(49.dp) // Фиксированная высота для поля
                         .clip(RoundedCornerShape(5.dp)), // Закругление полей
                     keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email),
-                    textStyle = TextStyle(fontSize = 17.sp, color = Color.White),
+                    textStyle = TextStyle(fontSize = 15.sp, color = Color.White),
                     colors = TextFieldDefaults.textFieldColors(
                         focusedIndicatorColor = Color.Transparent,
                         unfocusedIndicatorColor = Color.Transparent,
@@ -136,7 +136,7 @@ fun reg(navHostController: NavHostController, viewModel: MainViewModel) {
                             )
                         }
                     },
-                    textStyle = TextStyle(fontSize = 17.sp, color = Color.White),
+                    textStyle = TextStyle(fontSize = 15.sp, color = Color.White),
                     colors = TextFieldDefaults.textFieldColors(
                         focusedIndicatorColor = Color .Transparent,
                         unfocusedIndicatorColor = Color.Transparent,
@@ -159,7 +159,7 @@ fun reg(navHostController: NavHostController, viewModel: MainViewModel) {
                 ) {
                     Text(
                         "Регистрация",
-                        style = TextStyle(fontSize = 18.sp, fontWeight = FontWeight.SemiBold, fontFamily = montserratSemiBold)
+                        style = TextStyle(fontSize = 16.sp, fontWeight = FontWeight.SemiBold, fontFamily = montserratSemiBold)
                     )
                 }
             }

+ 8 - 5
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/slide1.kt

@@ -3,6 +3,7 @@ package com.example.lectionsupabase.view.mainActivity.components
 import android.view.animation.OvershootInterpolator
 import androidx.compose.animation.core.tween
 import androidx.compose.foundation.Image
+import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
@@ -65,9 +66,12 @@ fun slide1(navController: NavHostController) {
             color = Color(0xFF6FC5F2),
             modifier = Modifier
                 .align(Alignment.Start)
-                .padding(top = 25.dp) // Уменьшен отступ сверху
+                .padding(top = 25.dp)
+                .clickable {
+                    navController.navigate("Restaurants") // Замените "Home" на нужный вам маршрут
+                }
         )
-        Spacer(modifier = Modifier.height(50.dp))
+        Spacer(modifier = Modifier.height(40.dp))
         // Заголовок "Интересные места"
         Text(
             text = "Интересные места",
@@ -98,7 +102,6 @@ fun slide1(navController: NavHostController) {
                 .align(Alignment.CenterHorizontally)
                 .padding(vertical = 15.dp) // Уменьшен вертикальный отступ
         )
-        Spacer(modifier = Modifier.height(3.dp))
         // Картинка group1 ниже
         Image(
             bitmap = ImageBitmap.imageResource(R.drawable.group1),
@@ -108,7 +111,7 @@ fun slide1(navController: NavHostController) {
                 .align(Alignment.CenterHorizontally)
                 .padding(vertical = 5.dp) // Уменьшен вертикальный отступ
         )
-        Spacer(modifier = Modifier.height(30.dp))
+        Spacer(modifier = Modifier.height(25.dp))
         // Кнопка "Далее" внизу
         Button(
             onClick = { navController.navigate("slide2") },
@@ -121,7 +124,7 @@ fun slide1(navController: NavHostController) {
                 contentColor = Color.White
             )
         ) {
-            Text("Далее", fontSize = 17.sp, fontFamily = montserratSemiBold)
+            Text("Далее", fontSize = 15.sp, fontFamily = montserratSemiBold)
         }
     }
 }

+ 9 - 5
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/slide2.kt

@@ -1,6 +1,7 @@
 import android.view.animation.OvershootInterpolator
 import androidx.compose.animation.core.tween
 import androidx.compose.foundation.Image
+import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
@@ -65,7 +66,7 @@ fun slide2(navController: NavHostController) {
                 .align(Alignment.Start)
                 .padding(top = 25.dp) // Уменьшен отступ сверху
         )
-        Spacer(modifier = Modifier.height(50.dp))
+        Spacer(modifier = Modifier.height(40.dp))
         // Заголовок "Интересные места"
         Text(
             text = "Обновление ленты",
@@ -96,7 +97,7 @@ fun slide2(navController: NavHostController) {
                 .align(Alignment.CenterHorizontally)
                 .padding(vertical = 15.dp) // Уменьшен вертикальный отступ
         )
-        Spacer(modifier = Modifier.height(3.dp))
+
         // Картинка group1 ниже
         Image(
             bitmap = ImageBitmap.imageResource(R.drawable.group2),
@@ -104,9 +105,12 @@ fun slide2(navController: NavHostController) {
             modifier = Modifier
                 .size(70.dp)
                 .align(Alignment.CenterHorizontally)
-                .padding(vertical = 5.dp) // Уменьшен вертикальный отступ
+                .padding(vertical = 5.dp)
+                .clickable {
+                    navController.navigate("Restaurants") // Замените "Home" на нужный вам маршрут
+                }
         )
-        Spacer(modifier = Modifier.height(30.dp))
+        Spacer(modifier = Modifier.height(25.dp))
         // Кнопка "Далее" внизу
         Button(
             onClick = { navController.navigate("slide3") },
@@ -119,7 +123,7 @@ fun slide2(navController: NavHostController) {
                 contentColor = Color.White
             )
         ) {
-            Text("Далее", fontSize = 17.sp, fontFamily = montserratSemiBold)
+            Text("Далее", fontSize = 15.sp, fontFamily = montserratSemiBold)
         }
     }
 }

+ 10 - 6
app/src/main/java/com/example/lectionsupabase/view/mainActivity/components/slide3.kt

@@ -1,6 +1,7 @@
 import android.view.animation.OvershootInterpolator
 import androidx.compose.animation.core.tween
 import androidx.compose.foundation.Image
+import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
@@ -65,7 +66,7 @@ fun slide3(navController: NavHostController) {
                 .align(Alignment.Start)
                 .padding(top = 25.dp) // Уменьшен отступ сверху
         )
-        Spacer(modifier = Modifier.height(50.dp))
+        Spacer(modifier = Modifier.height(40.dp))
         // Заголовок "Интересные места"
         Text(
             text = "Исследуйте новые места",
@@ -78,7 +79,7 @@ fun slide3(navController: NavHostController) {
 
         // Подзаголовок "Узнавайте о интересных местах в вашем городе"
         Text(
-            text = "Посещайте новые места в вашем городе \n первым и добавляйте свой отзыв",
+            text = "Посещайте новые места в вашем городе \n первым и добавляйте в ленту",
             fontFamily = montserratRegular,
             fontSize = 13.sp,
             color = Color(0xFFA2A2A2),
@@ -96,7 +97,7 @@ fun slide3(navController: NavHostController) {
                 .align(Alignment.CenterHorizontally)
                 .padding(vertical = 15.dp) // Уменьшен вертикальный отступ
         )
-        Spacer(modifier = Modifier.height(3.dp))
+
         // Картинка group1 ниже
         Image(
             bitmap = ImageBitmap.imageResource(R.drawable.group3),
@@ -104,9 +105,12 @@ fun slide3(navController: NavHostController) {
             modifier = Modifier
                 .size(70.dp)
                 .align(Alignment.CenterHorizontally)
-                .padding(vertical = 5.dp) // Уменьшен вертикальный отступ
+                .padding(vertical = 5.dp)
+                .clickable {
+                    navController.navigate("Restaurants") // Замените "Home" на нужный вам маршрут
+                }
         )
-        Spacer(modifier = Modifier.height(30.dp))
+        Spacer(modifier = Modifier.height(25.dp))
         // Кнопка "Далее" внизу
         Button(
             onClick = { navController.navigate("Restaurants") },
@@ -119,7 +123,7 @@ fun slide3(navController: NavHostController) {
                 contentColor = Color.White
             )
         ) {
-            Text("К интересным местам", fontSize = 17.sp, fontFamily = montserratSemiBold)
+            Text("К интересным местам", fontSize = 15.sp, fontFamily = montserratSemiBold)
         }
     }
 }

+ 15 - 0
app/src/main/res/drawable/add.xml

@@ -0,0 +1,15 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="183dp"
+    android:height="170dp"
+    android:viewportWidth="183"
+    android:viewportHeight="170">
+  <path
+      android:pathData="M10,0L173,0A10,10 0,0 1,183 10L183,160A10,10 0,0 1,173 170L10,170A10,10 0,0 1,0 160L0,10A10,10 0,0 1,10 0z"
+      android:fillColor="#A3D5F1"/>
+  <path
+      android:pathData="M91.5,32L91.5,32A8.14,8.14 0,0 1,99.64 40.14L99.64,130.86A8.14,8.14 0,0 1,91.5 139L91.5,139A8.14,8.14 0,0 1,83.36 130.86L83.36,40.14A8.14,8.14 0,0 1,91.5 32z"
+      android:fillColor="#ffffff"/>
+  <path
+      android:pathData="M38,85.5L38,85.5A8.14,8.14 0,0 1,46.14 77.36L136.86,77.36A8.14,8.14 0,0 1,145 85.5L145,85.5A8.14,8.14 0,0 1,136.86 93.64L46.14,93.64A8.14,8.14 0,0 1,38 85.5z"
+      android:fillColor="#ffffff"/>
+</vector>

+ 5 - 5
app/src/main/res/drawable/bench.xml

@@ -1,9 +1,9 @@
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="14dp"
-    android:height="5dp"
-    android:viewportWidth="14"
-    android:viewportHeight="5">
+    android:width="16dp"
+    android:height="6dp"
+    android:viewportWidth="16"
+    android:viewportHeight="6">
   <path
-      android:pathData="M1,0C0,0 0,1.5 1,1.5H13C14,1.5 14,0 13,0H1ZM2,2V5H3.5V2H2ZM10.5,2V5H12V2H10.5Z"
+      android:pathData="M0.889,0C-0.296,0 -0.296,1.8 0.889,1.8H15.111C16.296,1.8 16.296,0 15.111,0H0.889ZM2.074,2.4V6H3.852V2.4H2.074ZM12.148,2.4V6H13.926V2.4H12.148Z"
       android:fillColor="#000000"/>
 </vector>

+ 23 - 0
app/src/main/res/drawable/gr1.xml

@@ -0,0 +1,23 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="74dp"
+    android:height="15dp"
+    android:viewportWidth="74"
+    android:viewportHeight="15">
+  <path
+      android:pathData="M45,7.145m-6.725,0a6.725,6.725 0,1 1,13.449 0a6.725,6.725 0,1 1,-13.449 0"
+      android:strokeAlpha="0.5"
+      android:strokeWidth="0.84058"
+      android:fillColor="#00000000"
+      android:strokeColor="#60C1F5"
+      android:fillAlpha="0.5"/>
+  <path
+      android:pathData="M66.855,7.145m-6.725,0a6.725,6.725 0,1 1,13.449 0a6.725,6.725 0,1 1,-13.449 0"
+      android:strokeAlpha="0.5"
+      android:strokeWidth="0.84058"
+      android:fillColor="#00000000"
+      android:strokeColor="#60C1F5"
+      android:fillAlpha="0.5"/>
+  <path
+      android:pathData="M7,0L27,0A7,7 0,0 1,34 7L34,7A7,7 0,0 1,27 14L7,14A7,7 0,0 1,0 7L0,7A7,7 0,0 1,7 0z"
+      android:fillColor="#C6E8FA"/>
+</vector>

+ 20 - 0
app/src/main/res/drawable/mestoaddsvg.xml

@@ -0,0 +1,20 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="191dp"
+    android:height="191dp"
+    android:viewportWidth="191"
+    android:viewportHeight="191">
+  <path
+      android:pathData="M173.09,70.69V135.29C173.56,139.32 173.12,143.41 171.78,147.25C170.45,151.08 168.26,154.57 165.39,157.44C162.52,160.31 159.04,162.49 155.21,163.82C151.37,165.16 147.28,165.61 143.25,165.13H47.75C43.72,165.61 39.63,165.16 35.8,163.82C31.96,162.49 28.48,160.31 25.61,157.44C22.73,154.57 20.55,151.08 19.22,147.25C17.88,143.41 17.44,139.32 17.91,135.29V55.71C17.44,51.68 17.88,47.59 19.22,43.75C20.55,39.92 22.73,36.44 25.61,33.56C28.48,30.69 31.96,28.51 35.8,27.18C39.63,25.84 43.72,25.39 47.75,25.86H117.78C118.14,25.87 118.48,25.96 118.8,26.12C119.11,26.28 119.39,26.5 119.6,26.78C119.82,27.06 119.97,27.38 120.05,27.73C120.13,28.07 120.13,28.43 120.05,28.77C118.17,38.07 120.06,47.73 125.3,55.64C130.54,63.55 138.71,69.05 148,70.95C155.36,72.42 162.99,71.54 169.82,68.44C170.19,68.3 170.58,68.24 170.97,68.29C171.36,68.33 171.73,68.47 172.06,68.69C172.38,68.91 172.64,69.21 172.82,69.56C173.01,69.91 173.1,70.29 173.09,70.69Z"
+      android:strokeAlpha="0.4"
+      android:fillColor="#396CE8"
+      android:fillAlpha="0.4"/>
+  <path
+      android:pathData="M160.46,112.71L125.03,77.28C123.53,75.78 121.49,74.94 119.38,74.94C117.26,74.94 115.22,75.78 113.72,77.28L74.41,116.59C73.67,117.32 72.67,117.73 71.63,117.73C70.58,117.73 69.58,117.32 68.84,116.59L61.36,109.11C59.86,107.61 57.83,106.78 55.71,106.78C53.59,106.78 51.56,107.61 50.06,109.11L30.54,128.62C30.1,129.07 29.84,129.68 29.84,130.31V135.29C29.84,147.87 35.18,153.2 47.75,153.2H143.25C155.82,153.2 161.16,147.87 161.16,135.29V114.39C161.16,113.76 160.9,113.15 160.46,112.71Z"
+      android:fillColor="#396CE8"/>
+  <path
+      android:pathData="M63.67,81.57C62.36,81.58 61.07,81.32 59.86,80.83C58.65,80.33 57.55,79.61 56.62,78.68C54.75,76.83 53.69,74.3 53.68,71.66C53.67,69.02 54.71,66.49 56.57,64.62C58.43,62.74 60.96,61.69 63.6,61.68H63.67C66.31,61.68 68.84,62.73 70.7,64.59C72.57,66.46 73.61,68.99 73.61,71.63C73.61,74.26 72.57,76.79 70.7,78.66C68.84,80.52 66.31,81.57 63.67,81.57Z"
+      android:fillColor="#396CE8"/>
+  <path
+      android:pathData="M167.13,33.82H157.18V23.88C157.18,22.29 156.55,20.77 155.43,19.65C154.31,18.54 152.79,17.91 151.21,17.91C149.63,17.91 148.11,18.54 146.99,19.65C145.87,20.77 145.24,22.29 145.24,23.88V33.82H135.29C133.71,33.82 132.19,34.45 131.07,35.57C129.95,36.69 129.32,38.21 129.32,39.79C129.32,41.37 129.95,42.89 131.07,44.01C132.19,45.13 133.71,45.76 135.29,45.76H145.24V55.71C145.24,57.29 145.87,58.81 146.99,59.93C148.11,61.05 149.63,61.68 151.21,61.68C152.79,61.68 154.31,61.05 155.43,59.93C156.55,58.81 157.18,57.29 157.18,55.71V45.76H167.13C168.71,45.76 170.23,45.13 171.35,44.01C172.46,42.89 173.09,41.37 173.09,39.79C173.09,38.21 172.46,36.69 171.35,35.57C170.23,34.45 168.71,33.82 167.13,33.82Z"
+      android:fillColor="#396CE8"/>
+</vector>

+ 23 - 0
app/src/main/res/drawable/pic11.xml

@@ -0,0 +1,23 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="74dp"
+    android:height="15dp"
+    android:viewportWidth="74"
+    android:viewportHeight="15">
+  <path
+      android:pathData="M45,7.145m-6.725,0a6.725,6.725 0,1 1,13.449 0a6.725,6.725 0,1 1,-13.449 0"
+      android:strokeAlpha="0.5"
+      android:strokeWidth="0.84058"
+      android:fillColor="#00000000"
+      android:strokeColor="#60C1F5"
+      android:fillAlpha="0.5"/>
+  <path
+      android:pathData="M66.855,7.145m-6.725,0a6.725,6.725 0,1 1,13.449 0a6.725,6.725 0,1 1,-13.449 0"
+      android:strokeAlpha="0.5"
+      android:strokeWidth="0.84058"
+      android:fillColor="#00000000"
+      android:strokeColor="#60C1F5"
+      android:fillAlpha="0.5"/>
+  <path
+      android:pathData="M7,0L27,0A7,7 0,0 1,34 7L34,7A7,7 0,0 1,27 14L7,14A7,7 0,0 1,0 7L0,7A7,7 0,0 1,7 0z"
+      android:fillColor="#C6E8FA"/>
+</vector>

+ 23 - 0
app/src/main/res/drawable/pic22.xml

@@ -0,0 +1,23 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="72dp"
+    android:height="15dp"
+    android:viewportWidth="72"
+    android:viewportHeight="15">
+  <path
+      android:pathData="M7.145,7.145m-6.725,0a6.725,6.725 0,1 1,13.449 0a6.725,6.725 0,1 1,-13.449 0"
+      android:strokeAlpha="0.5"
+      android:strokeWidth="0.84058"
+      android:fillColor="#00000000"
+      android:strokeColor="#60C1F5"
+      android:fillAlpha="0.5"/>
+  <path
+      android:pathData="M64.145,7.145m-6.725,0a6.725,6.725 0,1 1,13.449 0a6.725,6.725 0,1 1,-13.449 0"
+      android:strokeAlpha="0.5"
+      android:strokeWidth="0.84058"
+      android:fillColor="#00000000"
+      android:strokeColor="#60C1F5"
+      android:fillAlpha="0.5"/>
+  <path
+      android:pathData="M26,0L46,0A7,7 0,0 1,53 7L53,7A7,7 0,0 1,46 14L26,14A7,7 0,0 1,19 7L19,7A7,7 0,0 1,26 0z"
+      android:fillColor="#C6E8FA"/>
+</vector>

+ 23 - 0
app/src/main/res/drawable/pic33.xml

@@ -0,0 +1,23 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="74dp"
+    android:height="15dp"
+    android:viewportWidth="74"
+    android:viewportHeight="15">
+  <path
+      android:pathData="M7.145,7.145m-6.725,0a6.725,6.725 0,1 1,13.449 0a6.725,6.725 0,1 1,-13.449 0"
+      android:strokeAlpha="0.5"
+      android:strokeWidth="0.84058"
+      android:fillColor="#00000000"
+      android:strokeColor="#60C1F5"
+      android:fillAlpha="0.5"/>
+  <path
+      android:pathData="M26.855,7.145m-6.725,0a6.725,6.725 0,1 1,13.449 0a6.725,6.725 0,1 1,-13.449 0"
+      android:strokeAlpha="0.5"
+      android:strokeWidth="0.84058"
+      android:fillColor="#00000000"
+      android:strokeColor="#60C1F5"
+      android:fillAlpha="0.5"/>
+  <path
+      android:pathData="M40,7C40,3.134 43.134,0 47,0H67C70.866,0 74,3.134 74,7C74,10.866 70.866,14 67,14H47C43.134,14 40,10.866 40,7Z"
+      android:fillColor="#C6E8FA"/>
+</vector>

+ 12 - 0
app/src/main/res/drawable/plus.xml

@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="12dp"
+    android:height="13dp"
+    android:viewportWidth="12"
+    android:viewportHeight="13">
+  <path
+      android:pathData="M0,6C0,5.458 0.44,5.018 0.982,5.018H11.018C11.56,5.018 12,5.458 12,6V6C12,6.542 11.56,6.982 11.018,6.982H6H0.982C0.44,6.982 0,6.542 0,6V6Z"
+      android:fillColor="#000000"/>
+  <path
+      android:pathData="M6,12.218C5.458,12.218 5.018,11.779 5.018,11.236V0.982C5.018,0.44 5.458,-0 6,-0V-0C6.542,-0 6.982,0.44 6.982,0.982V6.109V11.236C6.982,11.779 6.542,12.218 6,12.218V12.218Z"
+      android:fillColor="#000000"/>
+</vector>