{"version":3,"file":"use-viacep.cjs","names":[],"sources":["../../src/forms/use-viacep.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport interface ViaCEPResult {\n    cep: string;\n    logradouro: string;\n    complemento: string;\n    bairro: string;\n    localidade: string;\n    uf: string;\n    ibge?: string;\n    gia?: string;\n    ddd?: string;\n    siafi?: string;\n}\n\nexport interface UseViaCEPResult {\n    loading: boolean;\n    error: string | null;\n    data: ViaCEPResult | null;\n    /** Fetch the given CEP (8 digits or masked). Sets `data`/`error`. Returns the result. */\n    lookup: (cep: string) => Promise<ViaCEPResult | null>;\n    reset: () => void;\n}\n\n/**\n * React hook for the public ViaCEP service (`viacep.com.br`). No backend\n * required. Returns address fields when the CEP exists, or sets `error` for\n * invalid CEPs.\n */\nexport function useViaCEP(): UseViaCEPResult {\n    const [loading, setLoading] = useState<boolean>(false);\n    const [error, setError] = useState<string | null>(null);\n    const [data, setData] = useState<ViaCEPResult | null>(null);\n\n    const lookup = useCallback(async (cep: string): Promise<ViaCEPResult | null> => {\n        const digits = cep.replace(/\\D/g, \"\");\n        if (digits.length !== 8) {\n            setError(\"CEP inválido.\");\n            return null;\n        }\n        setLoading(true);\n        setError(null);\n        try {\n            const response = await fetch(`https://viacep.com.br/ws/${digits}/json/`);\n            const json = (await response.json()) as ViaCEPResult & { erro?: boolean };\n            if (\"erro\" in json && json.erro) {\n                setError(\"CEP não encontrado.\");\n                setData(null);\n                return null;\n            }\n            setData(json);\n            return json;\n        } catch (err) {\n            setError(err instanceof Error ? err.message : String(err));\n            return null;\n        } finally {\n            setLoading(false);\n        }\n    }, []);\n\n    const reset = useCallback(() => {\n        setLoading(false);\n        setError(null);\n        setData(null);\n    }, []);\n\n    return { loading, error, data, lookup, reset };\n}\n"],"mappings":"uBA6BA,SAAgB,GAA6B,CACzC,GAAM,CAAC,EAAS,IAAA,EAAc,EAAA,SAAA,CAAkB,EAAK,EAC/C,CAAC,EAAO,IAAA,EAAY,EAAA,SAAA,CAAwB,IAAI,EAChD,CAAC,EAAM,IAAA,EAAW,EAAA,SAAA,CAA8B,IAAI,EAkC1D,MAAO,CAAE,UAAS,QAAO,OAAM,QAAA,EAhChB,EAAA,YAAA,CAAY,KAAO,IAA8C,CAC5E,IAAM,EAAS,EAAI,QAAQ,MAAO,EAAE,EACpC,GAAI,EAAO,SAAW,EAElB,OADA,EAAS,eAAe,EACjB,KAEX,EAAW,EAAI,EACf,EAAS,IAAI,EACb,GAAI,CAEA,IAAM,EAAQ,MAAM,MADG,MAAM,4BAA4B,EAAO,OAAO,EAAA,CAC1C,KAAK,EAOlC,MANI,SAAU,GAAQ,EAAK,MACvB,EAAS,qBAAqB,EAC9B,EAAQ,IAAI,EACL,OAEX,EAAQ,CAAI,EACL,EACX,OAAS,EAAK,CAEV,OADA,EAAS,aAAe,MAAQ,EAAI,QAAU,OAAO,CAAG,CAAC,EAClD,IACX,QAAU,CACN,EAAW,EAAK,CACpB,CACJ,EAAG,CAAC,CAQ2B,EAAQ,OAAA,EANzB,EAAA,YAAA,KAAkB,CAC5B,EAAW,EAAK,EAChB,EAAS,IAAI,EACb,EAAQ,IAAI,CAChB,EAAG,CAAC,CAEmC,CAAM,CACjD"}