Checklists in the body, colour from tags, and commit-derived CalVer #4
@@ -14,9 +14,11 @@ import androidx.compose.material.icons.filled.Close
|
|||||||
import androidx.compose.material3.Checkbox
|
import androidx.compose.material3.Checkbox
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.IconButton
|
import androidx.compose.material3.IconButton
|
||||||
|
import androidx.compose.material3.LocalMinimumInteractiveComponentSize
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.CompositionLocalProvider
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
@@ -136,6 +138,10 @@ private fun TaskBlock(
|
|||||||
onEnter: () -> Unit,
|
onEnter: () -> Unit,
|
||||||
onDelete: () -> Unit,
|
onDelete: () -> Unit,
|
||||||
) {
|
) {
|
||||||
|
// Material sizes every interactive component to a 48dp touch target, and on a
|
||||||
|
// checklist that IS the row height — which is why six items filled a phone screen
|
||||||
|
// even after the field's own padding came off.
|
||||||
|
CompositionLocalProvider(LocalMinimumInteractiveComponentSize provides ROW_TOUCH) {
|
||||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||||
Checkbox(
|
Checkbox(
|
||||||
checked = block.checked == true,
|
checked = block.checked == true,
|
||||||
@@ -166,8 +172,20 @@ private fun TaskBlock(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The touch target for a checklist row's controls.
|
||||||
|
*
|
||||||
|
* Material's floor is 48dp and this is deliberately under it. That floor is sized for
|
||||||
|
* a control somebody has to find; a checklist box sits in a predictable column with an
|
||||||
|
* identical box directly above and below, and the cost of a near miss is ticking the
|
||||||
|
* neighbouring item — visible, and undone by tapping again. Trading twelve of those
|
||||||
|
* dp for a list that fits on a screen is what was asked for, twice.
|
||||||
|
*/
|
||||||
|
private val ROW_TOUCH = 36.dp
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The field a block is typed into.
|
* The field a block is typed into.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user