diff --git a/src/lib/PhoneInput.svelte b/src/lib/PhoneInput.svelte index 3171de9..cd4ba2a 100644 --- a/src/lib/PhoneInput.svelte +++ b/src/lib/PhoneInput.svelte @@ -6,6 +6,7 @@ import { AsYouType, type PhoneNumber, type CountryCode } from 'libphonenumber-js'; import { generateIdentifier } from './util'; import type { ClassValue } from 'svelte/elements'; + import { untrack } from 'svelte'; interface Props { name?: string; @@ -31,6 +32,7 @@ const id = $derived(generateIdentifier('phone-input', name)); let lastRawValue = $state(''); + let lastValue = $state(value); let country = $state(); let selectedCountryItem = $state(); let countriesOpen = $state(false); @@ -101,6 +103,19 @@ if (country) return country.isoCode as CountryCode; return undefined; }); + + let renderValue = value?.formatNational() ?? ''; + let renderInputElement = $state(null); + + $effect(() => { + if (value) { + untrack(() => { + if (renderInputElement) { + renderInputElement.value = value?.formatNational() ?? ''; + } + }); + } + }); {#snippet renderIcon(item: ComboboxOption)} @@ -139,6 +154,8 @@
{ - if (value) input.value = value.formatNational(); + if (lastValue) input.value = lastValue.formatNational(); }, 1); } } }} + onblur={() => { + value = lastValue; + }} />