Add MonthHeader, WeekdayHeader, and DayCell UI components

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
xfy 2026-05-14 13:20:32 +08:00
parent 298631c8b5
commit 00a24e58fd
3 changed files with 107 additions and 0 deletions

View File

@ -0,0 +1,52 @@
package plus.rua.project.ui
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.text.style.TextAlign
import kotlinx.datetime.LocalDate
@Composable
fun DayCell(
date: LocalDate,
isCurrentMonth: Boolean,
isSelected: Boolean,
isToday: Boolean,
onClick: () -> Unit,
modifier: Modifier = Modifier
) {
val contentColor = when {
isSelected -> MaterialTheme.colorScheme.onPrimary
!isCurrentMonth -> MaterialTheme.colorScheme.onSurface.copy(alpha = 0.38f)
else -> MaterialTheme.colorScheme.onSurface
}
val backgroundColor = when {
isSelected -> MaterialTheme.colorScheme.primary
else -> MaterialTheme.colorScheme.surface
}
Box(
modifier = modifier
.aspectRatio(1f)
.clip(CircleShape)
.background(backgroundColor)
.clickable(onClick = onClick),
contentAlignment = Alignment.Center
) {
Text(
text = date.day.toString(),
textAlign = TextAlign.Center,
color = contentColor,
style = MaterialTheme.typography.bodyMedium
)
}
}

View File

@ -0,0 +1,29 @@
package plus.rua.project.ui
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
@Composable
fun MonthHeader(
year: Int,
month: Int,
weekNumber: Int,
modifier: Modifier = Modifier
) {
Row(
modifier = modifier
.fillMaxWidth()
.padding(horizontal = 16.dp, vertical = 12.dp)
) {
Text(
text = "${year}${month}月 第${weekNumber}",
style = MaterialTheme.typography.titleMedium
)
}
}

View File

@ -0,0 +1,26 @@
package plus.rua.project.ui
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
private val WEEKDAY_LABELS = listOf("", "", "", "", "", "", "")
@Composable
fun WeekdayHeader(modifier: Modifier = Modifier) {
Row(modifier = modifier.fillMaxWidth()) {
WEEKDAY_LABELS.forEach { label ->
Text(
text = label,
modifier = Modifier.weight(1f),
textAlign = TextAlign.Center,
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurfaceVariant
)
}
}
}