WingoUI
Buttons & Actions
ButtonButton GroupCopy ButtonDelete ButtonTheme ToggleToggleToggle Group
Inputs
Avatar UploadCalendarCheckboxColor PickerComboboxCron PickerCurrency InputDate PickerDate Range PickerDate Time PickerDuration PickerFile UploadFilter BuilderInputInput GroupListboxMasked InputMention InputMonth PickerMulti SelectNumber InputOTP InputPassword InputPhone InputRadio GroupRatingSearch InputSegmented ControlSelectSignature PadSliderSwitchTag InputTextareaTime Picker
Forms
Address InputCSV ImportFieldForm WizardInline EditInvoice line itemsRich Text Editor
Navigation
Back To TopBounce SidebarBreadcrumbCommand MenuGlobal SearchGooey NavHook SidebarNav MenuNav TabsPaginationProximity SidebarScroll ProgressSidebarStepsTable Of ContentsTabsTopbarUser MenuWorkspace Switcher
Overlays
Alert DialogContext MenuDialogDrawerDropdown MenuFamily DrawerHover CardPopoverSheetShortcuts DialogTooltipTour
Feedback
AlertBannerCookie ConsentEmoji ReactionEmpty StateNotification BellNotification CenterProgressRoute ProgressSkeletonSpinnerToast
Data Display
Approval FlowAvatarBadgeCalendar ViewCode BlockComment ThreadContact cardCountdownDescription ListDiff ViewerFile ListFile managerFolderGanttJSON ViewerKbdLog ViewerMarkdownPresenceSchedulerTagTimelineTree View
Tables & Lists
Audit LogData TableDeal PipelineEditable GridKanbanListMembers tablePermissions MatrixTableTask ListVirtual List
Charts & Stats
Animated CounterArea chartBar chartDonut chartFunnel chartGaugeGitHub ActivityHeatmap calendarLeaderboardLine chartRadial barSparklineStat CardTrackerTrend badge
Layout
AccordionApp ShellCardCollapsibleDetail LayoutEntity HeaderPage HeaderScroll AreaSeparatorSettings LayoutSplit ViewToolbar
Media
Audio PlayerCarouselImage CropperImage LightboxLocation MapQR CodeStep PlayerVideo Player
AI Kit
Agent Status CardChat MessageChat ThreadConversation ListFluid OrbGrid RevealMatrix OrbModel PickerPrompt InputReasoning IndicatorRule BuilderSuggestion ChipsTool Call TimelineUsage MeterVoice InputWorkflow Canvas
Text & Effects
Gravity Letters
Mobile
Action SheetBottom Tab BarFABHaptic ButtonHero HeaderInstall PromptLarge Title HeaderNotification BannerOnboarding CarouselPicker WheelPull To RefreshSlide To ConfirmSticky CTA BarSwipe DeckSwipeable Tabs
Commerce
Cart drawerCategory pickerCheckout stepsCoupon inputFavorite buttonFilter panelListing cardListing gridOrder trackerPricePrice rangePricing tableProduct galleryQuantity stepperReviewsSeller card
Blocks
Admin Dashboard PageAdmin ShellAI Chat PageAutomation Builder PageCheckout PageCRM Contact PageCRM Pipeline PageError PagesInbox PageInvoice PageKPI DashboardListing Detail PageLogin PageMarketplace Home PageMarketplace Search PageMarketplace ShellMobile App HomeOnboarding FlowPost Listing WizardPricing PageRegister PageSettings PageUsers Admin Page
Hooks & Utilities
AI ChatChart kitCommerceDate utilsFile exportFile typesFiltersForm validationHapticsInvoicingMotion presetsNavigationNumber formatRelative timeRomanian locationsSpreadsheetText matchTonesUIProvideruseClipboarduseConsentuseControllableStateuseCooldownuseDebounceuseKeyboardInsetuseLocaleuseLongPressuseMediaControlsuseMediaQueryuseOverflowItemsusePersistedStateuseScrollEdgesuseScrollStateuseSelectionuseShortcutuseStickToBottom
GalleryThemeCredits

Navigation

Bounce Sidebar

NavigationBounce Sidebar
Back To TopBreadcrumb
Live props
Appearance
dotColor
headingColor
dotSize6px
size
activeColor
textColor
Behavior
duration0.25s
arc14px
Code
import { BounceSidebar } from "@/components/ui/bounce-sidebar"

<BounceSidebar />
FreeRare UI

v1.0.0·Added in 1.0.0

A vertical navigation list with a small dot that hops along an arc to the active item.

Click any item to bounce the marker over to it along a short arc. Tab moves between items and Enter or Space selects one. Heading rows are plain labels, so the dot skips past them. Drive the value from the scroll position and the marker follows the section you are reading.

Add to a project

npx wingo-ui@latest add bounce-sidebar

Dependencies

motionmotionui-config

Files

  • components/ui/bounce-sidebar.tsx
PreviousBack To TopNext Breadcrumb
  • Contents

Bounce Sidebar

A table of contents whose marker hops from entry to entry.

Overview

Long documents need a map. The bounce sidebar is a plain list of links with one small dot beside the entry you are on, so the reader always knows where they are without a heavy highlight fighting the content.

When to use it

Reach for it on docs pages, changelogs and settings screens where the list is short enough to scan at a glance. For a dozen entries or more, group them under heading rows so the eye can jump between groups.

Why it exists

A selection that simply swaps colors is easy to miss. Movement draws the eye, and a marker that travels makes the change of section feel like a place you moved to rather than a state that flipped.

Motion

When the selection changes, the dot does not slide in a straight line. It bounces along a short arc, bowing out to the side and landing on the new entry, so every jump reads as a small, physical hop.

Arc strength

Short hops arc more and long hops arc less. The curve is scaled by the distance travelled, which keeps a jump across the whole list from swinging wide of the column.

Timing

Each hop takes a quarter of a second with an ease out, quick enough to keep up with a scrollspy while you scroll, and the first placement snaps into position without animating.

Anatomy

The component is an unordered list. Each entry is a button, or a link when you give it an href, and one absolutely positioned dot rides along the left edge of the list.

Heading rows

Pass an object with heading set to add a small uppercase label between groups. Headings take the dot color, are not selectable, and the marker hops straight over them.

Pixel snapping

The dot size and position are rounded to the device pixel grid, so it stays crisp on every screen instead of blurring between two rows of pixels.

Accessibility

Every entry is a real button or link, so Tab reaches each one and Enter or Space selects it. The active entry is marked with data-active for styling, and the dot itself is hidden from assistive technology.

Color

The dot is the only accent, so the entries keep the page text color and stay readable in both themes. Pass dotColor to match your brand; the heading rows pick it up too.

Credits

The bounce sidebar comes from Rare UI by Swami Malode and is part of UI Lab. The curved path comes from the arc helper in the motion library.

Further reading

See the hook sidebar and the proximity sidebar for two other takes on the same problem: showing where you are in a long page without taking over the layout.