KQ-2081 · WIPE/PREVIEW

Wipe Preview

An approval surface for an agent action that edits many records: every affected record is drawn twice in one grid, the result in flow and today's values laid over it, and a wipe decides which shows, with every changed field ringed solid on the result side and dashed on today's. The handle follows the pointer 1:1, rubber-bands past the ends and settles on springs.snap with the throw's velocity; approving runs the wipe to the result on springs.glide and an Applied stamp lands on springs.recoil once the host answers, while a refusal glides it back. The handle is a slider (arrows, Shift, Page keys, Home, End), the records are a multi-select listbox where X or Space skips the focused one, and below 28rem the wipe becomes a Before / After toggle.

KQ-2081 · WIPE/PREVIEW
Coldbrook pricing agent · Coldbrook · Catalog · 4 min agoWaiting for you

Raise list prices on cold brew

Lift list prices about 7% to cover the new bean contract, round to .49 or .99, and retire sale prices the new price has caught up with.

38 of 40 items92 changesavg +7.2%

9 items change by more than 10%.

Cold Brew Concentrate 12 ozCB-1040+6.7%
$7.99
Compare at$9.49
Margin46.7%
Cold Brew Concentrate 32 ozCB-1041+12.9%
$17.49
Compare at—
Margin44.1%
Badge—
Cold Brew Concentrate 64 ozCB-1042+3.8%
$26.99
Margin49.4%
Cold Brew Concentrate 4-packCB-1043+3.8%
$13.49
Margin39.6%
Cold Brew Concentrate case of 12CB-1044Skipped
$57.49
Nitro Cold Brew 12 ozCB-1045+7.7%
$6.99
Margin41.6%
Nitro Cold Brew 32 ozCB-1046+5.4%
$19.49
Compare at$22.99
Margin40.0%
Nitro Cold Brew 64 ozCB-1047+13.8%
$32.99
Margin48.0%
Nitro Cold Brew 4-packCB-1048+4.0%
$12.99
Compare at$15.49
Margin48.7%
Nitro Cold Brew case of 12CB-1049+4.6%
$67.99
Compare at$80.49
Margin49.4%
Vanilla Sweet Cream 12 ozCB-1050+8.3%
$6.49
Margin48.4%
Vanilla Sweet Cream 32 ozCB-1051+7.9%
$20.49
Margin49.4%
Vanilla Sweet Cream 64 ozCB-1052+12.5%
$31.49
Compare at—
Margin45.7%
Badge—
Vanilla Sweet Cream 4-packCB-1053+7.4%
$14.49
Margin42.5%
Vanilla Sweet Cream case of 12CB-1054+12.7%
$61.99
Margin48.2%
Oat Milk Cold Brew 12 ozCB-1055+6.7%
$7.99
Margin46.9%
Oat Milk Cold Brew 32 ozCB-1056+6.5%
$16.49
Margin44.8%
Oat Milk Cold Brew 64 ozCB-1057+2.0%
$25.99
Margin41.3%
Oat Milk Cold Brew 4-packCB-1058+7.4%
$14.49
Margin43.4%
Oat Milk Cold Brew case of 12CB-1059+11.9%
$60.99
Margin49.8%
Single Origin Huila 12 ozCB-1060+5.9%
$8.99
Compare at$10.99
Margin49.7%
Single Origin Huila 32 ozCB-1061Skipped
$18.49
Single Origin Huila 64 ozCB-1062+4.7%
$27.99
Compare at$33.49
Margin38.4%
Single Origin Huila 4-packCB-1063+16.0%
$14.49
Margin47.7%
Single Origin Huila case of 12CB-1064+4.3%
$60.49
Margin39.8%
Decaf Concentrate 12 ozCB-1065+5.9%
$8.99
Margin44.9%
Decaf Concentrate 32 ozCB-1066+6.5%
$16.49
Compare at$19.49
Margin42.9%
Decaf Concentrate 64 ozCB-1067+3.9%
$26.49
Compare at$31.49
Margin42.4%
Decaf Concentrate 4-packCB-1068+4.4%
$11.99
Margin45.9%
Decaf Concentrate case of 12CB-1069+6.1%
$60.49
Margin44.7%
Mocha Cold Brew 12 ozCB-1070+15.4%
$7.49
Compare at$8.99
Margin53.9%
Mocha Cold Brew 32 ozCB-1071+10.8%
$20.49
Margin51.9%
Mocha Cold Brew 64 ozCB-1072+1.9%
$26.49
Margin43.4%
Mocha Cold Brew 4-packCB-1073+6.9%
$15.49
Compare at$18.49
Margin48.1%
Mocha Cold Brew case of 12CB-1074+6.9%
$64.99
Compare at$76.99
Margin48.6%
Filter Bags 12 ozCB-1075+7.2%
$7.49
Margin45.5%
Filter Bags 32 ozCB-1076+11.8%
$18.99
Margin45.4%
Filter Bags 64 ozCB-1077+3.6%
$28.99
Margin39.1%
Filter Bags 4-packCB-1078+3.7%
$13.99
Margin39.5%
Filter Bags case of 12CB-1079+3.0%
$71.49
Compare at$84.49
Margin47.8%

Arrow keys move the wipe; Shift moves it further. In the list, Up and Down move between items and X or Space skips or includes the focused item.

wipe 50% · 38 of 40 included

Install

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

$ pnpm dlx shadcn@latest add @kinetiq/wipe-preview

Props

action
WipeAction
default defaultWipeAction
The proposed action: { id, agent, title, summary, scope, proposedAt }.
fields
WipeField[]
default defaultWipeFields
The fields compared, in column order: { key, label, kind? } where kind is money, percent, number or text.
records
WipeRecord[]
default defaultWipeRecords (40 Coldbrook items)
The affected records: { id, title, meta?, before, after }.
excluded / defaultExcluded
string[]
default — / []
Ids left out of the action, controlled or initial.
onExcludedChange
(ids) => void
default —
Fires with every excluded id after an exclusion changes.
onExclude
(id, excluded) => void
default —
Fires from the key or press that skipped a record (true) or put it back (false).
value / defaultValue
number
default — / 50
The wipe position, 0 (all today) to 100 (all result), controlled or initial.
onValueChange
(value) => void
default —
Fires when a drag, key or toggle settles the wipe.
onApprove
(includedIds) => void | Promise
default —
Approve was pressed; a returned promise holds the stamp until it resolves, and a rejection slides the wipe back and states the reason.
onReject
(note) => void
default —
The action was sent back, with the reviewer's optional note.
onEditPlan
() => void
default —
Edit plan was pressed.
onRetry
() => void
default —
Retry simulation was pressed after a failure.
largeChangeAt
number
default 10
A record whose money or number field moves more than this percent counts as a large change and raises the warning.
status
"ready" | "loading" | "empty" | "failed"
default "ready"
Whether the simulation has produced records; failed shows the failure and holds Approve.
failure
{ message, recordId? }
default —
Why the simulation failed and the record it stopped on.
now
number
default Oct 17 2026, 14:00 UTC
The moment ages are counted from, in ms.
wipeStyle
"line" | "feather" | "cells"
default "line"
The wipe's edge: a hard line, a soft 40px feather, or whole fields flipping as the handle passes each column.
ringColor
"amber" | "accent" | "signal" | "ink" | string
default "amber"
The ring around every changed field: a named colour or any CSS colour.
accent
"cobalt" | "plum" | "mint" | "ink" | string
default "cobalt"
The handle, Approve and the stamp: a named pigment or any CSS colour.
formatMoney
(amount) => string
default Intl USD
How money is written.
height
number
default 560
Tallest the surface grows, in px, before its record list scrolls.
disabled
boolean
default false
Read only: the wipe still compares, nothing can be decided.
className
string
default —
Classes for the surface.