Skip to content
weftGitHub

CountrySelect

Pick a country from a searchable list, named in the reader's language.

SourcePackage @weft-js/warp

Preview

tsx
import { CountrySelect } from '@weft-js/warp'export function Basic() {  return (    <CountrySelect label="Country" preferred={NEAR_COUNTRIES} defaultValue="DE" />  )}const NEAR_COUNTRIES = ['DE', 'FR', 'SE']

Installation

npm install @weft-js/warp

Usage

tsx
import { CountrySelect } from '@weft-js/warp'<CountrySelect label="Country" preferred={NEAR_COUNTRIES} defaultValue="DE" />

A short list

options limits it.

tsx
import { CountrySelect } from '@weft-js/warp'export function Limited() {  return (    <CountrySelect label="Billing country" options={NEAR_COUNTRIES} defaultValue="SE" hint="weft invoices in these three." />  )}const NEAR_COUNTRIES = ['DE', 'FR', 'SE']

States

Read-only also needs open={false}, which keeps the list shut.

tsx
import { CountrySelect, Grid, Stack, Text } from '@weft-js/warp'export function States() {  return (    <Grid cols={3} gap="group">      <Cell name="Empty"><CountrySelect label="Country" /></Cell>      <Cell name="Filled"><CountrySelect label="Country" defaultValue="DE" /></Cell>      <Cell name="Hint"><CountrySelect label="Country" hint="Sets your tax rate." /></Cell>      <Cell name="Invalid"><CountrySelect label="Country" error="Choose where you're based." /></Cell>      <Cell name="Disabled"><CountrySelect label="Country" defaultValue="DE" disabled /></Cell>      <Cell name="Read-only"><CountrySelect label="Country" defaultValue="DE" readonly /></Cell>    </Grid>  )}const Cell = (p: { name: string; children?: unknown }) => (  <Stack gap="tight">    <Text role="caption" subtle>{p.name}</Text>    {p.children}  </Stack>)

When to use

Use it for

  • Countries, for tax, billing or shipping

Reach for something else

Accessibility

EnterSpace
Opens the list
↑↓
Moves through the results
Enter
Picks the highlighted row
Esc
Closes and returns focus

API Reference

PropTypeDefaultDescription
labelstring—The visible name, and what screen readers announce.
hintunknown—A short line of help under the field.
errorunknown—Replaces the hint and marks the field invalid.
iconIconRef—Leading icon: it sweeps with the border.
prefixunknown—Text or an element inside the field before the value, such as $.
suffixunknown—Text or an element inside the field after the value, such as kg.
variant"floating" | "classic"—floating (default, or the app's warp({ fields })) · classic: the label above.
appearance"line"—line: only a bottom line under the value, no box or fill. The boxed field otherwise.
size"sm" | "md" | "lg"'md'Control size. md by default.
clearablebooleanfalseA clear button (shown once there is a value).
counternumber—Maximum length, shown as a counter.
idstring—The element id. One is made for you if you leave it out.
disabledbooleanfalseCan't be focused or changed.
readonlybooleanfalseShows the value and lets it be selected and copied, but not changed.
requiredbooleanfalseThe form will not submit without it.
namestring—Posts the value with a form.
localestring—The language names are shown in. Follows the page otherwise.
todaystring—Pins "today" (server render, tests); the browser's clock otherwise.
presentationPresentation—auto opens a popover, or a sheet when the viewport is under 600px wide; popover and sheet force one.
valuestring | State<string | null> | null—The code, or a State to bind.
defaultValuestring | null—The first value, when you don't hold it yourself.
openboolean | State<boolean>—A state box that holds whether it is open.
defaultOpenbooleanfalseStarts open, when the component keeps its own open state.
optionsstring[]—Limits the list to these codes.
preferredstring[]—Codes pinned to the top of the list.
EventTypeDefaultDescription
onInput((e: InputEvent & { currentTarget: HTMLInputElement & HTMLTextAreaElemen…—Called on each keystroke.
onValueChange((v: string | null, reason: ChangeReason) => void)—Hears the new value and why it changed.
onOpenChange((o: boolean) => void)—Called with true when it opens and false when it closes.

RelatedLanguage selectCurrency selectAddress fieldSelect