Package-level declarations
Composables: the selectors, the phone field, the bottom sheet and its building blocks (list, rows, search field, region chips, empty/error/loading states, detection badge). All of them take their colors, shapes, dimensions, typography and motion from CountryPickerDefaults.
Types
A lookup from a country (or an initial letter) to its row index in the flat LazyColumn that CountryList emits.
Everything a custom row renderer needs, so listItemContent does not need a dozen parameters.
Interaction and validation state of a selector.
The visual form of a country selector. Every variant opens the same picker with the same behaviour — they differ in footprint, never in function.
Functions
Shown when loading the country list fails.
A country's flag.
The A–Z rail down the edge of a long country list.
CountryList driven by a CountryPickerState: its sections, selection and disabled countries.
The country list, laid out in the style's CountryListStyle.
One country row.
Placeholder rows shaped like the real list, with a highlight sweeping across them, while the country list loads. Announced once to screen readers as "Loading countries".
Shown when the configuration allows no countries at all — almost always an integration mistake, which is why it says so plainly instead of rendering an empty list.
The complete picker — header, search, region filter, quick picks, list, every loading and empty state, and the multiple-selection bar — with no container around it.
The country picker, presented over the current screen.
A horizontally scrolling row of one-tap shortcuts: the detected country, recent choices and the host's suggestions, as tiles above the full list.
The region filter: a recessed track holding "All" and each region, with a raised pill that slides to the selected one.
Shown when a search matches nothing.
The search field at the top of the picker.
A section's title, in small capitals above its group.
A country field that opens the picker.
The selector field alone, without the picker — for a host that already manages when its picker is shown.
"📍 Detected · From your SIM card · tap to change" — shown under a field whose value came from detection rather than from the user.
A banner offering the detected country — "Looks like you're in Kenya, from your SIM card." — with a one-tap Use action, for when detection should suggest rather than decide.
CountryPickerSheet for multiple selection, so a call site cannot pass the wrong callback.
A field for choosing several countries.
A standalone dial-code pill — 🇰🇪 +254 ˅ — that opens the country-code picker.
An international phone number field: the country prefix and the number in one field.
Builds the CountryListIndex for sections, recomputed only when the sections change.