Repository navigation
Animate Hide Later Items with a paced staggered reveal - #225
Merged
MaplumeX merged 2 commits intoOct 13, 2026
Merged
Conversation
MaplumeX
deleted the
feat/redesign-snoozed-items-transition-animations
branch
October 13, 2026 09:02
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Gives the Hide Later Items toggle a deliberate reveal rhythm instead of an instant layout swap: hidden rows collapse (fading out before the height closes, so text never looks squashed), revealed rows first open their space and then fade in, and newly revealed rows flash a brief tint so it's clear which items just came back.
Changes
lib/laterReveal.ts(new) — single source of truth for the reveal pacing:revealExitOpacity()(opacity reaches 0 at 60% of the progress),revealEnterOpacity()(opacity starts rising at 30%), andflashRevealedRows(), which plays a short--primary-tinted background flash on the affected[data-selection-row]elements and fades back to each row's current background.lib/dnd.ts—useFlipListexposes a newcaptureReveal()that snapshots the DOM before the toggle re-renders and marks the snapshot asreveal. Exit/enter animations then use the slightly different opacity keyframes and, critically, bypass theMAX_ENTER_EXITcap — a single toggle can legitimately move many rows at once.components/ui/collapse.tsx— newrevealprop applies the paced opacity keyframes to the height animation; newonOpen(element)callback fires when the expand animation starts (content already mounted), which lets callers kick off the row flash at the right moment.components/project/ProjectTaskLayout.tsx— callscaptureReveal()on the render where the Later-items state flips, keyed off ahidingLaterref.taskMapnow also includes the hidden source tasks so rows still exist in the DOM and can play their FLIP exit rather than disappearing a frame early.hasContentis recomputed from the visible tasks plus draft/headings, so a project whose Later items are all hidden renders the empty state correctly.pages/AreaDetail.tsx— wrapsLaterItemSectionsin<Collapse reveal onOpen={flashRevealedRows}>, keyed by area id so switching areas doesn't animate. Spacing moves intopt/-mtso the gap collapses with the height instead of jumping on unmount.components/common/LaterItemsToggle.tsx— the label fades in on toggle via a keyed span.Tests
dnd.test.tsx: reveal-mode ghost fade-out keyframes, delayed enter fade-in with row highlight, no highlight on untouched rows, and noMAX_ENTER_EXITcap when revealing.collapse.test.tsx:revealkeyframes for both directions and theonOpencallback contract.ProjectTaskLayout.test.tsx: end-to-end hide/show of a Later task, asserting the ghost exit and the paced re-entry of the revealed row.