fix(planning): popovers flottants sûrs sur mobile #95

Merged
kyuno merged 6 commits from feat/mobile-popovers-safe into main 2026-09-07 15:46:11 +02:00
Owner

Closes #87 — chantier "UI mobile & tablette".

Ce que ça change

LeftoversBasket et WeekNavigator's CalendarPopover étaient tous les
deux des popovers à largeur fixe (18-20rem), ancrés right: 0, sans
aucune gestion de bord d'écran
— sur un téléphone étroit ils pouvaient
déborder hors du viewport. Les deux sont déclenchés depuis l'en-tête du
planning, un écran central de l'usage quotidien — très probablement la
cause concrète derrière le retour terrain "je n'ai pas accès à tous les
boutons" sur mobile qui a lancé ce chantier.

Les deux basculent désormais sur BottomSheet (ticket #91) sous le
breakpoint phone via useIsMobileViewport() — même contenu, juste une
autre enveloppe (le popover flottant + son écouteur de clic extérieur
manuel restent inchangés sur desktop). Le clic-extérieur devient un no-op
propre sur mobile plutôt qu'un écouteur qui ne fait jamais rien.

Nouvelle clé i18n common.calendar.title ("Choisir une semaine") pour le
titre de la feuille — pas de raccourci en découpant une autre clé
interpolée.

Vérification

  • tsc -b --force + biome check — propres.
  • pnpm --filter web build — propre.
  • Cypress e2e : 142/142 (2 nouveaux tests phone dans
    leftovers-basket.cy.ts et planning-page.cy.ts), composants :
    63/63
    .

🤖 Generated with Claude Code

Closes #87 — chantier "UI mobile & tablette". ## Ce que ça change `LeftoversBasket` et `WeekNavigator`'s `CalendarPopover` étaient tous les deux des popovers à largeur fixe (18-20rem), ancrés `right: 0`, **sans aucune gestion de bord d'écran** — sur un téléphone étroit ils pouvaient déborder hors du viewport. Les deux sont déclenchés depuis l'en-tête du planning, un écran central de l'usage quotidien — très probablement la cause concrète derrière le retour terrain "je n'ai pas accès à tous les boutons" sur mobile qui a lancé ce chantier. Les deux basculent désormais sur `BottomSheet` (ticket #91) sous le breakpoint phone via `useIsMobileViewport()` — même contenu, juste une autre enveloppe (le popover flottant + son écouteur de clic extérieur manuel restent inchangés sur desktop). Le clic-extérieur devient un no-op propre sur mobile plutôt qu'un écouteur qui ne fait jamais rien. Nouvelle clé i18n `common.calendar.title` ("Choisir une semaine") pour le titre de la feuille — pas de raccourci en découpant une autre clé interpolée. ## Vérification - `tsc -b --force` + `biome check` — propres. - `pnpm --filter web build` — propre. - Cypress **e2e : 142/142** (2 nouveaux tests phone dans `leftovers-basket.cy.ts` et `planning-page.cy.ts`), **composants : 63/63**. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
kyuno added 1 commit 2026-09-07 12:49:01 +02:00
fix(planning): popovers flottants surs sur mobile
Some checks failed
CI / build-android (push) Blocked by required conditions
CI / lint (push) Successful in 3m18s
CI / intent-service-test (push) Successful in 4m8s
CI / build (push) Successful in 3m42s
CI / test (push) Failing after 10m11s
CI / e2e (push) Has been cancelled
a3701acae4
Ticket #87 du chantier UI mobile & tablette. LeftoversBasket et
WeekNavigator's CalendarPopover etaient tous les deux des popovers a
largeur fixe (18-20rem), ancres right: 0, sans aucune gestion de bord
d'ecran - sur un telephone etroit ils pouvaient deborder hors du
viewport. Les deux sont declenches depuis l'en-tete du planning, un
ecran central de l'usage quotidien - tres probablement la cause
concrete derriere le retour terrain "je n'ai pas acces a tous les
boutons" sur mobile qui a lance ce chantier.

Les deux basculent desormais sur BottomSheet (ticket #91) sous le
breakpoint phone via useIsMobileViewport() - meme contenu, juste une
autre enveloppe (le popover flottant + son ecouteur de clic exterieur
manuel restent inchanges sur desktop). Le clic-exterieur devient un
no-op propre sur mobile plutot qu'un ecouteur qui ne fait jamais rien
(le ref ne s'attache a rien dans la branche BottomSheet).

Nouvelle cle i18n common.calendar.title ("Choisir une semaine") pour
le titre de la feuille - pas de raccourci en decoupant une autre cle
interpolee.

Verifie en local : tsc -b --force, biome check, build de prod, suite
Cypress e2e complete (142/142, 2 nouveaux tests phone dans
leftovers-basket.cy.ts et planning-page.cy.ts) et composants (63/63).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
kyuno added 1 commit 2026-09-07 13:02:40 +02:00
chore: relance la CI (Postgres partage coupe en cours de run)
Some checks failed
CI / lint (push) Successful in 1m46s
CI / build (push) Successful in 3m46s
CI / intent-service-test (push) Successful in 4m30s
CI / e2e (push) Failing after 14m51s
CI / test (push) Failing after 16m7s
CI / build-android (push) Has been skipped
8d3af76328
Can't reach database server at postgres:5432 / Server has closed the
connection - meme signature connue de contention runner que les
relances precedentes (voir ci-forgejo-runner-constraints), pas une
regression.
kyuno added 1 commit 2026-09-07 13:23:12 +02:00
chore: relance la CI (contention runner - timeouts Cypress sous charge)
Some checks failed
CI / build (push) Successful in 3m16s
CI / lint (push) Successful in 3m57s
CI / intent-service-test (push) Successful in 6m18s
CI / test (push) Failing after 14m41s
CI / e2e (push) Successful in 14m0s
CI / build-android (push) Has been skipped
cb3dd297a1
e2e a echoue sur des timeouts de 4s (#firstName, #houseName,
.leftovers-basket__toggle introuvables) - reproduit et verifie en local
sur cette meme branche : planning-leftovers.feature passe proprement
en 4s (2/2), aucun probleme reel. Le run CI montrait des blocs
"passing" anormalement lents partout (jusqu'a 22s pour quelques
assertions simples), signe de contention severe sur le runner pendant
que plusieurs PR tournent en parallele, pas une regression de ce
ticket.
kyuno added 1 commit 2026-09-07 13:45:41 +02:00
chore: relance la CI (Postgres partage coupe en cours de run)
Some checks failed
CI / lint (push) Successful in 2m43s
CI / build (push) Successful in 3m54s
CI / intent-service-test (push) Successful in 6m10s
CI / e2e (push) Successful in 11m52s
CI / test (push) Failing after 18m30s
CI / build-android (push) Has been skipped
365e7b38b7
Can't reach database server at postgres:5432 / Server has closed the
connection - meme signature connue de contention runner que les
relances precedentes (voir ci-forgejo-runner-constraints), pas une
regression.
kyuno added 1 commit 2026-09-07 14:32:57 +02:00
merge: rapatrie le correctif de serialisation CI (#96)
Some checks failed
CI / lint (push) Successful in 1m3s
CI / build (push) Successful in 2m37s
CI / intent-service-test (push) Successful in 5m14s
CI / e2e (push) Successful in 7m25s
CI / test (push) Failing after 26m49s
CI / build-android (push) Has been skipped
c520cfca09
kyuno added 1 commit 2026-09-07 15:15:48 +02:00
chore: relance la CI (attente epuisee, pas une collision)
All checks were successful
CI / lint (push) Successful in 2m29s
CI / build (push) Successful in 2m34s
CI / intent-service-test (push) Successful in 4m42s
CI / e2e (push) Successful in 9m43s
CI / test (push) Successful in 29m56s
CI / build-android (push) Has been skipped
33ffa810e3
Le nouveau step "Wait for any earlier test job" a fonctionne comme
prevu cette fois : il a attendu ~25 min un job anterieur toujours en
cours (task 1259) puis a abandonne proprement (exit 1, "a re-run
should get through") plutot que de risquer une collision - aucun
signe de corruption/collision Postgres dans le log. Simple embouteillage
du a plusieurs PR en test simultanement ; devrait passer maintenant que
la file s'est videe (#93 mergee entre temps).
kyuno merged commit 0ff94c61ca into main 2026-09-07 15:46:11 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: kyuno/batchCooking#95
No description provided.