Ver código fonte

HANDOFF.md: note stepper close-fix (pointer-drift + capture-click)

Annotates Phase 17 in §9 Shipped with close-fix `8d79f96`. Describes
the two root causes (enter-once latch and single-phase outside-click),
the replacement pointer-position tracker on document with a 250 ms
initial grace and 150 ms close delay, and the dual bubble+capture
outside-close path. SHA appended to §13 git history.

No code changes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
achiappa 2 semanas atrás
pai
commit
729617d992
1 arquivos alterados com 20 adições e 1 exclusões
  1. 20 1
      HANDOFF.md

+ 20 - 1
HANDOFF.md

@@ -422,7 +422,7 @@ with a `BOOTSTRAP_ADMIN` audit row.
       localStorage denial fallback).
 
 - [x] **Phase 17 — Hide native number spinners + custom slider popover
-      for number inputs** (`b457896`, UX tweak `c07af1c`, hotfix `832b256`, rewrite `15b2d24`, blur-fix `f189ef7`). Three classes of number input —
+      for number inputs** (`b457896`, UX tweak `c07af1c`, hotfix `832b256`, rewrite `15b2d24`, blur-fix `f189ef7`, close-fix `8d79f96`). Three classes of number input —
       day cells, RTB cells, task assignment cells — deal in half-day
       increments (or 0.05 for RTB). Browsers rendered each as
       `<input type="number">` with tiny native up/down spinner
@@ -525,6 +525,23 @@ with a `BOOTSTRAP_ADMIN` audit row.
       the input but never landed on a registered "outside" target.
       Replaces the Tab-specific keydown handler, which is now a
       subset of the generic focusout behaviour.
+      **Close-fix `8d79f96`**: the "mouse leaves" and outside-click
+      paths were unreliable in real use — the dismissal required the
+      cursor to physically enter the popover rectangle at least once
+      (`popoverEntered` latch), so a user who clicked a cell and
+      moved the cursor anywhere the popover wasn't would see the
+      popup linger indefinitely. Replaced the latch with a
+      document-level `pointermove` tracker: while the popover is
+      open, if the cursor is over neither the bound input nor the
+      popover for more than 150 ms, close. A 250 ms initial grace
+      after `open()` covers the first few frames where the cursor
+      may briefly be in the gap. Outside-click close is now
+      registered in **both** bubble (`pointerdown`) and capture
+      (`click`, `{capture:true}`) phases via a shared handler so a
+      downstream stopPropagation can't strand the popup. The
+      viewport-exit `pointerleave` on `document` is also a close
+      trigger — the pointer heading for the browser chrome
+      shouldn't leave the popup behind.
 
 ### Upcoming
 
@@ -608,6 +625,8 @@ before acting — nothing here is load-bearing once it grows stale.
 ## 13. Git history (as of this handoff)
 
 ```
+8d79f96 Fix: stepper popover closes on mouse-drift + outside-click (belt-and-braces)
+9de4bf2 HANDOFF.md: note stepper blur-close fix on Phase 17
 f189ef7 Fix: stepper popover now closes when the bound input loses focus
 27eea76 HANDOFF.md: note slider-only stepper rewrite on Phase 17
 15b2d24 Stepper popover: slider-only, click-to-open, close on leave-popup