Ballmac UI home

Back To Top

A floating button that appears after scrolling, draws a progress ring, scrolls smoothly (instantly under reduced motion) and moves focus to the content.

Release notes

Scroll down to reveal the button. The ring fills as you read.

  • Version 1.14

    Fixes, polish and small improvements across the app.

  • Version 1.13

    Fixes, polish and small improvements across the app.

  • Version 1.12

    Fixes, polish and small improvements across the app.

  • Version 1.11

    Fixes, polish and small improvements across the app.

  • Version 1.10

    Fixes, polish and small improvements across the app.

  • Version 1.9

    Fixes, polish and small improvements across the app.

  • Version 1.8

    Fixes, polish and small improvements across the app.

  • Version 1.7

    Fixes, polish and small improvements across the app.

  • Version 1.6

    Fixes, polish and small improvements across the app.

  • Version 1.5

    Fixes, polish and small improvements across the app.

  • Version 1.4

    Fixes, polish and small improvements across the app.

  • Version 1.3

    Fixes, polish and small improvements across the app.

  • Version 1.2

    Fixes, polish and small improvements across the app.

  • Version 1.1

    Fixes, polish and small improvements across the app.

Installation

$ pnpm dlx shadcn@latest add @ballmac/back-to-top

Usage

import { BackToTop } from "@/components/ballmac/back-to-top"

The full example is in the Code tab above.

Examples

Labelled

Scroll to show the labelled version, line 1.

Scroll to show the labelled version, line 2.

Scroll to show the labelled version, line 3.

Scroll to show the labelled version, line 4.

Scroll to show the labelled version, line 5.

Scroll to show the labelled version, line 6.

Scroll to show the labelled version, line 7.

Scroll to show the labelled version, line 8.

Scroll to show the labelled version, line 9.

Scroll to show the labelled version, line 10.

Scroll to show the labelled version, line 11.

Scroll to show the labelled version, line 12.

API reference

PropTypeDefault
threshold

Scroll distance in pixels after which the button appears.

number320
container

A scrollable element to watch and scroll instead of the page.

React.RefObject<HTMLElement | null>—
showProgress

Draw a ring around the button that fills with scroll progress.

booleantrue
focusTarget

CSS selector of the element that receives focus after scrolling. Defaults to `main`, then the page.

string—
label

Button text, used as the accessible name.

string—
showLabel

Show the label next to the arrow.

booleanfalse

Also accepts the standard attributes of its root element.

Accessibility

KeyAction
Enter / SpaceScrolls to the top and moves focus to the main content so focus is not lost when the button disappears
Reduced motionJumps instead of scrolling smoothly

Use with AI

Render <BackToTop /> once. threshold sets when it appears; container follows a scrollable element; focusTarget chooses where focus lands. With the shadcn MCP server set up (guide), ask your agent:

Add the Ballmac UI Back To Top (@ballmac/back-to-top) to this project with the shadcn MCP, then use it where it fits.

Use it for

  • Long pages, feeds and docs
  • Panels with a lot of scrolling

Not for

  • Short pages
  • Infinite feeds where returning to the top loses work

Registry JSON: https://ui.ballmac.com/r/back-to-top.json

Credits

Free to use in personal and commercial projects.