UNPKG

alexbednov-phone-select

Version:

Vue 3 component for phone number selection with international support and masking.

442 lines (359 loc) 12.2 kB
# Phone Select Vue 3 component for phone number selection with international support and masking. ## Installation ### NPM ```bash npm install alexbednov-phone-select ``` ### Bun ```bash bun add alexbednov-phone-select ``` ## Screenshots <table> <tr> <td width="50%"> <h3>Main View</h3> <img src="./docs/images/main.png" alt="Main component view" /> </td> <td width="50%"> <h3>Country Selection</h3> <img src="./docs/images/select.png" alt="Country selection" /> </td> </tr> </table> ### Supported Languages <table> <tr> <td width="50%"> <h4>English</h4> <img src="./docs/images/lang-en.png" alt="English" /> </td> <td width="50%"> <h4>Русский</h4> <img src="./docs/images/lang-ru.png" alt="Russian" /> </td> </tr> <tr> <td width="50%"> <h4>Беларуская</h4> <img src="./docs/images/lang-be.png" alt="Belarusian" /> </td> <td width="50%"> <h4>Azərbaycan</h4> <img src="./docs/images/lang-az.png" alt="Azerbaijani" /> </td> </tr> </table> ### Features <table> <tr> <td width="50%"> <h3>Search by Country Name</h3> <img src="./docs/images/search-by-name.png" alt="Search by country name" /> </td> <td width="50%"> <h3>Search by Country Code</h3> <img src="./docs/images/search-by-country-key.png" alt="Search by country code" /> </td> </tr> <tr> <td width="50%"> <h3>Search by Phone Code</h3> <img src="./docs/images/search-by-country-key-2.png" alt="Search by phone code" /> </td> <td width="50%"> <h3>Favorite Countries</h3> <img src="./docs/images/fav.png" alt="Favorite countries" /> </td> </tr> <tr> <td width="50%"> <h3>Phone Number Masking</h3> <img src="./docs/images/mask.png" alt="Phone number masking" /> </td> <td width="50%"></td> </tr> </table> ## API ### Core Functions ```typescript import { getCountries, getCountryByCode, getCountryByName, getCountryByPhoneCode, getFlagPath, getAllCountryNames } from 'alexbednov-phone-select' // Get list of all countries const allCountries = getCountries('en') // Supports: ru, en, az, be // Find country by code const country = getCountryByCode('us') // United States // Find country by name const country = getCountryByName('United States') // Find country by phone code const country = getCountryByPhoneCode(1) // United States // Get flag path const flagPath = getFlagPath('us') // /src/assets/flags/us.svg // Get all country names in different languages const names = getAllCountryNames('us') // ['United States', 'США', ...] ``` ### Types ```typescript interface Country { country_code: string phone_code: number name?: string phone_ranges?: number[] } type Language = 'ru' | 'en' | 'az' | 'be' ``` ### Localization ```typescript import { loadTranslations } from 'alexbednov-phone-select' const translations = loadTranslations() // Available translations: ru, en, az, be ``` ## Vue Component ```vue <script setup lang="ts"> import { PhoneSelect } from 'alexbednov-phone-select' import 'alexbednov-phone-select/style.css' // if you need to example styles </script> <template> <PhoneSelect v-model="phoneNumber" :lang="lang" :favorites-countries="['us', 'gb']" :enable-mask="true" :enable-search="true" :hide-favorites="false" :disable-country-name-select="false" :disable-auto-parse-number="false" select-class="w-[180px]" input-class="flex-1" select-placeholder="Select country" input-placeholder="Enter phone number" select-content-class="" select-trigger-class="" select-value-class="" select-item-class="" select-item-country-class="" /> </template> ``` ### Component Props - `v-model` - full phone number with country code - `lang` - interface language (ru, en, az, be) - `favorites-countries` - array of favorite country codes - `hide-favorites` - hide favorite countries (default: true) - `enable-search` - enable country search (default: false) - `enable-mask` - enable number masking (default: false) - `disable-country-name-select` - disable country name display in select (default: false) - `disable-auto-parse-number` - disable automatic number parsing (default: false) - `select-class` - select element classes - `input-class` - input element classes - `select-placeholder` - select placeholder text - `input-placeholder` - input placeholder text - `select-content-class` - select content classes - `select-trigger-class` - select trigger classes - `select-value-class` - select value classes - `select-item-class` - select item classes - `select-item-country-class` - country item classes in select ### Events - `update:modelValue` - phone number update - `update:country` - selected country update ## Features - Phone number masking - Country search (code, name, phone code) - Favorite countries - Customization through classes - Automatic number parsing - Localization (ru, en, az, be) - Dark theme support - Responsive design ## Based on Country list and flags from [react-phone-country-code-flag](https://github.com/markliu2013/react-phone-country-code-flag/tree/main) ## License MIT --- # Phone Select [RU] Vue 3 компонент для выбора телефонных номеров с международной поддержкой и маскированием. ## Скриншоты <table> <tr> <td width="50%"> <h3>Основной вид</h3> <img src="./docs/images/main.png" alt="Основной вид компонента" /> </td> <td width="50%"> <h3>Выбор страны</h3> <img src="./docs/images/select.png" alt="Выбор страны" /> </td> </tr> </table> ### Поддерживаемые языки <table> <tr> <td width="50%"> <h4>English</h4> <img src="./docs/images/lang-en.png" alt="Английский" /> </td> <td width="50%"> <h4>Русский</h4> <img src="./docs/images/lang-ru.png" alt="Русский" /> </td> </tr> <tr> <td width="50%"> <h4>Беларуская</h4> <img src="./docs/images/lang-be.png" alt="Белорусский" /> </td> <td width="50%"> <h4>Azərbaycan</h4> <img src="./docs/images/lang-az.png" alt="Азербайджанский" /> </td> </tr> </table> ### Функциональность <table> <tr> <td width="50%"> <h3>Поиск по названию страны</h3> <img src="./docs/images/search-by-name.png" alt="Поиск по названию страны" /> </td> <td width="50%"> <h3>Поиск по коду страны</h3> <img src="./docs/images/search-by-country-key.png" alt="Поиск по коду страны" /> </td> </tr> <tr> <td width="50%"> <h3>Поиск по телефонному коду</h3> <img src="./docs/images/search-by-country-key-2.png" alt="Поиск по телефонному коду" /> </td> <td width="50%"> <h3>Избранные страны</h3> <img src="./docs/images/fav.png" alt="Избранные страны" /> </td> </tr> <tr> <td width="50%"> <h3>Маскирование номера</h3> <img src="./docs/images/mask.png" alt="Маскирование номера" /> </td> <td width="50%"></td> </tr> </table> ## Установка ### NPM ```bash npm install alexbednov-phone-select ``` ### Bun ```bash bun add alexbednov-phone-select ``` ## API ### Основные функции ```typescript import { getCountries, getCountryByCode, getCountryByName, getCountryByPhoneCode, getFlagPath, getAllCountryNames } from 'alexbednov-phone-select' // Получить список всех стран const allCountries = getCountries('ru') // Поддерживает языки: ru, en, az, be // Найти страну по коду const country = getCountryByCode('ru') // Россия // Найти страну по названию const country = getCountryByName('Russia') // Россия // Найти страну по телефонному коду const country = getCountryByPhoneCode(7) // Россия // Получить путь к флагу страны const flagPath = getFlagPath('ru') // /src/assets/flags/ru.svg // Получить все названия страны на разных языках const names = getAllCountryNames('ru') // ['Россия', 'Russia', ...] ``` ### Типы ```typescript interface Country { country_code: string phone_code: number name?: string phone_ranges?: number[] } type Language = 'ru' | 'en' | 'az' | 'be' ``` ### Локализация ```typescript import { loadTranslations } from 'alexbednov-phone-select' const translations = loadTranslations() // Доступные переводы: ru, en, az, be ``` ## Vue компонент ```vue <script setup lang="ts"> import { PhoneSelect } from 'alexbednov-phone-select' import 'alexbednov-phone-select/style.css' // при необходимости стилей из примера </script> <template> <PhoneSelect v-model="phoneNumber" :lang="lang" :favorites-countries="['by', 'ru']" :enable-mask="true" :enable-search="true" :hide-favorites="false" :disable-country-name-select="false" :disable-auto-parse-number="false" select-class="w-[180px]" input-class="flex-1" select-placeholder="Выберите страну" input-placeholder="Введите номер" select-content-class="" select-trigger-class="" select-value-class="" select-item-class="" select-item-country-class="" /> </template> ``` ### Пропсы компонента - `v-model` - полный номер телефона с кодом страны - `lang` - язык интерфейса (ru, en, az, be) - `favorites-countries` - массив кодов избранных стран - `hide-favorites` - скрыть избранные страны (по умолчанию true) - `enable-search` - включить поиск по странам (по умолчанию false) - `enable-mask` - включить маскирование номера (по умолчанию false) - `disable-country-name-select` - отключить отображение названия страны в селекте (по умолчанию false) - `disable-auto-parse-number` - отключить автоматический парсинг номера (по умолчанию false) - `select-class` - классы для селекта - `input-class` - классы для инпута - `select-placeholder` - плейсхолдер для селекта - `input-placeholder` - плейсхолдер для инпута - `select-content-class` - классы для контента селекта - `select-trigger-class` - классы для триггера селекта - `select-value-class` - классы для значения селекта - `select-item-class` - классы для элемента селекта - `select-item-country-class` - классы для элемента страны в селекте ### События - `update:modelValue` - обновление номера телефона - `update:country` - обновление выбранной страны ## Особенности - Поддержка маскирования номеров - Поиск по странам (код, название, телефонный код) - Избранные страны - Кастомизация через классы - Автоматический парсинг номера - Локализация (ru, en, az, be) - Поддержка темной темы - Адаптивный дизайн ## Основано на Список стран и флагов из репозитория [react-phone-country-code-flag](https://github.com/markliu2013/react-phone-country-code-flag/tree/main) ## Лицензия MIT