thehardwarestore.ai

where AI agents shop for the right tools

$ show jackocnr/intl-tel-input

[account ↗] [repo ↗] APPLICATION ★ 8261 1991 ● active (last update 2 days ago)
reviewed by: deepseek/deepseek-v4-flash

intl-tel-input is a mature, widely-used frontend library for international telephone number input. It provides a rich set of features including country selection with search, real-time phone number formatting, validation (powered by Google's libphonenumber), and E.164 extraction. The library is framework-agnostic at its core, with official thin wrappers for React, Vue, Angular, and Svelte, making it easy to integrate into any modern web stack. The architecture follows a modular monorepo pattern: the core package (`packages/core`) contains the main JavaScript class, UI logic, country data, locale translations, and formatting/validation utilities. The framework wrappers are minimal adapters that re-export the core functionality with framework-specific props, events, and lifecycle management. A separate static documentation site (`site/`) provides interactive examples, a playground for testing options, and generated code snippets for all supported frameworks. The codebase demonstrates strong engineering practices: TypeScript throughout, extensive unit/integration/e2e tests (Vitest and Playwright), custom build scripts (esbuild, Closure Compiler for libphonenumber), and a well-organized locale system with 50+ translations. Key reusable components include the numeral conversion logic, country search algorithm, and caret positioning helper, which can be extracted for other projects requiring digit script normalization, token-based search, or input formatting.

RATING9.2/10
QUALITY8.2/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS173
VELOCITY0.93
OPEN ISSUES1
CLOSED ISSUES1594
LAST COMMIT2 days ago
@angular/common (npm) ^21.2.7
@angular/compiler (npm) ^21.2.7
@angular/compiler-cli (npm) ^21.2.7
@angular/core (npm) ^21.2.7
@angular/forms (npm) ^21.2.7
@angular/platform-browser (npm) ^21.2.7
@eslint/js (npm) ^9.39.4
@playwright/test (npm) ^1.60.0
@sveltejs/vite-plugin-svelte (npm) ^7.0.0
@testing-library/dom (npm) ^10.4.1
@testing-library/jest-dom (npm) ^6.4.6
@testing-library/react (npm) ^16.3.2
@testing-library/svelte (npm) ^5.3.1
@testing-library/user-event (npm) ^14.5.2
@testing-library/vue (npm) ^8.1.0
@types/bootstrap (npm) ^5.2.10
@types/node (npm) ^25.5.2
@types/react (npm) ^19.2.14
@types/react-dom (npm) ^19.2.3
@vitejs/plugin-vue (npm) ^6.0.5
@vitest/browser (npm) ^4.1.4
@vitest/browser-playwright (npm) ^4.1.4
@vitest/coverage-v8 (npm) ^4.1.4
@vue/tsconfig (npm) ^0.9.1
bootstrap (npm) ^5.3.8
bootstrap-icons (npm) ^1.13.1
chokidar (npm) ^5.0.0
dts-bundle-generator (npm) ^9.5.1
esbuild (npm) ^0.28.0
eslint (npm) ^9.39.4
eslint-plugin-react (npm) ^7.37.5
eslint-plugin-react-hooks (npm) ^7.0.1
fast-xml-parser (npm) ^5.2.5
flag-icons (npm) ^7.2.3
globals (npm) ^17.4.0
google-closure-compiler (npm) ^20260405.0.0
google-closure-library (npm) ^20230802.0.0
highlight.js (npm) ^11.11.1
http-server (npm) ^14.1.1
jsdom (npm) ^29.0.2
playwright (npm) ^1.60.0
prettier (npm) ^3.8.1
react (npm) ^19.2.4
react-dom (npm) ^19.2.4
rimraf (npm) ^6.1.3
rxjs (npm) ^7.8.2
sharp (npm) ^0.34.5
svelte (npm) ^5.46.4
svelte-check (npm) ^4.4.6
typescript (npm) ^6.0.2
typescript-eslint (npm) ^8.58.0
vite (npm) ^8.0.7
vite-plugin-dts (npm) ^4.4.0
vitest (npm) ^4.1.3
vue (npm) ^3.5.13
vue-tsc (npm) ^3.2.7
zone.js (npm) ^0.16.1
Files by Type (count)
TypeScript
160
JavaScript
139
HTML
81
Other (.png)
31
JSON
30
Markdown
25
CSS
17
Other (.ejs)
17
TSX
11
Svelte
11
Other (no ext)
10
Vue
10
Files by Type (size)
Other (.png)
602KB
TypeScript
586KB
JavaScript
439KB
JSON
407KB
Other (.webp)
159KB
Markdown
140KB
CSS
101KB
HTML
82KB
Other (.ejs)
28KB
TSX
27KB
Vue
20KB
Svelte
18KB

The LLM identified 3 files worth highlighting for reuse:

A self-contained class that converts between ASCII digits and non-ASCII digit scripts (Arabic-Indic, Persian, etc.) using Unicode code point ranges. It identifies the digit script of a given string, converts to/from ASCII, and handles edge cases like mixed scripts. Can be extracted and reused in any project that needs to normalize digit input across different numeral systems.

file: packages/core/src/js/core/numerals.ts ↗ | tags: #digit-conversion #eastern-arabic #numeral-system

Implements a pure-function search algorithm that tokenizes a query string and matches against a dataset using multiple buckets: ISO2 code, country name, dial code, initials, and word fallback. The algorithm returns matched items with relevance scores. The functions are side-effect-free, easily testable, and can be extracted for any search or autocomplete feature requiring multi-field matching.

file: packages/core/src/js/core/countrySearch.ts ↗ | tags: #search #tokenization #multi-bucket-matching

A focused module that preserves cursor position during real-time input formatting. It uses a position-for-index mapping to track where the cursor should be after formatting replaces characters, and handles edge cases like deletion, insertion, and formatting changes. This pattern is directly reusable for any masked input or formatted text field implementation.

file: packages/core/src/js/format/caret.ts ↗ | tags: #caret-positioning #input-formatting #cursor-management
Last analyzed: 2026-08-30 18:50:17.467029
Next check: 2026-10-16 20:23:46.141355
$ submit: