components: add OptionalFormSection (revealable form section)

The shared wrapper for optional edit-form fields behind a "More fields" toggle:
AnimatedVisibility with the family's expand+fade motion over a full-width Column.
Adds the first intra-kit dependency (components -> identity) for the shared
transitions.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-28 15:17:57 +02:00
parent 1e36c229ca
commit 24ada183e2
2 changed files with 30 additions and 0 deletions

View File

@@ -33,6 +33,10 @@ kotlin {
}
dependencies {
// identity supplies the shared motion (expandEnter/collapseExit) that the
// revealable components animate with.
implementation(project(":identity"))
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.ui)
implementation(libs.androidx.foundation)

View File

@@ -0,0 +1,26 @@
package de.jeanlucmakiola.floret.components
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import de.jeanlucmakiola.floret.identity.collapseExit
import de.jeanlucmakiola.floret.identity.expandEnter
/**
* A form section that reveals/hides with the family's expand+fade motion — the
* shared wrapper for the optional fields behind a "More fields" toggle in the
* edit forms. [content] is laid out in a full-width [Column].
*/
@Composable
fun OptionalFormSection(visible: Boolean, content: @Composable ColumnScope.() -> Unit) {
AnimatedVisibility(
visible = visible,
enter = expandEnter(),
exit = collapseExit(),
) {
Column(modifier = Modifier.fillMaxWidth(), content = content)
}
}