net.kernelpanicsoft.archie.gui.composables.modal¶
Types¶
ModalChoice¶
data class ModalChoice<T>(
val value: T,
val label: Component,
val enabled: Boolean = true
)
Value-label pair used by ChoiceDialog.
WizardDsl¶
Restricts the WizardScope.page DSL to its own receiver scope.
WizardPage¶
data class WizardPage(
val id: String,
val title: Component,
val forwardText: Component? = null,
val validate: () -> WizardValidation = { WizardValidation.Valid },
val content: @Composable
() -> Unit
)
One step of a Wizard.
WizardScope¶
class WizardScope
Receiver scope for the Wizard DSL builder lambda.
WizardState¶
@Stable
class WizardState
Tracks which page of a Wizard is showing. Create via rememberWizardState.
WizardValidation¶
sealed interface WizardValidation
Whether a WizardPage will let the wizard move forward, and why not when it won't.
Functions¶
AlertDialog¶
@Composable
fun ModalScope.AlertDialog(
title: Component,
message: Component,
confirmText: Component = Component.literal("OK"),
onConfirm: () -> Unit = {}
)
Simple one-action modal for acknowledgements and warnings.
ChoiceDialog¶
@Composable
fun <T> ModalScope.ChoiceDialog(
title: Component,
message: Component? = null,
choices: List<ModalChoice<T>>,
cancelText: Component = Component.literal("Cancel"),
onSelected: (T) -> Unit,
onCancel: () -> Unit = {}
)
Multi-choice modal that maps each option in choices to its own button, plus one cancel action.
ConfirmDialog¶
@Composable
fun ModalScope.ConfirmDialog(
title: Component = Component.literal("Confirm Dialog"),
confirmText: Component = Component.literal("Confirm"),
cancelText: Component = Component.literal("Cancel"),
onConfirm: () -> Unit = {},
onCancel: () -> Unit = {},
content: @Composable
() -> Unit
)
Generic confirm/cancel modal with fully custom content, rather than a fixed message layout like AlertDialog/PromptDialog/ChoiceDialog.
PromptDialog¶
@Composable
fun ModalScope.PromptDialog(
title: Component,
initialValue: String = "",
prompt: Component = Component.literal("Enter a value:"),
confirmText: Component = Component.literal("Confirm"),
cancelText: Component = Component.literal("Cancel"),
validator: (String) -> Boolean = { true },
onConfirm: (String) -> Unit,
onCancel: () -> Unit = {}
)
Input modal with an inline text field and explicit confirm/cancel actions.
rememberWizardState¶
@Composable
fun rememberWizardState(initialIndex: Int = 0): WizardState
Creates and remembers a WizardState starting on initialIndex.
Wizard¶
@Composable
fun Wizard(
pages: List<WizardPage>,
state: WizardState = rememberWizardState(),
modifier: Modifier = Modifier,
contentWidth: Int = DEFAULT_CONTENT_WIDTH,
contentHeight: Int? = null,
backText: Component = Component.literal("Back"),
cancelText: Component = Component.literal("Cancel"),
nextText: Component = Component.literal("Next"),
finishText: Component = Component.literal("Finish"),
transitionSpec: AnimationSpec = DEFAULT_SLIDE_SPEC,
onCancel: () -> Unit = {},
onFinish: () -> Unit = {}
)
A multi-page dialog body: one page at a time, with Back/Cancel/forward navigation, a horizontal slide between pages, and per-page validation gating the forward button.
@Composable
fun Wizard(
modifier: Modifier = Modifier,
state: WizardState? = null,
contentWidth: Int = DEFAULT_CONTENT_WIDTH,
contentHeight: Int? = null,
backText: Component = Component.literal("Back"),
cancelText: Component = Component.literal("Cancel"),
nextText: Component = Component.literal("Next"),
finishText: Component = Component.literal("Finish"),
transitionSpec: AnimationSpec = DEFAULT_SLIDE_SPEC,
onCancel: () -> Unit = {},
onFinish: () -> Unit = {},
builder: WizardScope.() -> Unit
)
DSL overload declaring pages inline via WizardScope.page rather than building a list.
WizardDialog¶
@Composable
fun ModalScope.WizardDialog(
pages: List<WizardPage>,
state: WizardState = rememberWizardState(),
contentWidth: Int = DEFAULT_CONTENT_WIDTH,
contentHeight: Int? = null,
backText: Component = Component.literal("Back"),
cancelText: Component = Component.literal("Cancel"),
nextText: Component = Component.literal("Next"),
finishText: Component = Component.literal("Finish"),
transitionSpec: AnimationSpec = DEFAULT_SLIDE_SPEC,
onCancel: () -> Unit = {},
onFinish: () -> Unit = {}
)