Initial commit
This commit is contained in:
		
							
								
								
									
										1
									
								
								core/ui/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								core/ui/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| build/ | ||||
							
								
								
									
										20
									
								
								core/ui/build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								core/ui/build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| @Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed | ||||
| plugins { | ||||
|     alias(libs.plugins.convention.android.library) | ||||
|     alias(libs.plugins.convention.compose) | ||||
| } | ||||
|  | ||||
| android { | ||||
|     namespace = "dev.adriankuta.pixabay.core.ui" | ||||
|     buildFeatures { | ||||
|         buildConfig = true | ||||
|     } | ||||
| } | ||||
|  | ||||
| dependencies { | ||||
|     implementation(libs.androidx.ui) | ||||
|     implementation(libs.androidx.ui.graphics) | ||||
|     implementation(libs.androidx.ui.tooling.preview) | ||||
|     implementation(libs.androidx.material3) | ||||
|     debugImplementation(libs.androidx.ui.tooling) | ||||
| } | ||||
| @@ -0,0 +1,40 @@ | ||||
| package dev.adriankuta.pixabay.core.ui | ||||
|  | ||||
| import androidx.compose.foundation.layout.Row | ||||
| import androidx.compose.foundation.layout.Spacer | ||||
| import androidx.compose.foundation.layout.width | ||||
| import androidx.compose.material3.OutlinedButton | ||||
| import androidx.compose.material3.Text | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.ui.Alignment | ||||
| import androidx.compose.ui.Modifier | ||||
| import androidx.compose.ui.graphics.Color | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import androidx.compose.ui.tooling.preview.Preview | ||||
| import androidx.compose.ui.unit.dp | ||||
|  | ||||
| @Composable | ||||
| fun ErrorMessage( | ||||
|     message: String, | ||||
|     onClickRetry: () -> Unit, | ||||
|     modifier: Modifier = Modifier | ||||
| ) { | ||||
|     Row(modifier = modifier, verticalAlignment = Alignment.CenterVertically) { | ||||
|         Text(message, color = Color.Red, modifier = Modifier.weight(1f)) | ||||
|         Spacer(Modifier.width(8.dp)) | ||||
|         OutlinedButton( | ||||
|             onClick = onClickRetry, | ||||
|         ) { | ||||
|             Text(stringResource(R.string.retry), color = Color.Red) | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @Preview( | ||||
|     showBackground = true, | ||||
|     backgroundColor = 0xFFFFFF | ||||
| ) | ||||
| @Composable | ||||
| internal fun ErrorMessagePreview() { | ||||
|     ErrorMessage("Something went wrong!", {}) | ||||
| } | ||||
| @@ -0,0 +1,18 @@ | ||||
| package dev.adriankuta.pixabay.core.ui | ||||
|  | ||||
| import androidx.compose.foundation.layout.Box | ||||
| import androidx.compose.foundation.layout.fillMaxSize | ||||
| import androidx.compose.material3.CircularProgressIndicator | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.ui.Alignment | ||||
| import androidx.compose.ui.Modifier | ||||
|  | ||||
| @Composable | ||||
| fun Loading(modifier: Modifier = Modifier) { | ||||
|     Box( | ||||
|         contentAlignment = Alignment.Center, | ||||
|         modifier = modifier.fillMaxSize() | ||||
|     ) { | ||||
|         CircularProgressIndicator() | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,44 @@ | ||||
| @file:OptIn(ExperimentalMaterial3Api::class) | ||||
|  | ||||
| package dev.adriankuta.pixabay.core.ui | ||||
|  | ||||
| import androidx.compose.foundation.shape.AbsoluteRoundedCornerShape | ||||
| import androidx.compose.material3.ExperimentalMaterial3Api | ||||
| import androidx.compose.material3.Text | ||||
| import androidx.compose.material3.TextField | ||||
| import androidx.compose.material3.TextFieldDefaults | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.ui.Modifier | ||||
| import androidx.compose.ui.graphics.Color | ||||
| import androidx.compose.ui.tooling.preview.Preview | ||||
|  | ||||
| @Composable | ||||
| fun SearchField( | ||||
|     query: String, | ||||
|     onQueryChange: (String) -> Unit, | ||||
|     modifier: Modifier = Modifier, | ||||
|     hint: String? = null | ||||
| ) { | ||||
|     TextField( | ||||
|         value = query, | ||||
|         onValueChange = onQueryChange, | ||||
|         modifier = modifier, | ||||
|         placeholder = { | ||||
|             if (hint != null) { | ||||
|                 Text(text = hint) | ||||
|             } | ||||
|         }, | ||||
|         colors = TextFieldDefaults.colors( | ||||
|             focusedIndicatorColor = Color.Transparent, | ||||
|             unfocusedIndicatorColor = Color.Transparent, | ||||
|             disabledIndicatorColor = Color.Transparent | ||||
|         ), | ||||
|         shape = AbsoluteRoundedCornerShape(50) | ||||
|     ) | ||||
| } | ||||
|  | ||||
| @Preview | ||||
| @Composable | ||||
| internal fun SearchFieldPreview() { | ||||
|     SearchField(query = "Cats", onQueryChange = {}) | ||||
| } | ||||
| @@ -0,0 +1,26 @@ | ||||
| package dev.adriankuta.pixabay.core.ui | ||||
|  | ||||
| import androidx.compose.foundation.layout.Row | ||||
| import androidx.compose.foundation.layout.Spacer | ||||
| import androidx.compose.foundation.layout.width | ||||
| import androidx.compose.material3.Text | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.ui.Alignment | ||||
| import androidx.compose.ui.Modifier | ||||
| import androidx.compose.ui.unit.dp | ||||
|  | ||||
| @Composable | ||||
| fun StatsItem( | ||||
|     icon: @Composable () -> Unit, | ||||
|     text: String, | ||||
|     modifier: Modifier = Modifier | ||||
| ) { | ||||
|     Row( | ||||
|         modifier, | ||||
|         verticalAlignment = Alignment.CenterVertically | ||||
|     ) { | ||||
|         icon() | ||||
|         Spacer(Modifier.width(4.dp)) | ||||
|         Text(text) | ||||
|     } | ||||
| } | ||||
							
								
								
									
										9
									
								
								core/ui/src/main/res/drawable/ic_comment.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								core/ui/src/main/res/drawable/ic_comment.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| <vector xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     android:width="24dp" | ||||
|     android:height="24dp" | ||||
|     android:viewportWidth="960" | ||||
|     android:viewportHeight="960"> | ||||
|   <path | ||||
|       android:pathData="M280,560h400q17,0 28.5,-11.5T720,520q0,-17 -11.5,-28.5T680,480L280,480q-17,0 -28.5,11.5T240,520q0,17 11.5,28.5T280,560ZM280,440h400q17,0 28.5,-11.5T720,400q0,-17 -11.5,-28.5T680,360L280,360q-17,0 -28.5,11.5T240,400q0,17 11.5,28.5T280,440ZM280,320h400q17,0 28.5,-11.5T720,280q0,-17 -11.5,-28.5T680,240L280,240q-17,0 -28.5,11.5T240,280q0,17 11.5,28.5T280,320ZM160,720q-33,0 -56.5,-23.5T80,640v-480q0,-33 23.5,-56.5T160,80h640q33,0 56.5,23.5T880,160v623q0,27 -24.5,37.5T812,812l-92,-92L160,720ZM754,640 L800,685v-525L160,160v480h594ZM160,640v-480,480Z" | ||||
|       android:fillColor="#5f6368"/> | ||||
| </vector> | ||||
							
								
								
									
										9
									
								
								core/ui/src/main/res/drawable/ic_download.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								core/ui/src/main/res/drawable/ic_download.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| <vector xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     android:width="24dp" | ||||
|     android:height="24dp" | ||||
|     android:viewportWidth="960" | ||||
|     android:viewportHeight="960"> | ||||
|   <path | ||||
|       android:pathData="M480,623q-8,0 -15,-2.5t-13,-8.5L308,468q-12,-12 -11.5,-28t11.5,-28q12,-12 28.5,-12.5T365,411l75,75v-286q0,-17 11.5,-28.5T480,160q17,0 28.5,11.5T520,200v286l75,-75q12,-12 28.5,-11.5T652,412q11,12 11.5,28T652,468L508,612q-6,6 -13,8.5t-15,2.5ZM240,800q-33,0 -56.5,-23.5T160,720v-80q0,-17 11.5,-28.5T200,600q17,0 28.5,11.5T240,640v80h480v-80q0,-17 11.5,-28.5T760,600q17,0 28.5,11.5T800,640v80q0,33 -23.5,56.5T720,800L240,800Z" | ||||
|       android:fillColor="#5f6368"/> | ||||
| </vector> | ||||
							
								
								
									
										5
									
								
								core/ui/src/main/res/values/strings.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								core/ui/src/main/res/values/strings.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <resources> | ||||
|     <string name="retry">Retry</string> | ||||
|     <string name="something_went_wrong">Something went wrong!</string> | ||||
| </resources> | ||||
		Reference in New Issue
	
	Block a user