VerticalDocumentList

fun VerticalDocumentList(modifier: Modifier = Modifier, documentModel: DocumentModel, focusedDocument: DocumentInfo?, unfocusedVisiblePercent: Int = 25, allowDocumentReordering: Boolean = true, showStackWhileFocused: Boolean = true, cardMaxHeight: Dp = Dp.Unspecified, showDocumentInfo: @Composable (DocumentInfo) -> Unit = {}, emptyDocumentContent: @Composable () -> Unit = { }, onDocumentReordered: (documentInfo: DocumentInfo, newPosition: Int) -> Unit = { _, _ -> }, onDocumentFocused: (documentInfo: DocumentInfo) -> Unit = {}, onDocumentFocusedTapped: (documentInfo: DocumentInfo) -> Unit = {}, onDocumentFocusedStackTapped: (documentInfo: DocumentInfo) -> Unit = {})

A vertically scrolling list of documents that mimics a physical wallet experience.

In its default state, documents are displayed as a vertical list of cards. The amount of overlap between cards is configurable. Users can long-press a card to drag and drop it into a new position.

When a user taps a card, it enters a "focused" state. The focused card elevates and animates to the top of the viewport. A dynamic content section (showDocumentInfo) fades in immediately below it. By default, the remaining unfocused cards animate into a 3D overlapping stack at the bottom of the screen.

Parameters

modifier

The modifier to be applied to the list container.

documentModel

The DocumentModel providing the reactive flow of documents to display.

focusedDocument

The currently focused document. When null, the component operates in standard list mode. When set to a DocumentInfo, that document is brought to the top and detailed information is displayed.

unfocusedVisiblePercent

Determines how much of each card is visible when not focused. A value of 100 displays cards with standard spacing (no overlap). Lower values cause cards to overlap, allowing more cards to fit on screen. Must be between 0 and 100.

allowDocumentReordering

If true, users can long-press and drag cards to reorder them when in standard list mode. Defaults to true.

showStackWhileFocused

If true, unfocused cards will collapse into a 3D stack at the bottom of the screen when a document is focused. If false, unfocused cards fade away entirely to maximize screen real estate for the detail view. Defaults to true.

cardMaxHeight

An optional max height constraint for the cards. Useful for foldables and wide screens.

showDocumentInfo

A composable slot that renders the detailed content below the focused card. It is horizontally centered by default.

emptyDocumentContent

A composable slot displayed inside a dashed placeholder card when the documentModel is empty.

onDocumentReordered

Callback invoked when a drag-and-drop reordering operation completes. Provides the DocumentInfo of the moved card and its new index position in the list.

onDocumentFocused

Callback invoked when a document is tapped to be focused.

onDocumentFocusedTapped

Callback invoked when the currently focused document is tapped.

onDocumentFocusedStackTapped

Callback invoked when the unfocused document stack is tapped while another document is in focus.

Throws