🚀 Text Direction based on Content

* Changed all Texts' Direction to match Content's (e.g. Eng -> LTR, Arabic -> RTL)

Resolves: #160
This commit is contained in:
Acclorite 2025-02-06 15:14:07 +02:00
parent 6e497a7d67
commit 7ac83f933d
70 changed files with 639 additions and 610 deletions

View file

@ -18,15 +18,14 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.progress_indicator.CircularProgressIndicator import ua.acclorite.book_story.presentation.core.components.progress_indicator.CircularProgressIndicator
import ua.acclorite.book_story.ui.theme.FadeTransitionPreservingSpace import ua.acclorite.book_story.ui.theme.FadeTransitionPreservingSpace
@ -51,18 +50,19 @@ fun AboutItem(
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Column(Modifier.weight(1f)) { Column(Modifier.weight(1f)) {
Text( StyledText(
title, text = title,
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurface, color = MaterialTheme.colorScheme.onSurface,
fontSize = 18.sp fontSize = 18.sp
) )
)
description?.let { description?.let {
Text( StyledText(
it, text = it,
overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodySmall.copy(
style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onSurfaceVariant
color = MaterialTheme.colorScheme.onSurfaceVariant, )
) )
} }
} }

View file

@ -9,12 +9,12 @@ package ua.acclorite.book_story.presentation.about
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -25,7 +25,7 @@ fun AboutTopBar(
) { ) {
LargeTopAppBar( LargeTopAppBar(
title = { title = {
Text(stringResource(id = R.string.about_screen)) StyledText(stringResource(id = R.string.about_screen))
}, },
navigationIcon = { navigationIcon = {
NavigatorBackIconButton(navigateBack = navigateBack) NavigatorBackIconButton(navigateBack = navigateBack)

View file

@ -18,13 +18,13 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyItemScope import androidx.compose.foundation.lazy.LazyItemScope
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun LazyItemScope.BookInfoChangeCoverBottomSheetItem( fun LazyItemScope.BookInfoChangeCoverBottomSheetItem(
@ -54,16 +54,18 @@ fun LazyItemScope.BookInfoChangeCoverBottomSheetItem(
Column( Column(
verticalArrangement = Arrangement.Center verticalArrangement = Arrangement.Center
) { ) {
Text( StyledText(
text, text = text,
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurface, color = MaterialTheme.colorScheme.onSurface,
fontSize = 18.sp fontSize = 18.sp
) )
Text( )
description, StyledText(
style = MaterialTheme.typography.bodyMedium, text = description,
color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
)
) )
} }
} }

View file

@ -14,15 +14,16 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.EditNote import androidx.compose.material.icons.filled.EditNote
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.IconButton import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun BookInfoDetailsBottomSheetItem( fun BookInfoDetailsBottomSheetItem(
@ -50,14 +51,16 @@ fun BookInfoDetailsBottomSheetItem(
isError = showError, isError = showError,
supportingText = if (!showError || errorMessage.isNullOrBlank()) null else { supportingText = if (!showError || errorMessage.isNullOrBlank()) null else {
{ {
Text( StyledText(
text = errorMessage, text = errorMessage,
style = LocalTextStyle.current.copy(
color = MaterialTheme.colorScheme.error color = MaterialTheme.colorScheme.error
) )
)
} }
}, },
label = { label = {
Text(label) StyledText(label)
} }
) )

View file

@ -15,7 +15,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -23,6 +22,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun BookInfoLayoutActionsItem( fun BookInfoLayoutActionsItem(
@ -61,10 +61,11 @@ fun BookInfoLayoutActionsItem(
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.size(18.dp) modifier = Modifier.size(18.dp)
) )
Text( StyledText(
text = title, text = title,
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant color = MaterialTheme.colorScheme.onSurfaceVariant
) )
)
} }
} }

View file

@ -10,13 +10,13 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.book.Book import ua.acclorite.book_story.domain.library.book.Book
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.calculateProgress import ua.acclorite.book_story.presentation.core.util.calculateProgress
@Composable @Composable
@ -35,8 +35,8 @@ fun BookInfoLayoutButton(
} }
} }
) { ) {
Text( StyledText(
if (book.progress == 0f) stringResource(id = R.string.start_reading) text = if (book.progress == 0f) stringResource(id = R.string.start_reading)
else stringResource( else stringResource(
id = R.string.continue_reading_query, id = R.string.continue_reading_query,
"${book.progress.calculateProgress(1)}%" "${book.progress.calculateProgress(1)}%"

View file

@ -26,7 +26,6 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.KeyboardArrowDown import androidx.compose.material.icons.filled.KeyboardArrowDown
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
@ -41,6 +40,7 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.book.Book import ua.acclorite.book_story.domain.library.book.Book
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.noRippleClickable import ua.acclorite.book_story.presentation.core.util.noRippleClickable
import ua.acclorite.book_story.ui.book_info.BookInfoEvent import ua.acclorite.book_story.ui.book_info.BookInfoEvent
@ -97,12 +97,13 @@ fun BookInfoLayoutDescription(
) )
} }
) { ) {
Text( StyledText(
if (!book.description.isNullOrBlank()) book.description text = if (!book.description.isNullOrBlank()) book.description
else stringResource(id = R.string.error_no_description), else stringResource(id = R.string.error_no_description),
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant color = MaterialTheme.colorScheme.onSurfaceVariant
) )
)
} }
AnimatedVisibility( AnimatedVisibility(

View file

@ -14,15 +14,14 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Person import androidx.compose.material.icons.outlined.Person
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.book.Book import ua.acclorite.book_story.domain.library.book.Book
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.noRippleClickable import ua.acclorite.book_story.presentation.core.util.noRippleClickable
import ua.acclorite.book_story.ui.book_info.BookInfoEvent import ua.acclorite.book_story.ui.book_info.BookInfoEvent
@ -42,10 +41,8 @@ fun BookInfoLayoutInfoAuthor(
tint = MaterialTheme.colorScheme.onSurfaceVariant tint = MaterialTheme.colorScheme.onSurfaceVariant
) )
Text( StyledText(
book.author.asString(), text = book.author.asString(),
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.bodyLarge,
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.noRippleClickable( .noRippleClickable(
@ -54,8 +51,10 @@ fun BookInfoLayoutInfoAuthor(
showAuthorDialog(BookInfoEvent.OnShowAuthorDialog) showAuthorDialog(BookInfoEvent.OnShowAuthorDialog)
} }
), ),
maxLines = 1, style = MaterialTheme.typography.bodyLarge.copy(
overflow = TextOverflow.Ellipsis color = MaterialTheme.colorScheme.onSurfaceVariant,
),
maxLines = 1
) )
} }
} }

View file

@ -11,7 +11,6 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.LinearWavyProgressIndicator import androidx.compose.material3.LinearWavyProgressIndicator
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -19,6 +18,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.domain.library.book.Book import ua.acclorite.book_story.domain.library.book.Book
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.calculateProgress import ua.acclorite.book_story.presentation.core.util.calculateProgress
@OptIn(ExperimentalMaterial3ExpressiveApi::class) @OptIn(ExperimentalMaterial3ExpressiveApi::class)
@ -42,11 +42,12 @@ fun BookInfoLayoutInfoProgress(
wavelength = 80.dp, wavelength = 80.dp,
waveSpeed = 15.dp waveSpeed = 15.dp
) )
Text( StyledText(
text = progress, text = progress,
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.bodyMedium,
fontWeight = FontWeight.Medium fontWeight = FontWeight.Medium
),
) )
} }
} }

View file

@ -8,11 +8,10 @@ package ua.acclorite.book_story.presentation.book_info
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow
import ua.acclorite.book_story.domain.library.book.Book import ua.acclorite.book_story.domain.library.book.Book
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.noRippleClickable import ua.acclorite.book_story.presentation.core.util.noRippleClickable
import ua.acclorite.book_story.ui.book_info.BookInfoEvent import ua.acclorite.book_story.ui.book_info.BookInfoEvent
@ -21,10 +20,8 @@ fun BookInfoLayoutInfoTitle(
book: Book, book: Book,
showTitleDialog: (BookInfoEvent.OnShowTitleDialog) -> Unit showTitleDialog: (BookInfoEvent.OnShowTitleDialog) -> Unit
) { ) {
Text( StyledText(
book.title, text = book.title,
color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.headlineSmall,
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.noRippleClickable( .noRippleClickable(
@ -33,7 +30,9 @@ fun BookInfoLayoutInfoTitle(
showTitleDialog(BookInfoEvent.OnShowTitleDialog) showTitleDialog(BookInfoEvent.OnShowTitleDialog)
} }
), ),
maxLines = 4, style = MaterialTheme.typography.headlineSmall.copy(
overflow = TextOverflow.Ellipsis color = MaterialTheme.colorScheme.onSurface
),
maxLines = 4
) )
} }

View file

@ -11,14 +11,13 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Info import androidx.compose.material.icons.outlined.Info
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.text.style.TextOverflow
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.book.Book import ua.acclorite.book_story.domain.library.book.Book
import ua.acclorite.book_story.presentation.core.components.common.IconButton import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar
import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@ -55,11 +54,11 @@ fun BookInfoTopBar(
}, },
contentTitle = { contentTitle = {
DefaultTransition(firstVisibleItemIndex.value > 0) { DefaultTransition(firstVisibleItemIndex.value > 0) {
Text( StyledText(
book.title, text = book.title,
style = MaterialTheme.typography.titleLarge, style = MaterialTheme.typography.titleLarge.copy(
color = MaterialTheme.colorScheme.onSurface, color = MaterialTheme.colorScheme.onSurface
overflow = TextOverflow.Ellipsis, ),
maxLines = 1 maxLines = 1
) )
} }

View file

@ -18,17 +18,16 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Error import androidx.compose.material.icons.filled.Error
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.book.NullableBook import ua.acclorite.book_story.domain.library.book.NullableBook
import ua.acclorite.book_story.domain.library.book.SelectableNullableBook import ua.acclorite.book_story.domain.library.book.SelectableNullableBook
import ua.acclorite.book_story.presentation.core.components.common.CircularCheckbox import ua.acclorite.book_story.presentation.core.components.common.CircularCheckbox
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun BrowseAddDialogItem(result: SelectableNullableBook, onClick: (Boolean) -> Unit) { fun BrowseAddDialogItem(result: SelectableNullableBook, onClick: (Boolean) -> Unit) {
@ -45,19 +44,19 @@ fun BrowseAddDialogItem(result: SelectableNullableBook, onClick: (Boolean) -> Un
Column( Column(
Modifier.weight(1f) Modifier.weight(1f)
) { ) {
Text( StyledText(
text = result.data.bookWithCover!!.book.title, text = result.data.bookWithCover!!.book.title,
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurface, color = MaterialTheme.colorScheme.onSurface
maxLines = 1, ),
overflow = TextOverflow.Ellipsis maxLines = 1
) )
Text( StyledText(
text = result.data.bookWithCover.book.author.asString(), text = result.data.bookWithCover.book.author.asString(),
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant
maxLines = 1, ),
overflow = TextOverflow.Ellipsis maxLines = 1
) )
} }
Row { Row {
@ -85,12 +84,12 @@ fun BrowseAddDialogItem(result: SelectableNullableBook, onClick: (Boolean) -> Un
tint = MaterialTheme.colorScheme.error tint = MaterialTheme.colorScheme.error
) )
Spacer(modifier = Modifier.width(8.dp)) Spacer(modifier = Modifier.width(8.dp))
Text( StyledText(
text = result.data.fileName!!, text = result.data.fileName!!,
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.error, color = MaterialTheme.colorScheme.error
maxLines = 2, ),
overflow = TextOverflow.Ellipsis maxLines = 2
) )
} }
} }

View file

@ -19,19 +19,18 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.InsertDriveFile import androidx.compose.material.icons.automirrored.filled.InsertDriveFile
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.browse.SelectableFile import ua.acclorite.book_story.domain.browse.SelectableFile
import ua.acclorite.book_story.presentation.core.components.common.CircularCheckbox import ua.acclorite.book_story.presentation.core.components.common.CircularCheckbox
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.ui.theme.DefaultTransition import ua.acclorite.book_story.ui.theme.DefaultTransition
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Date import java.util.Date
@ -94,22 +93,22 @@ fun BrowseGridFileItem(file: SelectableFile, hasSelectedItems: Boolean) {
Spacer(modifier = Modifier.height(8.dp)) Spacer(modifier = Modifier.height(8.dp))
Text( StyledText(
file.name, text = file.name,
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurface, color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.bodyLarge,
maxLines = 2,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
lineHeight = 18.sp, lineHeight = 18.sp,
overflow = TextOverflow.Ellipsis ),
maxLines = 2
) )
Spacer(modifier = Modifier.height(2.dp)) Spacer(modifier = Modifier.height(2.dp))
Text( StyledText(
"$fileSize, $lastModified", text = "$fileSize, $lastModified",
color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodySmall.copy(
style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onSurfaceVariant
maxLines = 1, ),
overflow = TextOverflow.Ellipsis maxLines = 1
) )
} }
} }

View file

@ -17,13 +17,13 @@ import androidx.compose.material.icons.filled.PushPin
import androidx.compose.material.icons.outlined.PushPin import androidx.compose.material.icons.outlined.PushPin
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.noRippleClickable import ua.acclorite.book_story.presentation.core.util.noRippleClickable
@Composable @Composable
@ -40,11 +40,12 @@ fun BrowseLayoutHeader(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(8.dp) horizontalArrangement = Arrangement.spacedBy(8.dp)
) { ) {
Text( StyledText(
modifier = Modifier.weight(1f),
text = header, text = header,
color = MaterialTheme.colorScheme.onSurface, modifier = Modifier.weight(1f),
style = MaterialTheme.typography.bodyLarge style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurface
)
) )
Icon( Icon(
modifier = Modifier modifier = Modifier

View file

@ -23,17 +23,16 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.InsertDriveFile import androidx.compose.material.icons.automirrored.filled.InsertDriveFile
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.browse.SelectableFile import ua.acclorite.book_story.domain.browse.SelectableFile
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Date import java.util.Date
import java.util.Locale import java.util.Locale
@ -83,23 +82,23 @@ fun RowScope.BrowseListFileItem(file: SelectableFile) {
} }
Spacer(modifier = Modifier.width(12.dp)) Spacer(modifier = Modifier.width(12.dp))
Column(verticalArrangement = Arrangement.Center) { Column(verticalArrangement = Arrangement.Center) {
Text( StyledText(
file.name, text = file.name,
modifier = Modifier.fillMaxWidth(),
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurface, color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.bodyLarge,
maxLines = 2,
lineHeight = 18.sp, lineHeight = 18.sp,
overflow = TextOverflow.Ellipsis, ),
modifier = Modifier.fillMaxWidth() maxLines = 2
) )
Spacer(modifier = Modifier.height(2.dp)) Spacer(modifier = Modifier.height(2.dp))
Text( StyledText(
"$fileSize, $lastModified", text = "$fileSize, $lastModified",
modifier = Modifier.fillMaxWidth(),
style = MaterialTheme.typography.bodySmall.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.bodySmall, ),
maxLines = 1, maxLines = 1
overflow = TextOverflow.Ellipsis,
modifier = Modifier.fillMaxWidth()
) )
} }
} }

View file

@ -17,7 +17,6 @@ import androidx.compose.material.icons.filled.SelectAll
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
@ -26,12 +25,12 @@ import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.browse.BrowseLayout import ua.acclorite.book_story.domain.browse.BrowseLayout
import ua.acclorite.book_story.domain.browse.SelectableFile import ua.acclorite.book_story.domain.browse.SelectableFile
import ua.acclorite.book_story.presentation.core.components.common.IconButton import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.SearchTextField import ua.acclorite.book_story.presentation.core.components.common.SearchTextField
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar
import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData
import ua.acclorite.book_story.presentation.navigator.NavigatorIconButton import ua.acclorite.book_story.presentation.navigator.NavigatorIconButton
@ -88,10 +87,9 @@ fun BrowseTopBar(
contentID = 0, contentID = 0,
contentNavigationIcon = {}, contentNavigationIcon = {},
contentTitle = { contentTitle = {
Text( StyledText(
stringResource(id = R.string.browse_screen), text = stringResource(id = R.string.browse_screen),
maxLines = 1, maxLines = 1
overflow = TextOverflow.Ellipsis
) )
}, },
contentActions = { contentActions = {
@ -158,12 +156,11 @@ fun BrowseTopBar(
} }
}, },
contentTitle = { contentTitle = {
Text( StyledText(
stringResource( text = stringResource(
id = R.string.selected_items_count_query, id = R.string.selected_items_count_query,
selectedItemsCount.coerceAtLeast(1) selectedItemsCount.coerceAtLeast(1)
), ),
overflow = TextOverflow.Ellipsis,
maxLines = 1 maxLines = 1
) )
}, },

View file

@ -24,7 +24,10 @@ fun HighlightedText(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
text: AnnotatedString, text: AnnotatedString,
highlightThickness: FontWeight, highlightThickness: FontWeight,
style: TextStyle style: TextStyle,
maxLines: Int = Int.MAX_VALUE,
minLines: Int = 1,
overflow: TextOverflow = TextOverflow.Ellipsis
) { ) {
val highlightedText = remember(text, highlightThickness) { val highlightedText = remember(text, highlightThickness) {
buildAnnotatedString { buildAnnotatedString {
@ -60,7 +63,9 @@ fun HighlightedText(
text = highlightedText, text = highlightedText,
modifier = modifier, modifier = modifier,
style = style, style = style,
overflow = TextOverflow.Ellipsis maxLines = maxLines,
minLines = minLines,
overflow = overflow
) )
} }

View file

@ -11,7 +11,6 @@ import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -21,7 +20,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.style.TextOverflow
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
/** /**
@ -67,12 +65,12 @@ fun SearchTextField(
) { innerText -> ) { innerText ->
Box(contentAlignment = Alignment.CenterStart) { Box(contentAlignment = Alignment.CenterStart) {
if (query.isEmpty()) { if (query.isEmpty()) {
Text( StyledText(
text = stringResource(id = R.string.search_field_empty), text = stringResource(id = R.string.search_field_empty),
color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.titleLarge.copy(
style = MaterialTheme.typography.titleLarge, color = MaterialTheme.colorScheme.onSurfaceVariant
maxLines = 1, ),
overflow = TextOverflow.Ellipsis, maxLines = 1
) )
} }
innerText() innerText()

View file

@ -0,0 +1,84 @@
/*
* Book's Story free and open-source Material You eBook reader.
* Copyright (C) 2024-2025 Acclorite
* SPDX-License-Identifier: GPL-3.0-only
*/
package ua.acclorite.book_story.presentation.core.components.common
import androidx.compose.foundation.text.BasicText
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.LocalTextStyle
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.takeOrElse
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextDirection
import androidx.compose.ui.text.style.TextOverflow
@Composable
fun StyledText(
text: AnnotatedString,
modifier: Modifier = Modifier,
style: TextStyle = LocalTextStyle.current,
maxLines: Int = Int.MAX_VALUE,
minLines: Int = 1,
overflow: TextOverflow = TextOverflow.Ellipsis,
highlightText: Boolean = false,
highlightThickness: FontWeight = FontWeight.SemiBold
) {
when (highlightText) {
true -> {
HighlightedText(
modifier = modifier,
text = text,
highlightThickness = highlightThickness,
style = style.copy(
textDirection = TextDirection.Content,
color = style.color.takeOrElse { LocalContentColor.current }
),
maxLines = maxLines,
minLines = minLines,
overflow = overflow
)
}
false -> {
BasicText(
modifier = modifier,
text = text,
style = style.copy(
textDirection = TextDirection.Content,
color = style.color.takeOrElse { LocalContentColor.current }
),
maxLines = maxLines,
minLines = minLines,
overflow = overflow
)
}
}
}
@Composable
fun StyledText(
text: String,
modifier: Modifier = Modifier,
style: TextStyle = LocalTextStyle.current,
maxLines: Int = Int.MAX_VALUE,
minLines: Int = 1,
overflow: TextOverflow = TextOverflow.Ellipsis
) {
BasicText(
modifier = modifier,
text = text,
style = style.copy(
textDirection = TextDirection.Content,
color = style.color.takeOrElse { LocalContentColor.current }
),
maxLines = maxLines,
minLines = minLines,
overflow = overflow
)
}

View file

@ -8,7 +8,6 @@ package ua.acclorite.book_story.presentation.core.components.common
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.PlainTooltip import androidx.compose.material3.PlainTooltip
import androidx.compose.material3.Text
import androidx.compose.material3.TooltipBox import androidx.compose.material3.TooltipBox
import androidx.compose.material3.TooltipDefaults import androidx.compose.material3.TooltipDefaults
import androidx.compose.material3.rememberTooltipState import androidx.compose.material3.rememberTooltipState
@ -39,7 +38,7 @@ fun Tooltip(
enableUserInput = enabled, enableUserInput = enabled,
tooltip = { tooltip = {
PlainTooltip { PlainTooltip {
Text(text = text) StyledText(text = text)
} }
}, },
state = rememberTooltipState() state = rememberTooltipState()

View file

@ -27,7 +27,6 @@ import androidx.compose.material3.BasicAlertDialog
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@ -47,6 +46,7 @@ import androidx.compose.ui.window.DialogProperties
import androidx.compose.ui.window.DialogWindowProvider import androidx.compose.ui.window.DialogWindowProvider
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -105,7 +105,7 @@ fun Dialog(
Spacer(modifier = Modifier.height(16.dp)) Spacer(modifier = Modifier.height(16.dp))
} }
Text( StyledText(
text = title, text = title,
modifier = Modifier modifier = Modifier
.align( .align(
@ -113,19 +113,21 @@ fun Dialog(
else Alignment.Start else Alignment.Start
) )
.padding(horizontal = 24.dp), .padding(horizontal = 24.dp),
style = MaterialTheme.typography.headlineSmall.copy(
textAlign = if (icon != null) TextAlign.Center textAlign = if (icon != null) TextAlign.Center
else TextAlign.Start, else TextAlign.Start,
style = MaterialTheme.typography.headlineSmall,
color = MaterialTheme.colorScheme.onSurface color = MaterialTheme.colorScheme.onSurface
) )
)
if (description != null) { if (description != null) {
Spacer(modifier = Modifier.height(16.dp)) Spacer(modifier = Modifier.height(16.dp))
Text( StyledText(
text = description, text = description,
style = MaterialTheme.typography.bodyMedium, modifier = Modifier.padding(horizontal = 24.dp),
color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodyMedium.copy(
modifier = Modifier.padding(horizontal = 24.dp) color = MaterialTheme.colorScheme.onSurfaceVariant
)
) )
} }
@ -156,11 +158,12 @@ fun Dialog(
}, },
enabled = !actionClicked enabled = !actionClicked
) { ) {
Text( StyledText(
text = stringResource(id = R.string.cancel), text = stringResource(id = R.string.cancel),
style = MaterialTheme.typography.labelLarge, style = MaterialTheme.typography.labelLarge.copy(
color = MaterialTheme.colorScheme.primary color = MaterialTheme.colorScheme.primary
) )
)
} }
TextButton( TextButton(
@ -172,13 +175,13 @@ fun Dialog(
}, },
enabled = actionEnabled == true && !actionClicked enabled = actionEnabled == true && !actionClicked
) { ) {
Text( StyledText(
text = stringResource(id = R.string.ok), text = stringResource(id = R.string.ok),
style = MaterialTheme.typography.labelLarge, style = MaterialTheme.typography.labelLarge.copy(
color = color = if (actionEnabled == true) MaterialTheme.colorScheme.primary
if (actionEnabled == true) MaterialTheme.colorScheme.primary
else MaterialTheme.colorScheme.primary.copy(0.5f) else MaterialTheme.colorScheme.primary.copy(0.5f)
) )
)
} }
} }
} }

View file

@ -10,7 +10,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.material3.TextFieldDefaults import androidx.compose.material3.TextFieldDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
@ -24,9 +23,9 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun DialogWithTextField( fun DialogWithTextField(
@ -89,10 +88,9 @@ fun DialogWithTextField(
unfocusedContainerColor = Color.Transparent unfocusedContainerColor = Color.Transparent
), ),
placeholder = { placeholder = {
Text( StyledText(
text = initialValue, text = initialValue,
maxLines = 1, maxLines = 1
overflow = TextOverflow.Ellipsis
) )
} }
) )

View file

@ -16,13 +16,12 @@ import androidx.compose.foundation.layout.width
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.RadioButton import androidx.compose.material3.RadioButton
import androidx.compose.material3.RadioButtonDefaults import androidx.compose.material3.RadioButtonDefaults
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun SelectableDialogItem( fun SelectableDialogItem(
@ -48,12 +47,12 @@ fun SelectableDialogItem(
) )
) )
Spacer(modifier = Modifier.width(8.dp)) Spacer(modifier = Modifier.width(8.dp))
Text( StyledText(
text = title, text = title,
color = MaterialTheme.colorScheme.onSurface, style = MaterialTheme.typography.bodyLarge.copy(
style = MaterialTheme.typography.bodyLarge, color = MaterialTheme.colorScheme.onSurface
maxLines = 1, ),
overflow = TextOverflow.Ellipsis maxLines = 1
) )
} }
} }

View file

@ -11,11 +11,10 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.PrimaryTabRow import androidx.compose.material3.PrimaryTabRow
import androidx.compose.material3.Tab import androidx.compose.material3.Tab
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.style.TextOverflow import ua.acclorite.book_story.presentation.core.components.common.StyledText
/** /**
* Primary Tab Row. Used in BottomSheet in pair with HorizontalPager. * Primary Tab Row. Used in BottomSheet in pair with HorizontalPager.
@ -47,11 +46,10 @@ fun ModalBottomSheetTabRow(
selectedContentColor = MaterialTheme.colorScheme.primary, selectedContentColor = MaterialTheme.colorScheme.primary,
unselectedContentColor = MaterialTheme.colorScheme.onSurfaceVariant, unselectedContentColor = MaterialTheme.colorScheme.onSurfaceVariant,
text = { text = {
Text( StyledText(
tabItem, text = tabItem,
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
maxLines = 1, maxLines = 1
overflow = TextOverflow.Ellipsis
) )
} }
) )

View file

@ -14,10 +14,10 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
/** /**
* Modal Drawer Title Item. * Modal Drawer Title Item.
@ -38,11 +38,12 @@ fun ModalDrawerTitleItem(
.padding(horizontal = 18.dp) .padding(horizontal = 18.dp)
) { ) {
Spacer(modifier = Modifier.height(9.dp)) Spacer(modifier = Modifier.height(9.dp))
Text( StyledText(
text = title, text = title,
color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.padding(horizontal = 18.dp),
style = MaterialTheme.typography.titleLarge, style = MaterialTheme.typography.titleLarge.copy(
modifier = Modifier.padding(horizontal = 18.dp) color = MaterialTheme.colorScheme.onSurfaceVariant
)
) )
Spacer(modifier = Modifier.height(9.dp)) Spacer(modifier = Modifier.height(9.dp))
HorizontalDivider() HorizontalDivider()

View file

@ -12,14 +12,13 @@ import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.NavigationBarItem import androidx.compose.material3.NavigationBarItem
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.domain.navigator.NavigatorItem import ua.acclorite.book_story.domain.navigator.NavigatorItem
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.common.Tooltip import ua.acclorite.book_story.presentation.core.components.common.Tooltip
@Composable @Composable
@ -35,10 +34,9 @@ fun RowScope.NavigationBarItem(
text = stringResource(id = item.tooltip), text = stringResource(id = item.tooltip),
padding = 64.dp padding = 64.dp
) { ) {
Text( StyledText(
text = stringResource(id = item.title), text = stringResource(id = item.title),
maxLines = 1, maxLines = 1
overflow = TextOverflow.Ellipsis
) )
} }
}, },

View file

@ -11,14 +11,13 @@ import androidx.compose.animation.core.tween
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.NavigationRailItem import androidx.compose.material3.NavigationRailItem
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.domain.navigator.NavigatorItem import ua.acclorite.book_story.domain.navigator.NavigatorItem
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.common.Tooltip import ua.acclorite.book_story.presentation.core.components.common.Tooltip
@Composable @Composable
@ -34,10 +33,9 @@ fun NavigationRailItem(
text = stringResource(id = item.tooltip), text = stringResource(id = item.tooltip),
padding = 48.dp padding = 48.dp
) { ) {
Text( StyledText(
text = stringResource(id = item.title), text = stringResource(id = item.title),
maxLines = 1, maxLines = 1
overflow = TextOverflow.Ellipsis
) )
} }
}, },

View file

@ -17,7 +17,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -25,6 +24,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
/** /**
@ -59,12 +59,13 @@ fun EmptyPlaceholder(
tint = MaterialTheme.colorScheme.primary tint = MaterialTheme.colorScheme.primary
) )
Spacer(modifier = Modifier.height(4.dp)) Spacer(modifier = Modifier.height(4.dp))
Text( StyledText(
text = message, text = message,
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
)
if (actionTitle != null) { if (actionTitle != null) {
Spacer(modifier = Modifier.height(4.dp)) Spacer(modifier = Modifier.height(4.dp))
TextButton( TextButton(
@ -72,11 +73,12 @@ fun EmptyPlaceholder(
action() action()
} }
) { ) {
Text( StyledText(
actionTitle, text = actionTitle,
style = MaterialTheme.typography.labelLarge, style = MaterialTheme.typography.labelLarge.copy(
color = MaterialTheme.colorScheme.primary color = MaterialTheme.colorScheme.primary
) )
)
} }
} }
} }

View file

@ -17,7 +17,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -25,6 +24,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
/** /**
* Empty placeholder. * Empty placeholder.
@ -59,12 +59,13 @@ fun ErrorPlaceholder(
tint = MaterialTheme.colorScheme.error tint = MaterialTheme.colorScheme.error
) )
Spacer(modifier = Modifier.height(4.dp)) Spacer(modifier = Modifier.height(4.dp))
Text( StyledText(
text = errorMessage, text = errorMessage,
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.error, color = MaterialTheme.colorScheme.error,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
)
if (actionTitle != null) { if (actionTitle != null) {
Spacer(modifier = Modifier.height(4.dp)) Spacer(modifier = Modifier.height(4.dp))
TextButton( TextButton(
@ -72,11 +73,12 @@ fun ErrorPlaceholder(
action() action()
} }
) { ) {
Text( StyledText(
actionTitle, text = actionTitle,
style = MaterialTheme.typography.labelLarge, style = MaterialTheme.typography.labelLarge.copy(
color = MaterialTheme.colorScheme.primary color = MaterialTheme.colorScheme.primary
) )
)
} }
} }
} }

View file

@ -15,12 +15,12 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material3.FilterChip import androidx.compose.material3.FilterChip
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.domain.ui.ButtonItem import ua.acclorite.book_story.domain.ui.ButtonItem
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle
/** /**
@ -53,8 +53,8 @@ fun ChipsWithTitle(
modifier = Modifier.height(36.dp), modifier = Modifier.height(36.dp),
selected = item.selected, selected = item.selected,
label = { label = {
Text( StyledText(
item.title, text = item.title,
style = item.textStyle, style = item.textStyle,
maxLines = 1 maxLines = 1
) )

View file

@ -33,7 +33,6 @@ import androidx.compose.material.icons.filled.Done
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.SegmentedButtonColors import androidx.compose.material3.SegmentedButtonColors
import androidx.compose.material3.SegmentedButtonDefaults import androidx.compose.material3.SegmentedButtonDefaults
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -45,6 +44,7 @@ import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.ui.ButtonItem import ua.acclorite.book_story.domain.ui.ButtonItem
import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle
/** /**
@ -179,11 +179,12 @@ private fun SegmentedButton(
} }
} }
Text( StyledText(
text = button.title, text = button.title,
style = button.textStyle, style = button.textStyle.copy(
color = if (button.selected) colors.activeContentColor color = if (button.selected) colors.activeContentColor
else colors.inactiveContentColor else colors.inactiveContentColor
) )
)
} }
} }

View file

@ -21,7 +21,6 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.PlainTooltip import androidx.compose.material3.PlainTooltip
import androidx.compose.material3.Slider import androidx.compose.material3.Slider
import androidx.compose.material3.SliderDefaults import androidx.compose.material3.SliderDefaults
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
@ -30,6 +29,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -78,11 +78,12 @@ fun SliderWithTitle(
Column(Modifier.fillMaxWidth(0.2f)) { Column(Modifier.fillMaxWidth(0.2f)) {
SettingsSubcategoryTitle(title = title, padding = 0.dp) SettingsSubcategoryTitle(title = title, padding = 0.dp)
Spacer(modifier = Modifier.height(4.dp)) Spacer(modifier = Modifier.height(4.dp))
Text( StyledText(
text = placeholder.value, text = placeholder.value,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant color = MaterialTheme.colorScheme.onSurfaceVariant
) )
)
} }
Spacer(modifier = Modifier.width(8.dp)) Spacer(modifier = Modifier.width(8.dp))
Slider( Slider(
@ -98,7 +99,7 @@ fun SliderWithTitle(
PlainTooltip( PlainTooltip(
modifier = Modifier.clip(CircleShape) modifier = Modifier.clip(CircleShape)
) { ) {
Text( StyledText(
text = placeholder.value, text = placeholder.value,
modifier = Modifier.padding( modifier = Modifier.padding(
vertical = 6.dp, vertical = 6.dp,
@ -166,11 +167,12 @@ fun SliderWithTitle(
Column(Modifier.fillMaxWidth(0.2f)) { Column(Modifier.fillMaxWidth(0.2f)) {
SettingsSubcategoryTitle(title = title, padding = 0.dp) SettingsSubcategoryTitle(title = title, padding = 0.dp)
Spacer(modifier = Modifier.height(4.dp)) Spacer(modifier = Modifier.height(4.dp))
Text( StyledText(
text = placeholder.value, text = placeholder.value,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant color = MaterialTheme.colorScheme.onSurfaceVariant
) )
)
} }
Spacer(modifier = Modifier.width(8.dp)) Spacer(modifier = Modifier.width(8.dp))
Slider( Slider(
@ -186,7 +188,7 @@ fun SliderWithTitle(
PlainTooltip( PlainTooltip(
modifier = Modifier.clip(CircleShape) modifier = Modifier.clip(CircleShape)
) { ) {
Text( StyledText(
text = placeholder.value, text = placeholder.value,
modifier = Modifier.padding( modifier = Modifier.padding(
vertical = 6.dp, vertical = 6.dp,

View file

@ -17,14 +17,13 @@ import androidx.compose.foundation.layout.width
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Switch import androidx.compose.material3.Switch
import androidx.compose.material3.SwitchDefaults import androidx.compose.material3.SwitchDefaults
import androidx.compose.material3.Text
import androidx.compose.material3.VerticalDivider import androidx.compose.material3.VerticalDivider
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
/** /**
* Checkbox with title. * Checkbox with title.
@ -53,17 +52,18 @@ fun SwitchWithTitle(
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Column(Modifier.weight(1f), verticalArrangement = Arrangement.Center) { Column(Modifier.weight(1f), verticalArrangement = Arrangement.Center) {
Text( StyledText(
text = title, text = title,
color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.titleMedium.copy(
overflow = TextOverflow.Ellipsis, color = MaterialTheme.colorScheme.onSurfaceVariant
style = MaterialTheme.typography.titleMedium )
) )
description?.let { description?.let {
Text( StyledText(
text = it, text = it,
color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodySmall.copy(
style = MaterialTheme.typography.bodySmall color = MaterialTheme.colorScheme.onSurfaceVariant
)
) )
} }
} }

View file

@ -16,16 +16,15 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.domain.about.Credit import ua.acclorite.book_story.domain.about.Credit
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@OptIn(ExperimentalLayoutApi::class) @OptIn(ExperimentalLayoutApi::class)
@Composable @Composable
@ -41,20 +40,21 @@ fun CreditItem(
.clickable(enabled = credit.website != null) { onClick.invoke() } .clickable(enabled = credit.website != null) { onClick.invoke() }
.padding(vertical = verticalPadding, horizontal = horizontalPadding) .padding(vertical = verticalPadding, horizontal = horizontalPadding)
) { ) {
Text( StyledText(
text = credit.name, text = credit.name,
style = MaterialTheme.typography.titleLarge, style = MaterialTheme.typography.titleLarge.copy(
color = MaterialTheme.colorScheme.onSurface, color = MaterialTheme.colorScheme.onSurface
maxLines = 2, ),
overflow = TextOverflow.Ellipsis maxLines = 2
) )
credit.source?.let { credit.source?.let {
Text( StyledText(
text = it, text = it,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant color = MaterialTheme.colorScheme.onSurfaceVariant
) )
)
} }
if (credit.credits.isNotEmpty()) { if (credit.credits.isNotEmpty()) {
@ -64,16 +64,16 @@ fun CreditItem(
horizontalArrangement = Arrangement.spacedBy(4.dp) horizontalArrangement = Arrangement.spacedBy(4.dp)
) { ) {
credit.credits.forEach { credit.credits.forEach {
Text( StyledText(
text = it.asString(), text = it.asString(),
color = MaterialTheme.colorScheme.onPrimary,
style = MaterialTheme.typography.bodySmall,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
modifier = Modifier modifier = Modifier
.clip(RoundedCornerShape(100)) .clip(CircleShape)
.background(MaterialTheme.colorScheme.primary, RoundedCornerShape(100)) .background(MaterialTheme.colorScheme.primary)
.padding(vertical = 4.dp, horizontal = 8.dp) .padding(vertical = 4.dp, horizontal = 8.dp),
style = MaterialTheme.typography.bodySmall.copy(
color = MaterialTheme.colorScheme.onPrimary,
),
maxLines = 1
) )
} }
} }

View file

@ -9,12 +9,12 @@ package ua.acclorite.book_story.presentation.credits
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -25,7 +25,7 @@ fun CreditsTopBar(
) { ) {
LargeTopAppBar( LargeTopAppBar(
title = { title = {
Text(stringResource(id = R.string.credits_option)) StyledText(stringResource(id = R.string.credits_option))
}, },
navigationIcon = { navigationIcon = {
NavigatorBackIconButton(navigateBack = navigateBack) NavigatorBackIconButton(navigateBack = navigateBack)

View file

@ -13,12 +13,12 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.ui.browse.BrowseScreen import ua.acclorite.book_story.ui.browse.BrowseScreen
import ua.acclorite.book_story.ui.main.MainEvent import ua.acclorite.book_story.ui.main.MainEvent
@ -41,7 +41,7 @@ fun HelpBottomBar(
navigateToBrowse() navigateToBrowse()
} }
) { ) {
Text(text = stringResource(id = R.string.done)) StyledText(text = stringResource(id = R.string.done))
} }
} }
} }

View file

@ -26,7 +26,6 @@ import androidx.compose.material.icons.outlined.ArrowDropUp
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
@ -41,6 +40,7 @@ import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.help.HelpTip import ua.acclorite.book_story.domain.help.HelpTip
import ua.acclorite.book_story.domain.util.Position import ua.acclorite.book_story.domain.util.Position
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.noRippleClickable import ua.acclorite.book_story.presentation.core.util.noRippleClickable
import ua.acclorite.book_story.ui.theme.ExpandingTransition import ua.acclorite.book_story.ui.theme.ExpandingTransition
@ -112,11 +112,12 @@ fun HelpItem(
}, },
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Text( StyledText(
text = stringResource(id = helpTip.title), text = stringResource(id = helpTip.title),
color = MaterialTheme.colorScheme.onSurface, modifier = Modifier.weight(1f),
style = MaterialTheme.typography.titleLarge, style = MaterialTheme.typography.titleLarge.copy(
modifier = Modifier.weight(1f) color = MaterialTheme.colorScheme.onSurface
)
) )
Spacer(modifier = Modifier.width(8.dp)) Spacer(modifier = Modifier.width(8.dp))
Icon( Icon(
@ -142,7 +143,7 @@ fun HelpItem(
Spacer(modifier = Modifier.height(9.dp)) Spacer(modifier = Modifier.height(9.dp))
HorizontalDivider() HorizontalDivider()
Spacer(modifier = Modifier.height(9.dp)) Spacer(modifier = Modifier.height(9.dp))
Text( StyledText(
text = buildAnnotatedString { text = buildAnnotatedString {
helpTip.description.invoke(this@buildAnnotatedString) helpTip.description.invoke(this@buildAnnotatedString)
}, },

View file

@ -11,13 +11,13 @@ import androidx.compose.material.icons.outlined.RestartAlt
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.IconButton import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -30,7 +30,7 @@ fun HelpTopBar(
) { ) {
LargeTopAppBar( LargeTopAppBar(
title = { title = {
Text(stringResource(id = R.string.help_screen)) StyledText(stringResource(id = R.string.help_screen))
}, },
navigationIcon = { navigationIcon = {
if (!fromStart) NavigatorBackIconButton(navigateBack = navigateBack) if (!fromStart) NavigatorBackIconButton(navigateBack = navigateBack)

View file

@ -27,20 +27,19 @@ import androidx.compose.material.icons.filled.Image
import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.history.History import ua.acclorite.book_story.domain.history.History
import ua.acclorite.book_story.presentation.core.components.common.AsyncCoverImage import ua.acclorite.book_story.presentation.core.components.common.AsyncCoverImage
import ua.acclorite.book_story.presentation.core.components.common.IconButton import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.noRippleClickable import ua.acclorite.book_story.presentation.core.util.noRippleClickable
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Date import java.util.Date
@ -108,28 +107,27 @@ fun LazyItemScope.HistoryItem(
verticalArrangement = Arrangement.Center, verticalArrangement = Arrangement.Center,
modifier = Modifier.fillMaxHeight() modifier = Modifier.fillMaxHeight()
) { ) {
Text( StyledText(
historyEntry.book?.title ?: return, text = historyEntry.book?.title ?: return,
color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.bodyLarge,
lineHeight = 21.sp,
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.noRippleClickable( .noRippleClickable(
enabled = !isRefreshing, enabled = !isRefreshing,
onClick = onTitleClick onClick = onTitleClick
), ),
maxLines = 2, style = MaterialTheme.typography.bodyLarge.copy(
overflow = TextOverflow.Ellipsis color = MaterialTheme.colorScheme.onSurface,
lineHeight = 21.sp
),
maxLines = 2
) )
Text( StyledText(
pattern.format(date), text = pattern.format(date),
color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.fillMaxWidth(),
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium.copy(
modifier = Modifier color = MaterialTheme.colorScheme.onSurfaceVariant
.fillMaxWidth(), ),
maxLines = 1, maxLines = 1
overflow = TextOverflow.Ellipsis
) )
} }
} }

View file

@ -11,7 +11,6 @@ import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Search import androidx.compose.material.icons.filled.Search
import androidx.compose.material.icons.outlined.DeleteSweep import androidx.compose.material.icons.outlined.DeleteSweep
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester
@ -21,6 +20,7 @@ import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.IconButton import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.SearchTextField import ua.acclorite.book_story.presentation.core.components.common.SearchTextField
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar
import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData
import ua.acclorite.book_story.presentation.navigator.NavigatorIconButton import ua.acclorite.book_story.presentation.navigator.NavigatorIconButton
@ -56,7 +56,7 @@ fun HistoryTopBar(
contentID = 0, contentID = 0,
contentNavigationIcon = {}, contentNavigationIcon = {},
contentTitle = { contentTitle = {
Text(stringResource(id = R.string.history_screen)) StyledText(stringResource(id = R.string.history_screen))
}, },
contentActions = { contentActions = {
IconButton( IconButton(

View file

@ -26,7 +26,6 @@ import androidx.compose.material3.FilledIconButton
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButtonDefaults import androidx.compose.material3.IconButtonDefaults
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -35,11 +34,11 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.book.SelectableBook import ua.acclorite.book_story.domain.library.book.SelectableBook
import ua.acclorite.book_story.presentation.core.components.common.AsyncCoverImage import ua.acclorite.book_story.presentation.core.components.common.AsyncCoverImage
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.calculateProgress import ua.acclorite.book_story.presentation.core.util.calculateProgress
@OptIn(ExperimentalFoundationApi::class) @OptIn(ExperimentalFoundationApi::class)
@ -111,16 +110,17 @@ fun LazyGridItemScope.LibraryItem(
) )
} }
Text( StyledText(
progress, text = progress,
textAlign = TextAlign.Center,
color = MaterialTheme.colorScheme.onPrimary,
modifier = Modifier modifier = Modifier
.padding(6.dp) .padding(6.dp)
.clip(MaterialTheme.shapes.small) .clip(MaterialTheme.shapes.small)
.background(MaterialTheme.colorScheme.primary, MaterialTheme.shapes.small) .background(MaterialTheme.colorScheme.primary, MaterialTheme.shapes.small)
.padding(horizontal = 8.dp, vertical = 4.dp), .padding(horizontal = 8.dp, vertical = 4.dp),
style = MaterialTheme.typography.bodySmall style = MaterialTheme.typography.bodySmall.copy(
textAlign = TextAlign.Center,
color = MaterialTheme.colorScheme.onPrimary,
)
) )
FilledIconButton( FilledIconButton(
@ -145,16 +145,16 @@ fun LazyGridItemScope.LibraryItem(
} }
} }
Spacer(modifier = Modifier.height(6.dp)) Spacer(modifier = Modifier.height(6.dp))
Text( StyledText(
book.data.title, text = book.data.title,
color = fontColor,
style = MaterialTheme.typography.bodyMedium,
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(horizontal = 4.dp), .padding(horizontal = 4.dp),
style = MaterialTheme.typography.bodyMedium.copy(
color = fontColor
),
minLines = 2, minLines = 2,
maxLines = 2, maxLines = 2
overflow = TextOverflow.Ellipsis,
) )
} }
} }

View file

@ -21,7 +21,6 @@ import androidx.compose.material3.ScrollableTabRow
import androidx.compose.material3.Tab import androidx.compose.material3.Tab
import androidx.compose.material3.TabRowDefaults import androidx.compose.material3.TabRowDefaults
import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
@ -31,6 +30,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import ua.acclorite.book_story.domain.library.category.CategoryWithBooks import ua.acclorite.book_story.domain.library.category.CategoryWithBooks
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun LibraryTabs( fun LibraryTabs(
@ -81,13 +81,13 @@ fun LibraryTabs(
unselectedContentColor = MaterialTheme.colorScheme.onSurfaceVariant, unselectedContentColor = MaterialTheme.colorScheme.onSurfaceVariant,
text = { text = {
Row(verticalAlignment = Alignment.CenterVertically) { Row(verticalAlignment = Alignment.CenterVertically) {
Text( StyledText(
tabItem.title.asString(), text = tabItem.title.asString(),
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
maxLines = 1, maxLines = 1,
) )
Spacer(modifier = Modifier.width(6.dp)) Spacer(modifier = Modifier.width(6.dp))
Text( StyledText(
text = tabItem.books.count().toString(), text = tabItem.books.count().toString(),
modifier = Modifier modifier = Modifier
.background( .background(
@ -95,8 +95,9 @@ fun LibraryTabs(
MaterialTheme.shapes.medium MaterialTheme.shapes.medium
) )
.padding(horizontal = 8.dp, vertical = 4.dp), .padding(horizontal = 8.dp, vertical = 4.dp),
color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodyMedium.copy(
style = MaterialTheme.typography.bodyMedium color = MaterialTheme.colorScheme.onSurfaceVariant
)
) )
} }
} }

View file

@ -23,8 +23,8 @@ import androidx.compose.material.icons.filled.Clear
import androidx.compose.material.icons.filled.Search import androidx.compose.material.icons.filled.Search
import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -32,13 +32,13 @@ import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.category.CategoryWithBooks import ua.acclorite.book_story.domain.library.category.CategoryWithBooks
import ua.acclorite.book_story.presentation.core.components.common.IconButton import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.SearchTextField import ua.acclorite.book_story.presentation.core.components.common.SearchTextField
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar
import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData
import ua.acclorite.book_story.presentation.navigator.NavigatorIconButton import ua.acclorite.book_story.presentation.navigator.NavigatorIconButton
@ -86,9 +86,9 @@ fun LibraryTopBar(
contentNavigationIcon = {}, contentNavigationIcon = {},
contentTitle = { contentTitle = {
Row(verticalAlignment = Alignment.CenterVertically) { Row(verticalAlignment = Alignment.CenterVertically) {
Text(stringResource(id = R.string.library_screen)) StyledText(text = stringResource(id = R.string.library_screen))
Spacer(modifier = Modifier.width(6.dp)) Spacer(modifier = Modifier.width(6.dp))
Text( StyledText(
text = bookCount.toString(), text = bookCount.toString(),
modifier = Modifier modifier = Modifier
.background( .background(
@ -96,9 +96,11 @@ fun LibraryTopBar(
RoundedCornerShape(14.dp) RoundedCornerShape(14.dp)
) )
.padding(horizontal = 8.dp, vertical = 3.dp), .padding(horizontal = 8.dp, vertical = 3.dp),
style = LocalTextStyle.current.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
fontSize = 16.sp fontSize = 16.sp
) )
)
} }
}, },
contentActions = { contentActions = {
@ -157,12 +159,11 @@ fun LibraryTopBar(
} }
}, },
contentTitle = { contentTitle = {
Text( StyledText(
stringResource( text = stringResource(
id = R.string.selected_items_count_query, id = R.string.selected_items_count_query,
selectedItemsCount.coerceAtLeast(1) selectedItemsCount.coerceAtLeast(1)
), ),
overflow = TextOverflow.Ellipsis,
maxLines = 1 maxLines = 1
) )
}, },

View file

@ -15,15 +15,14 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyItemScope import androidx.compose.foundation.lazy.LazyItemScope
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.mikepenz.aboutlibraries.entity.License import com.mikepenz.aboutlibraries.entity.License
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.ui.theme.SlidingTransition import ua.acclorite.book_story.ui.theme.SlidingTransition
@Composable @Composable
@ -40,12 +39,8 @@ fun LazyItemScope.LicenseInfoItem(
fadeOutSpec = null fadeOutSpec = null
) )
) { ) {
Text( StyledText(
text = license.name, text = license.name,
color = MaterialTheme.colorScheme.onPrimary,
style = MaterialTheme.typography.titleSmall,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
modifier = Modifier modifier = Modifier
.clip(RoundedCornerShape(100)) .clip(RoundedCornerShape(100))
.clickable(enabled = license.licenseContent?.isNotBlank() == true) { .clickable(enabled = license.licenseContent?.isNotBlank() == true) {
@ -55,7 +50,11 @@ fun LazyItemScope.LicenseInfoItem(
MaterialTheme.colorScheme.primary, MaterialTheme.colorScheme.primary,
RoundedCornerShape(100) RoundedCornerShape(100)
) )
.padding(vertical = 6.dp, horizontal = 12.dp) .padding(vertical = 6.dp, horizontal = 12.dp),
style = MaterialTheme.typography.titleSmall.copy(
color = MaterialTheme.colorScheme.onPrimary,
),
maxLines = 1
) )
SlidingTransition( SlidingTransition(
@ -64,15 +63,16 @@ fun LazyItemScope.LicenseInfoItem(
) { ) {
Column { Column {
Spacer(modifier = Modifier.height(8.dp)) Spacer(modifier = Modifier.height(8.dp))
Text( StyledText(
text = license.licenseContent!! text = license.licenseContent!!
.lines() .lines()
.joinToString(separator = "\n") { .joinToString(separator = "\n") {
it.trim() it.trim()
}, },
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant color = MaterialTheme.colorScheme.onSurfaceVariant
) )
)
} }
} }
} }

View file

@ -11,15 +11,14 @@ import androidx.compose.material.icons.outlined.Language
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.style.TextOverflow
import com.mikepenz.aboutlibraries.entity.Library import com.mikepenz.aboutlibraries.entity.Library
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.IconButton import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
import ua.acclorite.book_story.ui.about.AboutEvent import ua.acclorite.book_story.ui.about.AboutEvent
@ -35,10 +34,9 @@ fun LicenseInfoTopBar(
LargeTopAppBar( LargeTopAppBar(
title = { title = {
Text( StyledText(
library.name, text = library.name,
maxLines = 1, maxLines = 1
overflow = TextOverflow.Ellipsis
) )
}, },
navigationIcon = { navigationIcon = {

View file

@ -20,18 +20,17 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.mikepenz.aboutlibraries.entity.Library import com.mikepenz.aboutlibraries.entity.Library
import com.mikepenz.aboutlibraries.ui.compose.m3.util.author import com.mikepenz.aboutlibraries.ui.compose.m3.util.author
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@OptIn(ExperimentalLayoutApi::class) @OptIn(ExperimentalLayoutApi::class)
@Composable @Composable
@ -46,47 +45,49 @@ fun LicensesItem(
.padding(vertical = 12.dp, horizontal = 18.dp) .padding(vertical = 12.dp, horizontal = 18.dp)
) { ) {
Row { Row {
Text( StyledText(
text = library.name, text = library.name,
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
style = MaterialTheme.typography.titleLarge, style = MaterialTheme.typography.titleLarge.copy(
color = if (library.openSource) MaterialTheme.colorScheme.onSurface color = if (library.openSource) MaterialTheme.colorScheme.onSurface
else MaterialTheme.colorScheme.error, else MaterialTheme.colorScheme.error
maxLines = 2, ),
overflow = TextOverflow.Ellipsis maxLines = 2
) )
if (library.artifactVersion != null || !library.openSource) { if (library.artifactVersion != null || !library.openSource) {
Spacer(modifier = Modifier.width(8.dp)) Spacer(modifier = Modifier.width(8.dp))
Column(horizontalAlignment = Alignment.End) { Column(horizontalAlignment = Alignment.End) {
library.artifactVersion?.let { library.artifactVersion?.let {
Text( StyledText(
it, text = it,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
)
} }
if (!library.openSource) { if (!library.openSource) {
Text( StyledText(
stringResource(id = R.string.error_closed_source), text = stringResource(id = R.string.error_closed_source),
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
)
} }
} }
} }
} }
if (library.author.isNotBlank()) { if (library.author.isNotBlank()) {
Text( StyledText(
text = library.author, text = library.author,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant
maxLines = 2, ),
overflow = TextOverflow.Ellipsis maxLines = 2
) )
} }
if (library.licenses.isNotEmpty()) { if (library.licenses.isNotEmpty()) {
@ -96,16 +97,16 @@ fun LicensesItem(
horizontalArrangement = Arrangement.spacedBy(4.dp) horizontalArrangement = Arrangement.spacedBy(4.dp)
) { ) {
library.licenses.forEach { library.licenses.forEach {
Text( StyledText(
text = it.name, text = it.name,
color = MaterialTheme.colorScheme.onPrimary,
style = MaterialTheme.typography.bodySmall,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
modifier = Modifier modifier = Modifier
.clip(RoundedCornerShape(100)) .clip(RoundedCornerShape(100))
.background(MaterialTheme.colorScheme.primary, RoundedCornerShape(100)) .background(MaterialTheme.colorScheme.primary, RoundedCornerShape(100))
.padding(vertical = 4.dp, horizontal = 8.dp) .padding(vertical = 4.dp, horizontal = 8.dp),
style = MaterialTheme.typography.bodySmall.copy(
color = MaterialTheme.colorScheme.onPrimary
),
maxLines = 1
) )
} }
} }

View file

@ -9,12 +9,12 @@ package ua.acclorite.book_story.presentation.licenses
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -25,7 +25,7 @@ fun LicensesTopBar(
) { ) {
LargeTopAppBar( LargeTopAppBar(
title = { title = {
Text(stringResource(id = R.string.licenses_option)) StyledText(stringResource(id = R.string.licenses_option))
}, },
navigationIcon = { navigationIcon = {
NavigatorBackIconButton(navigateBack = navigateBack) NavigatorBackIconButton(navigateBack = navigateBack)

View file

@ -15,15 +15,14 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.CornerSize import androidx.compose.foundation.shape.CornerSize
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.domain.util.Position import ua.acclorite.book_story.domain.util.Position
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun NavigatorBottomSheetItem( fun NavigatorBottomSheetItem(
@ -75,12 +74,12 @@ fun NavigatorBottomSheetItem(
.padding(horizontal = 18.dp, vertical = 18.dp), .padding(horizontal = 18.dp, vertical = 18.dp),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Text( StyledText(
text = title, text = title,
style = MaterialTheme.typography.labelLarge, style = MaterialTheme.typography.labelLarge.copy(
color = if (primary) MaterialTheme.colorScheme.onPrimaryContainer color = if (primary) MaterialTheme.colorScheme.onPrimaryContainer
else MaterialTheme.colorScheme.onSurface, else MaterialTheme.colorScheme.onSurface
overflow = TextOverflow.Ellipsis )
) )
} }
} }

View file

@ -22,7 +22,6 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.automirrored.filled.ArrowForward import androidx.compose.material.icons.automirrored.filled.ArrowForward
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
@ -36,6 +35,7 @@ import ua.acclorite.book_story.domain.reader.Checkpoint
import ua.acclorite.book_story.domain.reader.ReaderText import ua.acclorite.book_story.domain.reader.ReaderText
import ua.acclorite.book_story.domain.util.Direction import ua.acclorite.book_story.domain.util.Direction
import ua.acclorite.book_story.presentation.core.components.common.IconButton import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.noRippleClickable import ua.acclorite.book_story.presentation.core.util.noRippleClickable
import ua.acclorite.book_story.ui.reader.ReaderEvent import ua.acclorite.book_story.ui.reader.ReaderEvent
import ua.acclorite.book_story.ui.theme.Colors import ua.acclorite.book_story.ui.theme.Colors
@ -84,10 +84,11 @@ fun ReaderBottomBar(
) { ) {
Spacer(Modifier.height(16.dp)) Spacer(Modifier.height(16.dp))
Text( StyledText(
text = progress, text = progress,
color = MaterialTheme.colorScheme.onSurface, style = MaterialTheme.typography.titleLarge.copy(
style = MaterialTheme.typography.titleLarge color = MaterialTheme.colorScheme.onSurface
)
) )
Spacer(Modifier.height(6.dp)) Spacer(Modifier.height(6.dp))

View file

@ -9,17 +9,16 @@ package ua.acclorite.book_story.presentation.reader
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.reader.ReaderText.Chapter import ua.acclorite.book_story.domain.reader.ReaderText.Chapter
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.modal_drawer.ModalDrawer import ua.acclorite.book_story.presentation.core.components.modal_drawer.ModalDrawer
import ua.acclorite.book_story.presentation.core.components.modal_drawer.ModalDrawerSelectableItem import ua.acclorite.book_story.presentation.core.components.modal_drawer.ModalDrawerSelectableItem
import ua.acclorite.book_story.presentation.core.components.modal_drawer.ModalDrawerTitleItem import ua.acclorite.book_story.presentation.core.components.modal_drawer.ModalDrawerTitleItem
@ -67,17 +66,14 @@ fun ReaderChaptersDrawer(
dismissDrawer(ReaderEvent.OnDismissDrawer) dismissDrawer(ReaderEvent.OnDismissDrawer)
} }
) { ) {
Text( StyledText(
text = chapter.title, text = chapter.title,
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
maxLines = 1, maxLines = 1
overflow = TextOverflow.Ellipsis
) )
if (selected) { if (selected) {
Spacer(modifier = Modifier.width(18.dp)) Spacer(modifier = Modifier.width(18.dp))
Text( StyledText(text = "${currentChapterProgress.calculateProgress(1)}%")
text = "${currentChapterProgress.calculateProgress(1)}%"
)
} }
} }
} }

View file

@ -14,19 +14,16 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyItemScope import androidx.compose.foundation.lazy.LazyItemScope
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.domain.reader.ReaderText.Chapter import ua.acclorite.book_story.domain.reader.ReaderText.Chapter
import ua.acclorite.book_story.domain.reader.ReaderTextAlignment import ua.acclorite.book_story.domain.reader.ReaderTextAlignment
import ua.acclorite.book_story.presentation.core.components.common.HighlightedText import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun LazyItemScope.ReaderLayoutTextChapter( fun LazyItemScope.ReaderLayoutTextChapter(
@ -46,31 +43,20 @@ fun LazyItemScope.ReaderLayoutTextChapter(
.fillMaxWidth() .fillMaxWidth()
) { ) {
Spacer(modifier = Modifier.height(22.dp)) Spacer(modifier = Modifier.height(22.dp))
if (highlightedReading) {
HighlightedText( StyledText(
text = rememberSaveable(saver = AnnotatedString.Saver) { text = buildAnnotatedString { append(chapter.title) },
buildAnnotatedString { append(chapter.title) } modifier = Modifier
}, .padding(horizontal = sidePadding)
highlightThickness = highlightedReadingThickness, .fillMaxWidth(),
style = MaterialTheme.typography.headlineMedium.copy( style = MaterialTheme.typography.headlineMedium.copy(
color = fontColor, color = fontColor,
textAlign = chapterTitleAlignment.textAlignment textAlign = chapterTitleAlignment.textAlignment
), ),
modifier = Modifier highlightText = highlightedReading,
.padding(horizontal = sidePadding) highlightThickness = highlightedReadingThickness
.fillMaxWidth()
) )
} else {
Text(
text = chapter.title,
textAlign = chapterTitleAlignment.textAlignment,
style = MaterialTheme.typography.headlineMedium,
color = fontColor,
modifier = Modifier
.padding(horizontal = sidePadding)
.fillMaxWidth()
)
}
Spacer(modifier = Modifier.height(16.dp)) Spacer(modifier = Modifier.height(16.dp))
HorizontalDivider(color = fontColor.copy(0.4f)) HorizontalDivider(color = fontColor.copy(0.4f))
Spacer(modifier = Modifier.height(16.dp)) Spacer(modifier = Modifier.height(16.dp))

View file

@ -12,7 +12,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyItemScope import androidx.compose.foundation.lazy.LazyItemScope
import androidx.compose.foundation.text.BasicText
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -28,7 +27,7 @@ import ua.acclorite.book_story.domain.reader.FontWithName
import ua.acclorite.book_story.domain.reader.ReaderFontThickness import ua.acclorite.book_story.domain.reader.ReaderFontThickness
import ua.acclorite.book_story.domain.reader.ReaderText.Text import ua.acclorite.book_story.domain.reader.ReaderText.Text
import ua.acclorite.book_story.domain.reader.ReaderTextAlignment import ua.acclorite.book_story.domain.reader.ReaderTextAlignment
import ua.acclorite.book_story.presentation.core.components.common.HighlightedText import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.noRippleClickable import ua.acclorite.book_story.presentation.core.util.noRippleClickable
import ua.acclorite.book_story.ui.reader.ReaderEvent import ua.acclorite.book_story.ui.reader.ReaderEvent
@ -64,50 +63,7 @@ fun LazyItemScope.ReaderLayoutTextParagraph(
verticalArrangement = Arrangement.Center, verticalArrangement = Arrangement.Center,
horizontalAlignment = horizontalAlignment horizontalAlignment = horizontalAlignment
) { ) {
if (highlightedReading) { StyledText(
HighlightedText(
text = paragraph.line,
highlightThickness = highlightedReadingThickness,
modifier = Modifier.then(
if (doubleClickTranslation && toolbarHidden) {
Modifier.noRippleClickable(
onDoubleClick = {
openTranslator(
ReaderEvent.OnOpenTranslator(
textToTranslate = paragraph.line.text,
translateWholeParagraph = true,
activity = activity
)
)
},
onClick = {
menuVisibility(
ReaderEvent.OnMenuVisibility(
show = !showMenu,
fullscreenMode = fullscreenMode,
saveCheckpoint = true,
activity = activity
)
)
}
)
} else Modifier
),
style = TextStyle(
fontFamily = fontFamily.font,
fontWeight = fontThickness.thickness,
textAlign = textAlignment.textAlignment,
textIndent = TextIndent(firstLine = paragraphIndentation),
fontStyle = fontStyle,
letterSpacing = letterSpacing,
fontSize = fontSize,
lineHeight = lineHeight,
color = fontColor,
lineBreak = LineBreak.Paragraph
)
)
} else {
BasicText(
text = paragraph.line, text = paragraph.line,
modifier = Modifier.then( modifier = Modifier.then(
if (doubleClickTranslation && toolbarHidden) { if (doubleClickTranslation && toolbarHidden) {
@ -145,8 +101,9 @@ fun LazyItemScope.ReaderLayoutTextParagraph(
lineHeight = lineHeight, lineHeight = lineHeight,
color = fontColor, color = fontColor,
lineBreak = LineBreak.Paragraph lineBreak = LineBreak.Paragraph
) ),
highlightText = highlightedReading,
highlightThickness = highlightedReadingThickness
) )
} }
} }
}

View file

@ -10,14 +10,14 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.selection.DisableSelection import androidx.compose.foundation.text.selection.DisableSelection
import androidx.compose.material3.Text import androidx.compose.material3.LocalTextStyle
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.TextUnit
import ua.acclorite.book_story.domain.util.HorizontalAlignment import ua.acclorite.book_story.domain.util.HorizontalAlignment
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun ReaderProgressBar( fun ReaderProgressBar(
@ -38,12 +38,13 @@ fun ReaderProgressBar(
contentAlignment = progressBarAlignment.alignment contentAlignment = progressBarAlignment.alignment
) { ) {
DisableSelection { DisableSelection {
Text( StyledText(
text = progress, text = progress,
style = LocalTextStyle.current.copy(
color = fontColor, color = fontColor,
fontSize = progressBarFontSize, fontSize = progressBarFontSize
maxLines = 1, ),
overflow = TextOverflow.Ellipsis maxLines = 1
) )
} }
} }

View file

@ -19,20 +19,20 @@ import androidx.compose.material.icons.rounded.Menu
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.book.Book import ua.acclorite.book_story.domain.library.book.Book
import ua.acclorite.book_story.domain.reader.ReaderText.Chapter import ua.acclorite.book_story.domain.reader.ReaderText.Chapter
import ua.acclorite.book_story.presentation.core.components.common.IconButton import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.LocalActivity import ua.acclorite.book_story.presentation.core.util.LocalActivity
import ua.acclorite.book_story.presentation.core.util.noRippleClickable import ua.acclorite.book_story.presentation.core.util.noRippleClickable
import ua.acclorite.book_story.ui.reader.ReaderEvent import ua.acclorite.book_story.ui.reader.ReaderEvent
@ -90,13 +90,8 @@ fun ReaderTopBar(
} }
}, },
title = { title = {
Text( StyledText(
text = book.title, text = book.title,
fontSize = 20.sp,
lineHeight = 20.sp,
color = MaterialTheme.colorScheme.onSurface,
overflow = TextOverflow.Ellipsis,
maxLines = 1,
modifier = Modifier modifier = Modifier
.padding(end = 8.dp) .padding(end = 8.dp)
.noRippleClickable( .noRippleClickable(
@ -111,18 +106,24 @@ fun ReaderTopBar(
) )
) )
} }
) ),
style = LocalTextStyle.current.copy(
fontSize = 20.sp,
lineHeight = 20.sp,
color = MaterialTheme.colorScheme.onSurface
),
maxLines = 1
) )
}, },
subtitle = { subtitle = {
Text( StyledText(
modifier = Modifier.basicMarquee(iterations = Int.MAX_VALUE),
text = currentChapter?.title text = currentChapter?.title
?: activity.getString(R.string.no_chapters), ?: activity.getString(R.string.no_chapters),
color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.basicMarquee(iterations = Int.MAX_VALUE),
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge.copy(
maxLines = 1, color = MaterialTheme.colorScheme.onSurfaceVariant
overflow = TextOverflow.Ellipsis ),
maxLines = 1
) )
}, },
actions = { actions = {

View file

@ -14,16 +14,16 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun SettingsLayoutItem( fun SettingsLayoutItem(
@ -48,19 +48,20 @@ fun SettingsLayoutItem(
tint = MaterialTheme.colorScheme.onSurfaceVariant tint = MaterialTheme.colorScheme.onSurfaceVariant
) )
Column { Column {
Text( StyledText(
text = title, text = title,
style = LocalTextStyle.current.copy(
fontSize = 19.sp, fontSize = 19.sp,
color = MaterialTheme.colorScheme.onSurface, color = MaterialTheme.colorScheme.onSurface
maxLines = 1, ),
overflow = TextOverflow.Ellipsis maxLines = 1
) )
Text( StyledText(
text = description, text = description,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant
maxLines = 1, ),
overflow = TextOverflow.Ellipsis maxLines = 1
) )
} }
} }

View file

@ -9,12 +9,12 @@ package ua.acclorite.book_story.presentation.settings
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -25,7 +25,7 @@ fun SettingsTopBar(
) { ) {
LargeTopAppBar( LargeTopAppBar(
title = { title = {
Text(stringResource(id = R.string.settings_screen)) StyledText(stringResource(id = R.string.settings_screen))
}, },
navigationIcon = { navigationIcon = {
NavigatorBackIconButton( NavigatorBackIconButton(

View file

@ -9,12 +9,12 @@ package ua.acclorite.book_story.presentation.settings.appearance
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -25,7 +25,7 @@ fun AppearanceSettingsTopBar(
) { ) {
LargeTopAppBar( LargeTopAppBar(
title = { title = {
Text(stringResource(id = R.string.appearance_settings)) StyledText(stringResource(id = R.string.appearance_settings))
}, },
navigationIcon = { navigationIcon = {
NavigatorBackIconButton( NavigatorBackIconButton(

View file

@ -40,7 +40,6 @@ import androidx.compose.material.icons.filled.Shuffle
import androidx.compose.material.icons.rounded.DragHandle import androidx.compose.material.icons.rounded.DragHandle
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
@ -55,7 +54,6 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
@ -70,6 +68,7 @@ import ua.acclorite.book_story.domain.reader.ColorPreset
import ua.acclorite.book_story.domain.util.Selected import ua.acclorite.book_story.domain.util.Selected
import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility
import ua.acclorite.book_story.presentation.core.components.common.IconButton import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.settings.ColorPickerWithTitle import ua.acclorite.book_story.presentation.core.components.settings.ColorPickerWithTitle
import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle
import ua.acclorite.book_story.ui.settings.SettingsEvent import ua.acclorite.book_story.ui.settings.SettingsEvent
@ -306,11 +305,11 @@ private fun ReorderableCollectionItemScope.ColorPresetOptionRowItem(
) )
} }
Text( StyledText(
title.trim(), text = title.trim(),
color = animatedFontColor.value, style = MaterialTheme.typography.labelLarge.copy(
style = MaterialTheme.typography.labelLarge, color = animatedFontColor.value
overflow = TextOverflow.Ellipsis, ),
maxLines = 1 maxLines = 1
) )
@ -387,12 +386,12 @@ private fun ColorPresetOptionConfigurationItem(
contentAlignment = Alignment.CenterStart contentAlignment = Alignment.CenterStart
) { ) {
if (title.value.isEmpty()) { if (title.value.isEmpty()) {
Text( StyledText(
stringResource(id = R.string.color_preset_placeholder), text = stringResource(id = R.string.color_preset_placeholder),
color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.titleLarge.copy(
style = MaterialTheme.typography.titleLarge, color = MaterialTheme.colorScheme.onSurfaceVariant
maxLines = 1, ),
overflow = TextOverflow.Ellipsis, maxLines = 1
) )
} }
innerText() innerText()

View file

@ -32,19 +32,18 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.CheckCircle import androidx.compose.material.icons.filled.CheckCircle
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle
import ua.acclorite.book_story.ui.main.MainEvent import ua.acclorite.book_story.ui.main.MainEvent
import ua.acclorite.book_story.ui.main.MainModel import ua.acclorite.book_story.ui.main.MainModel
@ -199,11 +198,11 @@ private fun AppThemeOptionItem(
} }
} }
Spacer(modifier = Modifier.height(6.dp)) Spacer(modifier = Modifier.height(6.dp))
Text( StyledText(
text = stringResource(id = theme.title), text = stringResource(id = theme.title),
color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.labelLarge.copy(
style = MaterialTheme.typography.labelLarge, color = MaterialTheme.colorScheme.onSurfaceVariant
overflow = TextOverflow.Ellipsis, ),
maxLines = 2 maxLines = 2
) )
} }

View file

@ -9,12 +9,12 @@ package ua.acclorite.book_story.presentation.settings.browse
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -25,7 +25,7 @@ fun BrowseSettingsTopBar(
) { ) {
LargeTopAppBar( LargeTopAppBar(
title = { title = {
Text(stringResource(id = R.string.browse_settings)) StyledText(stringResource(id = R.string.browse_settings))
}, },
navigationIcon = { navigationIcon = {
NavigatorBackIconButton( NavigatorBackIconButton(

View file

@ -18,14 +18,13 @@ import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Checkbox import androidx.compose.material3.Checkbox
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.constants.Constants import ua.acclorite.book_story.presentation.core.constants.Constants
import ua.acclorite.book_story.presentation.core.constants.provideExtensions import ua.acclorite.book_story.presentation.core.constants.provideExtensions
import ua.acclorite.book_story.ui.main.MainEvent import ua.acclorite.book_story.ui.main.MainEvent
@ -70,11 +69,10 @@ private fun BrowseFilterOptionItem(
) )
Spacer(modifier = Modifier.width(14.dp)) Spacer(modifier = Modifier.width(14.dp))
Text( StyledText(
text = item, text = item,
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
maxLines = 1, maxLines = 1
overflow = TextOverflow.Ellipsis
) )
} }
} }

View file

@ -22,18 +22,17 @@ import androidx.compose.material.icons.filled.ArrowDownward
import androidx.compose.material.icons.filled.ArrowUpward import androidx.compose.material.icons.filled.ArrowUpward
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.browse.BrowseSortOrder import ua.acclorite.book_story.domain.browse.BrowseSortOrder
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.ui.main.MainEvent import ua.acclorite.book_story.ui.main.MainEvent
import ua.acclorite.book_story.ui.main.MainModel import ua.acclorite.book_story.ui.main.MainModel
@ -88,7 +87,7 @@ private fun BrowseSortOptionItem(
) )
Spacer(modifier = Modifier.width(24.dp)) Spacer(modifier = Modifier.width(24.dp))
Text( StyledText(
text = stringResource( text = stringResource(
when (item) { when (item) {
BrowseSortOrder.NAME -> R.string.browse_sort_order_name BrowseSortOrder.NAME -> R.string.browse_sort_order_name
@ -98,8 +97,7 @@ private fun BrowseSortOptionItem(
} }
), ),
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
maxLines = 1, maxLines = 1
overflow = TextOverflow.Ellipsis
) )
} }
} }

View file

@ -8,7 +8,6 @@ package ua.acclorite.book_story.presentation.settings.components
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
@ -19,6 +18,7 @@ import androidx.compose.ui.text.style.LineBreak
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun SettingsSubcategoryTitle( fun SettingsSubcategoryTitle(
@ -27,16 +27,16 @@ fun SettingsSubcategoryTitle(
color: Color = MaterialTheme.colorScheme.onSurfaceVariant, color: Color = MaterialTheme.colorScheme.onSurfaceVariant,
padding: Dp = 18.dp padding: Dp = 18.dp
) { ) {
Text( StyledText(
title, text = title,
color = color,
modifier = modifier.padding(horizontal = padding), modifier = modifier.padding(horizontal = padding),
style = TextStyle( style = TextStyle(
lineBreak = LineBreak.Heading, lineBreak = LineBreak.Heading,
fontFamily = FontFamily.Default, fontFamily = FontFamily.Default,
fontWeight = FontWeight.Medium, fontWeight = FontWeight.Medium,
fontSize = 16.sp, fontSize = 16.sp,
lineHeight = 20.sp lineHeight = 20.sp,
color = color
) )
) )
} }

View file

@ -9,12 +9,12 @@ package ua.acclorite.book_story.presentation.settings.general
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -25,7 +25,7 @@ fun GeneralSettingsTopBar(
) { ) {
LargeTopAppBar( LargeTopAppBar(
title = { title = {
Text(stringResource(id = R.string.general_settings)) StyledText(stringResource(id = R.string.general_settings))
}, },
navigationIcon = { navigationIcon = {
NavigatorBackIconButton( NavigatorBackIconButton(

View file

@ -9,12 +9,12 @@ package ua.acclorite.book_story.presentation.settings.reader
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -25,7 +25,7 @@ fun ReaderSettingsTopBar(
) { ) {
LargeTopAppBar( LargeTopAppBar(
title = { title = {
Text(stringResource(id = R.string.reader_settings)) StyledText(stringResource(id = R.string.reader_settings))
}, },
navigationIcon = { navigationIcon = {
NavigatorBackIconButton( NavigatorBackIconButton(

View file

@ -17,7 +17,6 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -25,6 +24,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun StartDoneBottomBar( fun StartDoneBottomBar(
@ -49,7 +49,7 @@ fun StartDoneBottomBar(
navigateToBrowse() navigateToBrowse()
} }
) { ) {
Text(text = stringResource(id = R.string.no)) StyledText(text = stringResource(id = R.string.no))
} }
Spacer(modifier = Modifier.width(18.dp)) Spacer(modifier = Modifier.width(18.dp))
Button( Button(
@ -59,7 +59,7 @@ fun StartDoneBottomBar(
navigateToHelp() navigateToHelp()
} }
) { ) {
Text(text = stringResource(id = R.string.yes_go_to_help)) StyledText(text = stringResource(id = R.string.yes_go_to_help))
} }
} }
} }

View file

@ -18,7 +18,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -27,6 +26,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun StartDoneLayout( fun StartDoneLayout(
@ -48,18 +48,20 @@ fun StartDoneLayout(
modifier = Modifier.size(190.dp) modifier = Modifier.size(190.dp)
) )
Spacer(modifier = Modifier.height(16.dp)) Spacer(modifier = Modifier.height(16.dp))
Text( StyledText(
text = stringResource(id = R.string.start_done), text = stringResource(id = R.string.start_done),
style = MaterialTheme.typography.headlineMedium.copy(
color = MaterialTheme.colorScheme.onSurface, color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.headlineMedium,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
)
Spacer(modifier = Modifier.height(4.dp)) Spacer(modifier = Modifier.height(4.dp))
Text( StyledText(
text = stringResource(id = R.string.start_done_desc), text = stringResource(id = R.string.start_done_desc),
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.bodyMedium,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
)
} }
} }

View file

@ -13,12 +13,12 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun StartSettingsBottomBar( fun StartSettingsBottomBar(
@ -37,7 +37,7 @@ fun StartSettingsBottomBar(
onClick = { navigateForward() }, onClick = { navigateForward() },
enabled = storagePermissionGranted || currentPage != 2 enabled = storagePermissionGranted || currentPage != 2
) { ) {
Text(text = stringResource(id = R.string.next)) StyledText(text = stringResource(id = R.string.next))
} }
} }
} }

View file

@ -19,15 +19,14 @@ import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun StartSettingsLayoutPermissionsItem( fun StartSettingsLayoutPermissionsItem(
@ -44,12 +43,12 @@ fun StartSettingsLayoutPermissionsItem(
) { ) {
Column(Modifier.weight(1f), verticalArrangement = Arrangement.Center) { Column(Modifier.weight(1f), verticalArrangement = Arrangement.Center) {
Row(verticalAlignment = Alignment.CenterVertically) { Row(verticalAlignment = Alignment.CenterVertically) {
Text( StyledText(
text = title, text = title,
color = MaterialTheme.colorScheme.onSurface, style = MaterialTheme.typography.titleMedium.copy(
maxLines = 1, color = MaterialTheme.colorScheme.onSurface
overflow = TextOverflow.Ellipsis, ),
style = MaterialTheme.typography.titleMedium maxLines = 1
) )
if (!isOptional) { if (!isOptional) {
@ -62,10 +61,11 @@ fun StartSettingsLayoutPermissionsItem(
) )
} }
} }
Text( StyledText(
text = description, text = description,
color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodySmall.copy(
style = MaterialTheme.typography.bodySmall color = MaterialTheme.colorScheme.onSurfaceVariant
)
) )
} }
@ -77,22 +77,23 @@ fun StartSettingsLayoutPermissionsItem(
onClick = onGrantClick, onClick = onGrantClick,
contentPadding = ButtonDefaults.TextButtonContentPadding contentPadding = ButtonDefaults.TextButtonContentPadding
) { ) {
Text( StyledText(
text = stringResource(id = R.string.grant), text = stringResource(id = R.string.grant),
style = MaterialTheme.typography.labelLarge style = MaterialTheme.typography.labelLarge
) )
} }
} else { } else {
TextButton(onClick = onGrantClick) { TextButton(onClick = onGrantClick) {
Text(text = stringResource(id = R.string.grant)) StyledText(text = stringResource(id = R.string.grant))
} }
} }
} else { } else {
Text( StyledText(
text = stringResource(id = R.string.start_permissions_granted), text = stringResource(id = R.string.start_permissions_granted),
color = MaterialTheme.colorScheme.primary.copy(0.7f), modifier = Modifier.padding(ButtonDefaults.TextButtonContentPadding),
style = MaterialTheme.typography.labelLarge, style = MaterialTheme.typography.labelLarge.copy(
modifier = Modifier.padding(ButtonDefaults.TextButtonContentPadding) color = MaterialTheme.colorScheme.primary.copy(0.7f)
)
) )
} }
} }

View file

@ -19,13 +19,13 @@ import androidx.compose.material.icons.filled.GolfCourse
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable @Composable
fun StartSettingsScaffold( fun StartSettingsScaffold(
@ -59,16 +59,18 @@ fun StartSettingsScaffold(
modifier = Modifier.size(64.dp) modifier = Modifier.size(64.dp)
) )
Spacer(modifier = Modifier.height(12.dp)) Spacer(modifier = Modifier.height(12.dp))
Text( StyledText(
text = stringResource(id = R.string.start_welcome), text = stringResource(id = R.string.start_welcome),
color = MaterialTheme.colorScheme.onSurface, style = MaterialTheme.typography.headlineSmall.copy(
style = MaterialTheme.typography.headlineSmall color = MaterialTheme.colorScheme.onSurface
)
) )
Spacer(modifier = Modifier.height(8.dp)) Spacer(modifier = Modifier.height(8.dp))
Text( StyledText(
text = stringResource(id = R.string.start_welcome_desc), text = stringResource(id = R.string.start_welcome_desc),
color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodyMedium.copy(
style = MaterialTheme.typography.bodyMedium color = MaterialTheme.colorScheme.onSurfaceVariant
)
) )
Spacer(modifier = Modifier.height(18.dp)) Spacer(modifier = Modifier.height(18.dp))