feat(layout-v2): sidebar iteration fixes — logo/home combo, streak states, dnd fixes - #6393
Open
tsahimatsliah wants to merge 17 commits into
Open
feat(layout-v2): sidebar iteration fixes — logo/home combo, streak states, dnd fixes#6393tsahimatsliah wants to merge 17 commits into
tsahimatsliah wants to merge 17 commits into
Conversation
…ates, dnd fixes - Combine the daily.dev logo with the Home button (logo at rest, home glyph on hover) - Move New post above Search on the rail - Streak badge: grey outline unread, pink-filled tile + flame when read today - Restore weekend auto-freeze tooltip on the 30-day streak calendar - Restyle the streak freeze row to sidebar guidelines (neutral Subtle button) - Remove duplicate "Get API Access" CTA in the You panel - Concentric corner radius on the profile header hover pill - Stop "Hot Takes" false-highlighting on the home feed - Keep the same sidebar on /daily as on the feed - Route compact quest rows to their completion surfaces - Suppress post-drag click navigation when reordering rail tabs - Fix end-of-list drop zone + indicator in the shortcuts dock - Restore the square design-system Bubble on the rail notifications bell Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
The guard flag was armed on drag end but never read, so the stray post-drop click still navigated. Swallow it in the capture phase on the sortable wrapper, which also covers the notifications bell's anchor. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New post now sits directly under the last tab instead of at the top of the rail. It renders outside the tablist and the More menu, so on short viewports the tabs and shortcuts fold into "More" while New post stays visible; its row is reserved in the overflow budget so tabs still peel off one at a time. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Matches how feed settings is iconified elsewhere (MyFeedHeading). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New post now joins the tabs in the drag-and-drop order (persisted in sidebar_rail_order) instead of being fixed below them. Only the tabs fold into "More" — New post is filtered out of the foldable set, so it stays on the rail at every viewport height. It renders as an action button, not a tab: it carries no aria-selected, so the sliding selected pill keeps tracking the committed category. Also stop the notifications tab from reloading the page on drag: it is the only rail item rendered as an anchor, and browsers drag links natively, so a native link-drag ran alongside the dnd-kit reorder and navigated on drop. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Both are reachable from settings, so the panel stays profile-focused. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Moving the button into the sortable list left it aligned to the sortable wrapper's left edge — the tabs centre their own content, but a fixed 36px button does not. Centre it explicitly. Give the dock's framing separator symmetric my-3 margins so it sits midway between New post and the shortcuts "•••", and update the reserved-height constants to match. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Arming it in onDragEnd was too late: dnd-kit delivers onDragEnd through a React state update, which can land after the browser has already dispatched the click that follows pointerup. Arm on drag start instead and release one macrotask after the drag settles. This only ever showed on Notifications because it is the single rail item rendered as a plain link — every other tab routes its click through onSelectCategory, which skips router.push for the page you are already on. Also grey out the home glyph unless the feed is the current page. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-like margins CSS.Transform.toString also emits the sortable scale, which dnd-kit sets to the size ratio between the dragged item and the one it displaces. The rail now mixes ~56px tabs with the 36px New post button, so both visibly squashed/stretched while dragging past each other. Translate only. New post gets my-2 — the same vertical rhythm as the tabs' py-2 — so it breathes when dropped between them; reserved height updated to match. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The persisted order round-trips through a react-query mutation, so its re-render landed a beat after dnd-kit cleared the sortable transforms — one visible frame of the old order at the drop, read as a flicker/jump on every tab. Mirror the shortcuts dock: apply the new order via local state in onDragEnd (commits in the same React update as dnd-kit's drag-end state) and let persistence follow; the override drops once the stored value catches up. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The 0ms release timer reliably lost to the browser's click: dnd-kit runs onDragEnd synchronously inside the pointerup listener, and the click is dispatched tasks later (pointerup → mouseup → click), so the timer disarmed the guard before the click arrived and dragging the notifications tab still navigated. The stray click now consumes the guard itself in the capture handler; a 500ms timer remains only as a fallback for drags that end with no click at all (Escape, pointer released off-window). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ever navigates Port the shortcuts dock's architecture: while dragging, the real element stays parked in the list as a slot skeleton and a pointer-events-none DragOverlay ghost follows the cursor. The notifications tab reloaded the page on some drops (notably upward drags — even back to the same slot, even while already on /notifications, i.e. a NATIVE href navigation) because the rail dragged the real element, live anchor included, under the pointer — so releasing could always produce a click on the link in geometries the wrapper guard can't cover. With the overlay, the anchor is never under the pointer at release, making native navigation structurally impossible rather than guard-timing dependent. The click guard stays as defence in depth. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Mirror the shortcuts dock's onDragOver live reorder: as the dragged tab passes over a slot, the rendered list reorders so the parked skeleton moves into that slot — a live landing indicator instead of a gap at the original position. The order is committed on drop from the live snapshot (at drop the item is over its own slot, so the old active/over move would be a no-op) and discarded on cancel. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…eton Ghost now uses the dock's ghostStateClass recipe verbatim — solid surface, subtle border, shadow-3, 110% lift — and the landing skeleton uses the dock's bg-background-subtle with the item's content faded out rather than hidden, so both surfaces read identically across the two drag systems. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
Changes
Iteration pass on the production layout v2 sidebar (on top of #6240):
Rail
Bubble(rounded-8, cabbage) on the rail notifications bell — it had regressed to a hand-rolled oval pillStreak
Panels
/dailyresolves to the same Profile panel as the feed, so switching feed ⇄ daily keeps an identical sidebarquestDestinations.ts); claimable/claimed rows still go to Game CenterVerification
node ./scripts/typecheck-strict-changed.js✅🤖 Generated with Claude Code
Preview domain
https://feat-layout-v2-iterations.preview.app.daily.dev