From a5ddf1653739843f3392bdac2ca8889399925796 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Sun, 28 Jun 2026 13:09:37 +0200 Subject: [PATCH] components: draw the shared Compose vocabulary from floret-kit Phase 4 (components). Agendula now sources its grouped-row primitive (GroupedSurface/GroupedRow + Position/positionOf), InlineTextField, OptionCard, and pastelize() from the kit's components module instead of its own ui/common copies. These were Agendula's versions, taken as the canonical family reference (design sign-off); Agendula keeps its own identity chips (ListColorChip/ ListNameChip task glyph, PriorityChip) which now import the shared pastelize. - Delete app copies of GroupedList/InlineTextField/OptionCard; drop the local pastelize from ListChip. Repoint all imports (cross-package + same-package + one inline FQN) to de.jeanlucmakiola.floret.components. Submodule re-pinned. Clean composite build + tests + lintDebug + debug assemble green. Co-Authored-By: Claude Opus 4.8 (1M context) --- app/build.gradle.kts | 1 + .../agendula/ui/common/GroupedList.kt | 130 ------------------ .../agendula/ui/common/InlineTextField.kt | 83 ----------- .../agendula/ui/common/ListChip.kt | 15 +- .../agendula/ui/common/OptionCard.kt | 95 ------------- .../agendula/ui/common/OptionPicker.kt | 2 + .../agendula/ui/common/PriorityChip.kt | 1 + .../agendula/ui/common/ReminderLeadPicker.kt | 4 + .../agendula/ui/detail/TaskDetailScreen.kt | 6 +- .../agendula/ui/edit/TaskEditScreen.kt | 12 +- .../agendula/ui/lists/ListsScreen.kt | 4 +- .../agendula/ui/settings/SettingsScreen.kt | 8 +- .../agendula/ui/tasklist/TaskListScreen.kt | 6 +- floret-kit | 2 +- 14 files changed, 28 insertions(+), 341 deletions(-) delete mode 100644 app/src/main/java/de/jeanlucmakiola/agendula/ui/common/GroupedList.kt delete mode 100644 app/src/main/java/de/jeanlucmakiola/agendula/ui/common/InlineTextField.kt delete mode 100644 app/src/main/java/de/jeanlucmakiola/agendula/ui/common/OptionCard.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index bcac3f1..fb7697f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -123,6 +123,7 @@ dependencies { implementation("de.jeanlucmakiola.floret:core-time") implementation("de.jeanlucmakiola.floret:core-crash") implementation("de.jeanlucmakiola.floret:identity") + implementation("de.jeanlucmakiola.floret:components") debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) diff --git a/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/GroupedList.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/GroupedList.kt deleted file mode 100644 index 7914f72..0000000 --- a/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/GroupedList.kt +++ /dev/null @@ -1,130 +0,0 @@ -package de.jeanlucmakiola.agendula.ui.common - -import androidx.compose.animation.core.animateDpAsState -import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.interaction.collectIsPressedAsState -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.heightIn -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.ListItem -import androidx.compose.material3.ListItemDefaults -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Surface -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.Shape -import androidx.compose.ui.unit.Dp -import androidx.compose.ui.unit.dp - -/** - * Position of a row within a grouped list (the Android-15 settings pattern): a - * run of rows shares one rounded container, full corners at the group's outer - * edges and small corners between, separated by small gaps. Copied from - * Calendula so the two apps read as one family. - */ -enum class Position { Top, Middle, Bottom, Alone } - -fun positionOf(index: Int, count: Int): Position = when { - count <= 1 -> Position.Alone - index == 0 -> Position.Top - index == count - 1 -> Position.Bottom - else -> Position.Middle -} - -/** Corner radii for a grouped segment: full at the group's outer edges, small between. */ -fun groupedShape(position: Position, full: Dp, small: Dp): Shape = when (position) { - Position.Alone -> RoundedCornerShape(full) - Position.Top -> RoundedCornerShape(topStart = full, topEnd = full, bottomStart = small, bottomEnd = small) - Position.Middle -> RoundedCornerShape(small) - Position.Bottom -> RoundedCornerShape(topStart = small, topEnd = small, bottomStart = full, bottomEnd = full) -} - -/** - * One segment of a grouped list: a tonal [Surface] whose corner radii come from - * [position] (so a run reads as a single rounded card), with a small gap below - * all but the last. Corners morph rounder on press — the expressive shape play. - * The caller supplies [content] and any horizontal inset via [modifier], so the - * same primitive serves both the 16dp-inset lists and full-width detail cards. - */ -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun GroupedSurface( - position: Position, - modifier: Modifier = Modifier, - onClick: (() -> Unit)? = null, - color: Color = MaterialTheme.colorScheme.surfaceContainerHigh, - content: @Composable () -> Unit, -) { - val interaction = remember { MutableInteractionSource() } - val pressed by interaction.collectIsPressedAsState() - val full by animateDpAsState(if (pressed) 36.dp else 22.dp, label = "fullCorner") - val small by animateDpAsState(if (pressed) 36.dp else 6.dp, label = "smallCorner") - val shape = groupedShape(position, full, small) - val gap = when (position) { - Position.Top, Position.Middle -> Modifier.padding(bottom = 2.dp) - Position.Bottom, Position.Alone -> Modifier - } - val base = modifier.fillMaxWidth().then(gap) - if (onClick != null) { - Surface(onClick = onClick, color = color, shape = shape, interactionSource = interaction, modifier = base) { content() } - } else { - Surface(color = color, shape = shape, modifier = base) { content() } - } -} - -/** - * One row in a grouped list: an M3 [ListItem] over a [GroupedSurface] (the - * tonal, position-shaped, press-morphing family container). Insets 16dp like - * the lists overview. - */ -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun GroupedRow( - title: String, - position: Position, - modifier: Modifier = Modifier, - summary: String? = null, - selected: Boolean = false, - minHeight: Dp = 72.dp, - leading: @Composable (() -> Unit)? = null, - trailing: @Composable (() -> Unit)? = null, - onClick: (() -> Unit)? = null, -) { - val itemColors = if (selected) { - ListItemDefaults.colors( - containerColor = Color.Transparent, - headlineColor = MaterialTheme.colorScheme.onSecondaryContainer, - leadingIconColor = MaterialTheme.colorScheme.onSecondaryContainer, - supportingColor = MaterialTheme.colorScheme.onSecondaryContainer, - trailingIconColor = MaterialTheme.colorScheme.onSecondaryContainer, - ) - } else { - ListItemDefaults.colors(containerColor = Color.Transparent) - } - val containerColor = if (selected) { - MaterialTheme.colorScheme.secondaryContainer - } else { - MaterialTheme.colorScheme.surfaceContainerHigh - } - GroupedSurface( - position = position, - modifier = modifier.padding(horizontal = 16.dp), - onClick = onClick, - color = containerColor, - ) { - ListItem( - headlineContent = { Text(title) }, - supportingContent = summary?.let { text -> { Text(text) } }, - leadingContent = leading, - trailingContent = trailing, - colors = itemColors, - modifier = Modifier.heightIn(min = minHeight), - ) - } -} diff --git a/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/InlineTextField.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/InlineTextField.kt deleted file mode 100644 index 60a6f31..0000000 --- a/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/InlineTextField.kt +++ /dev/null @@ -1,83 +0,0 @@ -package de.jeanlucmakiola.agendula.ui.common - -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.text.BasicTextField -import androidx.compose.foundation.text.KeyboardActions -import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.SolidColor -import androidx.compose.ui.graphics.isSpecified -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.input.ImeAction -import androidx.compose.ui.text.input.KeyboardCapitalization -import androidx.compose.ui.text.input.KeyboardType -import androidx.compose.ui.unit.dp - -/** - * The app's borderless text input: no underline, no outline, just the tonal - * card behind it. Agendula uses this inside a tonal [androidx.compose.material3.Surface] - * for the edit form (title + cards), so anything that takes text reads as one - * family rather than a boxed Material field. Ported from Calendula so the two - * apps share one input style. - */ -@Composable -fun InlineTextField( - value: String, - onValueChange: (String) -> Unit, - placeholder: String, - modifier: Modifier = Modifier - .fillMaxWidth() - .padding(vertical = 4.dp), - textStyle: TextStyle = MaterialTheme.typography.titleMedium, - singleLine: Boolean = true, - minLines: Int = 1, - keyboardType: KeyboardType = KeyboardType.Text, - capitalization: KeyboardCapitalization = KeyboardCapitalization.Sentences, - imeAction: ImeAction = ImeAction.Default, - /** Invoked when the IME action key (e.g. Done) is pressed. */ - onImeAction: (() -> Unit)? = null, -) { - val resolvedStyle = textStyle.copy( - color = if (textStyle.color.isSpecified) { - textStyle.color - } else { - MaterialTheme.colorScheme.onSurface - }, - ) - BasicTextField( - value = value, - onValueChange = onValueChange, - textStyle = resolvedStyle, - singleLine = singleLine, - minLines = minLines, - keyboardOptions = KeyboardOptions( - keyboardType = keyboardType, - capitalization = capitalization, - imeAction = imeAction, - ), - keyboardActions = onImeAction?.let { action -> - KeyboardActions(onAny = { action() }) - } ?: KeyboardActions.Default, - cursorBrush = SolidColor(MaterialTheme.colorScheme.primary), - decorationBox = { innerTextField -> - Box { - if (value.isEmpty()) { - // Clearly fainter than typed text, so a hint never reads as - // prefilled content. - Text( - text = placeholder, - style = resolvedStyle, - color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.5f), - ) - } - innerTextField() - } - }, - modifier = modifier, - ) -} diff --git a/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ListChip.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ListChip.kt index 7676335..3db5f47 100644 --- a/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ListChip.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ListChip.kt @@ -1,5 +1,6 @@ package de.jeanlucmakiola.agendula.ui.common +import de.jeanlucmakiola.floret.components.pastelize import androidx.compose.foundation.background import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Box @@ -22,20 +23,6 @@ import androidx.compose.ui.graphics.luminance import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp -/** - * Soften a raw provider colour toward a pastel that fits the active theme — - * keeps the hue (lists stay recognisable), caps saturation so harsh sync - * colours stop screaming, pins brightness to read on light and dark. Copied - * from Calendula so the families' colours behave identically. - */ -fun pastelize(rawArgb: Int, dark: Boolean): Color { - val hsv = FloatArray(3) - android.graphics.Color.colorToHSV(rawArgb, hsv) - hsv[1] = (hsv[1] * 0.6f).coerceIn(0.25f, 0.65f) - hsv[2] = if (dark) 0.82f else 0.72f - return Color(android.graphics.Color.HSVToColor(hsv)) -} - /** * Leading avatar for a task list: a neutral round chip holding a checklist glyph * tinted in the list's (pastelised) colour — the Calendula calendar-chip pattern, diff --git a/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/OptionCard.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/OptionCard.kt deleted file mode 100644 index 84186aa..0000000 --- a/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/OptionCard.kt +++ /dev/null @@ -1,95 +0,0 @@ -package de.jeanlucmakiola.agendula.ui.common - -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.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Surface -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.graphics.isSpecified -import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.unit.dp - -/** - * The app's standard pick in a selection dialog: a full-width tonal card, - * optionally with a leading icon and a supporting line; the selected option is - * highlighted. Stack with 8dp gaps inside an AlertDialog — the only sanctioned - * selection-modal style (no radio rows, no bare text lists). Ported from - * Calendula so the families' dialogs read identically. - */ -@Composable -fun OptionCard( - label: String, - onClick: () -> Unit, - modifier: Modifier = Modifier, - icon: ImageVector? = null, - /** Icon tint override, e.g. a list colour; unspecified follows selection. */ - iconTint: Color = Color.Unspecified, - supportingText: String? = null, - selected: Boolean = false, - /** Label colour override, e.g. primary for an emphasised entry. */ - labelColor: Color = Color.Unspecified, -) { - val contentColor = if (selected) { - MaterialTheme.colorScheme.onSecondaryContainer - } else { - MaterialTheme.colorScheme.onSurface - } - Surface( - onClick = onClick, - color = if (selected) { - MaterialTheme.colorScheme.secondaryContainer - } else { - MaterialTheme.colorScheme.surfaceContainerHighest - }, - shape = RoundedCornerShape(12.dp), - modifier = modifier.fillMaxWidth(), - ) { - Row( - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.padding(horizontal = 16.dp, vertical = 14.dp), - ) { - if (icon != null) { - Icon( - imageVector = icon, - contentDescription = null, - tint = when { - iconTint.isSpecified -> iconTint - selected -> MaterialTheme.colorScheme.onSecondaryContainer - else -> MaterialTheme.colorScheme.onSurfaceVariant - }, - modifier = Modifier.size(20.dp), - ) - Spacer(Modifier.width(12.dp)) - } - Column { - Text( - text = label, - style = MaterialTheme.typography.titleMedium, - color = if (labelColor.isSpecified) labelColor else contentColor, - ) - if (supportingText != null) { - Text( - text = supportingText, - style = MaterialTheme.typography.bodySmall, - color = if (selected) { - MaterialTheme.colorScheme.onSecondaryContainer.copy(alpha = 0.8f) - } else { - MaterialTheme.colorScheme.onSurfaceVariant - }, - ) - } - } - } - } -} diff --git a/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/OptionPicker.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/OptionPicker.kt index 50581a8..e4cc7b8 100644 --- a/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/OptionPicker.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/OptionPicker.kt @@ -1,5 +1,7 @@ package de.jeanlucmakiola.agendula.ui.common +import de.jeanlucmakiola.floret.components.positionOf +import de.jeanlucmakiola.floret.components.GroupedRow import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Check diff --git a/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/PriorityChip.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/PriorityChip.kt index 4abaca1..0888094 100644 --- a/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/PriorityChip.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/PriorityChip.kt @@ -1,5 +1,6 @@ package de.jeanlucmakiola.agendula.ui.common +import de.jeanlucmakiola.floret.components.pastelize import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Arrangement diff --git a/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ReminderLeadPicker.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ReminderLeadPicker.kt index 82bfe7d..18f9b6f 100644 --- a/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ReminderLeadPicker.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/common/ReminderLeadPicker.kt @@ -1,5 +1,9 @@ package de.jeanlucmakiola.agendula.ui.common +import de.jeanlucmakiola.floret.components.Position +import de.jeanlucmakiola.floret.components.positionOf +import de.jeanlucmakiola.floret.components.InlineTextField +import de.jeanlucmakiola.floret.components.GroupedRow import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.expandVertically import androidx.compose.animation.fadeIn diff --git a/app/src/main/java/de/jeanlucmakiola/agendula/ui/detail/TaskDetailScreen.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/detail/TaskDetailScreen.kt index 7cf3a8f..f1ae23a 100644 --- a/app/src/main/java/de/jeanlucmakiola/agendula/ui/detail/TaskDetailScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/detail/TaskDetailScreen.kt @@ -70,12 +70,12 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import de.jeanlucmakiola.agendula.R import de.jeanlucmakiola.agendula.domain.Task import de.jeanlucmakiola.agendula.domain.TaskDetail -import de.jeanlucmakiola.agendula.ui.common.GroupedSurface +import de.jeanlucmakiola.floret.components.GroupedSurface import de.jeanlucmakiola.agendula.ui.common.PriorityChip import de.jeanlucmakiola.floret.time.formatDate import de.jeanlucmakiola.floret.time.formatTime -import de.jeanlucmakiola.agendula.ui.common.pastelize -import de.jeanlucmakiola.agendula.ui.common.positionOf +import de.jeanlucmakiola.floret.components.pastelize +import de.jeanlucmakiola.floret.components.positionOf import de.jeanlucmakiola.agendula.ui.tasklist.priorityLabel /** diff --git a/app/src/main/java/de/jeanlucmakiola/agendula/ui/edit/TaskEditScreen.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/edit/TaskEditScreen.kt index 03730db..4029a20 100644 --- a/app/src/main/java/de/jeanlucmakiola/agendula/ui/edit/TaskEditScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/edit/TaskEditScreen.kt @@ -94,15 +94,15 @@ import de.jeanlucmakiola.agendula.domain.TaskFormField import de.jeanlucmakiola.agendula.domain.TaskList import de.jeanlucmakiola.agendula.domain.TaskSection import de.jeanlucmakiola.agendula.domain.TaskSections -import de.jeanlucmakiola.agendula.ui.common.GroupedRow -import de.jeanlucmakiola.agendula.ui.common.InlineTextField -import de.jeanlucmakiola.agendula.ui.common.OptionCard +import de.jeanlucmakiola.floret.components.GroupedRow +import de.jeanlucmakiola.floret.components.InlineTextField +import de.jeanlucmakiola.floret.components.OptionCard import de.jeanlucmakiola.agendula.ui.common.priorityFill import de.jeanlucmakiola.floret.time.formatDate import de.jeanlucmakiola.floret.time.formatTime import de.jeanlucmakiola.agendula.ui.common.localToInstant -import de.jeanlucmakiola.agendula.ui.common.pastelize -import de.jeanlucmakiola.agendula.ui.common.positionOf +import de.jeanlucmakiola.floret.components.pastelize +import de.jeanlucmakiola.floret.components.positionOf import de.jeanlucmakiola.agendula.ui.common.toLocalDate import de.jeanlucmakiola.agendula.ui.common.toLocalTime import de.jeanlucmakiola.agendula.ui.tasklist.priorityLabel @@ -853,7 +853,7 @@ private fun ParentPickerSheet( item(key = "none") { GroupedRow( title = stringResource(R.string.edit_parent_none), - position = de.jeanlucmakiola.agendula.ui.common.Position.Alone, + position = de.jeanlucmakiola.floret.components.Position.Alone, selected = selectedId == null, minHeight = 56.dp, onClick = { choose(null) }, diff --git a/app/src/main/java/de/jeanlucmakiola/agendula/ui/lists/ListsScreen.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/lists/ListsScreen.kt index bf550bd..5ecbd3d 100644 --- a/app/src/main/java/de/jeanlucmakiola/agendula/ui/lists/ListsScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/lists/ListsScreen.kt @@ -49,10 +49,10 @@ import de.jeanlucmakiola.agendula.R import de.jeanlucmakiola.agendula.domain.SmartList import de.jeanlucmakiola.agendula.domain.TaskFilter import de.jeanlucmakiola.agendula.ui.common.ActionShapes -import de.jeanlucmakiola.agendula.ui.common.GroupedRow +import de.jeanlucmakiola.floret.components.GroupedRow import de.jeanlucmakiola.agendula.ui.common.ListColorChip import de.jeanlucmakiola.agendula.ui.common.ShapedActionButton -import de.jeanlucmakiola.agendula.ui.common.positionOf +import de.jeanlucmakiola.floret.components.positionOf /** * Home: smart lists (Today / Overdue / Upcoming / All) as tonal cards with live diff --git a/app/src/main/java/de/jeanlucmakiola/agendula/ui/settings/SettingsScreen.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/settings/SettingsScreen.kt index e8457ca..ade7101 100644 --- a/app/src/main/java/de/jeanlucmakiola/agendula/ui/settings/SettingsScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/settings/SettingsScreen.kt @@ -88,12 +88,12 @@ import de.jeanlucmakiola.agendula.data.prefs.ListReminderOverride import de.jeanlucmakiola.agendula.data.prefs.ThemeMode import de.jeanlucmakiola.agendula.domain.TaskFormField import de.jeanlucmakiola.agendula.ui.common.CollapsingScaffold -import de.jeanlucmakiola.agendula.ui.common.GroupedRow +import de.jeanlucmakiola.floret.components.GroupedRow import de.jeanlucmakiola.agendula.ui.common.OptionPicker -import de.jeanlucmakiola.agendula.ui.common.Position +import de.jeanlucmakiola.floret.components.Position import de.jeanlucmakiola.agendula.ui.common.ReminderLeadPicker -import de.jeanlucmakiola.agendula.ui.common.pastelize -import de.jeanlucmakiola.agendula.ui.common.positionOf +import de.jeanlucmakiola.floret.components.pastelize +import de.jeanlucmakiola.floret.components.positionOf import de.jeanlucmakiola.agendula.ui.common.reminderLeadTimeLabel /** The settings sub-screens reached from the hub's category rows. */ diff --git a/app/src/main/java/de/jeanlucmakiola/agendula/ui/tasklist/TaskListScreen.kt b/app/src/main/java/de/jeanlucmakiola/agendula/ui/tasklist/TaskListScreen.kt index e2a7016..323bccc 100644 --- a/app/src/main/java/de/jeanlucmakiola/agendula/ui/tasklist/TaskListScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/agendula/ui/tasklist/TaskListScreen.kt @@ -89,11 +89,11 @@ import de.jeanlucmakiola.agendula.domain.TaskFilter import de.jeanlucmakiola.agendula.domain.TaskSection import de.jeanlucmakiola.agendula.domain.TaskSections import de.jeanlucmakiola.agendula.ui.common.ListNameChip -import de.jeanlucmakiola.agendula.ui.common.Position +import de.jeanlucmakiola.floret.components.Position import de.jeanlucmakiola.agendula.ui.common.PriorityChip import de.jeanlucmakiola.floret.time.formatDateTime -import de.jeanlucmakiola.agendula.ui.common.pastelize -import de.jeanlucmakiola.agendula.ui.common.positionOf +import de.jeanlucmakiola.floret.components.pastelize +import de.jeanlucmakiola.floret.components.positionOf import java.time.ZoneId import kotlin.time.Clock diff --git a/floret-kit b/floret-kit index dccf934..1bd3e03 160000 --- a/floret-kit +++ b/floret-kit @@ -1 +1 @@ -Subproject commit dccf934172df2bb6fbfd0969a93ff9ae2f188d6a +Subproject commit 1bd3e03ad582f15f22938cec171a7786afaff9ff