Package-level declarations
Types
Width caps for AdaptiveContentContainer, taken from Material's window size class breakpoints.
Semantic text roles for AppText. The first four are the kommon type scale; the rest re-cut a Material slot at a heavier weight, keeping its size and line height.
The optional body line of an AssistantContextCard; isQuoted shows it as an italic quote.
The text of an AssistantLimitPromptCard.
The selected and enabled state of one AssistantQuickActionChips chip.
Diameter presets for Avatar. Each follows the user's font scale so initials never clip.
Localizable text for ChatComposer.
Voice input for a ChatComposer. Start recognition in onStart, write the live transcript into the composer's value so it can be reviewed before sending, update state as recognition progresses, and stop in onStop.
Where a ChatComposer's voice input is. The caller runs speech recognition and moves between states.
Who sent a chat message, which decides its alignment and colors.
What a chat message bubble shows.
The state of an on-demand check such as "Test connection": not run yet, running, or finished with a message. Messages come from the app, so they can be specific ("Connected to llama3").
Localizable strings for CheckStatusRow. Set idle to an empty string to show nothing.
Localizable labels for CopyButton.
Text styles kommon defines that have no Material 3 role.
Whether a PaginatedContent can be swiped back as well as forward.
The position footer under a PaginatedContent.
Where the current page's title sits in a PaginatedContent title row.
One page of a PaginatedContent, with the title shown in its title row.
Localizable strings for ProviderConfigurationForm.
Localizable labels for SearchField.
How SecretTextField offers its show/hide control.
Vertical density of a SegmentedControl.
One segment of a SegmentedContent. Custom title slots may ignore title.
Whether SegmentedContent segments share the width evenly when they fit.
How a SegmentedContent marks the selected segment.
How a SegmentedControl's segments share the available width.
Localizable labels for SelectionList and SelectionListContent.
A node in a one- or two-level SelectionList tree.
Declares the sections of a ShowcaseFeed, like a LazyColumn DSL.
How wide each item of a ShowcaseRow is, which decides how much of the next item peeks in.
How a ShowcaseRow settles after a fling.
Default bounds and keyboard step for HorizontalSplitPane, as fractions of the width.
Localizable accessibility strings for HorizontalSplitPane's divider.
Semantic intent of a StatusMessage; selects its accent color.
How a TabBar lays out its destinations.
Defaults for TabBar, NavRail, and AdaptiveNavScaffold. Sizes match Material's bar.
One destination of a TabBar, NavRail, or AdaptiveNavScaffold. Selection compares value with the current selection, so reordering items keeps the selection.
Lets a TabBar hide as content scrolls down and come back as it scrolls up, like Material's TopAppBarScrollBehavior for a bottom bar. Attach nestedScrollConnection to the scrolling content with Modifier.nestedScroll and pass this to the bar. Create it with rememberTabBarScrollBehavior.
Localizable labels for ThemeModeSelector and ThemeModeDropdown.
How long a toast stays before dismissing itself.
Shows one toast at a time, like SnackbarHostState: showToast suspends until the toast is dismissed and reports how it ended; concurrent calls wait their turn. Pair it with a ToastHost and create it with rememberToastHostState.
The screen edge a ToastHost anchors its toast to.
How a ToastHostState.showToast call ended.
Localizable labels for ZoomableImage.
Properties
True while the check is running, e.g. enabled = !status.isChecking on its button.
Overrides the system's reduced-motion preference for decorative looping animations and page hints. null follows the system; desktop hosts can supply their own preference. Changes take effect while the subtree remains composed.
Turns skeletonShimmer off for the subtree, for example in screenshot tests. It is also off when the system reduces motion and in previews.
Functions
A capsule-shaped command with arbitrary content, such as an icon and a styled label. Unlike PillChip it has no selected state; use it for compact links and commands.
A scaffold that shows a TabBar in compact windows (narrower than 600 dp) and a NavRail in wider ones, with topBar above the content. scrollBehavior only applies to the tab bar; the rail stays put.
Text in one of the theme's semantic AppTextStyle roles.
A low-emphasis disclaimer or policy line under an assistant conversation. Blank draws nothing.
A card for usage limits, quotas, or upgrades, with a primary and a secondary action.
A scrolling row of filter chips for assistant quick actions ("Summarize", "Explain"). The caller owns the action type, labels, and selection and enablement rules. icon is decorative; the chip's label and selected state carry its meaning.
A full-width error banner for an unavailable provider, degraded service, or a blocking failure. It is announced politely when it appears. For tones other than error, use NoticeCard.
The text a CountBadge shows: count, or "maxCount+" above it. Negative counts show 0.
A modal bottom sheet that always opens fully expanded and pads and stacks content. Show it conditionally and hide it in onDismissRequest (scrim tap, drag down, back).
A chat message field with a send button and optional voice input.
A chat conversation: user bubbles on the end edge, assistant bubbles on the start edge, a typing bubble for pending replies, and a retryable error bubble. With no messages it shows idleHint.
One line describing a CheckStatus: muted text when idle, a small spinner while checking, and the result in the success or error color when readable on page and card surfaces, otherwise the on-surface color. Results are announced through a polite live region.
A two-button confirmation dialog ("Delete all variants?", "Allow Amoo to reinstall the app?").
A list row with a title, optional secondaryText beside it, optional supportingText under it, and leading and trailing slots. Use it for recent projects, endpoints, steps, and settings entries.
An icon button that copies text to the system clipboard as plain text. After copying it shows a check mark for a moment and announces CopyButtonLabels.copied. onCopied runs after the copy, for example to log it.
A card that always shows summary and reveals detail when expanded. The summary row is the toggle; it announces expandedLabel or collapsedLabel as its state.
Centered placeholder for a pane with nothing to show yet ("No project loaded", "Choose a report"), with an optional next step such as a button.
A full-width, padded error placeholder for a pane that failed to load, with an optional action such as a Retry button and optional leadingContent such as an illustration. The title is an accessibility heading, and the error is announced politely when it appears.
Lays content out from start to end, wrapping onto new rows when the width runs out, with the standard small gap between items and rows. Use it for chips, tags, and button groups that must not clip at large font sizes.
Moves focus to the next control on Tab and the previous one on Shift+Tab, instead of letting the element (typically a multi-line text field on desktop) consume the key. Apply it to fields in forms that keyboard users move through.
A single form field: an outlined text field with a label and one line of supporting or error text underneath.
A small "i" glyph that shows text in a tooltip on hover, long-press, or keyboard focus. Use it next to a label whose meaning needs a short explanation.
A small spinner followed by label, for work in progress inside a row, toolbar, or card ("Checking…", "Booting device…").
A read-only label/value pair such as "Model · llama3" or "Port · 8080", for details panels and popovers. The value is end-aligned and wraps onto its own line when it cannot fit beside the label without splitting words. Screen readers read the pair as one item.
Applies tokens as a Material 3 theme plus the kommon-only values that Material has no slot for (kmpSpacing, kmpColors, kmpMotion, kmpTypography).
A full-width LazyColumn with the standard vertical padding.
A ThemeIconButton that swaps its icon for a spinner and ignores clicks while loading, for actions such as "Refresh providers". Screen readers hear loadingLabel as its state.
A full-width, padded loading placeholder for a pane: a spinner and label, announced politely. The pane-level counterpart of ProgressIndicator, with EmptyState and ErrorState as its siblings.
The last item of an infinite-scrolling lazy list. Each time it enters composition (scrolls into view) it calls onLoadMore; while isLoadingMore it shows a spinner named loadingLabel and announced politely. Guard against duplicate requests in onLoadMore, and stop emitting the footer when there is nothing left to load.
A labeled dropdown for picking one of items, shown as a read-only outlined field that opens a menu. Use it in forms where a segmented control would not fit (providers, languages, methods).
The text CheckStatusRow shows for this status.
A side navigation rail for medium and wide windows, sharing TabBarItemData and TabBarItemColors with TabBar. For a desktop-style labeled list, use SidebarNavigation.
A full-width notice with an optional action and dismiss button, such as "Device disconnected · Retry" or "Provider not configured · Open settings". It uses the same StatusTone colors as StatusMessage; use StatusMessage instead when there is nothing to act on.
A rounded, translucent container for labels and controls drawn over images or video. Content defaults to the inverse on-surface color so it reads on the dark overlay.
PageIndicator bound to a PagerState. The current dot follows PagerState.currentPage, and the page is read inside this composable, so the caller does not recompose as the pager moves.
A row of dots marking the current position within pageCount pages, for carousels, onboarding flows, and any pager. PaginatedContent uses it for its dots footer.
PaginatedContent driven by a caller-owned pagerState, for jumping to pages from outside. onPageChanged reports the settled page.
Horizontally paged content whose title row scrolls in step with the pages: each title is a page width from its neighbors, so the next title slides in as the user swipes. This overload owns its PagerState.
A filled, high-emphasis button for a screen's or dialog's primary action.
A centered progress indicator with a readable label, for a pane or screen that is loading.
Stateless form for ProviderConfigurationState.
A vertical list of radio buttons for choosing one of options. Each row's full width is the tap target, and the rows form one selectable group for screen readers.
Returns the effective reduced-motion preference, so an app's own animations can follow the same setting as the library's decorative ones.
Remembers a TabBarScrollBehavior.
Remembers a ToastHostState across recompositions.
Reveals text a character at a time, at charsPerSecond, instead of showing it all at once.
A single-line search field with a search glyph and a clear button that appears once the field has text. The placeholder also supplies the accessible name after typing. Clearing calls onValueChange with an empty string.
An outlined, medium-emphasis button for a secondary action next to a PrimaryButton.
A FormTextField for secrets such as API keys and passwords.
A titled group of related content, e.g. one block on a settings screen.
A tab-style segment bar above caller-supplied content that crossfades when the selection changes. When the titles overflow, the bar scrolls, keeps the selected segment in view, and fades the edge that has more segments. This overload keeps the selection itself (saved across recreation).
SegmentedContent whose selection the caller owns through selectedIndex. Outgoing content keeps its item until the crossfade ends, including when that item is removed from items.
A row of pill-shaped segments for choosing one of options, drawn as filled buttons: the selected segment uses the primary color and the others the surface variant. Segments report their selected state and form one selectable group for screen readers.
An outlined card in a list the user picks from (providers, reports, devices). A leading selection box gains a check when selected, in addition to the secondary container color. The whole card reports its selected state to accessibility services and shows an outline on keyboard focus.
A single-choice SelectionListContent in a modal bottom sheet.
A multiple-choice SelectionListContent in a modal bottom sheet. Taps only call onSelect; toggle membership in selectedIds yourself and give the sheet a confirmButton to close it.
A searchable one- or two-level selection list to place in your own screen or pane; SelectionList shows the same list in a bottom sheet.
An app-store style feed: a vertical list of sections that each scroll horizontally. Declare the sections in content with ShowcaseFeedScope.
A lazily composed horizontal carousel of items, sized by itemWidth; by default the next item peeks in to show the row scrolls. With rows above 1 and a rowHeight it becomes a column-major grid of stacked rows ("top charts"). snapping decides whether a fling settles on an item boundary (the default) or stops freely.
One destination in a SidebarNavigation. The selected item uses the secondary container color and is exposed as a selected tab.
A full-height side navigation column for desktop-style layouts (app sections, preference panes). Fill it with SidebarItems; header (an app name, a pane title) sits above them.
A full-width placeholder block one line of body text tall, for a list or card that is loading. It is decorative and hidden from screen readers; announce loading with a ProgressIndicator or LoadingState label instead.
Sweeps a soft highlight band across the placeholders in this subtree so a skeleton reads as loading rather than frozen. Apply it once at the root of a skeleton layout. Every shimmering subtree uses the same frame clock, so separate cards sweep in unison.
A desktop-style status bar along the bottom of a window: a top rule, start items on the start edge, and end items on the end edge, in label-sized text. Separate items with StatusBarSeparator. When space is short, the end side keeps up to two thirds of the width.
One status bar item on a single line. When space runs out, items share it and end in an ellipsis rather than dropping off the bar. color defaults to the bar's muted text color; pass a tone for states.
A short vertical rule between StatusBar items, as tall as the label text.
An inline, non-dismissible message such as "Connection verified" or "API key rejected".
A bottom navigation bar whose destinations are TabBarItems in content. The destinations form one selectable group. As a scrollBehavior hides the bar, the bar also reports a smaller height, so a Scaffold gives the space back to the content.
A bottom navigation bar built from items. With a scrollBehavior it hides while the content scrolls down; attach the behavior's nestedScrollConnection to that content. For per-item control use the overload that takes TabBarItems.
One destination of a TabBar; see TabBarItemData for the parameters.
A horizontally scrolling row of TabChips that forms one selection group.
An elevated, full-width card that stacks content with the standard gap. With onClick the whole card is one click target at least the Material minimum height; buttons inside content stay separately focusable. For a selectable card use SelectableCard; for a titled group use SectionCard.
A checkbox followed by label (and optional supportingText). Tapping anywhere on the row toggles checked.
An alert dialog with a confirm action and an optional dismiss action. Pass null dismissText for an acknowledge-only dialog. Dismissing it (outside tap, back, Esc) calls onDismissRequest. For the common two-button case, ConfirmDialog has English defaults.
A full-width horizontal rule in the outline variant color.
An icon-only button tinted with the primary color. contentDescription names the action for screen readers and is also shown as a tooltip on hover and focus.
A large (three-line) top app bar styled like ThemeTopAppBar.
A Material-style list row: a headline in body text, optional supportingText, and leading and trailing slots, read by screen readers as one item. That item is at least the Material minimum touch target high, so a one-line row still meets target-size audits. For clickable or selectable rows with titles, use ContentRow.
A medium (two-line) top app bar styled like ThemeTopAppBar.
A labeled dropdown for choosing a ThemeMode, for settings forms where a segmented control does not fit. Built on MenuPicker; the menu's open state is internal UI state.
Material's connected, outlined segmented buttons for choosing one of options, with a check mark on the selected segment. Each segment is at least the Material minimum touch target high. Labels retain their intrinsic width; the connected row scrolls horizontally when space is tight.
A full-width slider for one value in valueRange.
A snackbar message with an optional action, usable on its own or as a SnackbarHost's snackbar slot. Standalone it announces itself politely. The action shows when both actionLabel and onAction are set.
A flat, full-width surface-colored container that stacks content with the standard gap.
A setting row with label (and optional supportingText) on the leading edge and a switch on the trailing edge. Tapping anywhere on the row toggles checked.
A small top app bar on the surface color with primary-tinted navigation and action icons.
A three-state checkbox row for "select all" over a group, where state is ToggleableState.Indeterminate when only some items are selected. Tapping the row calls onClick; the caller decides the next state (usually all on, or all off when everything is on).
A full-height vertical rule in the outline variant color.
Shows the toast held by hostState over the screen, sliding it in from position, dismissing it after its ToastDuration adjusted for the user's accessibility timeout, and keeping it inside the safe drawing area. Place it as the last child of the screen so it floats above the content.
A short label on a tinted background, such as an HTTP method, a status code, or a severity.
A TonalBadge colored like a StatusMessage of the same tone.
Three dots pulsing in turn, for "a reply is being written", usually inside a chat bubble. It reads as composing rather than loading. The wave runs in the draw phase without recomposing, and the dots hold still when the system reduces motion and in previews.
Validates every field and returns the first problem found per field; an empty map means valid.
Shows image fitted to the space, for screenshots and previews. Zoom with the mouse wheel or the plus and minus keys when focused, drag to pan while zoomed, and double-click or press 0 to reset. marker, in image pixels, draws a ring where something happened, such as a tap. The zoom level is internal UI state; it resets when the image size changes while not zoomed. maxZoom must be finite and at least 1; lowering it clamps the current zoom.