lizaui 8.2.9 → 8.4.9
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/dist/button/index.cjs.js +1 -1
- package/dist/button/index.es.js +1 -1
- package/dist/calendar/index.cjs.js +2 -2
- package/dist/calendar/index.cjs.js.map +1 -1
- package/dist/calendar/index.es.js +9 -9
- package/dist/checkbox/index.cjs.js +1 -1
- package/dist/checkbox/index.es.js +1 -1
- package/dist/chip/index.cjs.js +1 -1
- package/dist/chip/index.cjs.js.map +1 -1
- package/dist/chip/index.es.js +2 -2
- package/dist/chunks/bundle-mjs-2oQ8XDAz.js +2748 -0
- package/dist/chunks/bundle-mjs-2oQ8XDAz.js.map +1 -0
- package/dist/chunks/bundle-mjs-8z5d_e-8.js +2 -0
- package/dist/chunks/bundle-mjs-8z5d_e-8.js.map +1 -0
- package/dist/chunks/button-DFrxQHAW.js +2 -0
- package/dist/chunks/{button-OdZ6El_t.js.map → button-DFrxQHAW.js.map} +1 -1
- package/dist/chunks/{button-CSuKvE1x.js → button-uo4_Xad_.js} +4 -4
- package/dist/chunks/{button-CSuKvE1x.js.map → button-uo4_Xad_.js.map} +1 -1
- package/dist/chunks/{checkbox-BhW9i0pm.js → checkbox-BvvZL9H4.js} +3 -3
- package/dist/chunks/{checkbox-BhW9i0pm.js.map → checkbox-BvvZL9H4.js.map} +1 -1
- package/dist/chunks/checkbox-w969v4lK.js +2 -0
- package/dist/chunks/{checkbox-CWDPVAn2.js.map → checkbox-w969v4lK.js.map} +1 -1
- package/dist/chunks/clsx-C11secjj.js +2 -0
- package/dist/chunks/clsx-C11secjj.js.map +1 -0
- package/dist/chunks/clsx-OuTLNxxd.js +17 -0
- package/dist/chunks/clsx-OuTLNxxd.js.map +1 -0
- package/dist/chunks/features-animation-BRAvwYFN.js +3437 -0
- package/dist/chunks/features-animation-BRAvwYFN.js.map +1 -0
- package/dist/chunks/features-animation-BoXKk5t2.js +2 -0
- package/dist/chunks/features-animation-BoXKk5t2.js.map +1 -0
- package/dist/chunks/index-BbDfYVLO.js +174 -0
- package/dist/chunks/index-BbDfYVLO.js.map +1 -0
- package/dist/chunks/index-CL73JQgs.js +2 -0
- package/dist/chunks/index-CL73JQgs.js.map +1 -0
- package/dist/chunks/{index-BOQuZ0gG.js → index-D29mdTf5.js} +2 -2
- package/dist/chunks/{index-BOQuZ0gG.js.map → index-D29mdTf5.js.map} +1 -1
- package/dist/chunks/index-DC9BfnBH.js +208 -0
- package/dist/chunks/index-DC9BfnBH.js.map +1 -0
- package/dist/chunks/index-lrI_r1ww.js +10 -0
- package/dist/chunks/index-lrI_r1ww.js.map +1 -0
- package/dist/chunks/index-nwdlcB7h.js +2 -0
- package/dist/chunks/{index-BxK4T-v8.js.map → index-nwdlcB7h.js.map} +1 -1
- package/dist/chunks/label-error-B8Rq-HGY.js +2 -0
- package/dist/chunks/{label-error-Ax74Uy3M.js.map → label-error-B8Rq-HGY.js.map} +1 -1
- package/dist/chunks/label-error-BOE4Qj5S.js +10 -0
- package/dist/chunks/{label-error-DGQqDKTV.js.map → label-error-BOE4Qj5S.js.map} +1 -1
- package/dist/chunks/proxy-BwQyOw8U.js +2 -0
- package/dist/chunks/proxy-BwQyOw8U.js.map +1 -0
- package/dist/chunks/proxy-kv_Ue2k_.js +1346 -0
- package/dist/chunks/proxy-kv_Ue2k_.js.map +1 -0
- package/dist/chunks/ripple-CzU7YM2G.js +69 -0
- package/dist/chunks/{ripple-DMI95LHg.js.map → ripple-CzU7YM2G.js.map} +1 -1
- package/dist/chunks/ripple-SBteSEo3.js +2 -0
- package/dist/chunks/{ripple-DieNd7XQ.js.map → ripple-SBteSEo3.js.map} +1 -1
- package/dist/chunks/{scroll-area-C8l3z7wv.js → scroll-area-B0mWCpSW.js} +2 -2
- package/dist/chunks/{scroll-area-C8l3z7wv.js.map → scroll-area-B0mWCpSW.js.map} +1 -1
- package/dist/chunks/{scroll-area-zt_z9PRo.js → scroll-area-CE7quLQL.js} +3 -3
- package/dist/chunks/{scroll-area-zt_z9PRo.js.map → scroll-area-CE7quLQL.js.map} +1 -1
- package/dist/chunks/{select-qaP_vaF3.js → select-BwMqXSzv.js} +3 -3
- package/dist/chunks/{select-qaP_vaF3.js.map → select-BwMqXSzv.js.map} +1 -1
- package/dist/chunks/{select-CC7ump6t.js → select-DGSPwoy8.js} +2 -2
- package/dist/chunks/{select-CC7ump6t.js.map → select-DGSPwoy8.js.map} +1 -1
- package/dist/chunks/{textarea-BIy5pTb5.js → textarea-BYbersWf.js} +38 -37
- package/dist/chunks/{textarea-BIy5pTb5.js.map → textarea-BYbersWf.js.map} +1 -1
- package/dist/chunks/{textarea-Cklud2kp.js → textarea-D9X4fUkV.js} +12 -12
- package/dist/chunks/{textarea-Cklud2kp.js.map → textarea-D9X4fUkV.js.map} +1 -1
- package/dist/chunks/tooltip-BPp8Maa7.js +2 -0
- package/dist/chunks/{tooltip-DGFz59KW.js.map → tooltip-BPp8Maa7.js.map} +1 -1
- package/dist/chunks/{tooltip-B-5G3VVC.js → tooltip-Bf9DqrJk.js} +3 -3
- package/dist/chunks/{tooltip-B-5G3VVC.js.map → tooltip-Bf9DqrJk.js.map} +1 -1
- package/dist/chunks/tv-CGkrzbji.js +2 -0
- package/dist/chunks/tv-CGkrzbji.js.map +1 -0
- package/dist/chunks/tv-DQO4decF.js +268 -0
- package/dist/chunks/tv-DQO4decF.js.map +1 -0
- package/dist/chunks/utils-CvyT6Z0O.js +9 -0
- package/dist/chunks/{utils-B6yFEsav.js.map → utils-CvyT6Z0O.js.map} +1 -1
- package/dist/chunks/utils-CxdrMFeI.js +2 -0
- package/dist/chunks/{utils-IjLH3w2e.js.map → utils-CxdrMFeI.js.map} +1 -1
- package/dist/chunks/v4-BysszJq8.js +31 -0
- package/dist/chunks/v4-BysszJq8.js.map +1 -0
- package/dist/chunks/v4-CqdK_b8Y.js +2 -0
- package/dist/chunks/v4-CqdK_b8Y.js.map +1 -0
- package/dist/divider/index.cjs.js +1 -1
- package/dist/divider/index.es.js +1 -1
- package/dist/modal/index.cjs.js +1 -1
- package/dist/modal/index.cjs.js.map +1 -1
- package/dist/modal/index.es.js +17 -16
- package/dist/modal/index.es.js.map +1 -1
- package/dist/pagination/index.cjs.js +1 -1
- package/dist/pagination/index.cjs.js.map +1 -1
- package/dist/pagination/index.es.js +18 -18
- package/dist/phone-input/index.cjs.js +1 -1
- package/dist/phone-input/index.cjs.js.map +1 -1
- package/dist/phone-input/index.es.js +35 -35
- package/dist/ripple/index.cjs.js +1 -1
- package/dist/ripple/index.es.js +1 -1
- package/dist/select-input/index.cjs.js +2 -2
- package/dist/select-input/index.cjs.js.map +1 -1
- package/dist/select-input/index.es.js +5 -5
- package/dist/table/index.cjs.js +1 -1
- package/dist/table/index.cjs.js.map +1 -1
- package/dist/table/index.es.js +17 -17
- package/dist/table/index.es.js.map +1 -1
- package/dist/time-input/index.cjs.js +2 -2
- package/dist/time-input/index.cjs.js.map +1 -1
- package/dist/time-input/index.es.js +5 -5
- package/dist/tooltip/index.cjs.js +1 -1
- package/dist/tooltip/index.es.js +1 -1
- package/dist/ui/index.cjs.js +1 -1
- package/dist/ui/index.es.js +10 -10
- package/package.json +1 -1
- package/dist/chunks/button-OdZ6El_t.js +0 -2
- package/dist/chunks/checkbox-CWDPVAn2.js +0 -2
- package/dist/chunks/index-BxK4T-v8.js +0 -2
- package/dist/chunks/label-error-Ax74Uy3M.js +0 -2
- package/dist/chunks/label-error-DGQqDKTV.js +0 -10
- package/dist/chunks/ripple-DMI95LHg.js +0 -68
- package/dist/chunks/ripple-DieNd7XQ.js +0 -2
- package/dist/chunks/tooltip-DGFz59KW.js +0 -2
- package/dist/chunks/tv-3Bk5oRI_.js +0 -39
- package/dist/chunks/tv-3Bk5oRI_.js.map +0 -1
- package/dist/chunks/tv-CLzaSzqw.js +0 -2
- package/dist/chunks/tv-CLzaSzqw.js.map +0 -1
- package/dist/chunks/utils-B6yFEsav.js +0 -9
- package/dist/chunks/utils-IjLH3w2e.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../src/components/phone-input/phone-input.tsx"],"sourcesContent":["import type React from \"react\";\nimport { useState, useEffect, useRef, useId } from \"react\";\nimport { getCountryCallingCode, AsYouType, isValidPhoneNumber } from \"libphonenumber-js\";\nimport { ChevronDown, Check, Search } from \"lucide-react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { cn } from \"@/lib/utils\";\nimport { LabelError, ScrollArea } from \"../ui\";\nimport { AnimatePresence } from \"framer-motion\";\nimport { LazyMotion, m, domAnimation } from \"framer-motion\";\n\nconst countryData = {\n\tPE: { name: \"Perú\", flag: \"🇵🇪\" },\n\tUS: { name: \"Estados Unidos\", flag: \"🇺🇸\" },\n\tMX: { name: \"México\", flag: \"🇲🇽\" },\n\tAR: { name: \"Argentina\", flag: \"🇦🇷\" },\n\tCO: { name: \"Colombia\", flag: \"🇨🇴\" },\n\tCL: { name: \"Chile\", flag: \"🇨🇱\" },\n\tBR: { name: \"Brasil\", flag: \"🇧🇷\" },\n\tBO: { name: \"Bolivia\", flag: \"🇧🇴\" },\n\tVE: { name: \"Venezuela\", flag: \"🇻🇪\" },\n};\n\ninterface Country {\n\tcode: string;\n\tname: string;\n\tflag: string;\n\tcallingCode: string;\n}\n\ninterface PhoneInputProps {\n\tid?: string;\n\tname: string;\n\tlabel?: string;\n\tplaceholder?: string;\n\trequired?: boolean;\n\tclassName?: string;\n\tonCountryChange?: (country: Country) => void;\n\tonPhoneChange?: (phone: string, isValid: boolean) => void;\n\ttouched?: boolean;\n\tvalues?: any;\n\tonBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;\n\terror?: string;\n\tvalue?: string; // para standalone\n\tdefaultCountry?: string;\n\tdisabled?: boolean;\n\tclassNameContainer?: string;\n}\n\nexport const PhoneInput: React.FC<PhoneInputProps> = ({\n\tid,\n\tname,\n\tlabel = \"Teléfono\",\n\tplaceholder = \"Ingrese un número de teléfono\",\n\trequired = false,\n\tclassName = \"\",\n\tclassNameContainer = \"\",\n\tonCountryChange,\n\tonPhoneChange,\n\ttouched: externalTouched,\n\tonBlur: externalOnBlur,\n\terror: externalError,\n\tvalue: externalValue,\n\tdefaultCountry = \"PE\",\n\tdisabled = false,\n}) => {\n\tconst [selectedCountry, setSelectedCountry] = useState<Country>({\n\t\tcode: defaultCountry,\n\t\tname: countryData[defaultCountry as keyof typeof countryData].name,\n\t\tflag: countryData[defaultCountry as keyof typeof countryData].flag,\n\t\tcallingCode: `+${getCountryCallingCode(defaultCountry as keyof typeof countryData)}`,\n\t});\n\n\tconst [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\tconst [phoneValue, setPhoneValue] = useState(\"\");\n\tconst [formattedValue, setFormattedValue] = useState(\"\");\n\tconst [isValid, setIsValid] = useState(false);\n\tconst [countries, setCountries] = useState<Country[]>([]);\n\tconst [searchTerm, setSearchTerm] = useState(\"\");\n\tconst [filteredCountries, setFilteredCountries] = useState<Country[]>([]);\n\n\tconst dropdownRef = useRef<HTMLDivElement>(null);\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst searchInputRef = useRef<HTMLInputElement>(null);\n\n\tconst inputId = useId();\n\tconst resolvedId = id || inputId;\n\tconst isControlled = externalValue !== undefined;\n\n\t// Inicializar países en el orden definido en countryData\n\tuseEffect(() => {\n\t\tconst availableCountries = Object.keys(countryData).map((countryCode) => {\n\t\t\tconst data = countryData[countryCode as keyof typeof countryData];\n\t\t\treturn {\n\t\t\t\tcode: countryCode,\n\t\t\t\tname: data.name,\n\t\t\t\tflag: data.flag,\n\t\t\t\tcallingCode: `+${getCountryCallingCode(countryCode as keyof typeof countryData)}`,\n\t\t\t};\n\t\t});\n\t\tsetCountries(availableCountries);\n\t\tsetFilteredCountries(availableCountries);\n\t}, []);\n\n\t// Manejo de click fuera para cerrar dropdown\n\tuseEffect(() => {\n\t\tconst handleClickOutside = (event: MouseEvent) => {\n\t\t\tif (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n\t\t\t\tsetIsDropdownOpen(false);\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\treturn () => document.removeEventListener(\"mousedown\", handleClickOutside);\n\t}, []);\n\n\t// Sincronizar externalValue con estados internos (incluye reset con \"\")\n\tuseEffect(() => {\n\t\tif (!isControlled || countries.length === 0) return;\n\n\t\t// Si el valor externo es vacío o null, limpiar estados\n\t\tif (externalValue === \"\" || externalValue == null) {\n\t\t\tsetPhoneValue(\"\");\n\t\t\tsetFormattedValue(\"\");\n\t\t\tsetIsValid(false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = String(externalValue);\n\t\tlet country = countries.find((c) => value.startsWith(c.callingCode));\n\n\t\t// Si no se detecta país por código, mantener el seleccionado actual\n\t\tif (!country) {\n\t\t\tcountry = selectedCountry;\n\t\t}\n\n\t\tif (country) {\n\t\t\t// Actualizar país si cambió\n\t\t\tif (selectedCountry.code !== country.code) {\n\t\t\t\tsetSelectedCountry(country);\n\t\t\t}\n\n\t\t\tconst raw = value.replace(country.callingCode, \"\").replace(/[^\\d]/g, \"\");\n\t\t\tsetPhoneValue(raw);\n\n\t\t\tconst formatter = new AsYouType(country.code as keyof typeof countryData);\n\t\t\tconst formatted = formatter.input(raw);\n\t\t\tsetFormattedValue(formatted);\n\n\t\t\tconst valid = isValidPhoneNumber(value);\n\t\t\tsetIsValid(valid);\n\t\t} else {\n\t\t\t// Fallback: no país detectado, limpiar formato pero conservar value crudo\n\t\t\tsetPhoneValue(\"\");\n\t\t\tsetFormattedValue(\"\");\n\t\t\tsetIsValid(false);\n\t\t}\n\t}, [externalValue, countries, isControlled, selectedCountry]);\n\n\t// Formatear número al escribir\n\tconst handlePhoneChange = (value: string, event?: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst cleanValue = value.replace(/[^\\d]/g, \"\");\n\n\t\tif (event?.nativeEvent instanceof InputEvent && event.nativeEvent.inputType === \"deleteContentBackward\" && cleanValue.length < 4) {\n\t\t\tsetPhoneValue(cleanValue);\n\t\t\tsetFormattedValue(cleanValue); // mostrar sin formato\n\t\t\treturn;\n\t\t}\n\t\tconst formatter = new AsYouType(selectedCountry.code as keyof typeof countryData);\n\t\tconst formatted = formatter.input(cleanValue);\n\n\t\tsetPhoneValue(cleanValue);\n\t\tsetFormattedValue(formatted);\n\n\t\tconst fullNumber = selectedCountry.callingCode + cleanValue;\n\t\tconst valid = isValidPhoneNumber(fullNumber);\n\t\tsetIsValid(valid);\n\n\t\tonPhoneChange?.(fullNumber, valid);\n\t};\n\n\t// Seleccionar país\n\tconst handleCountrySelect = (country: Country) => {\n\t\tsetSelectedCountry(country);\n\t\tsetIsDropdownOpen(false);\n\t\tsetSearchTerm(\"\");\n\n\t\tif (phoneValue) {\n\t\t\tconst formatter = new AsYouType(country.code as keyof typeof countryData);\n\t\t\tconst formatted = formatter.input(phoneValue);\n\t\t\tsetFormattedValue(formatted);\n\n\t\t\tconst fullNumber = country.callingCode + phoneValue;\n\t\t\tconst valid = isValidPhoneNumber(fullNumber);\n\t\t\tsetIsValid(valid);\n\n\t\t\tonPhoneChange?.(fullNumber, valid);\n\t\t}\n\n\t\tonCountryChange?.(country);\n\t\tsetTimeout(() => inputRef.current?.focus(), 100);\n\t};\n\n\tconst handleDropdownToggle = () => {\n\t\tsetIsDropdownOpen(!isDropdownOpen);\n\t\tif (!isDropdownOpen) {\n\t\t\tsetTimeout(() => searchInputRef.current?.focus(), 100);\n\t\t}\n\t};\n\n\t// Filtrar países en búsqueda\n\tuseEffect(() => {\n\t\tif (!searchTerm.trim()) {\n\t\t\tsetFilteredCountries(countries);\n\t\t} else {\n\t\t\tconst searchLower = searchTerm.toLowerCase();\n\t\t\tconst filtered = countries.filter(\n\t\t\t\t(country) =>\n\t\t\t\t\tcountry.name.toLowerCase().includes(searchLower) ||\n\t\t\t\t\tcountry.callingCode.includes(searchTerm) ||\n\t\t\t\t\tcountry.code.toLowerCase().includes(searchLower),\n\t\t\t);\n\t\t\tsetFilteredCountries(filtered);\n\t\t}\n\t}, [searchTerm, countries]);\n\n\tconst isTouched = externalTouched;\n\tconst currentError = externalError;\n\tconst hasError = isTouched && currentError;\n\n\tconst isInvalid = !disabled && !!externalError && externalTouched;\n\n\treturn (\n\t\t<div className={twMerge(\"w-full relative flex flex-col\", classNameContainer)}>\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={resolvedId}\n\t\t\t\t\tclassName={cn(\"form-control-label block font-normal text-sm text-foreground mb-1\", {\n\t\t\t\t\t\t\"text-danger\": hasError,\n\t\t\t\t\t})}\n\t\t\t\t>\n\t\t\t\t\t{label} {required && <span className=\"text-danger\">*</span>}\n\t\t\t\t</label>\n\t\t\t)}\n\n\t\t\t<div\n\t\t\t\tclassName={twMerge(\n\t\t\t\t\t\"flex w-full min-w-0 transition-[color,box-shadow] outline-none rounded-md h-input-default\",\n\t\t\t\t\t\"bg-white border border-input\",\n\t\t\t\t\t\"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\t\thasError\n\t\t\t\t\t\t? \"border-danger aria-invalid:ring-danger/20\"\n\t\t\t\t\t\t: isValid && phoneValue\n\t\t\t\t\t\t? \"focus-within:border-primary focus-within:ring-primary/20\"\n\t\t\t\t\t\t: \"focus-within:border-primary focus-within:ring-primary/20\",\n\t\t\t\t\t\"focus-within:ring-[3px]\",\n\t\t\t\t)}\n\t\t\t\taria-invalid={isInvalid ? \"true\" : \"false\"}\n\t\t\t>\n\t\t\t\t{/* Country selector */}\n\t\t\t\t<div className=\"relative\" ref={dropdownRef}>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={handleDropdownToggle}\n\t\t\t\t\t\tclassName={twMerge(\n\t\t\t\t\t\t\t\"flex items-center gap-2 px-3 border-r border-input h-input-default\",\n\t\t\t\t\t\t\t\"hover:bg-muted/20 focus:outline-none rounded-l-md\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className=\"text-lg\">{selectedCountry.flag}</span>\n\t\t\t\t\t\t<span className=\"text-sm font-medium text-foreground\">{selectedCountry.callingCode}</span>\n\t\t\t\t\t\t<ChevronDown className={`w-4 h-4 text-muted-foreground transition-transform ${isDropdownOpen ? \"rotate-180\" : \"\"}`} />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t{isDropdownOpen && (\n\t\t\t\t\t\t\t<LazyMotion features={domAnimation}>\n\t\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\t\tkey=\"country-dropdown\"\n\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -8, scale: 0.98 }}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1, transition: { type: \"spring\", stiffness: 420, damping: 28 } }}\n\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -6, scale: 0.98, transition: { duration: 0.15, ease: \"easeOut\" } }}\n\t\t\t\t\t\t\t\t\tstyle={{ transformOrigin: \"top center\" }}\n\t\t\t\t\t\t\t\t\tclassName=\"absolute top-full left-0 z-50 w-60 mt-1 bg-white border border-input rounded-md shadow-lg max-h-60 overflow-hidden\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"sticky top-0 bg-white border-b border-input p-3\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t\t\t\t\t\t\t<Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\tref={searchInputRef}\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={searchTerm}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => setSearchTerm(e.target.value)}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Buscar país o código\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full pl-10 pr-3 py-2 h-9 border border-input rounded-md text-sm focus:outline-none focus:border-primary focus:ring-[3px] focus:ring-primary/20\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<ScrollArea className=\"max-h-48 overflow-y-auto pb-5\">\n\t\t\t\t\t\t\t\t\t\t{filteredCountries.map((country) => (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\tkey={country.code}\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleCountrySelect(country)}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={twMerge(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"w-full flex items-center gap-3 px-3 py-1 text-sm transition\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tselectedCountry.code === country.code\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"bg-primary/5 border-l-2 border-primary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"hover:bg-muted/20\",\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-lg\">{country.flag}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"flex-1 text-left\">{country.name}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground\">{country.callingCode}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t{selectedCountry.code === country.code && <Check className=\"w-4 h-4 text-primary\" />}\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</ScrollArea>\n\t\t\t\t\t\t\t\t</m.div>\n\t\t\t\t\t\t\t</LazyMotion>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Phone input */}\n\t\t\t\t<input\n\t\t\t\t\tref={inputRef}\n\t\t\t\t\tid={resolvedId}\n\t\t\t\t\ttype=\"tel\"\n\t\t\t\t\tname={name}\n\t\t\t\t\tvalue={formattedValue}\n\t\t\t\t\tonChange={(e) => handlePhoneChange(e.target.value, e)}\n\t\t\t\t\tonBlur={externalOnBlur}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t{...(!disabled ? { \"aria-invalid\": isInvalid } : {})}\n\t\t\t\t\tclassName={twMerge(\n\t\t\t\t\t\t\"flex-1 px-3 py-1 h-input-default border-0 rounded-r-md bg-transparent focus:outline-none text-foreground text-sm\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tautoComplete=\"tel\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t{!disabled && externalError && externalTouched && <LabelError text={externalError || currentError || \"\"} />}\n\t\t</div>\n\t);\n};\n"],"names":["countryData","PhoneInput","id","name","label","placeholder","required","className","classNameContainer","onCountryChange","onPhoneChange","externalTouched","externalOnBlur","externalError","externalValue","defaultCountry","disabled","selectedCountry","setSelectedCountry","useState","getCountryCallingCode","isDropdownOpen","setIsDropdownOpen","phoneValue","setPhoneValue","formattedValue","setFormattedValue","isValid","setIsValid","countries","setCountries","searchTerm","setSearchTerm","filteredCountries","setFilteredCountries","dropdownRef","useRef","inputRef","searchInputRef","inputId","useId","resolvedId","isControlled","useEffect","availableCountries","countryCode","data","handleClickOutside","event","value","country","c","raw","formatted","AsYouType","valid","isValidPhoneNumber","handlePhoneChange","cleanValue","fullNumber","handleCountrySelect","handleDropdownToggle","searchLower","filtered","isTouched","currentError","hasError","isInvalid","twMerge","jsxs","cn","jsx","ChevronDown","AnimatePresence","LazyMotion","domAnimation","m","Search","ScrollArea","Check","LabelError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../src/components/phone-input/phone-input.tsx"],"sourcesContent":["import type React from \"react\";\nimport { useState, useEffect, useRef, useId } from \"react\";\nimport { getCountryCallingCode, AsYouType, isValidPhoneNumber } from \"libphonenumber-js\";\nimport { ChevronDown, Check, Search } from \"lucide-react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { cn } from \"@/lib/utils\";\nimport { LabelError, ScrollArea } from \"../ui\";\nimport { AnimatePresence } from \"framer-motion\";\nimport { LazyMotion, m, domAnimation } from \"framer-motion\";\n\nconst countryData = {\n\tPE: { name: \"Perú\", flag: \"🇵🇪\" },\n\tUS: { name: \"Estados Unidos\", flag: \"🇺🇸\" },\n\tMX: { name: \"México\", flag: \"🇲🇽\" },\n\tAR: { name: \"Argentina\", flag: \"🇦🇷\" },\n\tCO: { name: \"Colombia\", flag: \"🇨🇴\" },\n\tCL: { name: \"Chile\", flag: \"🇨🇱\" },\n\tBR: { name: \"Brasil\", flag: \"🇧🇷\" },\n\tBO: { name: \"Bolivia\", flag: \"🇧🇴\" },\n\tVE: { name: \"Venezuela\", flag: \"🇻🇪\" },\n};\n\ninterface Country {\n\tcode: string;\n\tname: string;\n\tflag: string;\n\tcallingCode: string;\n}\n\ninterface PhoneInputProps {\n\tid?: string;\n\tname: string;\n\tlabel?: string;\n\tplaceholder?: string;\n\trequired?: boolean;\n\tclassName?: string;\n\tonCountryChange?: (country: Country) => void;\n\tonPhoneChange?: (phone: string, isValid: boolean) => void;\n\ttouched?: boolean;\n\tvalues?: any;\n\tonBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;\n\terror?: string;\n\tvalue?: string; // para standalone\n\tdefaultCountry?: string;\n\tdisabled?: boolean;\n\tclassNameContainer?: string;\n}\n\nexport const PhoneInput: React.FC<PhoneInputProps> = ({\n\tid,\n\tname,\n\tlabel = \"Teléfono\",\n\tplaceholder = \"Ingrese un número de teléfono\",\n\trequired = false,\n\tclassName = \"\",\n\tclassNameContainer = \"\",\n\tonCountryChange,\n\tonPhoneChange,\n\ttouched: externalTouched,\n\tonBlur: externalOnBlur,\n\terror: externalError,\n\tvalue: externalValue,\n\tdefaultCountry = \"PE\",\n\tdisabled = false,\n}) => {\n\tconst [selectedCountry, setSelectedCountry] = useState<Country>({\n\t\tcode: defaultCountry,\n\t\tname: countryData[defaultCountry as keyof typeof countryData].name,\n\t\tflag: countryData[defaultCountry as keyof typeof countryData].flag,\n\t\tcallingCode: `+${getCountryCallingCode(defaultCountry as keyof typeof countryData)}`,\n\t});\n\n\tconst [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\tconst [phoneValue, setPhoneValue] = useState(\"\");\n\tconst [formattedValue, setFormattedValue] = useState(\"\");\n\tconst [isValid, setIsValid] = useState(false);\n\tconst [countries, setCountries] = useState<Country[]>([]);\n\tconst [searchTerm, setSearchTerm] = useState(\"\");\n\tconst [filteredCountries, setFilteredCountries] = useState<Country[]>([]);\n\n\tconst dropdownRef = useRef<HTMLDivElement>(null);\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst searchInputRef = useRef<HTMLInputElement>(null);\n\n\tconst inputId = useId();\n\tconst resolvedId = id || inputId;\n\tconst isControlled = externalValue !== undefined;\n\n\t// Inicializar países en el orden definido en countryData\n\tuseEffect(() => {\n\t\tconst availableCountries = Object.keys(countryData).map((countryCode) => {\n\t\t\tconst data = countryData[countryCode as keyof typeof countryData];\n\t\t\treturn {\n\t\t\t\tcode: countryCode,\n\t\t\t\tname: data.name,\n\t\t\t\tflag: data.flag,\n\t\t\t\tcallingCode: `+${getCountryCallingCode(countryCode as keyof typeof countryData)}`,\n\t\t\t};\n\t\t});\n\t\tsetCountries(availableCountries);\n\t\tsetFilteredCountries(availableCountries);\n\t}, []);\n\n\t// Manejo de click fuera para cerrar dropdown\n\tuseEffect(() => {\n\t\tconst handleClickOutside = (event: MouseEvent) => {\n\t\t\tif (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n\t\t\t\tsetIsDropdownOpen(false);\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\treturn () => document.removeEventListener(\"mousedown\", handleClickOutside);\n\t}, []);\n\n\t// Sincronizar externalValue con estados internos (incluye reset con \"\")\n\tuseEffect(() => {\n\t\tif (!isControlled || countries.length === 0) return;\n\n\t\t// Si el valor externo es vacío o null, limpiar estados\n\t\tif (externalValue === \"\" || externalValue == null) {\n\t\t\tsetPhoneValue(\"\");\n\t\t\tsetFormattedValue(\"\");\n\t\t\tsetIsValid(false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = String(externalValue);\n\t\tlet country = countries.find((c) => value.startsWith(c.callingCode));\n\n\t\t// Si no se detecta país por código, mantener el seleccionado actual\n\t\tif (!country) {\n\t\t\tcountry = selectedCountry;\n\t\t}\n\n\t\tif (country) {\n\t\t\t// Actualizar país si cambió\n\t\t\tif (selectedCountry.code !== country.code) {\n\t\t\t\tsetSelectedCountry(country);\n\t\t\t}\n\n\t\t\tconst raw = value.replace(country.callingCode, \"\").replace(/[^\\d]/g, \"\");\n\t\t\tsetPhoneValue(raw);\n\n\t\t\tconst formatter = new AsYouType(country.code as keyof typeof countryData);\n\t\t\tconst formatted = formatter.input(raw);\n\t\t\tsetFormattedValue(formatted);\n\n\t\t\tconst valid = isValidPhoneNumber(value);\n\t\t\tsetIsValid(valid);\n\t\t} else {\n\t\t\t// Fallback: no país detectado, limpiar formato pero conservar value crudo\n\t\t\tsetPhoneValue(\"\");\n\t\t\tsetFormattedValue(\"\");\n\t\t\tsetIsValid(false);\n\t\t}\n\t}, [externalValue, countries, isControlled, selectedCountry]);\n\n\t// Formatear número al escribir\n\tconst handlePhoneChange = (value: string, event?: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst cleanValue = value.replace(/[^\\d]/g, \"\");\n\n\t\tif (event?.nativeEvent instanceof InputEvent && event.nativeEvent.inputType === \"deleteContentBackward\" && cleanValue.length < 4) {\n\t\t\tsetPhoneValue(cleanValue);\n\t\t\tsetFormattedValue(cleanValue); // mostrar sin formato\n\t\t\treturn;\n\t\t}\n\t\tconst formatter = new AsYouType(selectedCountry.code as keyof typeof countryData);\n\t\tconst formatted = formatter.input(cleanValue);\n\n\t\tsetPhoneValue(cleanValue);\n\t\tsetFormattedValue(formatted);\n\n\t\tconst fullNumber = selectedCountry.callingCode + cleanValue;\n\t\tconst valid = isValidPhoneNumber(fullNumber);\n\t\tsetIsValid(valid);\n\n\t\tonPhoneChange?.(fullNumber, valid);\n\t};\n\n\t// Seleccionar país\n\tconst handleCountrySelect = (country: Country) => {\n\t\tsetSelectedCountry(country);\n\t\tsetIsDropdownOpen(false);\n\t\tsetSearchTerm(\"\");\n\n\t\tif (phoneValue) {\n\t\t\tconst formatter = new AsYouType(country.code as keyof typeof countryData);\n\t\t\tconst formatted = formatter.input(phoneValue);\n\t\t\tsetFormattedValue(formatted);\n\n\t\t\tconst fullNumber = country.callingCode + phoneValue;\n\t\t\tconst valid = isValidPhoneNumber(fullNumber);\n\t\t\tsetIsValid(valid);\n\n\t\t\tonPhoneChange?.(fullNumber, valid);\n\t\t}\n\n\t\tonCountryChange?.(country);\n\t\tsetTimeout(() => inputRef.current?.focus(), 100);\n\t};\n\n\tconst handleDropdownToggle = () => {\n\t\tsetIsDropdownOpen(!isDropdownOpen);\n\t\tif (!isDropdownOpen) {\n\t\t\tsetTimeout(() => searchInputRef.current?.focus(), 100);\n\t\t}\n\t};\n\n\t// Filtrar países en búsqueda\n\tuseEffect(() => {\n\t\tif (!searchTerm.trim()) {\n\t\t\tsetFilteredCountries(countries);\n\t\t} else {\n\t\t\tconst searchLower = searchTerm.toLowerCase();\n\t\t\tconst filtered = countries.filter(\n\t\t\t\t(country) =>\n\t\t\t\t\tcountry.name.toLowerCase().includes(searchLower) ||\n\t\t\t\t\tcountry.callingCode.includes(searchTerm) ||\n\t\t\t\t\tcountry.code.toLowerCase().includes(searchLower),\n\t\t\t);\n\t\t\tsetFilteredCountries(filtered);\n\t\t}\n\t}, [searchTerm, countries]);\n\n\tconst isTouched = externalTouched;\n\tconst currentError = externalError;\n\tconst hasError = isTouched && currentError;\n\n\tconst isInvalid = !disabled && !!externalError && externalTouched;\n\n\treturn (\n\t\t<div className={twMerge(\"w-full relative flex flex-col\", classNameContainer)}>\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={resolvedId}\n\t\t\t\t\tclassName={cn(\"form-control-label block font-normal text-sm text-foreground mb-1\", {\n\t\t\t\t\t\t\"text-danger\": hasError,\n\t\t\t\t\t})}\n\t\t\t\t>\n\t\t\t\t\t{label} {required && <span className=\"text-danger\">*</span>}\n\t\t\t\t</label>\n\t\t\t)}\n\n\t\t\t<div\n\t\t\t\tclassName={twMerge(\n\t\t\t\t\t\"flex w-full min-w-0 transition-[color,box-shadow] outline-none rounded-md h-input-default\",\n\t\t\t\t\t\"bg-white border border-input\",\n\t\t\t\t\t\"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\t\thasError\n\t\t\t\t\t\t? \"border-danger aria-invalid:ring-danger/20\"\n\t\t\t\t\t\t: isValid && phoneValue\n\t\t\t\t\t\t? \"focus-within:border-primary focus-within:ring-primary/20\"\n\t\t\t\t\t\t: \"focus-within:border-primary focus-within:ring-primary/20\",\n\t\t\t\t\t\"focus-within:ring-[3px]\",\n\t\t\t\t)}\n\t\t\t\taria-invalid={isInvalid ? \"true\" : \"false\"}\n\t\t\t>\n\t\t\t\t{/* Country selector */}\n\t\t\t\t<div className=\"relative\" ref={dropdownRef}>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={handleDropdownToggle}\n\t\t\t\t\t\tclassName={twMerge(\n\t\t\t\t\t\t\t\"flex items-center gap-2 px-3 border-r border-input h-input-default\",\n\t\t\t\t\t\t\t\"hover:bg-muted/20 focus:outline-none rounded-l-md\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className=\"text-lg\">{selectedCountry.flag}</span>\n\t\t\t\t\t\t<span className=\"text-sm font-medium text-foreground\">{selectedCountry.callingCode}</span>\n\t\t\t\t\t\t<ChevronDown className={`w-4 h-4 text-muted-foreground transition-transform ${isDropdownOpen ? \"rotate-180\" : \"\"}`} />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t{isDropdownOpen && (\n\t\t\t\t\t\t\t<LazyMotion features={domAnimation}>\n\t\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\t\tkey=\"country-dropdown\"\n\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -8, scale: 0.98 }}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0, scale: 1, transition: { type: \"spring\", stiffness: 420, damping: 28 } }}\n\t\t\t\t\t\t\t\t\texit={{ opacity: 0, y: -6, scale: 0.98, transition: { duration: 0.15, ease: \"easeOut\" } }}\n\t\t\t\t\t\t\t\t\tstyle={{ transformOrigin: \"top center\" }}\n\t\t\t\t\t\t\t\t\tclassName=\"absolute top-full left-0 z-50 w-60 mt-1 bg-white border border-input rounded-md shadow-lg max-h-60 overflow-hidden\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"sticky top-0 bg-white border-b border-input p-3\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t\t\t\t\t\t\t<Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\tref={searchInputRef}\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={searchTerm}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => setSearchTerm(e.target.value)}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Buscar país o código\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full pl-10 pr-3 py-2 h-9 border border-input rounded-md text-sm focus:outline-none focus:border-primary focus:ring-[3px] focus:ring-primary/20\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<ScrollArea className=\"max-h-48 overflow-y-auto pb-5\">\n\t\t\t\t\t\t\t\t\t\t{filteredCountries.map((country) => (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\tkey={country.code}\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleCountrySelect(country)}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={twMerge(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"w-full flex items-center gap-3 px-3 py-1 text-sm transition\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tselectedCountry.code === country.code\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"bg-primary/5 border-l-2 border-primary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"hover:bg-muted/20\",\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-lg\">{country.flag}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"flex-1 text-left\">{country.name}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground\">{country.callingCode}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t{selectedCountry.code === country.code && <Check className=\"w-4 h-4 text-primary\" />}\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</ScrollArea>\n\t\t\t\t\t\t\t\t</m.div>\n\t\t\t\t\t\t\t</LazyMotion>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Phone input */}\n\t\t\t\t<input\n\t\t\t\t\tref={inputRef}\n\t\t\t\t\tid={resolvedId}\n\t\t\t\t\ttype=\"tel\"\n\t\t\t\t\tname={name}\n\t\t\t\t\tvalue={formattedValue}\n\t\t\t\t\tonChange={(e) => handlePhoneChange(e.target.value, e)}\n\t\t\t\t\tonBlur={externalOnBlur}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t{...(!disabled ? { \"aria-invalid\": isInvalid } : {})}\n\t\t\t\t\tclassName={twMerge(\n\t\t\t\t\t\t\"flex-1 px-3 py-1 h-input-default border-0 rounded-r-md bg-transparent focus:outline-none text-foreground text-sm\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tautoComplete=\"tel\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t{!disabled && externalError && externalTouched && <LabelError text={externalError || currentError || \"\"} />}\n\t\t</div>\n\t);\n};\n"],"names":["countryData","PhoneInput","id","name","label","placeholder","required","className","classNameContainer","onCountryChange","onPhoneChange","externalTouched","externalOnBlur","externalError","externalValue","defaultCountry","disabled","selectedCountry","setSelectedCountry","useState","getCountryCallingCode","isDropdownOpen","setIsDropdownOpen","phoneValue","setPhoneValue","formattedValue","setFormattedValue","isValid","setIsValid","countries","setCountries","searchTerm","setSearchTerm","filteredCountries","setFilteredCountries","dropdownRef","useRef","inputRef","searchInputRef","inputId","useId","resolvedId","isControlled","useEffect","availableCountries","countryCode","data","handleClickOutside","event","value","country","c","raw","formatted","AsYouType","valid","isValidPhoneNumber","handlePhoneChange","cleanValue","fullNumber","handleCountrySelect","handleDropdownToggle","searchLower","filtered","isTouched","currentError","hasError","isInvalid","twMerge","jsxs","cn","jsx","ChevronDown","AnimatePresence","LazyMotion","domAnimation","m","Search","ScrollArea","Check","LabelError"],"mappings":"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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { j as t } from "../chunks/jsx-runtime-Cl_4eDuT.js";
|
|
2
|
-
import { useState as
|
|
2
|
+
import { useState as r, useRef as I, useId as ae, useEffect as C } from "react";
|
|
3
3
|
import { getCountryCallingCode as U, AsYouType as S, isValidPhoneNumber as k } from "libphonenumber-js";
|
|
4
|
-
import {
|
|
5
|
-
import { c as ie } from "../chunks/utils-
|
|
6
|
-
import "../chunks/textarea-
|
|
7
|
-
import { L as le } from "../chunks/label-error-
|
|
8
|
-
import "
|
|
9
|
-
import
|
|
10
|
-
import "../chunks/
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
4
|
+
import { t as u } from "../chunks/bundle-mjs-2oQ8XDAz.js";
|
|
5
|
+
import { c as ie } from "../chunks/utils-CvyT6Z0O.js";
|
|
6
|
+
import "../chunks/textarea-BYbersWf.js";
|
|
7
|
+
import { L as le } from "../chunks/label-error-BOE4Qj5S.js";
|
|
8
|
+
import { S as ce, a as de } from "../chunks/scroll-area-CE7quLQL.js";
|
|
9
|
+
import "../chunks/button-uo4_Xad_.js";
|
|
10
|
+
import { C as me, a as fe } from "../chunks/index-VJ2Qvmen.js";
|
|
11
|
+
import { A as ue, L as pe } from "../chunks/index-DC9BfnBH.js";
|
|
12
|
+
import { e as ge, m as he } from "../chunks/features-animation-BRAvwYFN.js";
|
|
13
13
|
const j = {
|
|
14
14
|
PE: { name: "Perú", flag: "🇵🇪" },
|
|
15
15
|
US: { name: "Estados Unidos", flag: "🇺🇸" },
|
|
@@ -37,12 +37,12 @@ const j = {
|
|
|
37
37
|
defaultCountry: g = "PE",
|
|
38
38
|
disabled: h = !1
|
|
39
39
|
}) => {
|
|
40
|
-
const [
|
|
40
|
+
const [s, A] = r({
|
|
41
41
|
code: g,
|
|
42
42
|
name: j[g].name,
|
|
43
43
|
flag: j[g].flag,
|
|
44
44
|
callingCode: `+${U(g)}`
|
|
45
|
-
}), [x, y] =
|
|
45
|
+
}), [x, y] = r(!1), [b, d] = r(""), [Q, a] = r(""), [Z, m] = r(!1), [i, _] = r([]), [f, P] = r(""), [ee, E] = r([]), L = I(null), R = I(null), T = I(null), te = ae(), V = W || te, D = c !== void 0;
|
|
46
46
|
C(() => {
|
|
47
47
|
const e = Object.keys(j).map((n) => {
|
|
48
48
|
const o = j[n];
|
|
@@ -56,7 +56,7 @@ const j = {
|
|
|
56
56
|
_(e), E(e);
|
|
57
57
|
}, []), C(() => {
|
|
58
58
|
const e = (n) => {
|
|
59
|
-
|
|
59
|
+
L.current && !L.current.contains(n.target) && y(!1);
|
|
60
60
|
};
|
|
61
61
|
return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
62
62
|
}, []), C(() => {
|
|
@@ -67,8 +67,8 @@ const j = {
|
|
|
67
67
|
}
|
|
68
68
|
const e = String(c);
|
|
69
69
|
let n = i.find((o) => e.startsWith(o.callingCode));
|
|
70
|
-
if (n || (n =
|
|
71
|
-
|
|
70
|
+
if (n || (n = s), n) {
|
|
71
|
+
s.code !== n.code && A(n);
|
|
72
72
|
const o = e.replace(n.callingCode, "").replace(/[^\d]/g, "");
|
|
73
73
|
d(o);
|
|
74
74
|
const l = new S(n.code).input(o);
|
|
@@ -77,27 +77,27 @@ const j = {
|
|
|
77
77
|
m(v);
|
|
78
78
|
} else
|
|
79
79
|
d(""), a(""), m(!1);
|
|
80
|
-
}, [c, i, D,
|
|
80
|
+
}, [c, i, D, s]);
|
|
81
81
|
const oe = (e, n) => {
|
|
82
82
|
const o = e.replace(/[^\d]/g, "");
|
|
83
83
|
if (n?.nativeEvent instanceof InputEvent && n.nativeEvent.inputType === "deleteContentBackward" && o.length < 4) {
|
|
84
84
|
d(o), a(o);
|
|
85
85
|
return;
|
|
86
86
|
}
|
|
87
|
-
const l = new S(
|
|
87
|
+
const l = new S(s.code).input(o);
|
|
88
88
|
d(o), a(l);
|
|
89
|
-
const v =
|
|
89
|
+
const v = s.callingCode + o, $ = k(v);
|
|
90
90
|
m($), O?.(v, $);
|
|
91
91
|
}, ne = (e) => {
|
|
92
|
-
if (
|
|
92
|
+
if (A(e), y(!1), P(""), b) {
|
|
93
93
|
const o = new S(e.code).input(b);
|
|
94
94
|
a(o);
|
|
95
95
|
const w = e.callingCode + b, l = k(w);
|
|
96
96
|
m(l), O?.(w, l);
|
|
97
97
|
}
|
|
98
|
-
J?.(e), setTimeout(() =>
|
|
99
|
-
},
|
|
100
|
-
y(!x), x || setTimeout(() =>
|
|
98
|
+
J?.(e), setTimeout(() => R.current?.focus(), 100);
|
|
99
|
+
}, se = () => {
|
|
100
|
+
y(!x), x || setTimeout(() => T.current?.focus(), 100);
|
|
101
101
|
};
|
|
102
102
|
C(() => {
|
|
103
103
|
if (!f.trim())
|
|
@@ -109,7 +109,7 @@ const j = {
|
|
|
109
109
|
E(n);
|
|
110
110
|
}
|
|
111
111
|
}, [f, i]);
|
|
112
|
-
const
|
|
112
|
+
const re = N, M = p, z = re && M, F = !h && !!p && N;
|
|
113
113
|
return /* @__PURE__ */ t.jsxs("div", { className: u("w-full relative flex flex-col", H), children: [
|
|
114
114
|
B && /* @__PURE__ */ t.jsxs(
|
|
115
115
|
"label",
|
|
@@ -137,25 +137,25 @@ const j = {
|
|
|
137
137
|
),
|
|
138
138
|
"aria-invalid": F ? "true" : "false",
|
|
139
139
|
children: [
|
|
140
|
-
/* @__PURE__ */ t.jsxs("div", { className: "relative", ref:
|
|
140
|
+
/* @__PURE__ */ t.jsxs("div", { className: "relative", ref: L, children: [
|
|
141
141
|
/* @__PURE__ */ t.jsxs(
|
|
142
142
|
"button",
|
|
143
143
|
{
|
|
144
144
|
type: "button",
|
|
145
|
-
onClick:
|
|
145
|
+
onClick: se,
|
|
146
146
|
className: u(
|
|
147
147
|
"flex items-center gap-2 px-3 border-r border-input h-input-default",
|
|
148
148
|
"hover:bg-muted/20 focus:outline-none rounded-l-md"
|
|
149
149
|
),
|
|
150
150
|
children: [
|
|
151
|
-
/* @__PURE__ */ t.jsx("span", { className: "text-lg", children:
|
|
152
|
-
/* @__PURE__ */ t.jsx("span", { className: "text-sm font-medium text-foreground", children:
|
|
153
|
-
/* @__PURE__ */ t.jsx(
|
|
151
|
+
/* @__PURE__ */ t.jsx("span", { className: "text-lg", children: s.flag }),
|
|
152
|
+
/* @__PURE__ */ t.jsx("span", { className: "text-sm font-medium text-foreground", children: s.callingCode }),
|
|
153
|
+
/* @__PURE__ */ t.jsx(me, { className: `w-4 h-4 text-muted-foreground transition-transform ${x ? "rotate-180" : ""}` })
|
|
154
154
|
]
|
|
155
155
|
}
|
|
156
156
|
),
|
|
157
|
-
/* @__PURE__ */ t.jsx(
|
|
158
|
-
|
|
157
|
+
/* @__PURE__ */ t.jsx(ue, { children: x && /* @__PURE__ */ t.jsx(pe, { features: ge, children: /* @__PURE__ */ t.jsxs(
|
|
158
|
+
he.div,
|
|
159
159
|
{
|
|
160
160
|
initial: { opacity: 0, y: -8, scale: 0.98 },
|
|
161
161
|
animate: { opacity: 1, y: 0, scale: 1, transition: { type: "spring", stiffness: 420, damping: 28 } },
|
|
@@ -168,10 +168,10 @@ const j = {
|
|
|
168
168
|
/* @__PURE__ */ t.jsx(
|
|
169
169
|
"input",
|
|
170
170
|
{
|
|
171
|
-
ref:
|
|
171
|
+
ref: T,
|
|
172
172
|
type: "text",
|
|
173
173
|
value: f,
|
|
174
|
-
onChange: (e) =>
|
|
174
|
+
onChange: (e) => P(e.target.value),
|
|
175
175
|
placeholder: "Buscar país o código",
|
|
176
176
|
className: "w-full pl-10 pr-3 py-2 h-9 border border-input rounded-md text-sm focus:outline-none focus:border-primary focus:ring-[3px] focus:ring-primary/20"
|
|
177
177
|
}
|
|
@@ -184,13 +184,13 @@ const j = {
|
|
|
184
184
|
onClick: () => ne(e),
|
|
185
185
|
className: u(
|
|
186
186
|
"w-full flex items-center gap-3 px-3 py-1 text-sm transition",
|
|
187
|
-
|
|
187
|
+
s.code === e.code ? "bg-primary/5 border-l-2 border-primary" : "hover:bg-muted/20"
|
|
188
188
|
),
|
|
189
189
|
children: [
|
|
190
190
|
/* @__PURE__ */ t.jsx("span", { className: "text-lg", children: e.flag }),
|
|
191
191
|
/* @__PURE__ */ t.jsx("span", { className: "flex-1 text-left", children: e.name }),
|
|
192
192
|
/* @__PURE__ */ t.jsx("span", { className: "text-muted-foreground", children: e.callingCode }),
|
|
193
|
-
|
|
193
|
+
s.code === e.code && /* @__PURE__ */ t.jsx(fe, { className: "w-4 h-4 text-primary" })
|
|
194
194
|
]
|
|
195
195
|
},
|
|
196
196
|
e.code
|
|
@@ -203,7 +203,7 @@ const j = {
|
|
|
203
203
|
/* @__PURE__ */ t.jsx(
|
|
204
204
|
"input",
|
|
205
205
|
{
|
|
206
|
-
ref:
|
|
206
|
+
ref: R,
|
|
207
207
|
id: V,
|
|
208
208
|
type: "tel",
|
|
209
209
|
name: X,
|
package/dist/ripple/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../chunks/ripple-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../chunks/ripple-SBteSEo3.js");exports.Ripple=e.Ripple;exports.useRipple=e.useRipple;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/ripple/index.es.js
CHANGED