Commit graph

1436 commits

Author SHA1 Message Date
Francisco Solla
4fd39cc21c
Merge pull request #544 from fsolla/plans/plan-issue-19
docs(B193): plano de intenção — card de município mobile denso
2026-08-10 01:50:34 -03:00
Francisco Solla
01621e28ab docs(B193): plano de intenção — card de município mobile denso (edit-where-you-see + última atualização expandível) 2026-08-10 01:42:48 -03:00
Francisco Solla
c8e009b47a
Merge pull request #537 from fsolla/C104-agenda-compromisso-todo-o-dia-na-criacao-rapida-so-data
C104 — Compromisso 'Todo o dia' na criação rápida da agenda (só datas, multi-dia)
2026-08-10 01:37:56 -03:00
Francisco Solla
9c1d4839b2
Merge pull request #539 from fsolla/agent/C101-ux-agenda-mobile-affordance-do-hoje-no-titulo-navegacao
C101-ux — Agenda mobile: navegação por teclado + affordance do tap no título
2026-08-10 01:17:05 -03:00
Francisco Solla
d52d001613 style(C104): format (prettier) 2026-08-10 01:13:12 -03:00
Francisco Solla
8b5beb511c fix(C104): rótulo do cabeçalho de detalhe all-day + e2e do slot com allDaySlot ativo 2026-08-10 01:13:12 -03:00
Francisco Solla
ea700e3113 feat(C104): compromisso 'Todo o dia' na criação rápida da agenda (só datas, multi-dia) 2026-08-10 01:13:12 -03:00
Francisco Solla
8c79eddf96
Merge pull request #536 from fsolla/C105-agenda-tags-para-agrupar-compromissos-filtro-por-tag-na
feat(C105): tags na agenda — sheet, rótulo no evento e prefill do Mais detalhes
2026-08-10 00:58:56 -03:00
Francisco Solla
f3c41d3382 feat(C101-ux): agenda mobile — navegação por teclado (região focável) + affordance do tap no título
- useAgendaKeyboardNavigation: ArrowLeft/Right → prev/next no mobile
  (FullCalendar v7 não tem setas no grid — verificado no bundle); skips
  para modificadores/dialog/menu/inputs; restore de foco na região
- Região de teclado mobile-only: tabIndex/role/aria-label gateados por
  isMobile (desktop mantém a toolbar e sua árvore a11y intacta)
- onTitleClick ganha icon?: LucideIcon (glyph da página, aria-hidden);
  agenda passa RotateCcw como affordance do 'voltar para hoje'
- E2E: teste de teclado (dia e mês), glyph no título, hardening do swipe
  CDP (pacing 25ms — burst era classificado como flick pelo Chromium e
  disparava back-nav ~35% das runs)
- Unit: 14 testes do hook/pura + 4 do renderer do glyph; impl plan
  docs/plans/c101-ux-pos-critique-impl.md (aprovado pelo humano)

Closes #512
2026-08-10 00:53:19 -03:00
Francisco Solla
a4d7b88375
Merge pull request #535 from fsolla/D6-push-no-dispositivo-funcionando-de-ponta-a-ponta-notifica
fix(D6): push no device ponta a ponta — SW dinâmico, subscribe idempotente, check-push-chain
2026-08-10 00:27:47 -03:00
Francisco Solla
cd41b44de4 feat(C105): tags no sheet da agenda + rótulo no evento + prefill no "Mais detalhes"
O filtro por tag na omnibox já existia (C94); o C105 completa a superfície da
agenda: campo de tags no overlay de criação inline (chips, sugestões das tags
já usadas), rótulo leve #tag no evento do calendário (oculto no mês/mobile) e
tags via prefill do "Mais detalhes" (params repetidos, parse fail-closed).

- ActivityTagInput extraído do ActivityForm (compartilhado, aria-label novo)
- "Mais detalhes" espelha estado vivo (horários editados + tags)
- popover do sheet com max-h --radix-popper-available-height (shift-before-flip
  do Radix clipava os campos do topo em viewports baixos)
- submit lê tags do estado espelho (fonte única), 4 KB cap p/ responsáveisJson
- limites mantidos 20/80 (C14), sem migration/access/Consent

Impl: docs/plans/agenda-tags-eventos-impl.md (aprovado no gate humano)
2026-08-10 00:21:20 -03:00
Francisco Solla
2c4d2cfde9
Merge pull request #534 from fsolla/plans/plan-issue-18
docs(B191,B192): planos de intenção — ações rápidas e follow-ups no chat Sollinha
2026-08-10 00:12:05 -03:00
Francisco Solla
944cb6bac1 docs(B191,B192): planos de intenção — ações rápidas de abertura no chat Sollinha (chips no estado vazio) e follow-ups na própria resposta (bloco no prompt, extraído pela UI, slot acima do input) 2026-08-10 00:08:45 -03:00
Francisco Solla
c2ddbf6006 refactor(D6): simplify — find endpoint-only no subscribe, sslmode verify-full, guards no check-push-chain 2026-08-10 00:01:46 -03:00
Francisco Solla
f1c61b6fbd
Merge pull request #530 from fsolla/plans/plan-issue-18
docs: planos de intenção — Sollinha gestão (B185,B186,B189,B190) + links visíveis (B187) + contexto por sessão (B188)
2026-08-09 23:41:02 -03:00
Francisco Solla
f4873b8b3f fix(D6): push no device ponta a ponta — SW dinâmico, subscribe idempotente, check-push-chain
- /campanha/sw.js force-dynamic: buildId VERCEL_DEPLOYMENT_ID em runtime
  (deploys CLI --prebuilt não têm envs de build; prod servia campanha-dev)
- subscribeCampaignPush find-before-create (endpoint UNIQUE — 2º toque
  estourava com erro falso)
- scripts/check-push-chain.mjs + pnpm db:check:push-chain (read-only,
  veredito por elo: SW/envs/consent/inscrições/eventos)
- VAPID envs adicionadas no Vercel production (ops)
- impl plan + CHANGELOG-AGENTS
2026-08-09 23:41:00 -03:00
Francisco Solla
7576a3489e docs(B185,B186,B189,B190): formatação prettier dos planos 2026-08-09 23:37:04 -03:00
Francisco Solla
1e9693410b docs(B185,B186,B187,B188,B189,B190): planos de intenção — Sollinha gestão (lideranças pendentes, prioridades do momento, cobertura de atualização e de dobradinhas) + links com aparência de link + contexto por sessão da janela 2026-08-09 23:34:57 -03:00
Francisco Solla
8ab4c5a326
Merge pull request #523 from fsolla/plans/plan-issue-17
docs(C108,D6): planos de intenção — sino de notificações (ler ao abrir + modal desktop) e push no device em produção
2026-08-09 23:13:16 -03:00
Francisco Solla
7fedf45cd7 docs(C108,D6): planos de intenção — sino de notificações (ler ao abrir + modal desktop) e push no device em produção 2026-08-09 23:10:52 -03:00
Francisco Solla
8896dcb952
Merge pull request #520 from fsolla/plans/plan-issue-16
docs: plano C107 — atualizações mobile sheet de criação usável
2026-08-09 22:56:03 -03:00
Francisco Solla
28c7ef8b2b docs(C107): plano de intenção — atualizações mobile sheet de criação usável (altura auto até o topo, form sem labels com divisórias, placeholders, polaridade em toggle, checks à direita) 2026-08-09 22:52:31 -03:00
Francisco Solla
a7dce2c716
Merge pull request #516 from fsolla/C101-agenda-mobile-calendario-com-cara-de-app-nativo-context
C101 — Agenda mobile: calendário com cara de app nativo (contexto no header, navegação por arrasto, filtro sticky, dia na hora atual)
2026-08-09 22:43:12 -03:00
Francisco Solla
8ee500c3d7
Merge pull request #518 from fsolla/plans/plan-issue-15
docs(plans): C106 — atualizações mobile sem moldura (feed, omnibox sticky, criar no header)
2026-08-09 22:39:00 -03:00
Francisco Solla
505b2f8c85 docs(C106): plano de intenção — atualizações mobile sem moldura (omnibox sticky sem label, criar no header, cards edge-to-edge) 2026-08-09 22:35:30 -03:00
Francisco Solla
32851d90d6
Merge pull request #515 from fsolla/plans/plan-issue-14
docs(B184): plano de intenção — municípios mobile sem moldura
2026-08-09 22:30:22 -03:00
Francisco Solla
c6f13fc6a7 docs(B184): plano de intenção — municípios mobile sem moldura (omnibox sticky, X no input, salvar no header) 2026-08-09 22:28:04 -03:00
Francisco Solla
de205c61e4 style(C101): format 2026-08-09 22:23:18 -03:00
Francisco Solla
1d326a72ab fix(C101): e2e mobile mira o primeiro .activity-agenda (FC mantém grids stale em transições) 2026-08-09 22:22:12 -03:00
Francisco Solla
51fb715ec7 feat(C101): agenda mobile com cara de app nativo — contexto no header, swipe, filtro sticky, dia na hora atual
- toolbar do FullCalendar some no mobile; título do header mostra o período
  ("9 Agosto", "3–9 Agosto", "Agosto", "Agenda") e tap volta ao hoje
- navegação por arrasto horizontal (useAgendaSwipeNavigation): limiar 48px,
  claim 12px com preventDefault, touchcancel sintético contra o long-press
  do FC, dateClick do dia suprimido (C91/C15 intactos)
- filtro vira strip edge-to-edge sem rótulo, sticky sob a barra do app
  (containing block via :has no padding do scroll container)
- visão de dia com scroll interno (height fixa), 08:00 na abertura,
  cabeçalho do dia fixo, scroll preservado ao trocar de dia
- desktop inalterado; impl plan + plano pós-critique (C101-ux)
2026-08-09 22:09:47 -03:00
Francisco Solla
a598319acc
Merge pull request #513 from fsolla/C99-identidade-toda-pessoa-da-campanha-tem-uma-ficha-contact
docs(C99): triage pós-merge — defers com gatilho no impl plan
2026-08-09 22:08:19 -03:00
Francisco Solla
cde4d4107b docs(C99): registra defers com gatilho e explicitamente fora do impl plan (triage pós-merge) 2026-08-09 22:06:38 -03:00
Francisco Solla
457aad5a21
Merge pull request #510 from fsolla/C102-mobile-sem-botao-sheet-de-sidebar-navegacao-pela-barra-
C102 — Mobile: sem botão/sheet de sidebar — navegação pela barra inferior + Mais
2026-08-09 19:56:07 -03:00
Francisco Solla
aa7da74c22
Merge pull request #511 from fsolla/C99-identidade-toda-pessoa-da-campanha-tem-uma-ficha-contact
C99 — Identidade: toda pessoa da campanha tem uma ficha Contact
2026-08-09 19:28:45 -03:00
Francisco Solla
f0dff330bd feat(C102): sem hamburger/sheet de sidebar no mobile staff — navegação pela barra + Mais
No mobile (<768px) staff perde o botão de abrir sidebar na top bar
(CampaignMobileTopBar role-gated via useCampaignPageChromeRole +
isStaffCampaignRole; leader mantém) e o sheet de navegação deixa de
montar (CampaignSidebar early-return quando isMobile && staff).
Filtros salvos de Municípios (B18) migram para o drawer Mais
(MunicipalityNavSavedFilters variant 'overflow', mesma store,
apagar/desfazer/sucessão de foco; drawer ganha overflow-y-auto).

Correção de bug pré-existente (D4): o Toaster vivia dentro do wrapper
[contain:layout_paint] do painel da AI, que vira containing block para
position:fixed e stacking context próprio — toasts com ação (ex.
Desfazer) ficavam inalcançáveis sob os portais z-50 de drawer/sheet.
Movido para o root layout (campaign).

Testes: unit top bar (staff sem trigger / leader com trigger) + e2e
(staff sem trigger/dialog, leader com sheet, B18 no drawer completo).
2026-08-09 19:13:43 -03:00
Francisco Solla
27daa1339e feat(C99): toda conta campaignUser aponta para uma ficha Contact; lideranças ganham assessores responsáveis 2026-08-09 19:12:35 -03:00
Francisco Solla
7af76b9f68
Merge pull request #509 from fsolla/B183-pwa-ios-foco-em-inputs-aplica-auto-zoom-que-nao-volta-f
fix(campanha): impede auto-zoom do iOS em inputs do PWA (B183)
2026-08-09 19:10:58 -03:00
Francisco Solla
12d339cf7f
Merge pull request #508 from fsolla/B182-pwa-ios-tela-ampliada-e-com-as-bordas-cortadas-desde-o-
fix(B182): PWA iOS — heal do zoom preso do visual viewport no standalone
2026-08-09 19:04:49 -03:00
Francisco Solla
e835108324 fix(campanha): impede auto-zoom do iOS em inputs do PWA (B183)
Regra CSS única em styles.css — @media (pointer: coarse) and (hover: none)
+ [data-theme='campaign'] :is(input, select, textarea, [contenteditable]) a
16px (limiar do Safari iOS). Cobre omnibox B127, Command search, native-select
e textareas em qualquer orientação do iPhone; desktop intocado.

E2E campaignIosInputZoom: emulação iPhone 13 pina 16px na omnibox de
/campanha/municipios; control desktop pina 14px.

Closes #501
2026-08-09 18:54:33 -03:00
Francisco Solla
dff940681d fix(B182): PWA iOS — heal do zoom preso do visual viewport no standalone
Motor client-side (standalone-iOS only, no-op em aba/desktop):
heal imediato no install + launch/bfcache/resume/pós-teclado/resize,
scrollTo(0,0) + re-measure nudge, retry ≤3×250ms por episódio,
pinça preservada (janela renovada por gesture*/touch ≥2), debug
global para verificação em aparelho, fallback maximum-scale off.

40 testes unit (jsdom) pinam detecção, guards, retry e teardown.
2026-08-09 18:50:00 -03:00
Francisco Solla
df842ae246
Merge pull request #507 from fsolla/plans/plan-issue-13
plan(C103/C104/C105): agenda mobile — form de criação usável, todo o dia, tags
2026-08-09 18:37:21 -03:00
Francisco Solla
fc8cecb427 plan(C103/C104/C105): agenda mobile — form de criação usável, todo o dia, tags (planos de intenção) 2026-08-09 18:35:33 -03:00
Francisco Solla
44f4f3b96a
Merge pull request #503 from fsolla/plans/plan-issue-12
plan(B182/B183): status dos planos → ready
2026-08-09 18:10:48 -03:00
Francisco Solla
1f0bcdb2df plan(B182/B183): promote status → ready (planos em main) 2026-08-09 18:09:10 -03:00
Francisco Solla
e938a0e0d2
Merge pull request #502 from fsolla/plans/plan-issue-12
plan(B182/B183): PWA iOS — zoom preso no viewport + auto-zoom de inputs (planos de intenção)
2026-08-09 18:08:38 -03:00
Francisco Solla
a6f15bc81d plan(B182/B183): PWA iOS — zoom preso no viewport + auto-zoom de inputs (planos de intenção) 2026-08-09 18:06:22 -03:00
Francisco Solla
c3e447f135
Merge pull request #499 from fsolla/plans/plan-issue-11
plan(C101/C102): agenda mobile nativa + sem sidebar mobile (planos de intenção)
2026-08-09 17:52:48 -03:00
Francisco Solla
3b652dd7d9 plan(C101/C102): agenda mobile nativa + sem sidebar mobile (planos de intenção) 2026-08-09 17:49:44 -03:00
Francisco Solla
3f7f0cc552
Merge pull request #496 from fsolla/plans/plan-issue-10
plan(C99/C100): identidade de pessoas via Contact + lista unificada
2026-08-09 17:21:13 -03:00
Francisco Solla
79885a715d plan(C99/C100): identidade de pessoas via Contact + lista unificada de pessoas (planos de intenção) 2026-08-09 17:19:32 -03:00