Loading component…
Loading component…
What automated tests prove about each implementation — separate from whether the package itself is a finished product. Derived from the test files; how the levels are earned.
React
Package maturity: stable · Implementation verification: Beta
This platform’s whole catalogue is verified to React beta. The catalogue figure is the weakest component on that platform, not an average.
npx @kinetixui/cli add phone-inputnpm i @kinetixui/ui @kinetixui/tokens@kinetixui/ui on npm@kinetixui/tokens on npmThe CLI copies React source. Usage imports from @kinetixui/ui require the npm package; for copied source, use your configured local import instead.
Not implemented yet · data display wave.
Composition · KinetixUI ships no SwiftUI component for this.
Composition · KinetixUI ships no Jetpack Compose component for this.
Composition · KinetixUI ships no Flutter component for this.
An international phone number — a native calling-code select and a tel field in one left-to-right control — that keeps the displayed number apart from the raw value and does not pretend to validate.
Reduced motion: off · your browser setting
Sent to your server: —
npx @kinetixui/cli add phone-inputimport { PhoneInput } from "@kinetixui/ui";
const [phone, setPhone] = React.useState({ country: "SA", national: "" });
<PhoneInput
label="Mobile number"
countries={[
{ code: "SA", name: "Saudi Arabia", callingCode: "966" },
{ code: "GB", name: "United Kingdom", callingCode: "44" },
]}
value={phone}
onValueChange={({ raw, ...next }) => {
setPhone(next);
// raw is "+966501234567": send it to your verification service
}}
/>national is the number as the reader typed it; raw is +, the calling code and the digits.invalid and
aria-describedby. Trunk prefixes are not removed for the same reason.<select> named "Country code" (countryLabel), so it keeps the platform's keyboard
behaviour and native picker. The number field is type="tel" with autocomplete="tel-national".dir="ltr" in every language, because a phone number is a left-to-right string; its label follows
the page. An Arabic form shows "+966 50 123 4567", not a reversed number.The props of @kinetixui/ui, generated from its TypeScript. Props inherited from the underlying DOM element (className, id, event handlers) are accepted too and are not listed.
This table is React-specific. The SwiftUI, Jetpack Compose, Flutter and Angular implementations share the design contract — the same variants, sizes, states and tokens — but each exposes its own idiomatic interface. Their real usage is in the platform tabs on the example above, not here.
| Prop | Type | Notes |
|---|---|---|
| labelrequired | React.ReactNodeThe field's visible label. | The field's visible label. |
| countriesrequired | PhoneCountry[] | |
| valuerequired | PhoneValue | |
| onValueChangerequired | (value: PhoneValue & { raw: string; }) => void`raw` is "+" + calling code + the number's digits ("" when there are no digits). | `raw` is "+" + calling code + the number's digits ("" when there are no digits). |
| countryLabel | stringAccessible name of the calling-code select. Default "Country code". | Accessible name of the calling-code select. Default "Country code". |
| invalid | booleanMarks both parts invalid; pair it with a visible message referenced by `aria-describedby`. | Marks both parts invalid; pair it with a visible message referenced by `aria-describedby`. |