refactor: take the last 353 spacing literals onto the scale, and reach zero

Phase 2, final step, of docs/material-design-conformance.md. Every `.dp` literal in a
spacing position in the UI tree is now a token. 431 reads of `MaterialTheme.spacing.*`, one
reasoned exemption, and `m3-spacing-positions.py` exits 0.

**Shape decides the token, not just the value.** The migration script grew a per-shape
mapping because the same number means different things in different positions: 8dp of
padding is `compactPadding`, 8dp of gap is `itemGap`, and 8dp under a `Spacer` is neither
of those and stays `space100`. Where the pair determines the meaning the semantic name is
used, and nowhere else:

    padding + 8dp   -> compactPadding      10 sites
    padding + 16dp  -> containerPadding    10
    gap     + 4dp   -> relatedGap           8
    gap     + 8dp   -> itemGap             10

That is 38 of 353. The rest take the raw stop, and deliberately: assigning a semantic name
needs somebody to have read what the container *is*, and a name that asserts a meaning the
code does not have is worse than a stop that asserts none. `screenMargin` in particular is
unassignable mechanically -- it is 16dp of padding, exactly like `containerPadding` -- so
it has no call sites yet and gets them when someone reads the screens.

**Two spacers were standing in for zero.** `WriteNewNoteScreen` renders
`Spacer(Modifier.height(1.dp))` twice, in the `LazyColumn` item that shows a reply preview
when there is one. There is nothing to show and the item still has to render something;
1dp was the placeholder. Now `space0`, with a comment, because a 1dp gap that nobody
intended is the kind of thing that gets copied.

**One value is exempt, and says so at the site.** `SovereignWalletStartupScreen`'s
`Spacer(Modifier.height(128.dp))` is room to scroll the last wallet clear of the bottom of
the window -- reserved space, not a step in the rhythm. The scale tops out at `space900`
(72dp) and rounding to it would put the row back under the edge.

Rather than exempt it in the script by value, the classifier now honours an inline
`// m3-spacing-exempt: <reason>` comment on the lines directly above. Exemptions belong at
the call site: the reason travels with the code, a reviewer sees it in the diff that adds
it, and the tool stops accumulating a list of numbers that mean nothing on their own -- the
mistake the first version of this audit made with `DIMENSION_EXEMPT`.

**Where the tokens landed.** `space125` (10dp) 128 times and `space250` (20dp) 107 -- the
two values that already dominated the tree, now named. `space600` (48dp) 52 times, which is
the empty-state spacer from the previous commit. The long tail is 2, 4, 6, 12, 14, 16, 24,
32, 40 and 64dp.

**Verified that nothing moved.** The landing screen was captured on emulator-5554 before
and after and compared pixel by pixel on a 4px grid: **47 differing samples out of
162,000, 0.03%**, and they are the status bar clock. The sweep is a rename.

**Budget ratcheted 353 -> 0**, dated in the file. Phase 8 wires `--check` into CI, at which
point a new `.dp` in a `padding()` fails the build.

**Tests.** 942 pass, 594 jvm over 72 classes and 348 android over 44, unchanged --
`SpacingScaleTest` already asserts the scale, and there is nothing to assert about a
call site having been renamed that the compiler does not.
`:composeApp:compileDebugKotlinAndroid` builds, the debug apk installs and runs,
`m3-audit.sh --check` exits 0. 75 files, 432 insertions, 348 deletions.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kgothatso Ngako
2026-09-08 00:36:59 +02:00
parent f7a732d68a
commit 8cd0f3f44d
75 changed files with 432 additions and 348 deletions

View File

@@ -51,6 +51,7 @@ import press.mantra.compose.ui.view.model.ActiveProfileViewModel
import press.mantra.compose.ui.view.state.ActiveProfileUIState
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.metadata.MetadataEvent
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3ExpressiveApi::class, ExperimentalMaterial3Api::class)
@Composable
@@ -111,14 +112,14 @@ fun ActiveProfileScreen(
) {
LazyColumn(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(10.dp),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
horizontalAlignment = Alignment.CenterHorizontally
) {
item {
Row(
modifier = Modifier.fillMaxWidth().padding(10.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space125),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(10.dp)
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
ProfileAvatar(
profile = activeProfileUIState.localNostrEvent.profile,
@@ -140,7 +141,7 @@ fun ActiveProfileScreen(
}
Spacer(
modifier = Modifier.height(10.dp)
modifier = Modifier.height(MaterialTheme.spacing.space125)
)
Text(
@@ -153,7 +154,7 @@ fun ActiveProfileScreen(
item {
Row(
modifier = Modifier.fillMaxWidth().padding(10.dp)
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space125)
) {
Spacer(
modifier = Modifier.weight(1f)
@@ -172,7 +173,7 @@ fun ActiveProfileScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text(
@@ -200,7 +201,7 @@ fun ActiveProfileScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text(
"Share Profile"
@@ -231,7 +232,7 @@ fun ActiveProfileScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text(
@@ -256,7 +257,7 @@ fun ActiveProfileScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text(
@@ -281,7 +282,7 @@ fun ActiveProfileScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text("Profile Keys")
@@ -303,7 +304,7 @@ fun ActiveProfileScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text(
@@ -326,7 +327,7 @@ fun ActiveProfileScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text(

View File

@@ -213,7 +213,7 @@ fun AddArtifactScreen(
// TODO: Check that we have direct message relays for this user...
Column(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(10.dp),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text("Add Artifact to the group library")
@@ -318,7 +318,7 @@ fun AddArtifactScreen(
} else {
FlowRow(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(8.dp)
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.itemGap)
) {
addArtifactUIState.dialects.forEach { dialect ->
FilterChip(
@@ -338,10 +338,10 @@ fun AddArtifactScreen(
AddArtifactUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth().padding(
20.dp
MaterialTheme.spacing.space250
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(

View File

@@ -200,8 +200,8 @@ fun AddChapterScreen(
}
) { innerPadding ->
Column(
modifier = Modifier.padding(innerPadding).fillMaxSize().padding(20.dp),
verticalArrangement = Arrangement.spacedBy(10.dp)
modifier = Modifier.padding(innerPadding).fillMaxSize().padding(MaterialTheme.spacing.space250),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
if (!addChapterUIState.canSign) {
Text(
@@ -266,9 +266,9 @@ fun AddChapterScreen(
AddChapterUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth().padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(modifier = Modifier.weight(1f))
Text(

View File

@@ -181,7 +181,7 @@ fun AddDialectScreen(
) {
Column(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(10.dp),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text("Add a dialect the group can translate into")
@@ -282,10 +282,10 @@ fun AddDialectScreen(
AddDialectUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth().padding(
20.dp
MaterialTheme.spacing.space250
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(

View File

@@ -66,7 +66,7 @@ fun AddMemberToChatRoomConfirmationScreen(
when (val addMemberToChatRoomConfirmationUIState = addMemberToChatRoomConfirmationViewModel.addMemberToChatRoomConfirmationUIState) {
is AddMemberToChatRoomConfirmationUIState.Error -> {
Column(
modifier = Modifier.fillMaxWidth().padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally
) {
Spacer(
@@ -127,9 +127,9 @@ fun AddMemberToChatRoomConfirmationScreen(
modifier = Modifier.padding(innerPadding).fillMaxSize()
) {
Column(
modifier = Modifier.weight(1f).fillMaxWidth().padding(20.dp),
modifier = Modifier.weight(1f).fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
Spacer(
modifier = Modifier.weight(1f)
@@ -160,10 +160,10 @@ fun AddMemberToChatRoomConfirmationScreen(
AddMemberToChatRoomConfirmationUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth().padding(
20.dp
MaterialTheme.spacing.space250
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(

View File

@@ -208,8 +208,8 @@ fun AddTranslationArtifactVersionScreen(
}
) { innerPadding ->
Column(
modifier = Modifier.padding(innerPadding).fillMaxSize().padding(20.dp),
verticalArrangement = Arrangement.spacedBy(10.dp)
modifier = Modifier.padding(innerPadding).fillMaxSize().padding(MaterialTheme.spacing.space250),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
if (!addTranslationUIState.canSign) {
Text(
@@ -242,7 +242,7 @@ fun AddTranslationArtifactVersionScreen(
FlowRow(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(8.dp)
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.itemGap)
) {
addTranslationUIState.dialects.forEach { dialect ->
FilterChip(
@@ -277,9 +277,9 @@ fun AddTranslationArtifactVersionScreen(
AddTranslationArtifactVersionUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth().padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(modifier = Modifier.weight(1f))
Text(

View File

@@ -102,8 +102,8 @@ fun ArtifactDetailScreen(
}
) { innerPadding ->
LazyColumn(
modifier = Modifier.padding(innerPadding).fillMaxSize().padding(20.dp),
verticalArrangement = Arrangement.spacedBy(10.dp)
modifier = Modifier.padding(innerPadding).fillMaxSize().padding(MaterialTheme.spacing.space250),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
// Chapters
item {
@@ -166,7 +166,7 @@ fun ArtifactDetailScreen(
Icons.Default.PostAdd,
contentDescription = "Add chapter"
)
Spacer(modifier = Modifier.width(10.dp))
Spacer(modifier = Modifier.width(MaterialTheme.spacing.space125))
Text("Add Chapter")
}
}
@@ -231,7 +231,7 @@ fun ArtifactDetailScreen(
Icons.Default.Translate,
contentDescription = "Add translation"
)
Spacer(modifier = Modifier.width(10.dp))
Spacer(modifier = Modifier.width(MaterialTheme.spacing.space125))
Text("Add Translation")
}
}
@@ -285,9 +285,9 @@ fun ArtifactDetailScreen(
ArtifactDetailUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth().padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(modifier = Modifier.weight(1f))
Text(

View File

@@ -91,8 +91,8 @@ fun ChapterDetailScreen(
}
) { innerPadding ->
LazyColumn(
modifier = Modifier.padding(innerPadding).fillMaxSize().padding(20.dp),
verticalArrangement = Arrangement.spacedBy(10.dp)
modifier = Modifier.padding(innerPadding).fillMaxSize().padding(MaterialTheme.spacing.space250),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
item {
Text(
@@ -111,7 +111,7 @@ fun ChapterDetailScreen(
item {
Card {
Text(
modifier = Modifier.padding(16.dp),
modifier = Modifier.padding(MaterialTheme.spacing.containerPadding),
text = chapter.originalText,
style = MaterialTheme.typography.bodyMedium
)
@@ -157,9 +157,9 @@ fun ChapterDetailScreen(
ChapterDetailUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth().padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(modifier = Modifier.weight(1f))
Text(

View File

@@ -28,6 +28,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import press.mantra.compose.ui.composable.navigation.routes.Route
import press.mantra.compose.ui.view.model.ChatRoomCreationViewModel
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import press.mantra.compose.ui.theme.spacing
@Composable
fun ChatRoomCreationScreen(
@@ -44,9 +45,9 @@ fun ChatRoomCreationScreen(
) {
Column(
modifier = Modifier.fillMaxWidth().padding(10.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space125),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
TextField(
modifier = Modifier.fillMaxWidth(),
@@ -57,7 +58,7 @@ fun ChatRoomCreationScreen(
Text(
text = it,
modifier = Modifier.padding(
bottom = 8.dp
bottom = MaterialTheme.spacing.compactPadding
)
)
}
@@ -101,7 +102,7 @@ fun ChatRoomCreationScreen(
Text(
text = it,
modifier = Modifier.padding(
bottom = 8.dp
bottom = MaterialTheme.spacing.compactPadding
)
)
}

View File

@@ -123,9 +123,9 @@ fun ChatRoomDetailScreen(
modifier = Modifier.padding(innerPadding).fillMaxSize()
) {
LazyColumn(
modifier = Modifier.weight(1f).fillMaxWidth().padding(20.dp),
modifier = Modifier.weight(1f).fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
item {
chatRoomDetailUIState.localChatRoom.chatRoom.description?.let {
@@ -214,7 +214,7 @@ fun ChatRoomDetailScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text("Add Artifact to Library")
@@ -280,7 +280,7 @@ fun ChatRoomDetailScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text("Add Dialect")
@@ -323,7 +323,7 @@ fun ChatRoomDetailScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text("Create project")
@@ -362,7 +362,7 @@ fun ChatRoomDetailScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text("Shared Key")
@@ -396,7 +396,7 @@ fun ChatRoomDetailScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text("Proposals")
@@ -423,7 +423,7 @@ fun ChatRoomDetailScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text("Invite New Member")
@@ -500,7 +500,7 @@ fun ChatRoomDetailScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text("Leave Group")
@@ -526,7 +526,7 @@ fun ChatRoomDetailScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text("Delete Group")
@@ -555,10 +555,10 @@ fun ChatRoomDetailScreen(
ChatRoomDetailUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth().padding(
20.dp
MaterialTheme.spacing.space250
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(
@@ -629,7 +629,7 @@ private fun ReindexMarmotGroupEventsButton(
}
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text("Reindex Events")

View File

@@ -216,8 +216,8 @@ fun ChatRoomMessagingScreen(
modifier = Modifier
.fillMaxWidth()
.background(MaterialTheme.colorScheme.primaryContainer)
.padding(horizontal = 16.dp, vertical = 6.dp),
horizontalArrangement = Arrangement.spacedBy(8.dp),
.padding(horizontal = MaterialTheme.spacing.containerPadding, vertical = MaterialTheme.spacing.space75),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.itemGap),
verticalAlignment = Alignment.CenterVertically
) {
Icon(
@@ -363,10 +363,10 @@ fun ChatRoomMessagingScreen(
ChatRoomMessagingUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth().padding(
20.dp
MaterialTheme.spacing.space250
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(
@@ -396,10 +396,10 @@ fun ChatRoomMessagingScreen(
ChatRoomMessagingUIState.InitiatingNewChat -> {
Column(
modifier = Modifier.fillMaxWidth().padding(
20.dp
MaterialTheme.spacing.space250
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(
modifier = Modifier.weight(1f)

View File

@@ -35,6 +35,7 @@ import press.mantra.compose.repository.MarmotRepository
import press.mantra.compose.ui.theme.LocalExtendedColors
import press.mantra.compose.ui.view.model.CreateProfileViewModel
import press.mantra.compose.ui.view.state.CreateProfileUIState
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Composable
@@ -59,10 +60,10 @@ fun CreateProfileScreen(
Column(
modifier = Modifier.fillMaxWidth().padding(
10.dp
MaterialTheme.spacing.space125
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
when (val createAccountUIState = createProfileViewModel.createProfileUIState.value) {
@@ -119,7 +120,7 @@ fun CreateProfileScreen(
Text(
text = it,
modifier = Modifier.padding(
bottom = 8.dp
bottom = MaterialTheme.spacing.compactPadding
)
)
}
@@ -163,7 +164,7 @@ fun CreateProfileScreen(
Text(
text = it,
modifier = Modifier.padding(
bottom = 8.dp
bottom = MaterialTheme.spacing.compactPadding
)
)
}
@@ -328,7 +329,7 @@ fun CreateProfileScreen(
}
HorizontalDivider(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
)
Button(

View File

@@ -87,7 +87,7 @@ internal fun DkgApprovalScaffold(
) { padding ->
when (val state = dkgRitualViewModel.dkgRitualUIState) {
is DkgRitualUIState.Loading -> Column(
modifier = Modifier.fillMaxWidth().padding(padding).padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(padding).padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally
) {
Spacer(modifier = Modifier.height(MaterialTheme.spacing.space600))
@@ -95,7 +95,7 @@ internal fun DkgApprovalScaffold(
}
is DkgRitualUIState.Error -> Column(
modifier = Modifier.fillMaxWidth().padding(padding).padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(padding).padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally
) {
Spacer(modifier = Modifier.height(MaterialTheme.spacing.space600))
@@ -110,7 +110,7 @@ internal fun DkgApprovalScaffold(
// on the way in, which looks exactly like the screen not working.
if (state.session == null) {
Column(
modifier = Modifier.fillMaxWidth().padding(padding).padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(padding).padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally
) {
Spacer(modifier = Modifier.height(MaterialTheme.spacing.space600))
@@ -130,11 +130,11 @@ internal fun DkgApprovalScaffold(
modifier = Modifier
.fillMaxWidth()
.padding(padding)
.padding(20.dp),
.padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(12.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space150)
) {
Spacer(modifier = Modifier.height(40.dp))
Spacer(modifier = Modifier.height(MaterialTheme.spacing.space500))
Icon(
imageVector = Icons.Default.CheckCircle,
contentDescription = null,
@@ -161,14 +161,14 @@ internal fun DkgApprovalScaffold(
.fillMaxWidth()
.padding(padding)
.verticalScroll(rememberScrollState())
.padding(horizontal = 20.dp, vertical = 16.dp),
verticalArrangement = Arrangement.spacedBy(16.dp)
.padding(horizontal = MaterialTheme.spacing.space250, vertical = MaterialTheme.spacing.containerPadding),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space200)
) {
body(state)
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(12.dp),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space150),
verticalAlignment = Alignment.CenterVertically
) {
// Declining is deliberately not a button that refuses on the
@@ -209,7 +209,7 @@ internal fun DkgApprovalScaffold(
internal fun DkgApprovalPoint(text: String) {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(10.dp)
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
Text(text = "", style = MaterialTheme.typography.bodyMedium)
Text(

View File

@@ -14,6 +14,7 @@ import press.mantra.compose.repository.DkgRepository
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import fr.acinq.phoenix.data.ActiveWallet
import kotlinx.coroutines.flow.StateFlow
import press.mantra.compose.ui.theme.spacing
/**
* Asks whether to join a shared key ceremony somebody else opened.
@@ -58,7 +59,7 @@ fun DkgJoinApprovalScreen(
Column(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(8.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.itemGap)
) {
DkgApprovalPoint("Your device publishes the key it will be identified by for the rest of the ceremony.")
DkgApprovalPoint("You will be asked twice more before anything of your key material goes out.")

View File

@@ -111,7 +111,7 @@ fun DkgRitualScreen(
when (val dkgRitualUIState = dkgRitualViewModel.dkgRitualUIState) {
is DkgRitualUIState.Error -> {
Column(
modifier = Modifier.fillMaxWidth().padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally
) {
Spacer(modifier = Modifier.height(MaterialTheme.spacing.space600))
@@ -216,8 +216,8 @@ fun DkgRitualScreen(
.padding(innerPadding)
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(10.dp),
verticalArrangement = Arrangement.spacedBy(10.dp)
.padding(MaterialTheme.spacing.space125),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
if (session == null) {
Text(
@@ -265,9 +265,9 @@ fun DkgRitualScreen(
}
DkgRitualUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth().padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(modifier = Modifier.weight(1f))
Text(
@@ -330,11 +330,11 @@ private fun RitualProgress(
) {
Row(
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space200),
horizontalArrangement = Arrangement.spacedBy(10.dp),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
verticalAlignment = Alignment.CenterVertically
) {
Icon(Icons.Default.ErrorOutline, contentDescription = null)
Column(verticalArrangement = Arrangement.spacedBy(4.dp)) {
Column(verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.relatedGap)) {
Text("The ceremony was abandoned.", style = MaterialTheme.typography.titleSmall)
session.failureReason?.let {
Text(it, style = MaterialTheme.typography.bodyMedium)
@@ -398,10 +398,10 @@ private fun RitualProgress(
) {
Column(
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space200),
verticalArrangement = Arrangement.spacedBy(8.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.itemGap)
) {
Row(
horizontalArrangement = Arrangement.spacedBy(10.dp),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
verticalAlignment = Alignment.CenterVertically
) {
Icon(Icons.Default.CheckCircle, contentDescription = null)
@@ -415,7 +415,7 @@ private fun RitualProgress(
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(10.dp),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
verticalAlignment = Alignment.CenterVertically
) {
// In full, and wrapping rather than ellipsised. This is the
@@ -474,7 +474,7 @@ private fun RitualProgress(
CircularProgressIndicator(modifier = Modifier.size(20.dp))
} else {
Icon(Icons.Default.Groups, contentDescription = null)
Spacer(modifier = Modifier.width(8.dp))
Spacer(modifier = Modifier.width(MaterialTheme.spacing.space100))
Text(text = "Create the #admins group")
}
}
@@ -503,7 +503,7 @@ private fun RitualRoster(
Card(modifier = Modifier.fillMaxWidth()) {
Column(
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space200),
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
Text(text = "Members", style = MaterialTheme.typography.titleSmall)
@@ -523,7 +523,7 @@ private fun RitualRoster(
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(10.dp),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
verticalAlignment = Alignment.CenterVertically
) {
Icon(
@@ -565,11 +565,11 @@ private fun RitualStep(
Card(modifier = Modifier.fillMaxWidth()) {
Column(
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space200),
verticalArrangement = Arrangement.spacedBy(8.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.itemGap)
) {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(10.dp),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
verticalAlignment = Alignment.CenterVertically
) {
Icon(

View File

@@ -14,6 +14,7 @@ import press.mantra.compose.repository.DkgRepository
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import fr.acinq.phoenix.data.ActiveWallet
import kotlinx.coroutines.flow.StateFlow
import press.mantra.compose.ui.theme.spacing
/**
* Asks whether to contribute to the key itself.
@@ -57,7 +58,7 @@ fun DkgRound1ApprovalScreen(
Column(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(8.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.itemGap)
) {
DkgApprovalPoint(
"Your device publishes its contribution to the key. Every member's is mixed in, " +
@@ -74,7 +75,7 @@ fun DkgRound1ApprovalScreen(
Column(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(4.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.relatedGap)
) {
state.ritualMembers.forEach { member ->
val key = member.participant.participantPublicKey

View File

@@ -14,6 +14,7 @@ import press.mantra.compose.repository.DkgRepository
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import fr.acinq.phoenix.data.ActiveWallet
import kotlinx.coroutines.flow.StateFlow
import press.mantra.compose.ui.theme.spacing
/**
* Asks whether to confirm the combined result.
@@ -59,7 +60,7 @@ fun DkgRound2ApprovalScreen(
Column(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(8.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.itemGap)
) {
DkgApprovalPoint(
"Your device has checked the combined result against what it sent, and they match."

View File

@@ -121,7 +121,7 @@ fun FrostSigningScreen(
is FrostSigningUIState.Loading -> Loading(padding)
is FrostSigningUIState.Error -> Column(
modifier = Modifier.fillMaxWidth().padding(padding).padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(padding).padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally
) {
Spacer(modifier = Modifier.height(MaterialTheme.spacing.space600))
@@ -150,7 +150,7 @@ fun FrostSigningScreen(
.padding(padding)
.fillMaxSize()
.verticalScroll(scrollState)
.padding(20.dp),
.padding(MaterialTheme.spacing.space250),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space200)
) {
WhatIsBeingSigned(proposed, state.items.size)
@@ -267,7 +267,7 @@ fun FrostSigningScreen(
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(10.dp),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
verticalAlignment = Alignment.CenterVertically
) {
Button(
@@ -276,7 +276,7 @@ fun FrostSigningScreen(
onClick = { frostSigningViewModel.approve(onNavigateBack) }
) {
Icon(Icons.Default.Draw, contentDescription = null)
Spacer(modifier = Modifier.width(10.dp))
Spacer(modifier = Modifier.width(MaterialTheme.spacing.space125))
Text("Sign")
}
@@ -305,7 +305,7 @@ fun FrostSigningScreen(
@Composable
private fun Loading(padding: androidx.compose.foundation.layout.PaddingValues) {
Column(
modifier = Modifier.fillMaxWidth().padding(padding).padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(padding).padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally
) {
Spacer(modifier = Modifier.height(MaterialTheme.spacing.space600))

View File

@@ -56,6 +56,7 @@ import press.mantra.compose.ui.view.state.HomeScreenUIState
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent
import kotlinx.coroutines.launch
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)
@Composable
@@ -172,7 +173,7 @@ fun HomeScreen(
modifier = Modifier.padding(innerPadding).fillMaxSize()
) {
PrimaryScrollableTabRow(
modifier = Modifier.padding(10.dp),
modifier = Modifier.padding(MaterialTheme.spacing.space125),
edgePadding = 10.dp,
selectedTabIndex = homeScreenViewModel.pagerState.currentPage,
) {
@@ -272,7 +273,7 @@ fun HomeScreen(
private fun HomeScreenPreview() {
TorchTheme {
Surface(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
) {
HomeScreen(
activeUserPublicKey = "",

View File

@@ -4,6 +4,7 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
@@ -12,6 +13,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.theme.spacing
@Composable
fun ImplementationPendingScreen(
@@ -23,7 +25,7 @@ fun ImplementationPendingScreen(
modifier = Modifier.padding(innerPadding).fillMaxSize()
) {
Column(
modifier = Modifier.padding(20.dp).fillMaxSize(),
modifier = Modifier.padding(MaterialTheme.spacing.space250).fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
@@ -41,7 +43,7 @@ fun ImplementationPendingScreen(
private fun ImplementationPendingScreenPreview() {
press.mantra.compose.ui.theme.TorchTheme {
Surface(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
) {
ImplementationPendingScreen(
"Sign in"

View File

@@ -43,6 +43,7 @@ import press.mantra.compose.ui.composable.widgets.LoadingDataIndicator
import press.mantra.compose.ui.view.model.KeyPackageManagementViewModel
import press.mantra.compose.ui.view.state.KeyPackageManagementUIState
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3ExpressiveApi::class, ExperimentalMaterial3Api::class)
@Composable
@@ -103,7 +104,7 @@ fun KeyPackageManagementScreen(
) {
LazyColumn(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(10.dp),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
horizontalAlignment = Alignment.CenterHorizontally
) {
item {
@@ -118,7 +119,7 @@ fun KeyPackageManagementScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text(

View File

@@ -19,6 +19,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.theme.spacing
@Composable
fun LandingScreen(
@@ -32,7 +33,7 @@ fun LandingScreen(
) {
Column(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(10.dp),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
@@ -69,13 +70,13 @@ fun LandingScreen(
Text(
text = "Sign in to Torch via nsec, or remote signer",
modifier = Modifier.padding(10.dp),
modifier = Modifier.padding(MaterialTheme.spacing.space125),
style = MaterialTheme.typography.labelSmall,
textAlign = TextAlign.Center
)
Spacer(
modifier = Modifier.height(20.dp)
modifier = Modifier.height(MaterialTheme.spacing.space250)
)
Button(
@@ -89,7 +90,7 @@ fun LandingScreen(
}
Text(
text = "If you are new to Torch or just want to create a fresh profile",
modifier = Modifier.padding(10.dp),
modifier = Modifier.padding(MaterialTheme.spacing.space125),
style = MaterialTheme.typography.labelSmall,
textAlign = TextAlign.Center
)

View File

@@ -5,6 +5,7 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
@@ -30,6 +31,7 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.metadata.MetadataEvent
import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent
import com.vitorpamplona.quartz.nip18Reposts.RepostEvent
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -142,7 +144,7 @@ fun NostrEventDetailScreen(
private fun NostrEventDetailScreenPreview() {
TorchTheme {
Surface(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
) {
NostrEventDetailScreen(
initialNostrEventDetailUIState = NostrEventDetailUIState.Loaded(

View File

@@ -117,7 +117,7 @@ fun ProposalListScreen(
) { padding ->
when (val state = proposalListViewModel.proposalListUIState) {
is ProposalListUIState.Loading -> Column(
modifier = Modifier.fillMaxWidth().padding(padding).padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(padding).padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally
) {
Spacer(modifier = Modifier.height(MaterialTheme.spacing.space600))
@@ -125,7 +125,7 @@ fun ProposalListScreen(
}
is ProposalListUIState.Error -> Column(
modifier = Modifier.fillMaxWidth().padding(padding).padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(padding).padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally
) {
Spacer(modifier = Modifier.height(MaterialTheme.spacing.space600))
@@ -144,8 +144,8 @@ fun ProposalListScreen(
}
LazyColumn(
modifier = Modifier.padding(padding).fillMaxSize().padding(20.dp),
verticalArrangement = Arrangement.spacedBy(10.dp)
modifier = Modifier.padding(padding).fillMaxSize().padding(MaterialTheme.spacing.space250),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
if (state.proposals.isEmpty()) {
item {
@@ -287,7 +287,7 @@ private fun ProposalCard(
)
},
supportingContent = {
Column(verticalArrangement = Arrangement.spacedBy(2.dp)) {
Column(verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space25)) {
if (proposal.eventCount > 1) {
Text(
text = "with ${proposal.eventCount - 1} more " +

View File

@@ -101,26 +101,26 @@ fun SearchMemberToAddToChatRoomScreen(
Column(
modifier = Modifier.weight(1f).fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
if (searchMemberToAddToChatRoomUIState.contacts.isEmpty()) {
Spacer(
modifier = Modifier.height(20.dp)
modifier = Modifier.height(MaterialTheme.spacing.space250)
)
Text(
modifier = Modifier.padding(20.dp),
modifier = Modifier.padding(MaterialTheme.spacing.space250),
text = "Currently no contacts. Please search and chat with a few people.",
textAlign = TextAlign.Center
)
Spacer(
modifier = Modifier.height(20.dp)
modifier = Modifier.height(MaterialTheme.spacing.space250)
)
} else {
LazyColumn(
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space50),
verticalArrangement = Arrangement.spacedBy(10.dp),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
reverseLayout = true
) {
@@ -172,10 +172,10 @@ fun SearchMemberToAddToChatRoomScreen(
SearchMemberToAddToChatRoomUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth().padding(
20.dp
MaterialTheme.spacing.space250
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(

View File

@@ -237,7 +237,7 @@ fun SearchResultScreen(
LazyColumn(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
items(
items = searchResultListUIState.localNostrEvents,
@@ -295,7 +295,7 @@ fun SearchResultScreen(
private fun SearchResultScreenPreview() {
press.mantra.compose.ui.theme.TorchTheme {
Surface(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
) {
SearchResultScreen(
activeUserPublicKey = "",

View File

@@ -61,6 +61,7 @@ import press.mantra.compose.ui.composable.widgets.profile.ProfileColor
import press.mantra.compose.ui.theme.TorchTheme
import press.mantra.compose.ui.view.model.SearchViewModel
import press.mantra.compose.ui.view.state.SearchUIState
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)
@Composable
@@ -277,11 +278,11 @@ fun SearchScreen(
if (searchableProfiles.isNotEmpty()) {
Column(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(10.dp),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
horizontalAlignment = Alignment.Start
) {
Column(
modifier = Modifier.padding(10.dp),
modifier = Modifier.padding(MaterialTheme.spacing.space125),
) {
Text(
text = "Profiles",
@@ -292,7 +293,7 @@ fun SearchScreen(
LazyRow {
items(searchViewModel.searchableProfiles) { profile ->
Column(
modifier = Modifier.padding(10.dp).width(70.dp),
modifier = Modifier.padding(MaterialTheme.spacing.space125).width(70.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
@@ -336,7 +337,7 @@ fun SearchScreen(
item {
if (searchViewModel.recentSearches.isNotEmpty()) {
Column(
modifier = Modifier.padding(10.dp),
modifier = Modifier.padding(MaterialTheme.spacing.space125),
) {
Text(
text = "Recents",
@@ -389,7 +390,7 @@ fun SearchScreen(
}
Column(
modifier = Modifier.padding(20.dp).fillMaxWidth(),
modifier = Modifier.padding(MaterialTheme.spacing.space250).fillMaxWidth(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
@@ -413,7 +414,7 @@ fun SearchScreen(
private fun SearchScreenPreview() {
TorchTheme {
Surface(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
) {
SearchScreen(
activeUserPublicKey = "",

View File

@@ -74,7 +74,7 @@ fun SelectChatRoomMembersScreen(
when (val selectChatRoomMembersUIState = selectChatRoomMembersViewModel.selectChatRoomMembersUIState) {
is SelectChatRoomMembersUIState.Error -> {
Column(
modifier = Modifier.fillMaxWidth().padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally
) {
Spacer(
@@ -144,9 +144,9 @@ fun SelectChatRoomMembersScreen(
) {
if (selectChatRoomMembersUIState.profiles.isEmpty()) {
Column(
modifier = Modifier.weight(1f).fillMaxWidth().padding(20.dp),
modifier = Modifier.weight(1f).fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
Spacer(
modifier = Modifier.weight(1f)
@@ -177,7 +177,7 @@ fun SelectChatRoomMembersScreen(
} else {
LazyColumn(
modifier = Modifier.weight(1f).fillMaxWidth().padding(MaterialTheme.spacing.space50),
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
items(
items = selectChatRoomMembersUIState.profiles,
@@ -229,10 +229,10 @@ fun SelectChatRoomMembersScreen(
SelectChatRoomMembersUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth().padding(
20.dp
MaterialTheme.spacing.space250
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(

View File

@@ -92,7 +92,7 @@ fun SelectChatRoomTypeScreen(
when (val selectChatRoomTypeUIState = selectChatRoomTypeViewModel.selectChatRoomTypeUIState) {
is SelectChatRoomTypeUIState.Error -> {
Column(
modifier = Modifier.fillMaxWidth().padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally
) {
Spacer(
@@ -174,8 +174,8 @@ fun SelectChatRoomTypeScreen(
.padding(innerPadding)
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(10.dp),
verticalArrangement = Arrangement.spacedBy(10.dp)
.padding(MaterialTheme.spacing.space125),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
if (membersNotAdded.isNotEmpty()) {
Card(
@@ -213,7 +213,7 @@ fun SelectChatRoomTypeScreen(
text = "This decides who can change the group later. You can't switch afterwards.",
style = MaterialTheme.typography.labelMedium,
textAlign = TextAlign.Center,
modifier = Modifier.fillMaxWidth().padding(horizontal = 10.dp)
modifier = Modifier.fillMaxWidth().padding(horizontal = MaterialTheme.spacing.space125)
)
ChatRoomTypeCard(
@@ -267,10 +267,10 @@ fun SelectChatRoomTypeScreen(
SelectChatRoomTypeUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth().padding(
20.dp
MaterialTheme.spacing.space250
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(
@@ -330,11 +330,11 @@ private fun ChatRoomTypeCard(
) {
Column(
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space200),
verticalArrangement = Arrangement.spacedBy(8.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.itemGap)
) {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(10.dp),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
verticalAlignment = Alignment.CenterVertically
) {
RadioButton(

View File

@@ -44,6 +44,7 @@ import press.mantra.compose.ui.view.model.ShareProfileViewModel
import press.mantra.compose.ui.view.state.ShareProfileUIState
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.metadata.MetadataEvent
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3ExpressiveApi::class, ExperimentalMaterial3Api::class)
@Composable
@@ -104,14 +105,14 @@ fun ShareProfileScreen(
) {
LazyColumn(
modifier = Modifier.fillMaxWidth().weight(1f),
verticalArrangement = Arrangement.spacedBy(10.dp),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
horizontalAlignment = Alignment.CenterHorizontally
) {
item {
Row(
modifier = Modifier.fillMaxWidth().padding(10.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space125),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(10.dp)
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
ProfileAvatar(
profile = shareProfileUIState.localNostrEvent.profile,
@@ -137,7 +138,7 @@ fun ShareProfileScreen(
item {
Row(
modifier = Modifier.padding(40.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space500)
) {
QRCodeView(
activeUserPublicKey.hexToNpubHrp()
@@ -147,7 +148,7 @@ fun ShareProfileScreen(
item {
Row(
modifier = Modifier.fillMaxWidth().padding(20.dp)
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250)
) {
val clipboardManager = LocalClipboardManager.current
@@ -167,7 +168,7 @@ fun ShareProfileScreen(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text(
text = activeUserPublicKey.hexToNpubHrp(),
@@ -180,7 +181,7 @@ fun ShareProfileScreen(
}
Row(
modifier = Modifier.fillMaxWidth().padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalArrangement = Arrangement.Center
) {
Button(

View File

@@ -30,6 +30,7 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import com.vitorpamplona.quartz.nip19Bech32.entities.NPub
import com.vitorpamplona.quartz.nip19Bech32.entities.NSec
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Composable
@@ -50,10 +51,10 @@ fun SignInToProfileScreen(
Column(
modifier = Modifier.fillMaxWidth().padding(
10.dp
MaterialTheme.spacing.space125
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
when (val signInToProfileUIState = signInToProfileViewModel.signInToProfileUIState.value) {
@@ -72,7 +73,7 @@ fun SignInToProfileScreen(
Text(
text = it,
modifier = Modifier.padding(
bottom = 8.dp
bottom = MaterialTheme.spacing.compactPadding
)
)
}

View File

@@ -22,6 +22,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.theme.spacing
@Composable
fun SocialPreconditionScreen(
@@ -60,9 +61,9 @@ fun SocialPreconditionScreen(
modifier = Modifier.padding(innerPadding).fillMaxSize()
) {
Column(
modifier = Modifier.fillMaxWidth().padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
Text(
@@ -116,7 +117,7 @@ fun SocialPreconditionScreen(
private fun SocialPreconditionScreenPreview() {
press.mantra.compose.ui.theme.TorchTheme {
Surface(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
) {
SocialPreconditionScreen(
onNavigateToSkipForNow = {},

View File

@@ -26,6 +26,7 @@ import fr.acinq.phoenix.utils.preferences.UserPrefs
import fr.acinq.phoenix.utils.preferences.UserWalletMetadata
import fr.acinq.phoenix.utils.preferences.getByWalletIdOrDefault
import kotlinx.coroutines.flow.first
import press.mantra.compose.ui.theme.spacing
@Composable
fun SovereignWalletStartupScreen(
@@ -130,16 +131,22 @@ fun SovereignWalletStartupScreen(
); loadingWallet = it
},
canEdit = false,
modifier = Modifier.padding(horizontal = 24.dp),
modifier = Modifier.padding(horizontal = MaterialTheme.spacing.space300),
topContent = {
Spacer(Modifier.height(64.dp))
Spacer(Modifier.height(MaterialTheme.spacing.space800))
Text(
text = "Select a wallet",
style = MaterialTheme.typography.headlineSmall
)
Spacer(Modifier.height(16.dp))
Spacer(Modifier.height(MaterialTheme.spacing.space200))
},
bottomContent = {
// m3-spacing-exempt: room to scroll the
// last wallet clear of the bottom of the
// window, not a step in the spacing
// rhythm. The scale tops out at 72dp and
// rounding to it would put the last row
// back under the edge.
Spacer(Modifier.height(128.dp))
}
)
@@ -196,17 +203,17 @@ fun SovereignWalletStartupScreen(
}
}
}
Spacer(Modifier.height(16.dp))
Spacer(Modifier.height(MaterialTheme.spacing.space200))
HorizontalDivider(
modifier = Modifier.width(50.dp)
)
Spacer(Modifier.height(24.dp))
Spacer(Modifier.height(MaterialTheme.spacing.space300))
// BorderButton(
// text = stringResource(R.string.startup_error_try_again),
// icon = R.drawable.ic_reset,
// onClick = onTryAgainClick
// )
Spacer(Modifier.height(8.dp))
Spacer(Modifier.height(MaterialTheme.spacing.space100))
// StartErrorShareLogsButton()
}
}

View File

@@ -184,8 +184,8 @@ fun TranslateChunkScreen(
.padding(innerPadding)
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(20.dp),
verticalArrangement = Arrangement.spacedBy(10.dp)
.padding(MaterialTheme.spacing.space250),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
if (!translateChunkUIState.canSign) {
Text(
@@ -202,7 +202,7 @@ fun TranslateChunkScreen(
)
Card {
Text(
modifier = Modifier.padding(16.dp),
modifier = Modifier.padding(MaterialTheme.spacing.containerPadding),
text = translateChunkUIState.originalChunk.text,
style = MaterialTheme.typography.bodyMedium
)
@@ -224,9 +224,9 @@ fun TranslateChunkScreen(
TranslateChunkUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth().padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(modifier = Modifier.weight(1f))
Text(

View File

@@ -104,8 +104,8 @@ fun TranslationArtifactVersionDetailScreen(
}
) { innerPadding ->
LazyColumn(
modifier = Modifier.padding(innerPadding).fillMaxSize().padding(20.dp),
verticalArrangement = Arrangement.spacedBy(10.dp)
modifier = Modifier.padding(innerPadding).fillMaxSize().padding(MaterialTheme.spacing.space250),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
// Chapters the source version has and this translation
// does not. Above the list rather than after it: a chapter
@@ -244,9 +244,9 @@ fun TranslationArtifactVersionDetailScreen(
TranslationArtifactVersionDetailUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth().padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(modifier = Modifier.weight(1f))
Text(

View File

@@ -123,7 +123,7 @@ fun TranslationChapterScreen(
if (translationChapterUIState.rows.isEmpty()) {
item {
Box(
modifier = Modifier.fillMaxWidth().padding(16.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.containerPadding),
contentAlignment = Alignment.Center
) {
Text("This chapter has no chunks.")
@@ -157,9 +157,9 @@ fun TranslationChapterScreen(
TranslationChapterUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth().padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(modifier = Modifier.weight(1f))
Text(
@@ -223,9 +223,9 @@ private fun TableRow(
Row(
modifier = Modifier.fillMaxWidth().height(IntrinsicSize.Min)
) {
Box(modifier = Modifier.weight(1f).padding(12.dp)) { left() }
Box(modifier = Modifier.weight(1f).padding(MaterialTheme.spacing.space150)) { left() }
VerticalDivider(modifier = Modifier.fillMaxHeight())
Box(modifier = Modifier.weight(1f).then(rightModifier).padding(12.dp)) { right() }
Box(modifier = Modifier.weight(1f).then(rightModifier).padding(MaterialTheme.spacing.space150)) { right() }
}
}

View File

@@ -17,6 +17,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Composable
@@ -28,10 +29,10 @@ fun UnannouncedProfileScreen() {
Column(
modifier = Modifier.fillMaxWidth().padding(
10.dp
MaterialTheme.spacing.space125
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(

View File

@@ -17,6 +17,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Composable
@@ -28,10 +29,10 @@ fun UnindexedProfileScreen() {
Column(
modifier = Modifier.fillMaxWidth().padding(
10.dp
MaterialTheme.spacing.space125
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(

View File

@@ -17,6 +17,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Composable
@@ -28,10 +29,10 @@ fun UnqueuedProfileScreen() {
Column(
modifier = Modifier.fillMaxWidth().padding(
10.dp
MaterialTheme.spacing.space125
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(

View File

@@ -19,6 +19,7 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Composable
@@ -42,10 +43,10 @@ fun UnqueuedProfileSynchronizationScreen(
Column(
modifier = Modifier.fillMaxWidth().padding(
10.dp
MaterialTheme.spacing.space125
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(

View File

@@ -17,6 +17,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Composable
@@ -28,10 +29,10 @@ fun UnsignedProfileScreen() {
Column(
modifier = Modifier.fillMaxWidth().padding(
10.dp
MaterialTheme.spacing.space125
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(

View File

@@ -17,6 +17,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Composable
@@ -30,10 +31,10 @@ fun UnsyncedProfileScreen(
Column(
modifier = Modifier.fillMaxWidth().padding(
10.dp
MaterialTheme.spacing.space125
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(20.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
) {
Spacer(

View File

@@ -72,10 +72,10 @@ fun WriteNewNoteScreen(
Column(
modifier = Modifier.fillMaxWidth().padding(
10.dp
MaterialTheme.spacing.space125
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
when (val writeNewNoteUIState = writeNewNoteViewModel.writeNewNoteUIState) {
@@ -98,8 +98,10 @@ fun WriteNewNoteScreen(
onNavigateToEvent = onNavigateToNostrEvent
)
} else {
// Nothing to show, but the LazyColumn item has to
// render something. 1dp was standing in for zero.
Spacer(
modifier = Modifier.height(1.dp)
modifier = Modifier.height(MaterialTheme.spacing.space0)
)
}
}
@@ -112,7 +114,7 @@ fun WriteNewNoteScreen(
Text(
modifier = Modifier.padding(
start = MaterialTheme.spacing.space600,
bottom = 10.dp,
bottom = MaterialTheme.spacing.space125,
),
text = "replying To ${writeNewNoteUIState.inReplyToNostrEvent.profile?.humanReadableNameOrPubkey() ?: "note"}",
@@ -132,7 +134,7 @@ fun WriteNewNoteScreen(
Text(
text = it,
modifier = Modifier.padding(
bottom = 8.dp
bottom = MaterialTheme.spacing.compactPadding
)
)
}
@@ -235,7 +237,7 @@ fun WriteNewNoteScreen(
Card(
modifier = Modifier.padding(
start = MaterialTheme.spacing.space600,
top = 10.dp
top = MaterialTheme.spacing.space125
)
) {
writeNewNoteUIState.quotedNostrEvent.RenderNotePreview(
@@ -294,11 +296,13 @@ fun WriteNewNoteScreen(
HorizontalDivider(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
)
} else {
// Nothing to show, but the LazyColumn item has to
// render something. 1dp was standing in for zero.
Spacer(
modifier = Modifier.height(1.dp)
modifier = Modifier.height(MaterialTheme.spacing.space0)
)
}
}
@@ -306,10 +310,10 @@ fun WriteNewNoteScreen(
item {
Column(
modifier = Modifier.fillParentMaxHeight().fillMaxWidth().padding(
10.dp
MaterialTheme.spacing.space125
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
Text(
text = writeNewNoteUIState.localProfile.profile.humanReadableNameOrPubkey(),

View File

@@ -43,7 +43,7 @@ fun LoadingDataIndicator(
Text(
text = text,
modifier = Modifier.fillMaxWidth().padding(10.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space125),
textAlign = TextAlign.Center
)
}

View File

@@ -36,6 +36,7 @@ import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.theme.spacing
@Composable
fun Clickable(
@@ -48,7 +49,7 @@ fun Clickable(
backgroundColor: Color = Color.Unspecified, // transparent by default!
shape: Shape = RectangleShape,
clickDescription: String = "",
internalPadding: PaddingValues = PaddingValues(0.dp),
internalPadding: PaddingValues = PaddingValues(MaterialTheme.spacing.space0),
indication: Indication? = LocalIndication.current,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
content: @Composable () -> Unit,

View File

@@ -20,6 +20,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.theme.spacing
@Composable
private fun ArticleCard(
@@ -50,7 +51,7 @@ private fun ArticleCard(
color = MaterialTheme.colorScheme.surface,
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 6.dp)
.padding(vertical = MaterialTheme.spacing.space75)
.then(
if (onArticleClick != null) Modifier.clickable { onArticleClick(30023, author, dTag) }
else Modifier
@@ -59,14 +60,14 @@ private fun ArticleCard(
if (event == null) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.padding(14.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space175)
) {
CircularProgressIndicator(
modifier = Modifier.width(14.dp).height(14.dp),
strokeWidth = 2.dp,
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.5f)
)
Spacer(Modifier.width(8.dp))
Spacer(Modifier.width(MaterialTheme.spacing.space100))
Text(
text = "Loading article...",
style = MaterialTheme.typography.bodyMedium,
@@ -88,18 +89,18 @@ private fun ArticleCard(
// .clip(RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp)),
// )
// }
Column(modifier = Modifier.padding(horizontal = 14.dp, vertical = 10.dp)) {
Column(modifier = Modifier.padding(horizontal = MaterialTheme.spacing.space175, vertical = MaterialTheme.spacing.space125)) {
Row(verticalAlignment = Alignment.CenterVertically) {
Surface(
shape = RoundedCornerShape(4.dp),
color = MaterialTheme.colorScheme.primaryContainer,
modifier = Modifier.padding(end = 8.dp)
modifier = Modifier.padding(end = MaterialTheme.spacing.compactPadding)
) {
Text(
text = "ARTICLE",
style = MaterialTheme.typography.labelSmall,
color = MaterialTheme.colorScheme.onPrimaryContainer,
modifier = Modifier.padding(horizontal = 6.dp, vertical = 2.dp)
modifier = Modifier.padding(horizontal = MaterialTheme.spacing.space75, vertical = MaterialTheme.spacing.space25)
)
}
Text(
@@ -118,19 +119,19 @@ private fun ArticleCard(
color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 3,
overflow = TextOverflow.Ellipsis,
modifier = Modifier.padding(top = 4.dp)
modifier = Modifier.padding(top = MaterialTheme.spacing.space50)
)
}
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.padding(top = 6.dp)
modifier = Modifier.padding(top = MaterialTheme.spacing.space75)
) {
press.mantra.compose.ui.composable.widgets.profile.ProfileAvatar(
profile = profile,
publicKey = localNostrEvent.nostrEvent.pubKey,
size = 20.dp
)
Spacer(Modifier.width(6.dp))
Spacer(Modifier.width(MaterialTheme.spacing.space75))
val displayName = profile?.humanReadableNameOrPubkey()
?: "${author.take(8)}...${author.takeLast(4)}"
Text(

View File

@@ -37,6 +37,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
import coil3.compose.AsyncImage
import androidx.compose.material3.MaterialTheme
import press.mantra.compose.ui.theme.spacing
@Composable
fun FullScreenImageViewer(
@@ -87,7 +89,7 @@ fun FullScreenImageViewer(
Row(
modifier = Modifier
.align(Alignment.TopEnd)
.padding(16.dp)
.padding(MaterialTheme.spacing.containerPadding)
) {
val buttonColors = IconButtonDefaults.iconButtonColors(
containerColor = Color.Black.copy(alpha = 0.5f),
@@ -104,7 +106,7 @@ fun FullScreenImageViewer(
// contentDescription = "Download"
// )
// }
Spacer(Modifier.width(8.dp))
Spacer(Modifier.width(MaterialTheme.spacing.space100))
IconButton(
onClick = { clipboardManager.setText(AnnotatedString(imageUrl)) },
colors = buttonColors,
@@ -112,7 +114,7 @@ fun FullScreenImageViewer(
) {
Icon(Icons.Default.ContentCopy, contentDescription = "Copy URL")
}
Spacer(Modifier.width(8.dp))
Spacer(Modifier.width(MaterialTheme.spacing.space100))
IconButton(
onClick = onDismiss,
colors = buttonColors,

View File

@@ -31,6 +31,7 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalFoundationApi::class)
@Composable
@@ -62,7 +63,7 @@ internal fun ImageWithContextMenu(meta: MediaMeta, onFullScreen: () -> Unit) {
modifier = Modifier.size(40.dp),
tint = MaterialTheme.colorScheme.onSurfaceVariant
)
Spacer(Modifier.height(8.dp))
Spacer(Modifier.height(MaterialTheme.spacing.space100))
Text(
"Tap to load",
style = MaterialTheme.typography.bodySmall,

View File

@@ -33,6 +33,7 @@ import androidx.compose.ui.unit.dp
import fr.acinq.lightning.payment.Bolt11Invoice
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import press.mantra.compose.ui.theme.spacing
@Composable
internal fun LightningInvoiceCard(
@@ -57,7 +58,7 @@ internal fun LightningInvoiceCard(
text = "${decoded.amount?.truncateToSatoshi() ?: "Any amount"}"
)
if (!decoded.description.isNullOrBlank()) {
Spacer(Modifier.height(4.dp))
Spacer(Modifier.height(MaterialTheme.spacing.space50))
Text(
text = decoded.description!!,
style = MaterialTheme.typography.bodySmall,
@@ -97,13 +98,13 @@ internal fun LightningInvoiceCard(
Surface(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 4.dp),
.padding(vertical = MaterialTheme.spacing.space50),
shape = RoundedCornerShape(12.dp),
color = MaterialTheme.colorScheme.surfaceVariant,
border = BorderStroke(1.dp, primary.copy(alpha = 0.4f))
) {
Row(
modifier = Modifier.padding(horizontal = 12.dp, vertical = 10.dp),
modifier = Modifier.padding(horizontal = MaterialTheme.spacing.space150, vertical = MaterialTheme.spacing.space125),
verticalAlignment = Alignment.CenterVertically
) {
Icon(
@@ -112,7 +113,7 @@ internal fun LightningInvoiceCard(
tint = primary,
modifier = Modifier.size(20.dp)
)
Spacer(Modifier.width(10.dp))
Spacer(Modifier.width(MaterialTheme.spacing.space125))
Column(Modifier.weight(1f)) {
Text(
text = if (decoded.amount != null)
@@ -138,7 +139,7 @@ internal fun LightningInvoiceCard(
}
}
if (onPayInvoice != null) {
Spacer(Modifier.width(8.dp))
Spacer(Modifier.width(MaterialTheme.spacing.space100))
when (payState) {
InvoicePayState.Paying -> CircularProgressIndicator(
modifier = Modifier.size(24.dp),

View File

@@ -24,6 +24,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import coil3.compose.AsyncImage
import io.ktor.http.Url
import press.mantra.compose.ui.theme.spacing
@Composable
internal fun LinkPreview(url: String) {
@@ -47,7 +48,7 @@ internal fun LinkPreview(url: String) {
color = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.3f),
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 4.dp)
.padding(vertical = MaterialTheme.spacing.space50)
.clickable { uriHandler.openUri(url) }
) {
Column {
@@ -62,7 +63,7 @@ internal fun LinkPreview(url: String) {
.clip(RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp))
)
}
Column(modifier = Modifier.padding(12.dp)) {
Column(modifier = Modifier.padding(MaterialTheme.spacing.space150)) {
data.siteName?.let { site ->
Text(
text = site.uppercase(),
@@ -93,7 +94,7 @@ internal fun LinkPreview(url: String) {
color = MaterialTheme.colorScheme.onSurface,
maxLines = 2,
overflow = TextOverflow.Ellipsis,
modifier = Modifier.padding(top = 2.dp)
modifier = Modifier.padding(top = MaterialTheme.spacing.space25)
)
}
data.description?.let { desc ->
@@ -103,7 +104,7 @@ internal fun LinkPreview(url: String) {
color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 3,
overflow = TextOverflow.Ellipsis,
modifier = Modifier.padding(top = 4.dp)
modifier = Modifier.padding(top = MaterialTheme.spacing.space50)
)
}
}
@@ -118,7 +119,7 @@ internal fun LinkPreview(url: String) {
maxLines = 1,
overflow = TextOverflow.Ellipsis,
modifier = Modifier
.padding(vertical = 2.dp)
.padding(vertical = MaterialTheme.spacing.space25)
.clickable { uriHandler.openUri(url) }
)
}

View File

@@ -11,6 +11,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.theme.spacing
@Composable
private fun LiveStreamCard(
@@ -44,7 +45,7 @@ private fun LiveStreamCard(
color = MaterialTheme.colorScheme.surface,
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 6.dp)
.padding(vertical = MaterialTheme.spacing.space75)
.then(
if (onLiveStreamClick != null) Modifier.clickable {
onLiveStreamClick(author, dTag, segmentRelayHints.firstOrNull())

View File

@@ -18,6 +18,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.theme.spacing
@Composable
internal fun LiveStreamCardContent(
@@ -34,14 +35,14 @@ internal fun LiveStreamCardContent(
if (event == null) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.padding(14.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space175)
) {
CircularProgressIndicator(
modifier = Modifier.width(14.dp).height(14.dp),
strokeWidth = 2.dp,
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.5f)
)
Spacer(Modifier.width(8.dp))
Spacer(Modifier.width(MaterialTheme.spacing.space100))
Text(
text = "Loading stream...",
style = MaterialTheme.typography.bodyMedium,
@@ -78,32 +79,32 @@ internal fun LiveStreamCardContent(
// .clip(RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp)),
// )
}
Column(modifier = Modifier.padding(horizontal = 14.dp, vertical = 10.dp)) {
Column(modifier = Modifier.padding(horizontal = MaterialTheme.spacing.space175, vertical = MaterialTheme.spacing.space125)) {
Row(verticalAlignment = Alignment.CenterVertically) {
if (status == "live") {
Surface(
shape = RoundedCornerShape(4.dp),
color = Color(0xFFE53935),
modifier = Modifier.padding(end = 8.dp)
modifier = Modifier.padding(end = MaterialTheme.spacing.compactPadding)
) {
Text(
text = "LIVE",
style = MaterialTheme.typography.labelSmall,
color = Color.White,
modifier = Modifier.padding(horizontal = 6.dp, vertical = 2.dp)
modifier = Modifier.padding(horizontal = MaterialTheme.spacing.space75, vertical = MaterialTheme.spacing.space25)
)
}
} else if (status == "ended") {
Surface(
shape = RoundedCornerShape(4.dp),
color = MaterialTheme.colorScheme.surfaceVariant,
modifier = Modifier.padding(end = 8.dp)
modifier = Modifier.padding(end = MaterialTheme.spacing.compactPadding)
) {
Text(
text = "ENDED",
style = MaterialTheme.typography.labelSmall,
color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.padding(horizontal = 6.dp, vertical = 2.dp)
modifier = Modifier.padding(horizontal = MaterialTheme.spacing.space75, vertical = MaterialTheme.spacing.space25)
)
}
}
@@ -123,19 +124,19 @@ internal fun LiveStreamCardContent(
color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 3,
overflow = TextOverflow.Ellipsis,
modifier = Modifier.padding(top = 4.dp)
modifier = Modifier.padding(top = MaterialTheme.spacing.space50)
)
}
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.padding(top = 6.dp)
modifier = Modifier.padding(top = MaterialTheme.spacing.space75)
) {
press.mantra.compose.ui.composable.widgets.profile.ProfileAvatar(
profile = profile,
publicKey = event.pubKey,
size = 20.dp
)
Spacer(Modifier.width(6.dp))
Spacer(Modifier.width(MaterialTheme.spacing.space75))
val displayName = profile?.humanReadableNameOrPubkey()
?: "${author.take(8)}...${author.takeLast(4)}"
Text(

View File

@@ -17,6 +17,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.theme.spacing
@Composable
@@ -48,11 +49,11 @@ internal fun QuotedAddressableNote(
color = MaterialTheme.colorScheme.surface,
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 6.dp)
.padding(vertical = MaterialTheme.spacing.space75)
) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.padding(14.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space175)
) {
CircularProgressIndicator(
modifier = Modifier
@@ -61,7 +62,7 @@ internal fun QuotedAddressableNote(
strokeWidth = 2.dp,
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.5f)
)
Spacer(Modifier.width(8.dp))
Spacer(Modifier.width(MaterialTheme.spacing.space100))
Text(
text = "Loading note...",
style = MaterialTheme.typography.bodyMedium,

View File

@@ -19,6 +19,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import press.mantra.compose.ui.theme.spacing
@Composable
fun QuotedNote(
@@ -56,7 +57,7 @@ fun QuotedNote(
color = MaterialTheme.colorScheme.surface,
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 6.dp)
.padding(vertical = MaterialTheme.spacing.space75)
) {
localQuotedNostrEvent.RenderNotePreview(
onNavigateToEvent = onNavigateToEvent
@@ -87,11 +88,11 @@ fun QuotedNote(
color = MaterialTheme.colorScheme.surface,
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 6.dp)
.padding(vertical = MaterialTheme.spacing.space75)
) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.padding(14.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space175)
) {
CircularProgressIndicator(
modifier = Modifier
@@ -100,7 +101,7 @@ fun QuotedNote(
strokeWidth = 2.dp,
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.5f)
)
Spacer(Modifier.width(8.dp))
Spacer(Modifier.width(MaterialTheme.spacing.space100))
Text(
text = "Loading note...",
style = MaterialTheme.typography.bodyMedium,
@@ -116,7 +117,7 @@ fun QuotedNote(
private fun QuotedNotePreview() {
press.mantra.compose.ui.theme.TorchTheme {
Surface(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
) {
QuotedNote(

View File

@@ -31,6 +31,7 @@ import androidx.compose.ui.unit.dp
import co.touchlab.kermit.Logger
import coil3.compose.AsyncImage
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import press.mantra.compose.ui.theme.spacing
@Composable
fun RichContent(
@@ -398,13 +399,13 @@ fun RichContent(
private fun RichContentPreview() {
press.mantra.compose.ui.theme.TorchTheme {
Surface(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
) {
Card(
modifier = Modifier.padding(10.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space125)
) {
RichContent(
modifier = Modifier.padding(10.dp),
modifier = Modifier.padding(MaterialTheme.spacing.space125),
nostrEvent = press.mantra.compose.database.model.NostrEvent(
id = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a520",
content = "Something something something nostr:npub1uh366qnj68a7atvwgwdy4569xd6v5jtferftapqztwjwlzh9553q47pqsx\nhttps://www.brainyquote.com/authors/steven-biko-quotes\nnostr:nevent1qqspcusnzxx5u97xht2udvg3yhcq2cvmc0jrxa90lwwdvjplve0atespzpmhxue69uhkummnw3ezuamfdejsyg8h5g639qhuv803hzwexfwhyud6t6suxfu364anddqvrmn9j4cahvxksr8q",

View File

@@ -11,6 +11,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.theme.spacing
@Composable
internal fun UnsupportedKindBadge(kind: Int?, style: TextStyle) {
@@ -20,13 +21,13 @@ internal fun UnsupportedKindBadge(kind: Int?, style: TextStyle) {
color = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.3f),
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 6.dp)
.padding(vertical = MaterialTheme.spacing.space75)
) {
Text(
text = if (kind != null) "Unsupported event kind: $kind" else "Unsupported event kind",
style = style,
color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.padding(14.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space175)
)
}
}

View File

@@ -57,6 +57,7 @@ import press.mantra.compose.ui.view.model.MetadataEventDetailViewModel
import press.mantra.compose.ui.view.state.MetadataEventDetailUIState
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.metadata.MetadataEvent
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)
@Composable
@@ -110,7 +111,7 @@ fun MetadataEventDetail(
profile?.nip05?.let {
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(4.dp)
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.relatedGap)
) {
Icon(
Icons.Default.Bolt,
@@ -139,7 +140,7 @@ fun MetadataEventDetail(
LazyColumn(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
item {
Column(
@@ -148,8 +149,8 @@ fun MetadataEventDetail(
horizontalAlignment = Alignment.CenterHorizontally
) {
Row(
modifier = Modifier.fillMaxWidth().padding(20.dp),
horizontalArrangement = Arrangement.spacedBy(10.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
verticalAlignment = Alignment.CenterVertically
) {
ProfileAvatar(
@@ -224,7 +225,7 @@ fun MetadataEventDetail(
}
Text(
modifier = Modifier.fillMaxWidth().padding(
horizontal = 20.dp
horizontal = MaterialTheme.spacing.space250
),
maxLines = 2,
overflow = TextOverflow.Ellipsis,
@@ -248,7 +249,7 @@ fun MetadataEventDetail(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text("Add To Group")
@@ -269,7 +270,7 @@ fun MetadataEventDetail(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text("Block User")
@@ -294,7 +295,7 @@ fun MetadataEventDetail(
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text("Send Message")
}
@@ -314,7 +315,7 @@ private fun MetadataEventEventDetailPreview() {
TorchTheme {
Surface(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
) {
MetadataEventDetail(
activeUserPublicKey = "",

View File

@@ -47,6 +47,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import press.mantra.compose.extensions.toFormattedTimeAndDateString
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)
@Composable
@@ -93,8 +94,8 @@ fun TextNoteEventDetail(
FlexibleBottomAppBar(
containerColor = Color.Transparent,
contentPadding = PaddingValues(
start = 10.dp,
end = 10.dp
start = MaterialTheme.spacing.space125,
end = MaterialTheme.spacing.space125
),
scrollBehavior = scrollBehavior
) {
@@ -114,8 +115,8 @@ fun TextNoteEventDetail(
color = MaterialTheme.colorScheme.surfaceVariant
) {
Row(
modifier = Modifier.padding(10.dp).fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(10.dp),
modifier = Modifier.padding(MaterialTheme.spacing.space125).fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
) {
// TODO: Load user profile...
Icon(
@@ -199,8 +200,8 @@ fun TextNoteEventDetail(
horizontalAlignment = Alignment.CenterHorizontally
) {
Row(
modifier = Modifier.fillMaxWidth().padding(12.dp),
horizontalArrangement = Arrangement.spacedBy(4.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space150),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.relatedGap),
verticalAlignment = Alignment.CenterVertically
) {
val profile = localNostrEvent.profile
@@ -254,7 +255,7 @@ fun TextNoteEventDetail(
press.mantra.compose.ui.composable.widgets.content.RichContent(
modifier = Modifier.fillMaxWidth().padding(
horizontal = 20.dp
horizontal = MaterialTheme.spacing.space250
),
nostrEvent = localNostrEvent.nostrEvent,
localQuotedNostrEvent = localNostrEvent.localQuotedNostrEvent,
@@ -263,7 +264,7 @@ fun TextNoteEventDetail(
)
Row(
modifier = Modifier.fillMaxWidth().padding(20.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalArrangement = Arrangement.Start
) {
Text(
@@ -385,7 +386,7 @@ private fun TextNoteEventDetailPreview() {
press.mantra.compose.ui.theme.TorchTheme {
Surface(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
) {
TextNoteEventDetail(
localNostrEvent = press.mantra.compose.database.model.intermdiate.LocalNostrEvent(

View File

@@ -37,6 +37,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.theme.spacing
/** Provides a Material3 [ModalBottomSheet] with some presets. Content is contained in a [Column] with [internalPadding]. */
@OptIn(ExperimentalMaterial3Api::class)
@@ -52,7 +53,7 @@ fun ModalBottomSheet(
dragHandle: @Composable (() -> Unit)? = { BottomSheetDefaults. DragHandle() },
contentWindowInsets: @Composable () -> WindowInsets = { BottomSheetDefaults.windowInsets },
contentHeight: Dp = Dp.Unspecified,
internalPadding: PaddingValues = PaddingValues(top = 0.dp, start = 20.dp, end = 20.dp, bottom = 64.dp),
internalPadding: PaddingValues = PaddingValues(top = MaterialTheme.spacing.space0, start = MaterialTheme.spacing.space250, end = MaterialTheme.spacing.space250, bottom = MaterialTheme.spacing.space800),
isContentScrollable: Boolean = true,
dismissOnScrimClick: Boolean = true,
dismissOnBack: Boolean = true,

View File

@@ -28,6 +28,7 @@ import androidx.compose.ui.unit.dp
import press.mantra.compose.ui.composable.navigation.routes.Route
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3Api::class)
@@ -49,8 +50,8 @@ fun NewChatBottomSheetDialog(
) {
// Sheet content
Column(
modifier = Modifier.fillMaxWidth().padding(10.dp),
verticalArrangement = Arrangement.spacedBy(4.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space125),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.relatedGap),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
@@ -126,7 +127,7 @@ fun NewChatBottomSheetDialog(
contentDescription = "Close new chat"
)
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Text("Close")
}

View File

@@ -42,6 +42,7 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey
import fr.acinq.phoenix.utils.Parser
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import press.mantra.compose.ui.theme.spacing
@Composable
fun StartDirectMessageToNpubOrNip05Dialog(
@@ -62,21 +63,21 @@ fun StartDirectMessageToNpubOrNip05Dialog(
modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
.padding(16.dp),
.padding(MaterialTheme.spacing.containerPadding),
shape = RoundedCornerShape(16.dp),
) {
val textFieldState = rememberTextFieldState()
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
Spacer(
modifier = Modifier.height(4.dp)
modifier = Modifier.height(MaterialTheme.spacing.space50)
)
Text(
modifier = Modifier.fillMaxWidth().padding(
horizontal = 20.dp,
horizontal = MaterialTheme.spacing.space250,
),
text = "Start chat via npub or nip05",
style = MaterialTheme.typography.labelMedium,
@@ -155,7 +156,7 @@ fun StartDirectMessageToNpubOrNip05Dialog(
Text("Start Chat")
Spacer(
modifier = Modifier.width(10.dp)
modifier = Modifier.width(MaterialTheme.spacing.space125)
)
Icon(

View File

@@ -23,6 +23,7 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent
import com.vitorpamplona.quartz.nip18Reposts.RepostEvent
import kotlin.time.Instant
import press.mantra.compose.ui.theme.spacing
@Composable
fun press.mantra.compose.database.model.intermdiate.LocalNostrEvent.ListView(
@@ -33,13 +34,13 @@ fun press.mantra.compose.database.model.intermdiate.LocalNostrEvent.ListView(
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(
horizontal = 10.dp
horizontal = MaterialTheme.spacing.space125
).clickable(
enabled = true,
onClick = {
@@ -47,7 +48,7 @@ fun press.mantra.compose.database.model.intermdiate.LocalNostrEvent.ListView(
}
),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(4.dp)
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.relatedGap)
) {
Icon(
modifier = Modifier.size(
@@ -123,7 +124,7 @@ fun press.mantra.compose.database.model.intermdiate.LocalNostrEvent.ListView(
private fun EventListViewRepostedPreview() {
press.mantra.compose.ui.theme.TorchTheme {
Surface(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
) {
press.mantra.compose.database.model.intermdiate.LocalNostrEvent(
nostrEvent = press.mantra.compose.database.model.NostrEvent(
@@ -174,7 +175,7 @@ private fun EventListViewRepostedPreview() {
private fun EventListViewInReplyPreview() {
press.mantra.compose.ui.theme.TorchTheme {
Surface(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
) {
press.mantra.compose.database.model.intermdiate.LocalNostrEvent(
nostrEvent = press.mantra.compose.database.model.NostrEvent(

View File

@@ -24,6 +24,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import press.mantra.compose.extensions.toFormattedTimeAndDateString
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import press.mantra.compose.ui.theme.spacing
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Composable
@@ -42,7 +43,7 @@ internal fun TextNoteFeedItem(
if (localInReplyToNostrEvent != null) {
Row(
modifier = Modifier.fillMaxWidth().padding(
horizontal = 20.dp
horizontal = MaterialTheme.spacing.space250
),
horizontalArrangement = Arrangement.End,
verticalAlignment = Alignment.CenterVertically
@@ -67,15 +68,15 @@ internal fun TextNoteFeedItem(
ElevatedCard(
modifier = Modifier.padding(
horizontal = 10.dp
horizontal = MaterialTheme.spacing.space125
),
onClick = {
onNavigateToEvent.invoke(nostrEvent.id)
}
) {
Column(
modifier = Modifier.padding(10.dp).fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(10.dp),
modifier = Modifier.padding(MaterialTheme.spacing.space125).fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
horizontalAlignment = Alignment.CenterHorizontally
) {
if (profile != null) {
@@ -85,7 +86,7 @@ internal fun TextNoteFeedItem(
onNavigateToEvent.invoke(profile.nostrEventId)
}
),
horizontalArrangement = Arrangement.spacedBy(10.dp, Alignment.Start),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125, Alignment.Start),
verticalAlignment = Alignment.CenterVertically
) {
press.mantra.compose.ui.composable.widgets.profile.ProfileAvatar(
@@ -128,7 +129,7 @@ internal fun TextNoteFeedItem(
LazyRow(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(
10.dp,
MaterialTheme.spacing.space125,
alignment = Alignment.Start
)
) {
@@ -181,7 +182,7 @@ internal fun TextNoteFeedItem(
private fun TextNoteFeedItemPreview() {
press.mantra.compose.ui.theme.TorchTheme {
Surface(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
) {
TextNoteFeedItem(
nostrEvent = press.mantra.compose.database.model.NostrEvent(
@@ -212,7 +213,7 @@ private fun TextNoteFeedItemPreview() {
private fun TextNoteFeedItemInReplyToPreview() {
press.mantra.compose.ui.theme.TorchTheme {
Surface(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
) {
TextNoteFeedItem(
nostrEvent = press.mantra.compose.database.model.NostrEvent(
@@ -266,7 +267,7 @@ private fun TextNoteFeedItemInReplyToPreview() {
private fun TextNoteFeedItemQuoteNostrEventPreview() {
press.mantra.compose.ui.theme.TorchTheme {
Surface(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
) {
TextNoteFeedItem(
nostrEvent = press.mantra.compose.database.model.NostrEvent(

View File

@@ -8,6 +8,7 @@ import androidx.compose.material.icons.filled.AccountCircle
import androidx.compose.material.icons.filled.Face5
import androidx.compose.material.icons.filled.FaceRetouchingOff
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
@@ -20,6 +21,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import coil3.compose.AsyncImage
import press.mantra.compose.ui.theme.spacing
@Composable
fun ProfileAvatar(
@@ -93,7 +95,7 @@ fun ProfileAvatar(
fun ProfileAvatarPreview() {
press.mantra.compose.ui.theme.TorchTheme {
Surface(
modifier = Modifier.padding(20.dp)
modifier = Modifier.padding(MaterialTheme.spacing.space250)
) {
ProfileAvatar(
publicKey = "hwgwefwase",

View File

@@ -46,6 +46,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.machankura.compose.ui.composable.widgets.buttons.Clickable
import press.mantra.compose.ui.composable.widgets.dialogs.ModalBottomSheet
import press.mantra.compose.ui.theme.spacing
object WalletAvatars {
val list = listOf(
@@ -61,7 +62,7 @@ object WalletAvatars {
}
@Composable
fun WalletAvatar(avatar: String, fontSize: TextUnit = 28.sp, borderColor: Color = Color.Transparent, backgroundColor: Color = MaterialTheme.colorScheme.surface, internalPadding: PaddingValues = PaddingValues(10.dp)) {
fun WalletAvatar(avatar: String, fontSize: TextUnit = 28.sp, borderColor: Color = Color.Transparent, backgroundColor: Color = MaterialTheme.colorScheme.surface, internalPadding: PaddingValues = PaddingValues(MaterialTheme.spacing.space125)) {
Box(modifier = Modifier.clip(CircleShape).background(backgroundColor).border(1.dp, color = borderColor, shape = CircleShape).padding(internalPadding), contentAlignment = Alignment.Center) {
Text(
text = avatar,
@@ -79,20 +80,20 @@ fun ColumnScope.AvatarPicker(
var showPickerDialog by remember { mutableStateOf(false) }
Clickable(onClick = { showPickerDialog = true }, modifier = Modifier.align(Alignment.CenterHorizontally)) {
WalletAvatar(avatar, fontSize = 48.sp, internalPadding = PaddingValues(16.dp))
WalletAvatar(avatar, fontSize = 48.sp, internalPadding = PaddingValues(MaterialTheme.spacing.containerPadding))
}
if (showPickerDialog) {
ModalBottomSheet(
onDismiss = { showPickerDialog = false },
horizontalAlignment = Alignment.CenterHorizontally,
internalPadding = PaddingValues(horizontal = 24.dp, vertical = 0.dp),
internalPadding = PaddingValues(horizontal = MaterialTheme.spacing.space300, vertical = MaterialTheme.spacing.space0),
isContentScrollable = false,
) {
// val s = stringResource(Res.string.wallet_edit_pick_avatar)
val s = "Edit avatar"
Text(s, style = MaterialTheme.typography.bodyMedium)
Spacer(modifier = Modifier.height(24.dp))
Spacer(modifier = Modifier.height(MaterialTheme.spacing.space300))
LazyVerticalGrid(
columns = GridCells.Fixed(6),
modifier = Modifier.fillMaxWidth()

View File

@@ -49,6 +49,7 @@ import fr.acinq.phoenix.data.WalletId
import fr.acinq.phoenix.utils.preferences.GlobalPrefs
import fr.acinq.phoenix.utils.preferences.UserWalletMetadata
import fr.acinq.phoenix.utils.preferences.getByWalletIdOrDefault
import press.mantra.compose.ui.theme.spacing
@Composable
fun WalletsSelector(
@@ -82,9 +83,9 @@ fun WalletsSelector(
canEdit = canEdit,
onClick = { onWalletClick(currentWallet) }
)
Spacer(Modifier.height(12.dp))
Spacer(Modifier.height(MaterialTheme.spacing.space150))
HorizontalDivider()
Spacer(Modifier.height(8.dp))
Spacer(Modifier.height(MaterialTheme.spacing.space100))
}
}
items(items = otherWalletsList) { (walletId, userWallet) ->
@@ -96,7 +97,7 @@ fun WalletsSelector(
canEdit = canEdit,
onClick = { onWalletClick(userWallet) }
)
Spacer(Modifier.height(8.dp))
Spacer(Modifier.height(MaterialTheme.spacing.space100))
}
bottomContent?.let {
item { it.invoke() }
@@ -142,22 +143,22 @@ private fun AvailableWalletView(
Row(modifier = Modifier.height(IntrinsicSize.Min), verticalAlignment = Alignment.CenterVertically) {
Row(
modifier = Modifier
.padding(horizontal = 12.dp, vertical = 12.dp)
.padding(horizontal = MaterialTheme.spacing.space150, vertical = MaterialTheme.spacing.space150)
.weight(1f),
verticalAlignment = Alignment.CenterVertically
) {
WalletAvatar(avatar = metadata.avatar, backgroundColor = Color.Transparent, internalPadding = PaddingValues(4.dp))
Spacer(Modifier.width(12.dp))
WalletAvatar(avatar = metadata.avatar, backgroundColor = Color.Transparent, internalPadding = PaddingValues(MaterialTheme.spacing.space50))
Spacer(Modifier.width(MaterialTheme.spacing.space150))
Column {
Text(text = metadata.nameOrDefault(), modifier = Modifier, maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodyMedium)
Spacer(Modifier.height(2.dp))
Spacer(Modifier.height(MaterialTheme.spacing.space25))
Text(text = userWallet.nodeId, modifier = Modifier, maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.displayMedium.copy(fontFamily = FontFamily.Monospace, fontSize = 12.sp))
}
}
if (isCurrent && canEdit) {
Spacer(Modifier.width(8.dp))
Spacer(Modifier.width(MaterialTheme.spacing.space100))
// TODO: PhoenixIcon(R.drawable.ic_edit, tint = MaterialTheme.colorScheme.primary)
Spacer(Modifier.width(16.dp))
Spacer(Modifier.width(MaterialTheme.spacing.space200))
}
}
}

View File

@@ -409,21 +409,21 @@ class ChatMessageListViewModel(
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
if (chatRoomDetailMessageListUIState.chatMessageList.isEmpty()) {
Spacer(
modifier = Modifier.height(20.dp)
modifier = Modifier.height(MaterialTheme.spacing.space250)
)
Text(
modifier = Modifier.padding(20.dp),
modifier = Modifier.padding(MaterialTheme.spacing.space250),
text = "Currently no messages have been shared.\nBreak the ice.",
textAlign = TextAlign.Center
)
Spacer(
modifier = Modifier.height(20.dp)
modifier = Modifier.height(MaterialTheme.spacing.space250)
)
} else {
@@ -447,7 +447,7 @@ class ChatMessageListViewModel(
LazyColumn(
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space50),
verticalArrangement = Arrangement.spacedBy(10.dp),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
reverseLayout = true
) {
// First item, and the layout is reversed, so this
@@ -479,7 +479,7 @@ class ChatMessageListViewModel(
) {
Row(
modifier = Modifier.fillMaxWidth().padding(8.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.compactPadding),
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically
) {
@@ -620,13 +620,13 @@ class ChatMessageListViewModel(
},
) {
Column(
modifier = Modifier.padding(10.dp),
modifier = Modifier.padding(MaterialTheme.spacing.space125),
horizontalAlignment = if (localChatMessage.chatMessage.isUserMessage) {
Alignment.End
} else {
Alignment.Start
},
verticalArrangement = Arrangement.spacedBy(6.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space75)
) {
if (localChatMessage.chatMessage.isUserMessage.not()) {
Text(
@@ -645,7 +645,7 @@ class ChatMessageListViewModel(
// assume was the whole room.
if (localChatMessage.chatMessage.messageType == ChatMessage.TYPE_DIRECT_MESSAGE) {
Row(
horizontalArrangement = Arrangement.spacedBy(4.dp),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.relatedGap),
verticalAlignment = Alignment.CenterVertically
) {
Icon(
@@ -677,7 +677,7 @@ class ChatMessageListViewModel(
Row(
horizontalArrangement = Arrangement.spacedBy(
10.dp,
MaterialTheme.spacing.space125,
Alignment.End
),
verticalAlignment = Alignment.CenterVertically,
@@ -858,8 +858,8 @@ private fun ProposalsAwaitingYouNotice(
)
) {
Row(
modifier = Modifier.fillMaxWidth().padding(12.dp),
horizontalArrangement = Arrangement.spacedBy(10.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space150),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
verticalAlignment = Alignment.CenterVertically
) {
Icon(
@@ -869,7 +869,7 @@ private fun ProposalsAwaitingYouNotice(
Column(
modifier = Modifier.weight(1f),
verticalArrangement = Arrangement.spacedBy(2.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space25)
) {
Text(
text = if (single != null) {
@@ -924,8 +924,8 @@ private fun PrivateMessageNotice(
Row(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 20.dp, vertical = 10.dp),
horizontalArrangement = Arrangement.spacedBy(8.dp),
.padding(horizontal = MaterialTheme.spacing.space250, vertical = MaterialTheme.spacing.space125),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.itemGap),
verticalAlignment = Alignment.CenterVertically
) {
Icon(
@@ -1030,8 +1030,8 @@ private fun RitualNotice(
modifier = Modifier
.fillMaxWidth()
.clickable(onClick = onClick)
.padding(horizontal = 20.dp, vertical = 10.dp),
horizontalArrangement = Arrangement.spacedBy(10.dp),
.padding(horizontal = MaterialTheme.spacing.space250, vertical = MaterialTheme.spacing.space125),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
verticalAlignment = Alignment.CenterVertically
) {
Icon(
@@ -1042,7 +1042,7 @@ private fun RitualNotice(
Column(
modifier = Modifier.weight(1f),
verticalArrangement = Arrangement.spacedBy(2.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space25)
) {
Text(
text = buildAnnotatedString {

View File

@@ -162,7 +162,7 @@ class ChatRoomListViewModel(
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
if (chatRoomListUIState.chatRoomList.isEmpty()) {
@@ -172,7 +172,7 @@ class ChatRoomListViewModel(
} else {
LazyColumn(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
items(
items = chatRoomListUIState.chatRoomList,
@@ -191,8 +191,8 @@ class ChatRoomListViewModel(
}
) {
Row(
modifier = Modifier.fillMaxWidth().padding(20.dp),
horizontalArrangement = Arrangement.spacedBy(10.dp),
modifier = Modifier.fillMaxWidth().padding(MaterialTheme.spacing.space250),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125),
verticalAlignment = Alignment.CenterVertically
) {
// Both lines are clipped to one, so the name
@@ -201,7 +201,7 @@ class ChatRoomListViewModel(
// the clock off the row.
Column(
modifier = Modifier.weight(1f),
verticalArrangement = Arrangement.spacedBy(4.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.relatedGap)
) {
localChatRoom.RenderChatRoomTitleText()
localChatRoom.RenderChatRoomLastMessageText()

View File

@@ -142,7 +142,7 @@ class FeedListViewModel(
LazyColumn(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
items(
items = feedListUIState.localNostrEvents,

View File

@@ -136,7 +136,7 @@ class FollowersListViewModel(
LazyColumn(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
items(
items = followersListUIState.followers,

View File

@@ -135,7 +135,7 @@ class FollowingListViewModel(
LazyColumn(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
items(
items = feedListUIState.following,

View File

@@ -146,7 +146,7 @@ class InReplyToViewModel(
LazyColumn(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(10.dp)
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space125)
) {
items(
items = feedListUIState.localNostrEvents,