KQ-640 · WATCH/DRAG

Watch Drag

A watchlist you rank by hand. Pressing a row's grip lifts it on flick and then tracks the pointer 1:1 with no easing, while the rows it passes make room with FLIP on glide, a dashed slot marks the place it will take, and the drop settles it there on glide before a cobalt wash leaves on the exit ease. Space lifts, Up and Down move, Home and End reach the ends, Space drops and Escape restores — every step announced by name and position.

KQ-640 · WATCH/DRAG
Coldbrook Bank · watchlistDrag to rank

Press Space to lift the row, Up and Down to move it, Space to drop it, Escape to put it back.

  1. BSNBasin$43.60up 2.4 percent
  2. FRNFernwork$18.05down 1.2 percent
  3. CBKColdbrook$126.40up 0.8 percent
  4. GGEGauge$9.72down 4.6 percent
  5. WAYWaylight$61.15up 1.1 percent
  6. FLDFieldline$27.30unchanged, 0.0 percent

Order BSN · FRN · CBK · GGE · WAY · FLD — moves 0

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/watch-drag

Props

holdings
WatchHolding[]
default
The watchlist: id, symbol, name, price and the day's move in percent.
order / defaultOrder
string[]
default the holdings order
Controlled or initial order as ids; unknown ids are ignored and missing ones appended.
onOrderChange
(order: string[]) => void
default
Fires from the drop, or from each key that committed a move, never from inside a state updater.
format
(value: number) => string
default USD, 2dp
Formats every price.
label
React.ReactNode
default
Visible heading; omit it and pass aria-label.