Package-level declarations

Types

Link copied to clipboard
annotation class EmphasisTextDsl

Marks the emphasis-text builder DSL so nested scopes can't leak into each other.

Link copied to clipboard

Collects the segments of one emphasis line. Calls are not composables; they only record spans that are later rendered as a single text.

Link copied to clipboard

Drives and observes one typewriter reveal. A state reveals each distinct text once: once a text has fully typed in, binding the same text again (recomposition, configuration change) shows it immediately, while a different text types in again.

Functions

Link copied to clipboard
fun EmphasisText(modifier: Modifier = Modifier, style: TextStyle = TabotaboTheme.typography.headline, weights: EmphasisWeights = EmphasisWeights.Headline, baseColor: Color = TabotaboTheme.colors.accent, focusedColor: Color = TabotaboTheme.colors.primary, textAlign: TextAlign = TextAlign.Start, maxLines: Int = Int.MAX_VALUE, minLines: Int = 1, content: EmphasisTextScope.() -> Unit)

Non-animated emphasis line: baseline words in weights.unfocused and baseColor, key phrases in weights.focused and focusedColor, rendered as one text so it wraps naturally. A line whose only segment is EmphasisTextScope.FocusedText renders fully emphasised (e.g. "Settings").

Link copied to clipboard
fun Fact(title: String, value: String, modifier: Modifier = Modifier)

Title/value fact, e.g. "App version" over "1.2.0".

Link copied to clipboard
fun HeroTitle(modifier: Modifier = Modifier, animate: Boolean = true, content: EmphasisTextScope.() -> Unit)

Hero (42sp) emphasis line in EmphasisWeights.Headline for landing / splash screens; types in when animate.

Link copied to clipboard
fun rememberTypewriterState(key: Any? = null, charDelay: Duration = TabotaboTheme.motion.typewriterCharDelay, startDelay: Duration = Duration.ZERO, onFinished: () -> Unit = {}): TypewriterState

Remembers a TypewriterState that survives configuration changes.

Link copied to clipboard
fun ScreenTitle(modifier: Modifier = Modifier, animate: Boolean = true, content: EmphasisTextScope.() -> Unit)

Large left-aligned screen title in EmphasisWeights.Title; types in when animate.

Link copied to clipboard
fun Subtitle(text: String, modifier: Modifier = Modifier, maxLines: Int = 2, minLines: Int = 1)

Muted line that sits directly under a headline.

Link copied to clipboard
fun TypewriterText(modifier: Modifier = Modifier, state: TypewriterState = rememberTypewriterState(), style: TextStyle = TabotaboTheme.typography.headline, weights: EmphasisWeights = EmphasisWeights.Headline, baseColor: Color = TabotaboTheme.colors.accent, focusedColor: Color = TabotaboTheme.colors.primary, textAlign: TextAlign = TextAlign.Start, maxLines: Int = Int.MAX_VALUE, minLines: Int = 1, content: EmphasisTextScope.() -> Unit)

Emphasis line that types in letter by letter, sequentially across segments ("Hello" finishes before "User" starts). It runs once per text per state: recomposition and configuration changes don't replay it, while changing the text (or the state's key) does.