npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

tempo-plugin-br

v2.0.0

Published

Plugin React para exibir temperatura brasileira em tempo real com componente flutuante e arrastável

Readme

Tempo Plugin BR

Sponsor

Widget de clima em tempo real para React, focado no Brasil. Uma bolinha flutuante que você pode arrastar pela tela; ao clicar, abre um modal com temperatura, sensação térmica, previsão e busca por cidade. A localização é detectada automaticamente ou você define uma cidade inicial.

Demo: ranilson-nascimento.github.io/tempo-plugin-br — vale testar no celular (arraste com o dedo).


Instalação

npm install tempo-plugin-br

ou com yarn:

yarn add tempo-plugin-br

Uso rápido

Importe o componente e o CSS (obrigatório para o widget e o modal ficarem bonitos):

import { TempoWidget } from 'tempo-plugin-br';
import 'tempo-plugin-br/dist/index.esm.css';  // não esqueça do CSS

function App() {
  return (
    <div>
      <h1>Meu app</h1>
      <TempoWidget />
    </div>
  );
}

Pronto. O widget usa a localização do navegador (se o usuário permitir) e mostra a temperatura; a cidade aparece no formato Cidade - UF (ex.: São Paulo - SP).


Customizando

Você pode mudar posição inicial, cores, tamanho, intervalo de atualização e até o tema do modal (padrão, claro ou escuro). Exemplo:

<TempoWidget
  initialX={100}
  initialY={80}
  initialCity="Rio de Janeiro"
  backgroundColor="#0f766e"
  textColor="#ffffff"
  size={70}
  updateInterval={5}
  theme="dark"
  forecastDays={5}
  onTemperatureUpdate={(data) => console.log(data.temperature)}
  onCityChange={(city) => console.log('Cidade:', city)}
/>

Salvar a posição da bolinha

Se você passar uma chave em positionStorageKey, a posição do widget é salva no localStorage. Assim, quando o usuário voltar à página, a bolinha continua onde ele deixou.

<TempoWidget positionStorageKey="meu-app-clima-pos" />

Tratar erros

Em caso de falha (localização negada, rede, cidade não encontrada), você pode usar o callback onError:

<TempoWidget
  onError={(err, type) => {
    // type: 'location' | 'weather' | 'city'
    console.warn(type, err.message);
  }}
/>

No próprio modal existe o botão "Tentar novamente" quando algo dá errado.


Todas as props

| Prop | Tipo | Padrão | O que faz | |------|------|--------|-----------| | initialX | number | 20 | Posição inicial (eixo X) da bolinha em pixels | | initialY | number | 20 | Posição inicial (eixo Y) da bolinha em pixels | | initialCity | string | — | Cidade inicial. Se não informar, tenta usar a localização do navegador | | backgroundColor | string | #007bff | Cor de fundo da bolinha | | textColor | string | #ffffff | Cor do texto da bolinha | | size | number | 60 | Tamanho da bolinha em pixels | | updateInterval | number | 10 | De quantos em quantos minutos os dados são atualizados | | forecastDays | 3, 5 ou 7 | 3 | Quantos dias de previsão aparecem no modal | | positionStorageKey | string | — | Se informado, salva a posição no localStorage com essa chave | | theme | 'default' | 'light' | 'dark' | 'default' | Visual do modal (gradiente, claro ou escuro) | | onTemperatureUpdate | função | — | Chamada quando os dados de clima são atualizados (recebe o objeto com temperatura, cidade, etc.) | | onCityChange | função | — | Chamada quando o usuário troca de cidade no modal | | onError | função | — | Chamada em erro (recebe o erro e o tipo: 'location', 'weather' ou 'city') |


O que o widget faz

  • Bolinha: mostra ícone do tempo, temperatura e nome da cidade (Cidade - UF). Você pode arrastar com o mouse ou com o dedo no celular.
  • Clique (ou toque): abre o modal com temperatura, sensação térmica, umidade, vento, pressão, UV, previsão dos próximos dias e um campo para buscar outra cidade.
  • Localização: se não houver initialCity, o plugin pede permissão de localização; se o usuário negar ou der falha, os dados usam São Paulo como fallback.
  • Dados: clima via Open-Meteo (sem chave de API); nome da cidade a partir das coordenadas via BigDataCloud (reverse geocoding, uso no navegador sem chave).

Requisitos

  • React 16.8 ou superior
  • Navegadores modernos (com suporte a geolocalização e fetch)

O projeto é em TypeScript e exporta os tipos. Em ambiente com SSR (Next, etc.), o widget só é montado no cliente para evitar erro com window/navigator.


Rodar o exemplo na sua máquina

Na raiz do repositório:

npm install
npm run build
cd exemplo-tempo-plugin
npm install --legacy-peer-deps
npm run dev

Abra http://localhost:5173 no navegador.


Desenvolvimento do pacote

npm install
npm run dev    # build em modo watch
npm run build  # gera dist/
npm test       # testes (Jest)

Contribuir

Abre uma issue para bug ou ideia, ou manda um pull request. Fork → branch → commit → push → PR.


Licença

MIT. Ver LICENSE.

Agradecimentos ao Open-Meteo e ao BigDataCloud pelos dados e APIs gratuitas.


Feito com ❤️ por Ranilson Nascimento · contato: [email protected]