Skip to content

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

@DslMarker
annotation class 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 = {}
)

A Wizard in a modal's Surface, dismissing the modal on cancel and after finishing.