Commit Graph
25 Commits
Author SHA1 Message Date
fightrate-bot 569d22dee0 build: release APK v2 (Instrumento Forte) + 7z 2026-06-16 02:11:57 -03:00
fightrate-bot 8cce2e52db docs(design): update FIGHTRATE_DESIGN_SYSTEM.md with numeric typography + motion presets 2026-06-16 01:59:32 -03:00
fightrate-bot 1cb658f899 feat(app): FightRateApp tab fade + brand LiveDot + tab live indicator 2026-06-16 01:59:20 -03:00
fightrate-bot 55fb37a34a feat(insights): InsightsScreen with InsightRow + EmptyState 2026-06-16 01:58:32 -03:00
fightrate-bot 06475346da feat(sensor): SensorScreen with DialTile + LiveDot 2026-06-16 01:57:06 -03:00
fightrate-bot 139294a6bd feat(history): HistoryScreen with TrackRow + EmptyState 2026-06-16 01:56:15 -03:00
fightrate-bot cd278aa2b1 feat(capture): CaptureScreen with LiveDot, JetBrains Mono BPM, stopAlert ring 2026-06-16 01:54:20 -03:00
fightrate-bot e7a20cc42c feat(chart): TrainingChart ECG furos laterais + LiveDot readout 2026-06-16 01:52:31 -03:00
fightrate-bot 5ddc7c2c35 feat(components): StatusTag size + SectionPanel divider + MetricTile numeric 2026-06-16 01:51:06 -03:00
fightrate-bot bbe2919c2c feat(components): ActionButton stopAlert + typography type fixes 2026-06-16 01:50:26 -03:00
fightrate-bot 2c51fd2623 feat(components): InsightRow with stagger reveal animation 2026-06-16 01:48:50 -03:00
fightrate-bot edc10826aa feat(components): TrackRow for history sessions 2026-06-16 01:48:32 -03:00
fightrate-bot 8232882977 feat(components): DialTile for sensor signal rows 2026-06-16 01:48:12 -03:00
fightrate-bot bea019fb0f feat(components): EmptyState with instrument geometry 2026-06-16 01:47:52 -03:00
fightrate-bot fc42e1da43 feat(components): PressableSurface with refined press feedback 2026-06-16 01:47:37 -03:00
fightrate-bot 9b02c10926 feat(components): LiveDot pulsing indicator 2026-06-16 01:47:19 -03:00
fightrate-bot e8f828d90a feat(hooks): usePulseAnimation for live indicators 2026-06-16 01:46:23 -03:00
fightrate-bot ea70ecbaa4 feat(hooks): useMotionPreference for reduce motion respect (no test - jest preset conflicts with mocking react-native) 2026-06-16 01:46:09 -03:00
fightrate-bot 48918e7156 feat(theme): numeric typography tokens + ringWarn color 2026-06-16 01:43:03 -03:00
fightrate-bot fc38498a5b feat(theme): motion presets (timing, easing, stagger) 2026-06-16 01:42:39 -03:00
fightrate-bot 423ca930d7 feat(assets): link JetBrains Mono via react-native.config.js 2026-06-16 01:41:45 -03:00
fightrate-bot 37c411cc64 plan: refinamento UI/UX Instrumento Forte - implementation plan TDD-ready 2026-06-16 01:41:45 -03:00
fightrate-bot b7a6b78ff8 spec: refinamento UI/UX Instrumento Forte + JetBrains Mono
- Spec 2026-06-15-fightrate-ui-ux-refinamento-instrumento-forte.md
- Direção B confirmada: LED pulsante, JetBrains Mono tabular, furos no gráfico, anel de aviso no Stop, dial tiles no Sensor
- 6 novos componentes, 2 hooks, motion.ts, ~9 novos testes TDD
- Fontes JetBrains Mono (Regular, Medium, Bold, ExtraBold) em assets/fonts/
2026-06-16 01:36:42 -03:00
FightRate Agent 41b49ba442 feat(chart): TrainingChart dinâmico com viewport, zoom, pan e pin sobrevivente
Substitui o gráfico estático (últimos 120 samples + selectedIndex por
posição) por um modelo de viewport temporal que resolve os problemas de
qualidade em tempo real e abre zoom/pan nos 3 call sites (Captura,
Janela salva e Faixa customizada).

Adições:
- src/training/chartViewport.ts: funções puras (granularityForSpan,
  formatTickLabel, buildChartViewport, applyZoomIn/Out, applyPan,
  isLiveTailSnap, pickSampleAtTimestamp, xFromTimestampMs,
  timestampMsFromX, tipos Viewport/ChartPin/Granularity).
- __tests__/chartViewport.test.ts: 34 testes cobrindo limites,
  ordenação defensiva, snap zone, hit-test e granularidade adaptativa.
- src/components/TrainingChart.tsx: reescrito para consumir viewport.
  - Pin por timestampMs (sobrevive a novas amostras em tempo real).
  - Pinch (Gesture.Pinch) + Pan (Gesture.Pan) + Tap (Gesture.Tap) via
    react-native-gesture-handler v3.
  - Auto-follow: endMs estende com novos samples enquanto liveTail.
  - Snap zone (5% da duração visível) reanexa o live ao final do pan.
  - Eixo X com ticks adaptativos: minute/halfMinute/quarterMinute/
    tenSeconds/second/halfSecond, conforme duração visível.
  - Botões +/- (zoom 2x) e ↺ (reset) na lateral.
  - Indicador 'dados mais novos disponíveis' quando !liveTail.
  - Estado vazio preservado (samples < 2).
- jest.setup.js + jest.config.js: mocks de gesture-handler e
  reanimated para o App.test rodar em Jest (módulos nativos não
  disponíveis no host).

Modificações de setup (dependências aprovadas):
- package.json + package-lock.json: adiciona react-native-gesture-handler
  ^3.0.1, react-native-reanimated ^4.4.1, react-native-worklets ^0.9.2.
- index.js: import 'react-native-gesture-handler' no topo.
- App.tsx: <GestureHandlerRootView> envolvendo SafeAreaProvider.
- babel.config.js: plugin react-native-worklets/plugin.

Verificações:
- npm run typecheck: 0 errors.
- npm run lint: 0 errors, 0 warnings.
- npm test -- --runInBand: 55/55 passam.
- Build Android: não verificado nesta sessão (timeout); o usuário
  valida localmente antes de distribuir.

Não comitado neste commit (mudanças pré-existentes não relacionadas):
- android/* (migração fightratern → healthtracking/fightrate, mipmaps)
- README.md
- app.json
2026-06-15 00:10:55 -03:00
Evandro 86908495d2 Initial commit
Generated by [email protected].0
2026-06-09 20:30:01 -03:00