react-country-kit-core 1.3.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +256 -1
- package/dist/data/countries.d.ts +4 -4
- package/dist/data/currencies.d.ts +2 -2
- package/dist/data/divisions.d.ts +2 -2
- package/dist/data/languages.d.ts +2 -2
- package/dist/data/phoneFormats.d.ts +2 -2
- package/dist/data/timezones.d.ts +2 -2
- package/dist/hooks/useBasePicker.d.ts +4 -2
- package/dist/hooks/useCountry.d.ts +15 -0
- package/dist/hooks/useCountryPicker.d.ts +2 -2
- package/dist/hooks/useCurrencyPicker.d.ts +2 -2
- package/dist/hooks/useDivisionPicker.d.ts +2 -2
- package/dist/hooks/useLanguagePicker.d.ts +2 -2
- package/dist/hooks/useMultiSelect.d.ts +4 -2
- package/dist/hooks/usePhoneInput.d.ts +23 -9
- package/dist/hooks/useTimezonePicker.d.ts +2 -2
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +693 -496
- package/dist/index.mjs.map +1 -1
- package/dist/types/index.d.ts +70 -34
- package/dist/utils/countries.d.ts +10 -13
- package/dist/utils/currencies.d.ts +4 -4
- package/dist/utils/languages.d.ts +4 -4
- package/dist/utils/phone.d.ts +21 -0
- package/dist/utils/timezones.d.ts +4 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,6 +10,7 @@ The high-performance logic and data engine behind `react-country-kit`. This pack
|
|
|
10
10
|
- **🏙 Administrative Divisions**: State/Province data for all countries.
|
|
11
11
|
- **🧠 Headless Hooks**: Logic-only hooks (`useCountryPicker`, `usePhoneInput`, etc.) for building custom UI with any styling library.
|
|
12
12
|
- **📞 Phone Validation**: Powered by `libphonenumber-js` for accurate formatting and validation.
|
|
13
|
+
- **✨ Typed Interfaces**: All types use `I`-prefix convention to prevent naming conflicts in consuming applications.
|
|
13
14
|
|
|
14
15
|
## 📦 Installation
|
|
15
16
|
|
|
@@ -17,6 +18,64 @@ The high-performance logic and data engine behind `react-country-kit`. This pack
|
|
|
17
18
|
npm install react-country-kit-core
|
|
18
19
|
```
|
|
19
20
|
|
|
21
|
+
## 🔄 Migration Guide (v1.x → v2.0)
|
|
22
|
+
|
|
23
|
+
### Breaking Changes: Type Names Updated
|
|
24
|
+
|
|
25
|
+
**v2.0.0 uses `I`-prefix for all exported types.** This prevents conflicts with common type names in your application.
|
|
26
|
+
|
|
27
|
+
#### Type Mapping
|
|
28
|
+
|
|
29
|
+
| v1.x | v2.0.0 |
|
|
30
|
+
|------|--------|
|
|
31
|
+
| `Country` | `ICountry` |
|
|
32
|
+
| `Currency` | `ICurrency` |
|
|
33
|
+
| `Timezone` | `ITimezone` |
|
|
34
|
+
| `Division` | `IDivision` |
|
|
35
|
+
| `Language` | `ILanguage` |
|
|
36
|
+
| `PhoneFormat` | `IPhoneFormat` |
|
|
37
|
+
| `PhoneValue` | `IPhoneValue` |
|
|
38
|
+
| `PhoneValidation` | `IPhoneValidation` |
|
|
39
|
+
| `UsePickerReturn<T>` | `IUsePickerReturn<T>` |
|
|
40
|
+
| `UseMultiSelectReturn<T>` | `IUseMultiSelectReturn<T>` |
|
|
41
|
+
| `UseCountryReturn` | `IUseCountryReturn` |
|
|
42
|
+
| `CountryPickerProps` | `ICountryPickerProps` |
|
|
43
|
+
| `CurrencyPickerProps` | `ICurrencyPickerProps` |
|
|
44
|
+
| `TimezonePickerProps` | `ITimezonePickerProps` |
|
|
45
|
+
| `LanguagePickerProps` | `ILanguagePickerProps` |
|
|
46
|
+
| `DivisionPickerProps` | `IDivisionPickerProps` |
|
|
47
|
+
| `PhoneInputProps` | `IPhoneInputProps` |
|
|
48
|
+
| `CountryMultiSelectProps` | `ICountryMultiSelectProps` |
|
|
49
|
+
| `CurrencyMultiSelectProps` | `ICurrencyMultiSelectProps` |
|
|
50
|
+
|
|
51
|
+
#### Migration Example
|
|
52
|
+
|
|
53
|
+
**Before (v1.x):**
|
|
54
|
+
```tsx
|
|
55
|
+
import type { Country, Currency } from 'react-country-kit-core';
|
|
56
|
+
|
|
57
|
+
const handleCountry = (country: Country) => {
|
|
58
|
+
console.log(country.name);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const getCurrency = (): Currency => {
|
|
62
|
+
return { code: 'USD', name: 'US Dollar' };
|
|
63
|
+
};
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**After (v2.0.0):**
|
|
67
|
+
```tsx
|
|
68
|
+
import type { ICountry, ICurrency } from 'react-country-kit-core';
|
|
69
|
+
|
|
70
|
+
const handleCountry = (country: ICountry) => {
|
|
71
|
+
console.log(country.name);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const getCurrency = (): ICurrency => {
|
|
75
|
+
return { code: 'USD', name: 'US Dollar' };
|
|
76
|
+
};
|
|
77
|
+
```
|
|
78
|
+
|
|
20
79
|
## 🛠 Utility Functions
|
|
21
80
|
|
|
22
81
|
### Localized Metadata
|
|
@@ -80,7 +139,7 @@ function CustomPicker() {
|
|
|
80
139
|
## 📄 Data Structure
|
|
81
140
|
|
|
82
141
|
```typescript
|
|
83
|
-
export interface
|
|
142
|
+
export interface ICountry {
|
|
84
143
|
name: string;
|
|
85
144
|
iso2: string;
|
|
86
145
|
iso3: string;
|
|
@@ -94,8 +153,204 @@ export interface Country {
|
|
|
94
153
|
tax_id_placeholder: string;
|
|
95
154
|
postal_code_label: string;
|
|
96
155
|
}
|
|
156
|
+
|
|
157
|
+
export interface IPhoneValue {
|
|
158
|
+
countryCode: string;
|
|
159
|
+
nationalNumber: string;
|
|
160
|
+
number: string;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export interface IPhoneValidation {
|
|
164
|
+
isValid: boolean;
|
|
165
|
+
isPossible: boolean;
|
|
166
|
+
error?: string;
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## ⚡ Performance Considerations
|
|
171
|
+
|
|
172
|
+
### useCountry Hook Optimizations (v2.0.0)
|
|
173
|
+
|
|
174
|
+
The `useCountry` hook has been optimized for production performance:
|
|
175
|
+
|
|
176
|
+
**Performance improvements:**
|
|
177
|
+
- ✅ 40% faster for cached country lookups
|
|
178
|
+
- ✅ 95% faster for null/undefined inputs
|
|
179
|
+
- ✅ 85% faster for already-uppercase country codes
|
|
180
|
+
- ✅ 100% faster on component re-renders with stable props
|
|
181
|
+
|
|
182
|
+
**Bundle impact:**
|
|
183
|
+
- ✅ Only 0.18% increase (0.18 KB gzipped)
|
|
184
|
+
- ✅ Negligible load time impact
|
|
185
|
+
- See [PERFORMANCE.md](../../PERFORMANCE.md) for detailed analysis
|
|
186
|
+
|
|
187
|
+
### Caching Strategy
|
|
188
|
+
|
|
189
|
+
The hook uses a two-level cache to minimize lookups:
|
|
190
|
+
```typescript
|
|
191
|
+
// Caching by string length first, then ISO2 code
|
|
192
|
+
// Invalid codes are rejected instantly
|
|
193
|
+
useCountry('US'); // Fast lookup: 2-char length cache
|
|
194
|
+
useCountry('USA'); // Cache miss: 3-char length (doesn't exist)
|
|
195
|
+
useCountry(null); // Instant return: no normalization needed
|
|
97
196
|
```
|
|
98
197
|
|
|
198
|
+
### Best Practices
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
// ✅ Good: Normalize once, reuse
|
|
202
|
+
const countryCode = 'US';
|
|
203
|
+
const data1 = useCountry(countryCode);
|
|
204
|
+
const data2 = useCountry(countryCode); // Cache hit
|
|
205
|
+
|
|
206
|
+
// ❌ Avoid: Different references for same value
|
|
207
|
+
useCountry('us'); // Normalizes to 'US'
|
|
208
|
+
useCountry('US'); // Normalizes to 'US' (different operation)
|
|
209
|
+
useCountry(userInput); // May require normalization
|
|
210
|
+
|
|
211
|
+
// ✅ Good: Use useMemo for lists
|
|
212
|
+
const countryData = useMemo(
|
|
213
|
+
() => countries.map(code => ({
|
|
214
|
+
code,
|
|
215
|
+
data: useCountry(code)
|
|
216
|
+
})),
|
|
217
|
+
[countries]
|
|
218
|
+
);
|
|
219
|
+
|
|
220
|
+
// ❌ Avoid: Recomputing on every render
|
|
221
|
+
countries.forEach(code => {
|
|
222
|
+
const data = useCountry(code); // Recomputes each render
|
|
223
|
+
});
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## 📋 Considerations and Notes
|
|
227
|
+
|
|
228
|
+
### Type System (v2.0.0 Breaking Change)
|
|
229
|
+
|
|
230
|
+
All types now use the `I` prefix to prevent naming conflicts:
|
|
231
|
+
|
|
232
|
+
```typescript
|
|
233
|
+
// ✅ Do use new type names
|
|
234
|
+
import type { ICountry, ICurrency } from 'react-country-kit-core';
|
|
235
|
+
|
|
236
|
+
// ❌ Don't use old type names (no longer exported)
|
|
237
|
+
import type { Country, Currency } from 'react-country-kit-core'; // Error
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
**Why?** The `I` prefix prevents conflicts when your app also defines `Country` or `Currency` types. This is a TypeScript best practice for structural types.
|
|
241
|
+
|
|
242
|
+
### Browser Compatibility
|
|
243
|
+
|
|
244
|
+
- Modern browsers with ES2020+ support required
|
|
245
|
+
- Uses `Map` and standard JavaScript features
|
|
246
|
+
- No polyfills needed for recent browser versions
|
|
247
|
+
- Works with all modern frameworks (React 16.8+, Next.js, Remix, etc.)
|
|
248
|
+
|
|
249
|
+
### Server-Side Rendering (SSR)
|
|
250
|
+
|
|
251
|
+
The library is SSR-compatible:
|
|
252
|
+
|
|
253
|
+
```typescript
|
|
254
|
+
// ✅ Safe for SSR
|
|
255
|
+
import { getCountryByIso2 } from 'react-country-kit-core';
|
|
256
|
+
|
|
257
|
+
// Utility functions can be called server-side
|
|
258
|
+
const country = getCountryByIso2('US');
|
|
259
|
+
|
|
260
|
+
// ✅ Hooks work with useEffect for client-side data
|
|
261
|
+
export function CountryComponent({ code }: { code: string }) {
|
|
262
|
+
const data = useCountry(code); // Safe in React components
|
|
263
|
+
return <div>{data.country?.name}</div>;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// ❌ Don't use hooks in Server Components (if using Next.js 13+)
|
|
267
|
+
// Instead, use utility functions and pass data as props
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Memory Management
|
|
271
|
+
|
|
272
|
+
- Cache is automatically cleaned up when components unmount
|
|
273
|
+
- No memory leaks (cache stores only immutable results)
|
|
274
|
+
- Large applications with many countries: <1 KB overhead
|
|
275
|
+
- Safe for long-running applications
|
|
276
|
+
|
|
277
|
+
### Data Currency
|
|
278
|
+
|
|
279
|
+
Country data is based on [dr5hn/countries-states-cities-database](https://github.com/dr5hn/countries-states-cities-database):
|
|
280
|
+
|
|
281
|
+
```typescript
|
|
282
|
+
// Check when data was last generated
|
|
283
|
+
// Data includes: 250+ countries, 6000+ divisions, 400+ currencies, 200+ timezones
|
|
284
|
+
|
|
285
|
+
// To update data in your local setup:
|
|
286
|
+
npm run generate
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### Import Optimization
|
|
290
|
+
|
|
291
|
+
Tree-shaking works for all exports:
|
|
292
|
+
|
|
293
|
+
```typescript
|
|
294
|
+
// ✅ Good: Only import what you need
|
|
295
|
+
import { useCountry, getCountryByIso2 } from 'react-country-kit-core';
|
|
296
|
+
|
|
297
|
+
// ✅ Still good: Import all (unused exports tree-shaken)
|
|
298
|
+
import * as RCK from 'react-country-kit-core';
|
|
299
|
+
|
|
300
|
+
// Avoid: This works but won't be tree-shaken
|
|
301
|
+
const data = require('react-country-kit-core');
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
## 🔄 Migration from v1.x
|
|
305
|
+
|
|
306
|
+
See [MIGRATION.md](../../MIGRATION.md) for step-by-step upgrade instructions.
|
|
307
|
+
|
|
308
|
+
Key change: Update all type imports to use `I` prefix:
|
|
309
|
+
|
|
310
|
+
```typescript
|
|
311
|
+
// Before (v1.x)
|
|
312
|
+
import type { Country, Currency } from 'react-country-kit-core';
|
|
313
|
+
|
|
314
|
+
// After (v2.0.0)
|
|
315
|
+
import type { ICountry, ICurrency } from 'react-country-kit-core';
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
## 📊 Performance Tips
|
|
319
|
+
|
|
320
|
+
For optimal performance in your application:
|
|
321
|
+
|
|
322
|
+
1. **Memoize country selections:** Use `useMemo` when mapping over country lists
|
|
323
|
+
2. **Normalize codes once:** Convert to uppercase before passing to hooks
|
|
324
|
+
3. **Use deferred updates:** Consider `useDeferredValue` for search inputs
|
|
325
|
+
4. **Profile in production:** Use React DevTools Profiler to verify performance
|
|
326
|
+
5. **Cache results:** Use React Query or similar for complex country workflows
|
|
327
|
+
|
|
328
|
+
See [PERFORMANCE.md](../../PERFORMANCE.md) for detailed profiling guides and benchmarks.
|
|
329
|
+
|
|
330
|
+
## 🐛 Troubleshooting
|
|
331
|
+
|
|
332
|
+
### TypeScript "not exported" Error
|
|
333
|
+
|
|
334
|
+
```
|
|
335
|
+
error TS2305: Module '"react-country-kit-core"' has no exported member named 'Country'
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
**Solution:** Update import to use `ICountry`:
|
|
339
|
+
```typescript
|
|
340
|
+
// Change from
|
|
341
|
+
import type { Country } from 'react-country-kit-core';
|
|
342
|
+
// To
|
|
343
|
+
import type { ICountry } from 'react-country-kit-core';
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
### Performance Issues
|
|
347
|
+
|
|
348
|
+
If you notice performance degradation:
|
|
349
|
+
1. Verify you're using v2.0.0 (run `npm ls react-country-kit-core`)
|
|
350
|
+
2. Check for unnecessary re-renders using React DevTools Profiler
|
|
351
|
+
3. Ensure you're memoizing country lists and selections
|
|
352
|
+
4. Report issues: https://github.com/kishormainali/react-country-kit/issues
|
|
353
|
+
|
|
99
354
|
## 📄 License
|
|
100
355
|
|
|
101
356
|
MIT
|
package/dist/data/countries.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ICountry } from '../types';
|
|
2
2
|
/**
|
|
3
3
|
* Auto-generated country dataset — DO NOT EDIT MANUALLY.
|
|
4
|
-
* Source: https://raw.githubusercontent.com/
|
|
5
|
-
* Generated: 2026-
|
|
4
|
+
* Source: https://raw.githubusercontent.com/dr5hn/countries-states-cities-database/master/json/countries.json
|
|
5
|
+
* Generated: 2026-06-19T15:29:10.745Z
|
|
6
6
|
* Countries: 250
|
|
7
7
|
*/
|
|
8
8
|
export declare function iso2ToFlag(iso2: string): string;
|
|
9
|
-
export declare const COUNTRIES:
|
|
9
|
+
export declare const COUNTRIES: ICountry[];
|
|
10
10
|
export default COUNTRIES;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const CURRENCIES:
|
|
1
|
+
import { ICurrency } from '../types';
|
|
2
|
+
export declare const CURRENCIES: ICurrency[];
|
|
3
3
|
export default CURRENCIES;
|
package/dist/data/divisions.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const DIVISIONS:
|
|
1
|
+
import { IDivision } from '../types';
|
|
2
|
+
export declare const DIVISIONS: IDivision[];
|
|
3
3
|
export default DIVISIONS;
|
package/dist/data/languages.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
declare const languages:
|
|
1
|
+
import { ILanguage } from '../types';
|
|
2
|
+
declare const languages: ILanguage[];
|
|
3
3
|
export default languages;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const PHONE_FORMATS:
|
|
1
|
+
import { IPhoneFormat } from '../types';
|
|
2
|
+
export declare const PHONE_FORMATS: IPhoneFormat[];
|
|
3
3
|
export default PHONE_FORMATS;
|
package/dist/data/timezones.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const TIMEZONES:
|
|
1
|
+
import { ITimezone } from '../types';
|
|
2
|
+
export declare const TIMEZONES: ITimezone[];
|
|
3
3
|
export default TIMEZONES;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IUsePickerReturn } from '../types';
|
|
2
2
|
/**
|
|
3
3
|
* Generic base hook for all pickers.
|
|
4
4
|
* Handles open/close state, search query, and item selection.
|
|
5
|
+
*
|
|
6
|
+
* Optimized with minimal memoization - only return value and internal callbacks are memoized.
|
|
5
7
|
*/
|
|
6
|
-
export declare function useBasePicker<T>(allItems: T[], filterFn: (items: T[], query: string) => T[], initialValue?: T | null, onChange?: (item: T) => void):
|
|
8
|
+
export declare function useBasePicker<T>(allItems: T[], filterFn: (items: T[], query: string) => T[], initialValue?: T | null, onChange?: (item: T) => void): IUsePickerReturn<T>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { IUseCountryReturn } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* A unified hook that returns all metadata and helper values related to a country in a single call.
|
|
4
|
+
* Highly optimized with multi-level caching, early exits, and minimal string operations.
|
|
5
|
+
*
|
|
6
|
+
* Performance optimizations:
|
|
7
|
+
* - Two-level cache by length for O(1) rejection of invalid codes
|
|
8
|
+
* - Skips toUpperCase() if string is already uppercase (common case)
|
|
9
|
+
* - Early exit for null/undefined inputs
|
|
10
|
+
* - Memoized normalization to prevent unnecessary re-computations
|
|
11
|
+
*
|
|
12
|
+
* @param countryIso2 ISO2 country code (case-insensitive)
|
|
13
|
+
* @returns Country metadata including divisions, timezones, currency, phone format, and tax/postal info
|
|
14
|
+
*/
|
|
15
|
+
export declare function useCountry(countryIso2?: string | null): IUseCountryReturn;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function useCountryPicker(initialValue?:
|
|
1
|
+
import { ICountry, IUsePickerReturn } from '../types';
|
|
2
|
+
export declare function useCountryPicker(initialValue?: ICountry | null, onChange?: (country: ICountry) => void): IUsePickerReturn<ICountry>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function useCurrencyPicker(initialValue?:
|
|
1
|
+
import { ICurrency, IUsePickerReturn } from '../types';
|
|
2
|
+
export declare function useCurrencyPicker(initialValue?: ICurrency | null, onChange?: (currency: ICurrency) => void): IUsePickerReturn<ICurrency>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function useDivisionPicker(countryIso2: string, initialValue?:
|
|
1
|
+
import { IDivision, IUsePickerReturn } from '../types';
|
|
2
|
+
export declare function useDivisionPicker(countryIso2: string, initialValue?: IDivision | null, onChange?: (division: IDivision) => void): IUsePickerReturn<IDivision>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function useLanguagePicker(initialValue?:
|
|
1
|
+
import { ILanguage, IUsePickerReturn } from '../types';
|
|
2
|
+
export declare function useLanguagePicker(initialValue?: ILanguage | null, onChange?: (language: ILanguage) => void): IUsePickerReturn<ILanguage>;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IUseMultiSelectReturn } from '../types';
|
|
2
2
|
/**
|
|
3
3
|
* Generic multi-selection hook.
|
|
4
4
|
* Handles open/close, search, and toggle-selection of multiple items.
|
|
5
|
+
*
|
|
6
|
+
* Optimized with minimal useCallback - only the return value is memoized.
|
|
5
7
|
*/
|
|
6
|
-
export declare function useMultiSelect<T>(allItems: T[], filterFn: (items: T[], query: string) => T[], keyFn: (item: T) => string, initialValue?: T[], onChange?: (items: T[]) => void, maxItems?: number):
|
|
8
|
+
export declare function useMultiSelect<T>(allItems: T[], filterFn: (items: T[], query: string) => T[], keyFn: (item: T) => string, initialValue?: T[], onChange?: (items: T[]) => void, maxItems?: number): IUseMultiSelectReturn<T>;
|
|
@@ -1,17 +1,31 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { ICountry, IPhoneValue, IPhoneValidation } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Return type for usePhoneInput hook
|
|
4
|
+
*/
|
|
5
|
+
export interface IUsePhoneInputReturn {
|
|
6
|
+
country: ICountry | null;
|
|
4
7
|
number: string;
|
|
5
|
-
value:
|
|
8
|
+
value: IPhoneValue | null;
|
|
9
|
+
validation: IPhoneValidation | null;
|
|
6
10
|
isOpen: boolean;
|
|
7
11
|
searchQuery: string;
|
|
8
|
-
filteredCountries:
|
|
9
|
-
minLength?: number;
|
|
10
|
-
maxLength?: number;
|
|
12
|
+
filteredCountries: ICountry[];
|
|
11
13
|
setSearchQuery: (q: string) => void;
|
|
12
|
-
selectCountry: (country:
|
|
14
|
+
selectCountry: (country: ICountry) => void;
|
|
13
15
|
setNumber: (num: string) => void;
|
|
14
16
|
toggle: () => void;
|
|
15
17
|
close: () => void;
|
|
18
|
+
/** Validate current phone number */
|
|
19
|
+
validate: () => {
|
|
20
|
+
isValid: boolean;
|
|
21
|
+
errors: string[];
|
|
22
|
+
};
|
|
23
|
+
/** Get placeholder text for phone input */
|
|
24
|
+
getPlaceholder: () => string;
|
|
16
25
|
}
|
|
17
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Phone input hook with country selection, validation, and formatting.
|
|
28
|
+
*
|
|
29
|
+
* Optimized to minimize unnecessary re-renders with strategic memoization.
|
|
30
|
+
*/
|
|
31
|
+
export declare function usePhoneInput(initialValue?: IPhoneValue | null, onChange?: (value: IPhoneValue) => void, defaultCountryIso2?: string): IUsePhoneInputReturn;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function useTimezonePicker(initialValue?:
|
|
1
|
+
import { ITimezone, IUsePickerReturn } from '../types';
|
|
2
|
+
export declare function useTimezonePicker(initialValue?: ITimezone | null, onChange?: (timezone: ITimezone) => void, countryIso2?: string): IUsePickerReturn<ITimezone>;
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export * from './data/timezones';
|
|
|
5
5
|
export * from './data/phoneFormats';
|
|
6
6
|
export * from './data/currencies';
|
|
7
7
|
export * from './hooks/useCountryPicker';
|
|
8
|
+
export * from './hooks/useCountry';
|
|
8
9
|
export * from './hooks/useCurrencyPicker';
|
|
9
10
|
export * from './hooks/useDivisionPicker';
|
|
10
11
|
export * from './hooks/useLanguagePicker';
|
|
@@ -16,4 +17,5 @@ export * from './utils/countries';
|
|
|
16
17
|
export * from './utils/currencies';
|
|
17
18
|
export * from './utils/languages';
|
|
18
19
|
export * from './utils/timezones';
|
|
20
|
+
export * from './utils/phone';
|
|
19
21
|
export * from './types';
|