Components

Phone number

Let users enter a phone number with an international code.

Import

import { PhoneNumber } from "@dr-max/ui/phone-number"

The entry carries its own precompiled CSS (including the styles of the Icon, Input, Required, Select and Spinner parts it composes) — no extra style imports needed.

Usage

The component exposes two v-models — v-model:phone-code for the selected code and v-model:phone-number for the number itself:

Phone number
<script setup lang="ts">
import { PhoneNumber } from "@dr-max/ui/phone-number"
import { ref } from "vue"

const phoneCode = ref("+420")
const phoneNumber = ref("")
</script>

<template>
  <PhoneNumber
    v-model:phone-code="phoneCode"
    v-model:phone-number="phoneNumber"
    :codes="['+420', '+421', '+48']"
    label="Phone number"
  />
</template>

Fixed code

With code-select-enabled: false the code renders as a disabled input showing the fixed value — set phone-code to the code you want displayed:

Phone number
<template>
  <PhoneNumber
    v-model:phone-number="phoneNumber"
    :code-select-enabled="false"
    phone-code="+420"
    label="Phone number"
  />
</template>

Number only

With code-enabled: false the code field disappears entirely and the label moves to the number input:

<template>
  <PhoneNumber
    v-model:phone-number="phoneNumber"
    :code-enabled="false"
    label="Phone number"
  />
</template>

Loading and disabled

loading disables the code select while the code list is loading; disabled disables both fields:

Phone number
<template>
  <PhoneNumber v-model:phone-number="phoneNumber" :codes="codes" label="Phone number" loading />
  <PhoneNumber v-model:phone-number="phoneNumber" :codes="codes" label="Phone number" disabled />
</template>

Validation

code-errors render below the code field and number-errors below the number input:

Phone number
Enter a valid phone number
<template>
  <PhoneNumber
    v-model:phone-code="phoneCode"
    v-model:phone-number="phoneNumber"
    :codes="codes"
    label="Phone number"
    touched
    :number-errors="[{ label: 'Enter a valid phone number', param: 'format' }]"
  />
</template>

Playground

Phone number
<script setup lang="ts">
import { PhoneNumber } from '@dr-max/ui/phone-number'

const codes = ['+420', '+421', '+48', '+40', '+39']
</script>

<template>
  <PhoneNumber label="Phone number" code-enabled code-select-enabled code-placeholder="+420" :codes="codes" />
</template>
Dr. Max Design System • © 2026