1+ package com.developersbreach.kotlindictionarymultiplatform.ui.screens.topic
2+
3+ import androidx.compose.foundation.background
4+ import androidx.compose.foundation.clickable
5+ import androidx.compose.foundation.layout.Box
6+ import androidx.compose.foundation.layout.Column
7+ import androidx.compose.foundation.layout.Row
8+ import androidx.compose.foundation.layout.Spacer
9+ import androidx.compose.foundation.layout.fillMaxWidth
10+ import androidx.compose.foundation.layout.height
11+ import androidx.compose.foundation.layout.padding
12+ import androidx.compose.foundation.layout.size
13+ import androidx.compose.foundation.layout.width
14+ import androidx.compose.foundation.shape.CircleShape
15+ import androidx.compose.foundation.shape.RoundedCornerShape
16+ import androidx.compose.material.icons.Icons
17+ import androidx.compose.material.icons.filled.Bookmark
18+ import androidx.compose.material.icons.filled.Search
19+ import androidx.compose.material.icons.outlined.BookmarkBorder
20+ import androidx.compose.material3.Icon
21+ import androidx.compose.material3.IconButton
22+ import androidx.compose.material3.MaterialTheme
23+ import androidx.compose.material3.Surface
24+ import androidx.compose.material3.Text
25+ import androidx.compose.runtime.Composable
26+ import androidx.compose.ui.Alignment
27+ import androidx.compose.ui.Modifier
28+ import androidx.compose.ui.draw.shadow
29+ import androidx.compose.ui.text.style.TextOverflow
30+ import androidx.compose.ui.unit.dp
31+ import kotlindictionarymultiplatform.composeapp.generated.resources.Res
32+ import kotlindictionarymultiplatform.composeapp.generated.resources.add_bookmark
33+ import kotlindictionarymultiplatform.composeapp.generated.resources.icon
34+ import kotlindictionarymultiplatform.composeapp.generated.resources.remove_bookmark
35+ import org.jetbrains.compose.resources.stringResource
36+
37+ @Composable
38+ fun TopicCard (
39+ topic : String ,
40+ subtitle : String ,
41+ isBookmarked : Boolean ,
42+ onBookmarkClick : () -> Unit ,
43+ onCardClick : () -> Unit ,
44+ ) {
45+ Surface (
46+ modifier = Modifier
47+ .fillMaxWidth()
48+ .padding(8 .dp)
49+ .shadow(6 .dp, RoundedCornerShape (16 .dp), clip = true )
50+ .clickable { onCardClick() },
51+ shape = RoundedCornerShape (16 .dp),
52+ color = MaterialTheme .colorScheme.surface,
53+ ) {
54+ Row (
55+ modifier = Modifier
56+ .fillMaxWidth()
57+ .padding(12 .dp),
58+ verticalAlignment = Alignment .CenterVertically ,
59+ ) {
60+ Box (
61+ modifier = Modifier
62+ .size(36 .dp)
63+ .background(MaterialTheme .colorScheme.primary, CircleShape ),
64+ contentAlignment = Alignment .Center ,
65+ ) {
66+ Icon (Icons .Filled .Search , contentDescription = stringResource(Res .string.icon))
67+ }
68+
69+ Spacer (modifier = Modifier .width(12 .dp))
70+
71+ Column (
72+ modifier = Modifier .weight(1f ),
73+ ) {
74+ Text (
75+ text = topic,
76+ style = MaterialTheme .typography.headlineMedium.copy(
77+ color = MaterialTheme .colorScheme.onPrimary,
78+ ),
79+ maxLines = 1 ,
80+ overflow = TextOverflow .Ellipsis ,
81+ )
82+ Spacer (modifier = Modifier .height(6 .dp))
83+ Text (
84+ text = subtitle,
85+ style = MaterialTheme .typography.labelMedium.copy(
86+ color = MaterialTheme .colorScheme.onBackground,
87+ ),
88+ maxLines = 1 ,
89+ overflow = TextOverflow .Ellipsis ,
90+ )
91+ }
92+
93+ IconButton (onClick = onBookmarkClick) {
94+ Icon (
95+ imageVector = if (isBookmarked) Icons .Outlined .BookmarkBorder else Icons .Filled .Bookmark ,
96+ contentDescription = if (isBookmarked) stringResource(Res .string.remove_bookmark) else stringResource(Res .string.add_bookmark),
97+ tint = MaterialTheme .colorScheme.primary,
98+ )
99+ }
100+ }
101+ }
102+ }
0 commit comments