InputPhone
ImplementedPhone number input with country code selector. Format validation.
patterns/atoms/inputphone.htmlPhone-number input with country prefix selector. FR-CA: Numéro de téléphone avec indicatif.
InputPhone
Interactive atom (Family 1 — Tier 1)
Phone-number input with country dial-code prefix. Implemented — source at src/components/atoms/inputphone/InputPhone.tsx.
Pays par défaut : CA (+1)
Pays par défaut : US (+1)
Pays par défaut : FR (+33)
Numéro invalide
Pays par défaut : CA (+1)
Pays par défaut : CA (+1)
This component supports light and dark mode.
Status
Implemented. Promoted from planned on 2026-08-25: the conformance-audited implementation (autocomplete, dial-code parity, error border, describedBy hint) moved to src/components/atoms/inputphone/InputPhone.tsx and is exported from the package barrel.
Usage
import { InputPhone } from '@epasslive/design-system'
<InputPhone label="Téléphone" value={phone} onChange={setPhone} defaultCountry="CA" />Accessibility
- Native
<input type="tel" inputmode="tel">for the mobile keyboard hint. autocomplete="tel"declares input purpose for personal-data autofill (WCAG 1.3.5).- Label associated via htmlFor + auto id.
- Error message announced via
aria-describedby+role="alert"; error state paints the border semantic-red, matching the Input atom. - Country hint (dial prefix) linked via
aria-describedby— the visible prefix itself isaria-hiddento avoid double announcement.
Props
valuestringControlled value (E.164 format preferred).
onChange(value: string) => voidChange handler.
defaultCountry'CA' | 'US' | 'FR'CADefault country prefix.
labelstringTéléphoneVisible and announced label.
errorstringValidation error.
disabledbooleanfalseDisables interaction.
Props
InputPhone
valuestring—Phone number value
onChange(value: string) => void—Value change handler
defaultCountrystring'CA'Default country code
disabledbooleanfalseDisabled state
errorstring—Validation error
labelstring'Téléphone'Visible label for the control.
<InputPhone />Accessibility
Type
1 rulevalidation
1 ruleARIA
2 rulesUsage
Import
import { InputPhone } from "@epasslive/design-system"Example 1
<Input label="Email" type="email" />Example 2
<Input label="Password" type="password" required />Anti-patterns
— Do not compose atoms directly — use molecules instead
— Avoid inline styles on atoms