fix(assistant): #91 question positionnee au bord haut de la fenetre (padding dynamique, overflow-anchor, passe de correction)
This commit is contained in:
@@ -27,13 +27,25 @@
|
||||
confirmation agent : cible = dernier `.bookslm-msg.user`, `scrollIntoView`
|
||||
`block: 'start'` (instantané à l'envoi, fluide à l'ouverture d'une session),
|
||||
repli calcul `scrollTop += delta` si indisponible.
|
||||
- [x] **A2.** Re-rendus de streaming : tant que la réponse arrive (`_isLoading`) et
|
||||
que l'utilisateur n'a pas touché à la molette (flag `_pinnedTurn`, libéré sur
|
||||
`wheel`/`touchmove`), chaque frame re-ancre instantanément la question en haut —
|
||||
la réponse s'allonge sous la question sans jamais déplacer la vue. Hors
|
||||
streaming, la position de scroll est préservée (plus de `scrollTop = scrollHeight`).
|
||||
- [x] **A3.** Marge supérieure : `scroll-margin-top: 14px` sur `.bookslm-msg`
|
||||
pour que le post ne colle pas au bord.
|
||||
- [x] **A2.** Re-rendus de streaming : tant que l'ancre est active (flag
|
||||
`_pinnedTurn` posé à l'envoi, libéré sur `wheel`/`touchmove`/`mousedown`), chaque
|
||||
re-rendu — frames de streaming **et** rendu final — ré-ancre instantanément la
|
||||
question en haut ; la réponse s'allonge sous la question sans jamais déplacer la
|
||||
vue. Hors épinglage, la position de scroll est préservée (plus de
|
||||
`scrollTop = scrollHeight`).
|
||||
- [x] **A3.** Question **au bord** : plus de `scroll-margin-top` (le moindre écart
|
||||
laissait visible la fin de la réponse précédente au-dessus du post) ; le post
|
||||
s'aligne exactement sur le haut de la zone de défilement.
|
||||
- [x] **A3bis.** **Remplissage dynamique** : une réponse courte ne remplit pas la
|
||||
fenêtre — le navigateur bloquait alors le défilement et la question restait à
|
||||
mi-hauteur. Le `padding-bottom` du fil est augmenté de la place manquante
|
||||
(`target - max`) tant que l'ancre est active, puis retiré au dé-épinglage ; si
|
||||
le fil tient entièrement dans la fenêtre, aucun remplissage n'est ajouté.
|
||||
- [x] **A3ter.** **Anti-dérive** : `overflow-anchor: none` sur `.bookslm-messages`
|
||||
(Chrome ré-ancrait le défilement à chaque reconstruction du fil — un token =
|
||||
un re-rendu — laissant un décalage constant de ~33 px) et passe de correction
|
||||
après `scrollIntoView` : la géométrie mesurée (`getBoundingClientRect`) fait foi,
|
||||
pas la demande de défilement. Vérifié en live : 5 questions, 0 décalage.
|
||||
- [x] **A4.** Seule la zone du fil défile : `.bookslm-messages { flex: 1; overflow-y: auto }`
|
||||
(en-tête, toolbar, statut et barre de saisie fixes — structure déjà en place).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user