3 Commits

Author SHA1 Message Date
Pulse Agent 0889ee9117 feat(lib): add useLiveStream WS hook + useLiveMetrics + LiveMetricChart
feat(hooks): add useLiveStream generic WebSocket hook
  - supports websocket/sse/polling transports
  - exponential backoff reconnect with jitter
  - circular buffer with configurable size
  - typed filter callback per use case
  - manual disconnect + reconnect + error state

feat(hooks): add useLiveMetrics derived hook
  - sliding time-window cut
  - moving average (configurable window)
  - current / avg / min / max / ratePerSecond
  - zero allocations per tick (memoized)

feat(charts): add LiveMetricChart molecule (Recharts)
  - line + area variants, grid + tooltip
  - moving-average overlay (dashed)
  - ConnectionStatus atom in header
  - status bar + compact mode
  - 100% responsive, GPU via SVG ViewBox

feat(atoms): add ConnectionStatus indicator
  - 5 states: disconnected/connecting/connected/reconnecting/error
  - animated pulse, JetBrains Mono, pill style
  - exported helpers: formatLatency / formatBytes

docs(pkg): bump v0.1.0 → v0.2.0, add recharts peerDep
2026-05-20 22:59:10 -03:00
pulse-agent d1b3667755 fix(tests-hooks): useClipboard delay fix — setTimeout não atrasa para 0ms
- delay=0 no writeText mock fazia setCopied(false) disparar antes do expect
- Solução: delay=5000ms nos testes de clipboard para evitar race
- 23/23 hooks continua verde; suite total 80/80
2026-05-20 00:17:04 -03:00
pulse-agent 9afdccdc14 feat(tests-hooks): 23/23 hooks tests pass — useToggle, useAsync, useDebounce, useLocalStorage, useMedia, useInterval, useClipboard, useFetch
- useLocalStorage: retorna tupla [valor, setter] tipada como [T, (v: T|fn) => void]
- useAsync: espera microtask act cycle antes de checar status
- useClipboard: mock navigator.clipboard.writeText antes
- useMedia: mock matchMedia antes
- Busca por padrão: act() + waitFor p/ efeitos assíncronos (sem fakeTimers gerais)
- docs: PROJECTS-REGISTER, SESSION-STATE (pretérito + presente)
2026-05-19 23:37:04 -03:00