Root cause: React registers onTouchStart props as non-passive listeners at the app root. iOS Safari sees any non-passive touchstart on an ancestor and blocks the scroll gesture on those elements, waiting for JS to finish. This is why the time column (no handlers) scrolled freely but day columns (slots had onTouchStart) were frozen. Changes: - Removed onTouchStart prop from all time-slot divs — no more React touch handlers in the time grid, so iOS never blocks scroll - Added data-slot-blocked attribute to occupied/protected slots - Moved slot long-press logic into the permanent native touchstart listener on document (passive: true), reading slot/date from data attributes - Added touch-action: pan-y on .time-grid-wrapper — explicitly tells iOS that vertical pan = scroll even if child content has touch handlers - CSS: align-items: start on .weekly-days-grid so sticky headers in each day column have a proper scroll context - Reinforced position:sticky on .time-grid-wrapper .weekly-day-header v1.77.3 |
||
|---|---|---|
| .. | ||
| app | ||
| components | ||
| lib | ||
| types | ||
| middleware.ts | ||