2 months ago
bc633f6* Keep palette lists stationary while the selection moves Arrow keys recentered every list on `scrollToken`, so the viewport jumped even when the selected row was already visible (#100). The emoji grid already solved this with a reset/follow scroll intent — generalise that one type to all four modes instead of a second parallel mechanism. - `ScrollIntent` (`Core/ScrollIntent.swift`) replaces `scrollToken` and `EmojiScrollIntent`. `.follow` is a minimal scroll-to-visible, so the list only advances a row at the viewport edges; `.top` restores the content origin. Modes never coexist, so one intent state serves all. - `scrollOriginAnchor()` marks content offset 0 with a zero-height overlay, making `.top` exact: scrolling to the first row instead left the content's top padding hidden under the header. - Landing on flat index 0 restores the origin so that row's section header comes back into view. - The clipboard follow-the-moved-row reset now follows the selection rather than recentering it. The edge dissolve is deliberately untouched. * Make the edge dissolve and thin scrollbar off-limits * Fix the origin-anchor name in the UI docs
Parent31f17e6