From 6778c14c41e9d20f9158c254c595e5d501a8a7ba Mon Sep 17 00:00:00 2001 From: jinukeu Date: Sun, 3 Dec 2023 20:39:49 +0900 Subject: [PATCH 01/11] feat: SuwikiDropDown.kt --- .../component/dropdown/SuwikiDropDown.kt | 137 ++++++++++++++++++ .../res/drawable/ic_dropdown_arrow_down.xml | 11 ++ 2 files changed, 148 insertions(+) create mode 100644 core/designsystem/src/main/java/com/suwiki/core/designsystem/component/dropdown/SuwikiDropDown.kt create mode 100644 core/designsystem/src/main/res/drawable/ic_dropdown_arrow_down.xml diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/dropdown/SuwikiDropDown.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/dropdown/SuwikiDropDown.kt new file mode 100644 index 000000000..f09843996 --- /dev/null +++ b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/dropdown/SuwikiDropDown.kt @@ -0,0 +1,137 @@ +package com.suwiki.core.designsystem.component.dropdown + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.DpOffset +import androidx.compose.ui.unit.dp +import com.suwiki.core.designsystem.R + +@Composable +fun SuwikiDropDownMenu( + label: String = "", + onClickLabel: () -> Unit = {}, + onDismissRequest: () -> Unit = {}, + expanded: Boolean = false, + content: @Composable ColumnScope.() -> Unit, +) { + Column( + horizontalAlignment = Alignment.Start, + ) { + Row( + modifier = Modifier + .clip(RoundedCornerShape(10.dp)) + .clickable(onClick = onClickLabel) + .background(Color.LightGray) + .padding( + horizontal = 9.dp, + vertical = 6.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + text = label, + ) + Image( + painter = painterResource(id = R.drawable.ic_dropdown_arrow_down), + contentDescription = "", + ) + } + + MaterialTheme( + shapes = MaterialTheme.shapes.copy(extraSmall = RoundedCornerShape(10.dp)), + ) { + DropdownMenu( + modifier = Modifier + .width(106.dp) + .background(Color.White) + .padding(vertical = 8.dp) + .clip(RoundedCornerShape(20.dp)), + offset = DpOffset(x = 0.dp, y = 6.dp), + expanded = expanded, + onDismissRequest = onDismissRequest, + content = content, + ) + } + } +} + +@Preview(showSystemUi = true) +@Composable +fun SuwikiDropDownMenuPreview() { + var isSemesterDropDownExpanded by remember { + mutableStateOf(false) + } + + var isExamDropdownExpanded by remember { + mutableStateOf(false) + } + + Column { + SuwikiDropDownMenu( + label = "수강학기 선택", + expanded = isSemesterDropDownExpanded, + onClickLabel = { isSemesterDropDownExpanded = true }, + onDismissRequest = { isSemesterDropDownExpanded = false }, + ) { + repeat(4) { + SuwikiDropdownMenuItem( + text = "menu", + ) + } + } + + SuwikiDropDownMenu( + label = "시험유형 선택", + expanded = isExamDropdownExpanded, + onClickLabel = { isExamDropdownExpanded = true }, + onDismissRequest = { isExamDropdownExpanded = false }, + ) { + repeat(4) { + SuwikiDropdownMenuItem( + text = "menu", + ) + } + } + } +} + +@Composable +fun SuwikiDropdownMenuItem( + onClick: () -> Unit = {}, + text: String = "", +) { + DropdownMenuItem( + modifier = Modifier.fillMaxWidth(), + onClick = onClick, + text = { + Text( + text = text, + textAlign = TextAlign.Start, + ) + }, + ) +} diff --git a/core/designsystem/src/main/res/drawable/ic_dropdown_arrow_down.xml b/core/designsystem/src/main/res/drawable/ic_dropdown_arrow_down.xml new file mode 100644 index 000000000..00891344a --- /dev/null +++ b/core/designsystem/src/main/res/drawable/ic_dropdown_arrow_down.xml @@ -0,0 +1,11 @@ + + + From 295dbcd03c3516075918d213fc4ecec8b321adf2 Mon Sep 17 00:00:00 2001 From: jinukeu Date: Mon, 4 Dec 2023 12:14:26 +0900 Subject: [PATCH 02/11] feat: SuwikiSlider --- .../core/designsystem/component/Sample.kt | 1 - .../component/slider/SuwikiSlider.kt | 94 +++++++++++++++++++ .../component/slider/SuwikiSliderThumb.kt | 35 +++++++ .../slider/SuwikiSliderThumbWithLabel.kt | 50 ++++++++++ .../component/slider/SuwikiSliderTrack.kt | 61 ++++++++++++ .../res/drawable/ic_slider_thumb_hovered.xml | 18 ++++ 6 files changed, 258 insertions(+), 1 deletion(-) delete mode 100644 core/designsystem/src/main/java/com/suwiki/core/designsystem/component/Sample.kt create mode 100644 core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSlider.kt create mode 100644 core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSliderThumb.kt create mode 100644 core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSliderThumbWithLabel.kt create mode 100644 core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSliderTrack.kt create mode 100644 core/designsystem/src/main/res/drawable/ic_slider_thumb_hovered.xml diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/Sample.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/Sample.kt deleted file mode 100644 index 412a23fea..000000000 --- a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/Sample.kt +++ /dev/null @@ -1 +0,0 @@ -package com.suwiki.core.designsystem.component diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSlider.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSlider.kt new file mode 100644 index 000000000..1247a04cf --- /dev/null +++ b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSlider.kt @@ -0,0 +1,94 @@ +package com.suwiki.core.designsystem.component.slider + +import androidx.annotation.IntRange +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Slider +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import kotlin.math.round + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun SuwikiSlider( + value: Float = 2.5f, + onValueChange: (Float) -> Unit = { _ -> }, + @IntRange(from = 0) + steps: Int = 9, + valueRange: ClosedFloatingPointRange = 0f..5f, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, +) { + var isHovering by rememberSaveable { + mutableStateOf(false) + } + + val label = (round(value * 100) / 100).toString() + + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + ) { + Slider( + modifier = Modifier.weight(1f).height(SUWIKI_THUMB_WIDTH_LABEL_HEIGHT.dp), + value = value, + onValueChange = { + isHovering = true + onValueChange(it) + }, + onValueChangeFinished = { isHovering = false }, + valueRange = valueRange, + steps = steps, + interactionSource = interactionSource, + thumb = { + if (isHovering) { + SuwikiSliderThumbWithLabel( + label = label, + ) + } else { + SuwikiSliderThumb() + } + }, + track = { + SuwikiSliderTrack( + value = value, + valueRange = valueRange, + height = 6.dp, + shape = RoundedCornerShape(4.dp), + ) + }, + ) + + Text(text = label) + } +} + +@Preview(showBackground = true, backgroundColor = 0xFFFFFF) +@Composable +fun SuwikiSliderPreview() { + var sliderPosition by rememberSaveable { + mutableFloatStateOf(2.5f) + } + + Box(modifier = Modifier.padding(vertical = 40.dp)) { + SuwikiSlider( + value = sliderPosition, + onValueChange = { sliderPosition = if (it < 0.5) 0.5F else it }, + ) + } +} diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSliderThumb.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSliderThumb.kt new file mode 100644 index 000000000..7e73dac75 --- /dev/null +++ b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSliderThumb.kt @@ -0,0 +1,35 @@ +package com.suwiki.core.designsystem.component.slider + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +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.graphics.Color +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp + +@Composable +fun SuwikiSliderThumb() { + Box( + modifier = Modifier.size(28.dp), + contentAlignment = Alignment.Center, + ) { + Spacer( + modifier = Modifier + .size(16.dp) + .clip(CircleShape) + .background(Color.Blue), + ) + } +} + +@Preview +@Composable +fun SuwikiSliderThumbPreview() { + SuwikiSliderThumb() +} diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSliderThumbWithLabel.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSliderThumbWithLabel.kt new file mode 100644 index 000000000..3249f06f3 --- /dev/null +++ b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSliderThumbWithLabel.kt @@ -0,0 +1,50 @@ +package com.suwiki.core.designsystem.component.slider + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.suwiki.core.designsystem.R + +const val SUWIKI_THUMB_WIDTH_LABEL_HEIGHT = 88 + +@Composable +fun SuwikiSliderThumbWithLabel( + modifier: Modifier = Modifier, + label: String, +) { + Box( + modifier = modifier.height(SUWIKI_THUMB_WIDTH_LABEL_HEIGHT.dp), + ) { + Image( + painter = painterResource(id = R.drawable.ic_slider_thumb_hovered), + contentDescription = "", + ) + + Box( + modifier = Modifier.size(28.dp), + contentAlignment = Alignment.Center, + ) { + Text( + text = label, + textAlign = TextAlign.Center, + color = Color.White, + ) + } + } +} + +@Preview +@Composable +fun SuwikiSliderThumbWithLabelPreview() { + SuwikiSliderThumbWithLabel(label = "5.0") +} diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSliderTrack.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSliderTrack.kt new file mode 100644 index 000000000..275e437d3 --- /dev/null +++ b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSliderTrack.kt @@ -0,0 +1,61 @@ +package com.suwiki.core.designsystem.component.slider + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp + +@Composable +@ExperimentalMaterial3Api +fun SuwikiSliderTrack( + modifier: Modifier = Modifier, + value: Float, + valueRange: ClosedFloatingPointRange, + height: Dp = 6.dp, + shape: Shape = RoundedCornerShape(4.dp) +) { + Box( + modifier = modifier + .track(height = height, shape = shape) + .background(Color.LightGray), + ) { + Box( + modifier = modifier + .progress( + value = value, + valueRange = valueRange, + height = height, + shape = shape, + ) + .background(Color.Blue), + ) + } +} + +private fun Modifier.track( + height: Dp = 6.dp, + shape: Shape = CircleShape +) = fillMaxWidth() + .heightIn(min = height) + .clip(shape) + +private fun Modifier.progress( + value: Float, + valueRange: ClosedFloatingPointRange, + height: Dp = 6.dp, + shape: Shape = CircleShape +) = + fillMaxWidth(fraction = value / valueRange.endInclusive - valueRange.start) + .heightIn(min = height) + .clip(shape) diff --git a/core/designsystem/src/main/res/drawable/ic_slider_thumb_hovered.xml b/core/designsystem/src/main/res/drawable/ic_slider_thumb_hovered.xml new file mode 100644 index 000000000..4a81fe6e9 --- /dev/null +++ b/core/designsystem/src/main/res/drawable/ic_slider_thumb_hovered.xml @@ -0,0 +1,18 @@ + + + + + From 787373056affb3c0607f8a42868a3929a21654c4 Mon Sep 17 00:00:00 2001 From: jinukeu Date: Mon, 4 Dec 2023 14:33:46 +0900 Subject: [PATCH 03/11] chore: ktlintFormat --- .../core/designsystem/component/slider/SuwikiSliderTrack.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSliderTrack.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSliderTrack.kt index 275e437d3..7ec2bd21b 100644 --- a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSliderTrack.kt +++ b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/slider/SuwikiSliderTrack.kt @@ -23,7 +23,7 @@ fun SuwikiSliderTrack( value: Float, valueRange: ClosedFloatingPointRange, height: Dp = 6.dp, - shape: Shape = RoundedCornerShape(4.dp) + shape: Shape = RoundedCornerShape(4.dp), ) { Box( modifier = modifier @@ -45,7 +45,7 @@ fun SuwikiSliderTrack( private fun Modifier.track( height: Dp = 6.dp, - shape: Shape = CircleShape + shape: Shape = CircleShape, ) = fillMaxWidth() .heightIn(min = height) .clip(shape) @@ -54,7 +54,7 @@ private fun Modifier.progress( value: Float, valueRange: ClosedFloatingPointRange, height: Dp = 6.dp, - shape: Shape = CircleShape + shape: Shape = CircleShape, ) = fillMaxWidth(fraction = value / valueRange.endInclusive - valueRange.start) .heightIn(min = height) From 7e53eeb1b2dbe3a262fa6c203308b3662fecd717 Mon Sep 17 00:00:00 2001 From: jinukeu Date: Mon, 4 Dec 2023 17:52:37 +0900 Subject: [PATCH 04/11] feat: SuwikiTextFieldRegular --- .../textfield/SuwikiTextFieldRegular.kt | 158 ++++++++++++++++++ .../main/res/drawable/ic_textfield_clear.xml | 9 + 2 files changed, 167 insertions(+) create mode 100644 core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldRegular.kt create mode 100644 core/designsystem/src/main/res/drawable/ic_textfield_clear.xml diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldRegular.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldRegular.kt new file mode 100644 index 000000000..067eff916 --- /dev/null +++ b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldRegular.kt @@ -0,0 +1,158 @@ +package com.suwiki.core.designsystem.component.textfield + +import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.interaction.collectIsFocusedAsState +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.wrapContentSize +import androidx.compose.foundation.text.BasicTextField +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.suwiki.core.designsystem.R + +@Composable +fun SuwikiTextFieldRegular( + modifier: Modifier = Modifier, + label: String = "", + hint: String = "", + value: String = "", + onValueChange: (String) -> Unit = { _ -> }, + onClickClearButton: () -> Unit = {}, + helperText: String = "", + isError: Boolean = false, + maxLines: Int = 1, + minLines: Int = 1, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, +) { + val isFocused by interactionSource.collectIsFocusedAsState() + + val (labelColor, helperTextColor) = when { + isError -> (Color.Red to Color.Red) + isFocused -> (Color.Blue to Color.Blue) + else -> (Color.Gray to Color.Gray) + } + + val underlineColor = when { + isError -> Color.Red + isFocused -> Color.Blue + value.isEmpty() -> Color.Gray + else -> Color.LightGray + } + + BasicTextField( + value = value, + onValueChange = onValueChange, + modifier = modifier.fillMaxWidth(), + singleLine = maxLines == 1, + maxLines = if (minLines > maxLines) minLines else maxLines, + minLines = minLines, + interactionSource = interactionSource, + cursorBrush = SolidColor(Color.Blue), + decorationBox = { innerText -> + Column { + Text( + text = label, + color = labelColor, + ) + + Spacer(modifier = Modifier.size(2.dp)) + + Row( + modifier = Modifier + .fillMaxWidth() + .heightIn( + min = 27.dp, + ), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + ) { + Box( + modifier = Modifier.wrapContentSize(), + contentAlignment = Alignment.CenterStart, + ) { + innerText() + if (value.isEmpty()) Text(text = hint, color = Color.LightGray) + } + + if (value.isNotEmpty()) { + Image( + modifier = Modifier.clickable(onClick = onClickClearButton), + painter = painterResource(id = R.drawable.ic_textfield_clear), + contentDescription = "", + ) + } + } + + Spacer(modifier = Modifier.height(if (isFocused || isError) 4.dp else 5.dp)) + + HorizontalDivider( + thickness = if (isFocused || isError) 2.dp else 1.dp, + color = underlineColor, + ) + + Spacer(modifier = Modifier.height(3.dp)) + + Text( + text = helperText, + color = helperTextColor, + ) + } + }, + ) +} + +@Preview(showBackground = true, backgroundColor = 0xFFFFFF) +@Composable +fun SuwikiTextFieldRegularPreview() { + var normalValue by remember { + mutableStateOf("") + } + + var errorValue by remember { + mutableStateOf("") + } + + Column( + verticalArrangement = Arrangement.spacedBy(10.dp), + ) { + SuwikiTextFieldRegular( + label = "라벨", + hint = "플레이스 홀더", + value = normalValue, + onValueChange = { normalValue = it }, + onClickClearButton = { normalValue = "" }, + helperText = "도움말 메세지", + ) + + SuwikiTextFieldRegular( + label = "라벨", + hint = "플레이스 홀더", + value = errorValue, + onValueChange = { errorValue = it }, + onClickClearButton = { errorValue = "" }, + helperText = "도움말 메세지", + isError = true, + ) + } +} diff --git a/core/designsystem/src/main/res/drawable/ic_textfield_clear.xml b/core/designsystem/src/main/res/drawable/ic_textfield_clear.xml new file mode 100644 index 000000000..b66edaac7 --- /dev/null +++ b/core/designsystem/src/main/res/drawable/ic_textfield_clear.xml @@ -0,0 +1,9 @@ + + + From c49ca6adf9884fa4cafd3dcb049e1601650de342 Mon Sep 17 00:00:00 2001 From: jinukeu Date: Mon, 4 Dec 2023 20:12:48 +0900 Subject: [PATCH 05/11] feat: SuwikiTextFieldSmall --- .../textfield/SuwikiTextFieldSmall.kt | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldSmall.kt diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldSmall.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldSmall.kt new file mode 100644 index 000000000..418324cf3 --- /dev/null +++ b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldSmall.kt @@ -0,0 +1,129 @@ +package com.suwiki.core.designsystem.component.textfield + +import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.interaction.collectIsFocusedAsState +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.wrapContentSize +import androidx.compose.foundation.text.BasicTextField +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.suwiki.core.designsystem.R + +@Composable +fun SuwikiTextFieldSmall( + modifier: Modifier = Modifier, + hint: String = "", + value: String = "", + onValueChange: (String) -> Unit = { _ -> }, + onClickClearButton: () -> Unit = {}, + maxLines: Int = 1, + minLines: Int = 1, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, +) { + val isFocused by interactionSource.collectIsFocusedAsState() + + val underlineColor = when { + isFocused -> Color.Blue + value.isEmpty() -> Color.Gray + else -> Color.LightGray + } + + BasicTextField( + value = value, + onValueChange = onValueChange, + modifier = modifier.fillMaxWidth(), + singleLine = maxLines == 1, + maxLines = if (minLines > maxLines) minLines else maxLines, + minLines = minLines, + interactionSource = interactionSource, + cursorBrush = SolidColor(Color.Blue), + decorationBox = { innerText -> + Column { + Row( + modifier = Modifier + .fillMaxWidth() + .heightIn( + min = 21.dp, + ), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + ) { + Box( + modifier = Modifier.wrapContentSize(), + contentAlignment = Alignment.CenterStart, + ) { + innerText() + if (value.isEmpty()) Text(text = hint, color = Color.LightGray) + } + + if (value.isNotEmpty()) { + Image( + modifier = Modifier + .size(21.dp) + .clickable(onClick = onClickClearButton), + painter = painterResource(id = R.drawable.ic_textfield_clear), + contentDescription = "", + ) + } + } + + Spacer(modifier = Modifier.height(5.dp)) + + HorizontalDivider( + thickness = 1.dp, + color = underlineColor, + ) + } + }, + ) +} + +@Preview(showBackground = true, backgroundColor = 0xFFFFFF) +@Composable +fun SuwikiTextFieldSmallPreview() { + var normalValue by remember { + mutableStateOf("") + } + + Column( + modifier = Modifier.padding(vertical = 10.dp), + verticalArrangement = Arrangement.spacedBy(10.dp), + ) { + SuwikiTextFieldSmall( + hint = "플레이스 홀더", + value = normalValue, + onValueChange = { normalValue = it }, + onClickClearButton = { normalValue = "" }, + ) + + SuwikiTextFieldSmall( + hint = "플레이스 홀더", + value = normalValue, + onValueChange = { normalValue = it }, + onClickClearButton = { normalValue = "" }, + ) + } +} From 964feb1d919578d34d7a8ca228a872f5b3a45a72 Mon Sep 17 00:00:00 2001 From: jinukeu Date: Mon, 4 Dec 2023 20:31:44 +0900 Subject: [PATCH 06/11] feat: SuwikiTextFieldReview --- .../textfield/SuwikiTextFieldReview.kt | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldReview.kt diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldReview.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldReview.kt new file mode 100644 index 000000000..8ad925b11 --- /dev/null +++ b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldReview.kt @@ -0,0 +1,98 @@ +package com.suwiki.core.designsystem.component.textfield + +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.wrapContentSize +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.BasicTextField +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp + +@Composable +fun SuwikiTextFieldReview( + modifier: Modifier = Modifier, + hint: String = "", + value: String = "", + onValueChange: (String) -> Unit = { _ -> }, + onClickClearButton: () -> Unit = {}, + isError: Boolean = false, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, +) { + BasicTextField( + value = value, + onValueChange = onValueChange, + modifier = modifier.fillMaxWidth(), + interactionSource = interactionSource, + cursorBrush = SolidColor(Color.Blue), + decorationBox = { innerText -> + Column( + modifier = Modifier + .heightIn(min = 198.dp) + .background(Color.LightGray, shape = RoundedCornerShape(10.dp)) + .border( + width = 1.dp, + color = if (isError) Color.Red else Color.Unspecified, + shape = RoundedCornerShape(10.dp), + ) + .padding(horizontal = 16.dp, vertical = 24.dp), + ) { + Spacer(modifier = Modifier.size(2.dp)) + + Box( + modifier = Modifier.wrapContentSize(), + contentAlignment = Alignment.CenterStart, + ) { + innerText() + if (value.isEmpty()) Text(text = hint, color = Color.Gray) + } + } + }, + ) +} + +@Preview(showBackground = true, backgroundColor = 0xFFFFFF) +@Composable +fun SuwikiTextFieldReviewPreview() { + var normalValue by remember { + mutableStateOf("") + } + + Column( + modifier = Modifier.padding(20.dp), + verticalArrangement = Arrangement.spacedBy(10.dp) + ) { + SuwikiTextFieldReview( + hint = "강의평가를 작성해주세요", + value = normalValue, + onValueChange = { normalValue = it }, + onClickClearButton = { normalValue = "" }, + ) + + SuwikiTextFieldReview( + hint = "강의평가를 작성해주세요", + value = normalValue, + isError = true, + onValueChange = { normalValue = it }, + onClickClearButton = { normalValue = "" }, + ) + } +} From 6663e4429fb034de35c37bdf67a67b07ff77d30d Mon Sep 17 00:00:00 2001 From: jinukeu Date: Mon, 4 Dec 2023 20:49:49 +0900 Subject: [PATCH 07/11] =?UTF-8?q?refactor:=20SuwikiTextFieldReview=20-=20?= =?UTF-8?q?=ED=95=84=EC=9A=94=EC=97=86=EB=8A=94=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designsystem/component/textfield/SuwikiTextFieldReview.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldReview.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldReview.kt index 8ad925b11..48162d985 100644 --- a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldReview.kt +++ b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldReview.kt @@ -33,7 +33,6 @@ fun SuwikiTextFieldReview( hint: String = "", value: String = "", onValueChange: (String) -> Unit = { _ -> }, - onClickClearButton: () -> Unit = {}, isError: Boolean = false, interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, ) { @@ -84,7 +83,6 @@ fun SuwikiTextFieldReviewPreview() { hint = "강의평가를 작성해주세요", value = normalValue, onValueChange = { normalValue = it }, - onClickClearButton = { normalValue = "" }, ) SuwikiTextFieldReview( @@ -92,7 +90,6 @@ fun SuwikiTextFieldReviewPreview() { value = normalValue, isError = true, onValueChange = { normalValue = it }, - onClickClearButton = { normalValue = "" }, ) } } From c40481726e8e86f059c98e798ee4769ceec9ac46 Mon Sep 17 00:00:00 2001 From: jinukeu Date: Mon, 4 Dec 2023 20:58:28 +0900 Subject: [PATCH 08/11] refactor: SuwikiTextFieldReview --- .../textfield/SuwikiTextFieldReview.kt | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldReview.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldReview.kt index 48162d985..00ff10cbc 100644 --- a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldReview.kt +++ b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldReview.kt @@ -6,12 +6,9 @@ import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicTextField import androidx.compose.material3.Text @@ -43,7 +40,7 @@ fun SuwikiTextFieldReview( interactionSource = interactionSource, cursorBrush = SolidColor(Color.Blue), decorationBox = { innerText -> - Column( + Box( modifier = Modifier .heightIn(min = 198.dp) .background(Color.LightGray, shape = RoundedCornerShape(10.dp)) @@ -53,16 +50,10 @@ fun SuwikiTextFieldReview( shape = RoundedCornerShape(10.dp), ) .padding(horizontal = 16.dp, vertical = 24.dp), + contentAlignment = Alignment.TopStart, ) { - Spacer(modifier = Modifier.size(2.dp)) - - Box( - modifier = Modifier.wrapContentSize(), - contentAlignment = Alignment.CenterStart, - ) { - innerText() - if (value.isEmpty()) Text(text = hint, color = Color.Gray) - } + innerText() + if (value.isEmpty()) Text(text = hint, color = Color.Gray) } }, ) @@ -77,7 +68,7 @@ fun SuwikiTextFieldReviewPreview() { Column( modifier = Modifier.padding(20.dp), - verticalArrangement = Arrangement.spacedBy(10.dp) + verticalArrangement = Arrangement.spacedBy(10.dp), ) { SuwikiTextFieldReview( hint = "강의평가를 작성해주세요", From 9398f8822d501f8fad13f19de746e76cc8b8769a Mon Sep 17 00:00:00 2001 From: jinukeu Date: Mon, 4 Dec 2023 21:13:50 +0900 Subject: [PATCH 09/11] feat: SuwikiSearchBarWithFilter.kt --- .../searchbar/SuwikiSearchBarWithFilter.kt | 118 ++++++++++++++++++ .../src/main/res/drawable/ic_filter.xml | 10 ++ .../src/main/res/drawable/ic_search.xml | 10 ++ 3 files changed, 138 insertions(+) create mode 100644 core/designsystem/src/main/java/com/suwiki/core/designsystem/component/searchbar/SuwikiSearchBarWithFilter.kt create mode 100644 core/designsystem/src/main/res/drawable/ic_filter.xml create mode 100644 core/designsystem/src/main/res/drawable/ic_search.xml diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/searchbar/SuwikiSearchBarWithFilter.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/searchbar/SuwikiSearchBarWithFilter.kt new file mode 100644 index 000000000..66b320005 --- /dev/null +++ b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/searchbar/SuwikiSearchBarWithFilter.kt @@ -0,0 +1,118 @@ +package com.suwiki.core.designsystem.component.searchbar + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.BasicTextField +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.suwiki.core.designsystem.R + +@Composable +fun SuwikiSearchBarWithFilter( + modifier: Modifier = Modifier, + hint: String = "", + value: String = "", + onValueChange: (String) -> Unit = { _ -> }, + onClickClearButton: () -> Unit = {}, + onClickFilterButton: () -> Unit = {}, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, +) { + Row( + Modifier + .background(Color.LightGray) + .padding(vertical = 10.dp, horizontal = 24.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + BasicTextField( + value = value, + onValueChange = onValueChange, + modifier = modifier + .weight(1f) + .shadow(elevation = 10.dp) // TODO Custom Shadow로 변경해야함 + .background(Color.White, shape = RoundedCornerShape(10.dp)) + .padding(8.dp), + interactionSource = interactionSource, + cursorBrush = SolidColor(Color.Blue), + decorationBox = { innerText -> + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Image(painter = painterResource(id = R.drawable.ic_search), contentDescription = "") + + Spacer(modifier = Modifier.size(5.dp)) + + Box( + modifier = Modifier.weight(1f), + contentAlignment = Alignment.CenterStart, + ) { + innerText() + if (value.isEmpty()) Text(text = hint, color = Color.Gray) + } + + if (value.isNotEmpty()) { + Image( + modifier = Modifier + .size(21.dp) + .clickable(onClick = onClickClearButton), + painter = painterResource(id = R.drawable.ic_textfield_clear), + contentDescription = "", + ) + } + } + }, + ) + + Spacer(modifier = Modifier.size(4.dp)) + + Image( + modifier = Modifier + .shadow(elevation = 10.dp) // TODO Custom Shadow로 변경해야함 + .background(Color.White, shape = RoundedCornerShape(10.dp)) + .clickable(onClick = onClickFilterButton) + .padding(8.dp), + painter = painterResource(id = R.drawable.ic_filter), + contentDescription = "", + ) + } +} + +@Preview(showBackground = true, backgroundColor = 0xFFFFFF) +@Composable +fun SuwikiSearchBarWithFilterPreview() { + var normalValue by remember { + mutableStateOf("") + } + + Column( + verticalArrangement = Arrangement.spacedBy(10.dp), + ) { + SuwikiSearchBarWithFilter( + hint = "Hinted search text", + value = normalValue, + onValueChange = { normalValue = it }, + onClickClearButton = { normalValue = "" }, + ) + } +} diff --git a/core/designsystem/src/main/res/drawable/ic_filter.xml b/core/designsystem/src/main/res/drawable/ic_filter.xml new file mode 100644 index 000000000..2bbadb61b --- /dev/null +++ b/core/designsystem/src/main/res/drawable/ic_filter.xml @@ -0,0 +1,10 @@ + + + diff --git a/core/designsystem/src/main/res/drawable/ic_search.xml b/core/designsystem/src/main/res/drawable/ic_search.xml new file mode 100644 index 000000000..a9366503c --- /dev/null +++ b/core/designsystem/src/main/res/drawable/ic_search.xml @@ -0,0 +1,10 @@ + + + From 912cfb405abd7cf3db2e24242432c1421f05465c Mon Sep 17 00:00:00 2001 From: jinukeu Date: Mon, 4 Dec 2023 21:23:51 +0900 Subject: [PATCH 10/11] feat: SuwikiSearchBar --- .../component/searchbar/SuwikiSearchBar.kt | 106 ++++++++++++++++++ .../searchbar/SuwikiSearchBarWithFilter.kt | 6 +- 2 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 core/designsystem/src/main/java/com/suwiki/core/designsystem/component/searchbar/SuwikiSearchBar.kt diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/searchbar/SuwikiSearchBar.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/searchbar/SuwikiSearchBar.kt new file mode 100644 index 000000000..9421d4dfe --- /dev/null +++ b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/searchbar/SuwikiSearchBar.kt @@ -0,0 +1,106 @@ +package com.suwiki.core.designsystem.component.searchbar + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.BasicTextField +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.suwiki.core.designsystem.R + +@Composable +fun SuwikiSearchBar( + modifier: Modifier = Modifier, + hint: String = "", + value: String = "", + maxLines: Int = 1, + minLines: Int = 1, + onValueChange: (String) -> Unit = { _ -> }, + onClickClearButton: () -> Unit = {}, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, +) { + Box( + Modifier + .background(Color.White) + .padding(vertical = 10.dp, horizontal = 24.dp), + contentAlignment = Alignment.Center, + ) { + BasicTextField( + value = value, + onValueChange = onValueChange, + modifier = modifier + .background(Color.LightGray, shape = RoundedCornerShape(10.dp)) + .padding(8.dp), + singleLine = maxLines == 1, + maxLines = if (minLines > maxLines) minLines else maxLines, + minLines = minLines, + interactionSource = interactionSource, + cursorBrush = SolidColor(Color.Blue), + decorationBox = { innerText -> + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Image(painter = painterResource(id = R.drawable.ic_search), contentDescription = "") + + Spacer(modifier = Modifier.size(5.dp)) + + Box( + modifier = Modifier.weight(1f), + contentAlignment = Alignment.CenterStart, + ) { + innerText() + if (value.isEmpty()) Text(text = hint, color = Color.Gray) + } + + if (value.isNotEmpty()) { + Image( + modifier = Modifier + .clickable(onClick = onClickClearButton), + painter = painterResource(id = R.drawable.ic_textfield_clear), + contentDescription = "", + ) + } + } + }, + ) + } +} + +@Preview(showBackground = true, backgroundColor = 0xFFFFFF) +@Composable +fun SuwikiSearchBarPreview() { + var normalValue by remember { + mutableStateOf("") + } + + Column( + verticalArrangement = Arrangement.spacedBy(10.dp), + ) { + SuwikiSearchBar( + hint = "Hinted search text", + value = normalValue, + onValueChange = { normalValue = it }, + onClickClearButton = { normalValue = "" }, + ) + } +} diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/searchbar/SuwikiSearchBarWithFilter.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/searchbar/SuwikiSearchBarWithFilter.kt index 66b320005..92a38ba06 100644 --- a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/searchbar/SuwikiSearchBarWithFilter.kt +++ b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/searchbar/SuwikiSearchBarWithFilter.kt @@ -34,6 +34,8 @@ fun SuwikiSearchBarWithFilter( modifier: Modifier = Modifier, hint: String = "", value: String = "", + maxLines: Int = 1, + minLines: Int = 1, onValueChange: (String) -> Unit = { _ -> }, onClickClearButton: () -> Unit = {}, onClickFilterButton: () -> Unit = {}, @@ -53,6 +55,9 @@ fun SuwikiSearchBarWithFilter( .shadow(elevation = 10.dp) // TODO Custom Shadow로 변경해야함 .background(Color.White, shape = RoundedCornerShape(10.dp)) .padding(8.dp), + singleLine = maxLines == 1, + maxLines = if (minLines > maxLines) minLines else maxLines, + minLines = minLines, interactionSource = interactionSource, cursorBrush = SolidColor(Color.Blue), decorationBox = { innerText -> @@ -74,7 +79,6 @@ fun SuwikiSearchBarWithFilter( if (value.isNotEmpty()) { Image( modifier = Modifier - .size(21.dp) .clickable(onClick = onClickClearButton), painter = painterResource(id = R.drawable.ic_textfield_clear), contentDescription = "", From 8fbaea0c193694f11dcedfafb6f959f45c755f03 Mon Sep 17 00:00:00 2001 From: jinukeu Date: Tue, 5 Dec 2023 00:33:10 +0900 Subject: [PATCH 11/11] =?UTF-8?q?fix:=20=ED=85=8D=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EA=B0=80=20=EB=8B=AB=EA=B8=B0=20=EC=95=84=EC=9D=B4=EC=BD=98?= =?UTF-8?q?=EC=9D=84=20=EA=B0=80=EB=A6=AC=EB=8A=94=20=ED=98=84=EC=83=81=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designsystem/component/textfield/SuwikiTextFieldRegular.kt | 3 +-- .../designsystem/component/textfield/SuwikiTextFieldSmall.kt | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldRegular.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldRegular.kt index 067eff916..87bdaea6c 100644 --- a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldRegular.kt +++ b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldRegular.kt @@ -13,7 +13,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.text.BasicTextField import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Text @@ -88,7 +87,7 @@ fun SuwikiTextFieldRegular( verticalAlignment = Alignment.CenterVertically, ) { Box( - modifier = Modifier.wrapContentSize(), + modifier = Modifier.weight(1f), contentAlignment = Alignment.CenterStart, ) { innerText() diff --git a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldSmall.kt b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldSmall.kt index 418324cf3..bc75ab897 100644 --- a/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldSmall.kt +++ b/core/designsystem/src/main/java/com/suwiki/core/designsystem/component/textfield/SuwikiTextFieldSmall.kt @@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.text.BasicTextField import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Text @@ -72,7 +71,7 @@ fun SuwikiTextFieldSmall( verticalAlignment = Alignment.CenterVertically, ) { Box( - modifier = Modifier.wrapContentSize(), + modifier = Modifier.weight(1f), contentAlignment = Alignment.CenterStart, ) { innerText()