Now available on npm

International UI components
for React & Angular

Phone input, country selector, and localized forms. One framework-agnostic core, thin wrappers per framework. Headless-first, accessible, zero styling opinions.

200+
Countries
~14 KB
React bundle (gzip)
136
Tests
0
Runtime deps in core

Three packages, one ecosystem

Use the framework wrapper that matches your stack, or consume the core directly from Node, Deno, Bun, or any browser.

</>

@intl-ui/core

Framework-agnostic

Country data, phone parsing, formatting, validation, and a dial-code trie. Zero runtime dependencies — runs anywhere.

npm install @intl-ui/core

Examples

The same behavior, expressed three ways.

React — one-liner

import { PhoneInput } from '@intl-ui/react';

function App() {
  return (
    <PhoneInput
      defaultCountry="co"
      onValueChange={(value, meta) => {
        console.log(value);         // "+573105551234"
        console.log(meta.isValid);  // true
        console.log(meta.country); // { name: "Colombia", ... }
      }}
    />
  );
}

Angular — standalone component

import { Component, signal } from '@angular/core';
import { IntlPhoneInputComponent } from '@intl-ui/angular';

@Component({
  standalone: true,
  imports: [IntlPhoneInputComponent],
  template: `
    <intl-phone-input [defaultCountry]="'co'" [(value)]="phone" />
    <p>E.164: {{ phone() }}</p>
  `,
})
export class AppComponent {
  phone = signal('');
}
</>

Core — no UI framework

import { parsePhone, validatePhone, getCountryByIso2 } from '@intl-ui/core';

const parsed = parsePhone('+573105551234');
// {
//   e164: "+573105551234",
//   national: "310 555 1234",
//   international: "+57 310 555 1234",
//   country: { name: "Colombia", iso2: "co", dialCode: "57", ... },
//   isValid: true
// }

const country = getCountryByIso2('co');
const result = validatePhone('+573105551234', country);

What you get

🚀

Auto country detection

Typing a dial code switches the country instantly via an O(k) dial-code trie.

ISO shortcut

Type co, usa, or gb in the input to switch country without opening the dropdown.

Searchable dropdown

Filter 200+ countries by name, ISO code, or dial code.

Full keyboard navigation

Arrow keys, Enter, Escape, and typeahead search.

Accessible by default

WAI-ARIA combobox pattern, focus management, live announcements.

🌎

Works everywhere

Core runs in Node, Deno, Bun, Cloudflare Workers, and every browser.