{"_id":"@edusites/bandeiras-paises","name":"@edusites/bandeiras-paises","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@edusites/bandeiras-paises","version":"1.0.0","description":"Biblioteca JavaScript com as bandeiras dos 196 países em SVG (ISO-3166 alpha-2) e a lista de países em português com DDI. Tree-shakeable: cada bandeira é um chunk próprio, carregado sob demanda. React, Vue, Nuxt, Svelte e JS puro.","author":{"name":"Eduardo Sites","email":"edusites@lecdt.com","url":"https://lecdt.com"},"license":"MIT","homepage":"https://lecdt.com/libs/bandeiras-paises","repository":{"type":"git","url":"git+https://github.com/eduardolecdt/edusites-bandeiras-paises.git"},"bugs":{"url":"https://github.com/eduardolecdt/edusites-bandeiras-paises/issues"},"keywords":["javascript","bandeiras","paises","flags","countries","svg","icons","iso-3166","ddi","telefone","edusites","lecdt","nuxt","vue","ui"],"scripts":{"gerar":"node scripts/gerar.mjs","test":"node test/lib.test.mjs"},"main":"./src/index.js","module":"./src/index.js","type":"module","sideEffects":["./src/resolvedor.js"],"exports":{".":"./src/index.js","./nuxt":"./src/nuxt.js","./core":"./src/core.js","./paises":"./src/paises.js","./package.json":"./package.json"},"peerDependencies":{"vue":">=3.0.0"},"peerDependenciesMeta":{"vue":{"optional":true}},"engines":{"node":">=16.0.0"},"publishConfig":{"access":"public"},"devDependencies":{"@vue/server-renderer":"^3.5.41","vue":"^3.5.41"},"_id":"@edusites/bandeiras-paises@1.0.0","gitHead":"01676fe35dec9baaf5eb3a492cbdec361ebfcae7","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-C7lWwwlaqugwvOshdULUJYyIV53cPX5d/ozq4NEkXSEbEBun2WN2XrmI6ofMgjkKBQZS8ZAKkhit70vD/raRbw==","shasum":"721fb935abd79aadc0747191c8ca1b20cdb37cc2","tarball":"https://registry.npmjs.org/@edusites/bandeiras-paises/-/bandeiras-paises-1.0.0.tgz","fileCount":208,"unpackedSize":2439337,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDKUbwgIitPyi6T1vMiDC+eNAqLb8FI0O1V86jPetHi2AIgXZSGwLnM5XOtYg2heUzZR7SoHIrvNk14QY6rbdN4BDM="}]},"_npmUser":{"name":"edusites","email":"eduardo@lecdt.com"},"directories":{},"maintainers":[{"name":"edusites","email":"eduardo@lecdt.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bandeiras-paises_1.0.0_1786229696767_0.4870289847291236"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-08T22:54:56.596Z","1.0.0":"2026-08-08T22:54:56.974Z","modified":"2026-08-08T22:54:57.208Z"},"maintainers":[{"name":"edusites","email":"eduardo@lecdt.com"}],"description":"Biblioteca JavaScript com as bandeiras dos 196 países em SVG (ISO-3166 alpha-2) e a lista de países em português com DDI. Tree-shakeable: cada bandeira é um chunk próprio, carregado sob demanda. React, Vue, Nuxt, Svelte e JS puro.","homepage":"https://lecdt.com/libs/bandeiras-paises","keywords":["javascript","bandeiras","paises","flags","countries","svg","icons","iso-3166","ddi","telefone","edusites","lecdt","nuxt","vue","ui"],"repository":{"type":"git","url":"git+https://github.com/eduardolecdt/edusites-bandeiras-paises.git"},"author":{"name":"Eduardo Sites","email":"edusites@lecdt.com","url":"https://lecdt.com"},"bugs":{"url":"https://github.com/eduardolecdt/edusites-bandeiras-paises/issues"},"license":"MIT","readme":"<div align=\"center\">\n\n# @edusites/bandeiras-paises\n\n**Bandeiras dos 196 países em SVG + a lista de países em português com DDI. Tree-shakeable, para Vue, Nuxt, React, Svelte e JS puro.**\n\n[![npm version](https://img.shields.io/npm/v/@edusites/bandeiras-paises?style=flat&colorA=18181B&colorB=28CF8D)](https://www.npmjs.com/package/@edusites/bandeiras-paises)\n[![npm downloads](https://img.shields.io/npm/dm/@edusites/bandeiras-paises?style=flat&colorA=18181B&colorB=28CF8D)](https://www.npmjs.com/package/@edusites/bandeiras-paises)\n[![license](https://img.shields.io/npm/l/@edusites/bandeiras-paises?style=flat&colorA=18181B&colorB=28CF8D)](./LICENSE)\n[![países](https://img.shields.io/badge/países-196-28CF8D?style=flat&colorA=18181B)](https://lecdt.com/libs/bandeiras-paises)\n\n[Galeria de bandeiras](https://lecdt.com/libs/bandeiras-paises) · [Release Notes](https://github.com/eduardolecdt/edusites-bandeiras-paises/releases) · [Changelog](./CHANGELOG.md)\n\n</div>\n\n## Por que `@edusites/bandeiras-paises`?\n\n- 🌍 **196 países** — ISO-3166 alpha-2, com nome em português-BR e DDI já no pacote.\n- 🌳 **Tree-shakeable** — cada bandeira é um chunk próprio. Usar o Brasil **não** baixa a Sérvia.\n- 🚫 **Zero serviço externo** — nada de `flagsapi.com`. Nenhuma requisição sai do seu domínio.\n- 🔤 **Case-insensitive** — a store usa `'BR'`, você não se preocupa com maiúscula.\n- ⚡ **Multi-framework** — Vue, Nuxt, React, Svelte e JS puro. Zero dependências no núcleo.\n- 📞 **Feito para formulário** — seletor de telefone pronto: nome, ISO e DDI na mesma lista.\n\n## Instalação\n\n```bash\nnpm install @edusites/bandeiras-paises\n# ou\npnpm add @edusites/bandeiras-paises\n# ou\nyarn add @edusites/bandeiras-paises\n```\n\n## Uso\n\n```js\nimport { SvgPais } from '@edusites/bandeiras-paises'\n```\n\n```vue\n<SvgPais nome=\"BR\" />\n<SvgPais nome=\"BR\" :tamanho=\"24\" />\n<SvgPais nome=\"BR\" :tamanho=\"18\" redonda />\n```\n\nSó isso. Sem configurar nada, sem copiar pasta, sem servir arquivo.\n\n| Prop | Tipo | Padrão | O que faz |\n|---|---|---|---|\n| `nome` | `String` | — | ISO alpha-2, maiúsculo ou minúsculo (`'BR'`, `'br'`) |\n| `tamanho` | `Number \\| String` | `1em` | Número vira `px`; string passa direto (`'1.5rem'`) |\n| `redonda` | `Boolean` | `false` | `border-radius: 50%` + `object-fit: cover` |\n| `className` | `String` | — | Classe extra no SVG |\n\nSem `tamanho`, a bandeira herda o tamanho da fonte (`1em`) — funciona como um ícone dentro do texto. Código inexistente renderiza um `<span>` vazio do tamanho certo, nunca uma imagem quebrada.\n\n### Nuxt — registrar global\n\n```js\n// plugins/edusites-bandeiras.js\nimport { instalarPaises } from '@edusites/bandeiras-paises/nuxt'\n\nexport default defineNuxtPlugin((nuxtApp) => {\n  instalarPaises(nuxtApp)\n})\n```\n\nDepois é só usar `<SvgPais nome=\"BR\" />` em qualquer componente, sem import.\n\n### JavaScript puro\n\n```js\nimport { svgPaisAsync } from '@edusites/bandeiras-paises'\n\nconst svg = await svgPaisAsync({ nome: 'BR', tamanho: 32, redonda: true })\ndocument.getElementById('app').innerHTML = svg\n```\n\n### React\n\n```jsx\nimport { svgPaisAsync } from '@edusites/bandeiras-paises'\nimport { useEffect, useState } from 'react'\n\nfunction Bandeira({ nome, tamanho, redonda }) {\n  const [svg, setSvg] = useState('')\n\n  useEffect(() => {\n    svgPaisAsync({ nome, tamanho, redonda }).then((r) => setSvg(r || ''))\n  }, [nome, tamanho, redonda])\n\n  return <span dangerouslySetInnerHTML={{ __html: svg }} />\n}\n```\n\n### Svelte\n\n```svelte\n<script>\n  import { svgPaisAsync } from '@edusites/bandeiras-paises'\n\n  export let nome\n  export let tamanho = undefined\n  export let redonda = false\n\n  $: promessa = svgPaisAsync({ nome, tamanho, redonda })\n</script>\n\n{#await promessa then svg}\n  {@html svg}\n{/await}\n```\n\n---\n\n## Lista de países\n\n```js\nimport { listarPaises, obterPais, obterCodigoPais, buscarPaises, listarCodigos, temPais } from '@edusites/bandeiras-paises'\n\nlistarPaises()\n// → [{ nome: 'Afeganistão', codigo: 'AF', telefone: '93' }, …] — 196 itens, ordenados por nome (pt-BR)\n\nobterPais('BR')          // → { nome: 'Brasil', codigo: 'BR', telefone: '55' }\nobterCodigoPais('55')    // → 'BR'\nobterCodigoPais('+55')   // → 'BR'  (aceita com máscara)\n\nbuscarPaises('brasil')   // → [{ nome: 'Brasil', … }]\nbuscarPaises('africa')   // → busca sem acento também\nbuscarPaises('55')       // → busca por DDI\n\nlistarCodigos()          // → ['AF', 'ZA', 'AL', …]\ntemPais('BR')            // → true\ntemPais('XX')            // → false\n```\n\n### Seletor de telefone completo\n\n```vue\n<script setup>\nimport { listarPaises, SvgPais } from '@edusites/bandeiras-paises'\n\nconst paises = listarPaises()\nconst selecionado = ref('BR')\n</script>\n\n<template>\n  <ul>\n    <li v-for=\"pais in paises\" :key=\"pais.codigo\" @click=\"selecionado = pais.codigo\">\n      <SvgPais :nome=\"pais.codigo\" :tamanho=\"18\" redonda />\n      <span>{{ pais.nome }}</span>\n      <span>+{{ pais.telefone }}</span>\n    </li>\n  </ul>\n</template>\n```\n\n---\n\n## API\n\n### Bandeiras\n\n| Função | Retorno | Descrição |\n|---|---|---|\n| `svgPais(opcoes)` | `String\\|null` | Síncrono; só devolve se a bandeira já estiver em cache |\n| `svgPaisAsync(opcoes)` | `Promise<String\\|null>` | Carrega e devolve o SVG pronto para renderizar |\n| `resolverBruto(codigo)` | `Promise<String\\|null>` | O SVG original, sem classe/estilo injetados |\n| `precarregar(codigos?)` | `Promise<Number>` | Aquece o cache; sem argumento carrega as 196 |\n| `temPais(codigo)` | `Boolean` | Se existe bandeira para esse ISO |\n\n`opcoes` aceita `{ nome, tamanho, redonda, className }` ou só a string do ISO (`svgPaisAsync('BR')`).\n\n### Países\n\n| Função | Retorno | Descrição |\n|---|---|---|\n| `listarPaises()` | `Array` | Os 196 países, ordenados por nome |\n| `obterPais(codigo)` | `Object\\|null` | Um país pelo ISO |\n| `obterCodigoPais(ddi)` | `String\\|null` | ISO a partir do DDI |\n| `buscarPaises(termo)` | `Array` | Busca por nome (sem acento), ISO ou DDI |\n| `listarCodigos()` | `Array` | Só os códigos ISO |\n| `PAISES` | `Array` | A constante crua (não mute — use `listarPaises()`) |\n\n### Imports parciais\n\n```js\nimport { svgPaisAsync } from '@edusites/bandeiras-paises/core'   // sem Vue\nimport { PAISES } from '@edusites/bandeiras-paises/paises'       // só a lista\nimport { instalarPaises } from '@edusites/bandeiras-paises/nuxt'\n```\n\n---\n\n## Migrando de `flagsapi.com`\n\n```bash\ngrep -rn \"flagsapi\" --include=\"*.vue\" --include=\"*.js\" .\n```\n\n```diff\n- <img :src=\"`https://flagsapi.com/${pais.codigo}/flat/16.png`\" />\n+ <SvgPais :nome=\"pais.codigo\" :tamanho=\"18\" redonda />\n```\n\n---\n\n## Licença\n\nCódigo sob [MIT](./LICENSE).\n\nAs bandeiras vêm de [flag-icons](https://github.com/lipis/flag-icons) (MIT) e [flagcdn.com](https://flagcdn.com) (domínio público). Bandeiras nacionais em si não são protegidas por copyright na maioria das jurisdições.\n","readmeFilename":"README.md","_rev":"1-bf39d6d5fd59a7857b1b71a84be35a92"}