# Cards
Implements a dating-cards-like mechanism.
Intended only as an illustration, but it should be easy enough to tailor it to your needs if you find it useful.
## Where can I find this NavModel?
The `Cards` NavModel is not currently published, however you can try it in `:samples:app`. Launch the sample app and check the `Dating cards NavModel` item to see it in action.
## States
```kotlin
sealed class State {
data class Queued(val queueNumber: Int) : State()
object Bottom : State()
object Top : State()
object IndicateLike : State()
object IndicatePass : State()
object VoteLike : State()
object VotePass : State()
}
```
## State transitions
## Constructing `Cards`
Requires defining items that will be converted to profile cards. The first one in the list will become a `Top` card, the second one a `Bottom` card, the rest will be `Queued`.
```kotlin
class Cards(
initialItems: List = listOf(),
) : BaseNavModel(
screenResolver = CardsOnScreenResolver,
finalStates = FINAL_STATES,
savedStateMap = null
) {
companion object {
internal val FINAL_STATES = setOf(VoteLike, VotePass)
internal val TOP_STATES = setOf(Top, IndicateLike, IndicatePass)
}
}
```
## Default on screen resolution
```kotlin
internal object CardsOnScreenResolver : OnScreenStateResolver {
override fun isOnScreen(state: State): Boolean =
when (state) {
is State.Bottom,
is State.Top,
is State.IndicateLike,
is State.IndicatePass -> true
is State.Queued,
is State.VoteLike,
is State.VotePass -> false
}
}
```
## Default transition handlers
#### CardsTransitionHandler
`rememberCardsTransitionHandler()`
Adds scale-up, swipe and rotation animations.
## Operations
#### PromoteAll
Internal operation. Automatically invoked whenever a top card is moved to a vote-related state. Causes all other cards to come forward in the queue, become the `Bottom` card, then the `Top` card.
#### IndicateLike, IndicatePass, VoteLike, VotePass
Transitions the `Top` card directly to these states.