Phone Input
edgecom/phone-inputFreeComponent
The Edgecom Phone Input component.
Install it
npx shadcn@latest add https://design.edgecom.ai/r/phone-input.jsonSource
1'use client'23import type { ComponentProps } from 'react'4import { createContext, useContext, useMemo, useState } from 'react'56import * as BasePhoneInput from 'react-phone-number-input'7import flags from 'react-phone-number-input/flags'8import { Button } from '@/components/ui/button'9import {10 Combobox,11 ComboboxContent,12 ComboboxEmpty,13 ComboboxInput,14 ComboboxItem,15 ComboboxList,16 ComboboxSeparator,17 ComboboxTrigger,18 ComboboxValue19} from '@/components/ui/combobox'20import { Input } from '@/components/ui/input'21import { ScrollArea } from '@/components/ui/scroll-area'22import { cn } from '@/lib/utils'23import { EarthIcon } from "lucide-react"2425type PhoneInputSize = 'sm' | 'default' | 'lg'2627const PhoneInputContext = createContext<{28 variant: PhoneInputSize29 popupClassName?: string30 scrollAreaClassName?: string31 inputClassName?: string32 triggerClassName?: string33 readOnly?: boolean34}>({35 variant: 'default',36 popupClassName: undefined,37 scrollAreaClassName: undefined,38 inputClassName: undefined,39 triggerClassName: undefined,40 readOnly: false41})4243type PhoneInputProps = Omit<ComponentProps<'input'>, 'onChange' | 'value' | 'ref'> &44 Omit<45 BasePhoneInput.Props<typeof BasePhoneInput.default>,46 'onChange' | 'variant' | 'popupClassName' | 'scrollAreaClassName'47 > & {48 onChange?: (value: BasePhoneInput.Value) => void49 variant?: PhoneInputSize50 popupClassName?: string51 scrollAreaClassName?: string52 inputClassName?: string53 triggerClassName?: string54 }5556const PhoneInput = ({57 className,58 variant,59 popupClassName,60 scrollAreaClassName,61 inputClassName,62 triggerClassName,63 onChange,64 value,65 ...props66}: PhoneInputProps) => {67 const phoneInputSize = variant || 'default'6869 return (70 <PhoneInputContext.Provider71 value={{72 variant: phoneInputSize,73 popupClassName,74 scrollAreaClassName,75 inputClassName,76 triggerClassName,77 readOnly: props.readOnly78 }}79 >80 <BasePhoneInput.default81 className={cn(82 'flex',83 props['aria-invalid'] &&84 '[&_*[data-slot=combobox-trigger]]:border-destructive [&_*[data-slot=combobox-trigger]]:ring-destructive/50',85 className86 )}87 flagComponent={FlagComponent}88 countrySelectComponent={CountrySelect}89 inputComponent={InputComponent}90 smartCaret={false}91 value={value || undefined}92// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from edgecom
All 66 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | edgecom | Components | Free | 2 deps | |
| Alertalert | edgecom | Components | Free | 1 dep | |
| Alert Dialogalert-dialog | edgecom | Components | Free | 1 dep | |
| Avataravatar | edgecom | Components | Free | 1 dep | |
| Badgebadge | edgecom | Components | Free | 2 deps | |
| Bannerbanner | edgecom | Components | Free | 1 dep | |
| Breadcrumbbreadcrumb | edgecom | Components | Free | 2 deps | |
| Buttonbutton | edgecom | Components | Free | 2 deps |
