UI3232
47 Accordion48 Alerts49 Avatar50 Badge51 Breadcrumb52 Button53 Button Group54 Calendar55 Card56 Checkbox57 Collapsible58 Combobox59 Data Table60 Date Picker61 Dialog62 Dropdown Menu63 Form64 Input65 Input Mask66 Input OTP67 Pagination68 Popover69 Radio Group70 Select71 Sheet72 Slider73 Sonner74 Switch75 Table76 Tabs77 Textarea78 Tooltip
Blocks1010
202 Marketing hero with product shot203 Marketing feature bento204 Marketing pricing205 Marketing testimonials wall206 Marketing CTA and footer212 Dashboard shell213 Sign in214 Settings page215 Inbox216 AI chat app
Charts2929
01 Animated radial chart99 Live line101 Route trace142 Candlestick chart143 Forecast fan144 State timeline145 Spark table146 Distribution plot147 Violin plot148 Beeswarm149 Slope chart150 Dumbbell chart151 Waterfall chart152 Treemap153 Streamgraph154 Scatter brush155 Correlation matrix156 Sankey flow157 Drawdown chart158 Depth chart159 Calibration plot160 Stacked area chart161 Grouped bar chart162 Donut chart163 Funnel chart164 Cohort retention165 Calendar heatmap166 Bullet chart240 Order book
Interactive66
02 Message dock03 Voice powered orb07 Draggable rope93 Timer113 Elastic frame117 Scene states
AI2424
13 AI voice input103 Agent trace104 Handoff beam105 Lattice orb220 Streaming message221 Reasoning disclosure222 Stream status223 Message branch224 Response feedback225 Prompt composer226 Model selector227 Attachment chips228 Suggested prompts229 Context meter230 Tool call card231 Approval gate232 Diff review233 Artifact panel234 Inline AI edit235 Citation chips236 Retrieval inspector237 Memory viewer238 Response compare239 Cost meter
Galleries66
04 Ruler carousel10 Portfolio gallery32 Hover image gallery106 Torn edge reveal107 Mosaic settle115 Project index
Heroes22
05 Video scroll hero116 Aperture dive
Shaders66
80 Aurora veil88 Kinetic dots90 Silt91 Intaglio92 Phosphor114 Sumi
Tables1420
06 Financial table43 Contacts table44 Leads table45 Resizable table46 Server management89 Periodic table100 Flap ledger120 Sortable table121 Pricing table122 Invoice table123 Leaderboard124 Changelog table125 API reference table126 File tree table127 Timetable128 Shortcuts table129 Spec sheet130 Transactions table131 Spreadsheet grid132 Permissions matrix
Cards2626
11 Video upload card16 Animated card options17 Animated card status list18 Audio upload card19 Bonuses incentives card20 Coach scheduling21 Dashboard card modal22 Event countdown card23 Hover detail card24 News cards25 Onboarding stages26 Prediction market card27 Product reveal card28 Profile hover card29 Project cards102 Solar sky panel182 Plan usage card183 Payment method card184 Integration card185 Metric card186 Shipment card187 Now playing card188 Deployment card189 Team invite card190 Streak card191 Link preview card
Badges11
14 Animated status badge
Controls44
31 Gradient selector95 Adaptive precision slider96 Click wheel97 Velocity ink
Navigation22
94 Radial command ring108 Minimap scrollbar
Utilities33
98 Spring tuner110 Stroke-morph icon119 Glow rules
HUD88
09 HUD frame15 Animated download34 Glitchy 40435 Overlay 236 HUD button37 HUD graph38 HUD status40 Warning graphic
Feedback11
109 Morph loader
Text1212
33 Reveal text111 Scatter rewind112 Plane type133 Glyph morph134 Weight wave135 Decode text136 Magnetic letters137 Slice shift138 Stroke draw type139 Ink bleed text140 Liquid text141 Chromatic text
Components•Scatter brush
Components•Scatter brush

Scatter brush

Fifteen hundred points on one canvas. Drag out a region to select it: the selection takes the accent, everything else falls back, and the marginal histograms and the readout follow live. The trend line is a least-squares fit over whatever is selected, so brushing one cluster shows its own slope and r² rather than the overall one. Drag the brush to move it or its edges to resize it, click empty space to clear, and drive it all from the keyboard.

Dependencies

Motion

Copy below cli

npx shadcn add @bjork-ui/scatter-brush

How to use

import { ScatterBrush } from "@/components/bjork-ui/charts/scatter-brush";<ScatterBrush  points={sessions.map((s) => ({ x: s.minutes, y: s.score, label: s.id }))}  xLabel="Session length"  yLabel="Engagement"  trend  onBrushChange={(brush, selected) => console.log(selected.length)}/>
PreviousStreamgraphNextCorrelation matrix
n 1,500 / 1,500x̄ 4.5mȳ 52r 0.86r² 0.75
Session length →Engagement →
Sessions (first 400 points)
PointSession lengthEngagement
Session 11.5m21
Session 24.4m51
Session 38.0m69
Session 44.0m39
Session 57.5m74
Session 66.2m67
Session 77.1m70
Session 86.8m64
Session 96.7m71
Session 105.3m81
Session 116.7m57
Session 122.7m45
Session 132.0m16
Session 146.9m71
Session 154.7m48
Session 167.3m65
Session 175.2m80
Session 183.3m33
Session 192.9m42
Session 206.8m76
Session 216.3m71
Session 223.1m49
Session 237.8m70
Session 242.9m46
Session 251.6m29
Session 264.3m37
Session 274.6m38
Session 281.9m35
Session 297.0m68
Session 301.9m32
Session 314.2m43
Session 327.1m75
Session 336.7m76
Session 346.4m70
Session 356.5m89
Session 367.3m77
Session 377.6m61
Session 383.1m35
Session 394.5m51
Session 402.6m37
Session 412.2m27
Session 423.3m44
Session 437.9m61
Session 443.0m32
Session 457.8m77
Session 464.8m57
Session 473.9m47
Session 485.4m79
Session 497.3m68
Session 500.8m13
Session 511.6m20
Session 527.1m64
Session 531.5m7
Session 546.8m68
Session 551.8m13
Session 565.3m56
Session 573.7m34
Session 583.0m47
Session 592.7m30
Session 606.5m72
Session 614.4m46
Session 621.8m26
Session 632.7m29
Session 644.7m47
Session 656.5m87
Session 662.1m34
Session 673.1m43
Session 685.6m79
Session 693.3m40
Session 702.6m30
Session 713.0m29
Session 723.1m34
Session 732.7m34
Session 741.9m26
Session 757.7m78
Session 761.7m40
Session 776.4m79
Session 783.7m43
Session 792.0m38
Session 803.0m31
Session 817.5m76
Session 827.5m75
Session 833.4m34
Session 846.6m70
Session 855.0m50
Session 865.9m76
Session 873.8m31
Session 883.3m50
Session 891.8m43
Session 906.0m72
Session 912.2m39
Session 927.7m89
Session 934.0m58
Session 947.1m72
Session 956.5m75
Session 962.5m30
Session 971.7m34
Session 985.4m47
Session 995.5m96
Session 1004.0m37
Session 1014.1m39
Session 1022.5m27
Session 1034.6m37
Session 1040.9m27
Session 1054.1m47
Session 1064.3m45
Session 1073.7m44
Session 1088.4m68
Session 1091.8m30
Session 1107.4m71
Session 1114.7m59
Session 1124.8m59
Session 1136.7m65
Session 1147.4m74
Session 1153.4m40
Session 1162.7m32
Session 1173.5m27
Session 1182.5m29
Session 1192.4m24
Session 1201.6m34
Session 1212.2m38
Session 1227.6m67
Session 1233.3m43
Session 1248.1m69
Session 1252.9m36
Session 1265.9m81
Session 1275.0m52
Session 1281.3m26
Session 1293.1m30
Session 1307.5m76
Session 1313.6m55
Session 1326.4m75
Session 1336.1m75
Session 1347.9m80
Session 1353.4m44
Session 1367.6m76
Session 1373.7m33
Session 1383.3m45
Session 1394.1m47
Session 1408.8m66
Session 1417.3m73
Session 1423.6m40
Session 1437.1m70
Session 1442.8m34
Session 1454.0m57
Session 1466.4m70
Session 1473.3m41
Session 1481.3m32
Session 1491.8m13
Session 1508.0m75
Session 1513.8m47
Session 1522.5m32
Session 1533.0m26
Session 1543.2m40
Session 1552.4m38
Session 1565.5m85
Session 1572.7m29
Session 1584.2m55
Session 1592.3m41
Session 1603.8m42
Session 1616.8m79
Session 1625.4m83
Session 1636.2m77
Session 1642.9m45
Session 1653.4m33
Session 1662.0m36
Session 1677.0m71
Session 1683.7m46
Session 1696.8m63
Session 1706.8m66
Session 1714.2m37
Session 1726.4m74
Session 1733.0m30
Session 1742.6m42
Session 1757.0m78
Session 1762.9m46
Session 1772.3m24
Session 1785.4m46
Session 1793.4m40
Session 1803.4m39
Session 1814.3m44
Session 1823.4m47
Session 1835.6m84
Session 1845.7m58
Session 1854.9m52
Session 1866.2m71
Session 1872.2m18
Session 1884.9m36
Session 1894.9m80
Session 1902.2m39
Session 1916.6m66
Session 1923.1m35
Session 1931.8m32
Session 1946.3m69
Session 1956.6m71
Session 1968.4m71
Session 1972.9m55
Session 1986.7m75
Session 1995.9m85
Session 2005.6m70
Session 2016.1m72
Session 2026.5m75
Session 2033.3m40
Session 2044.1m46
Session 2052.5m32
Session 2066.5m83
Session 2075.4m77
Session 2087.9m74
Session 2094.4m47
Session 2103.7m53
Session 2117.2m76
Session 2123.5m56
Session 2133.0m29
Session 2143.6m37
Session 2154.4m48
Session 2167.5m62
Session 2173.1m48
Session 2187.4m70
Session 2193.3m35
Session 2207.4m71
Session 2215.1m65
Session 2221.9m34
Session 2236.9m76
Session 2240.7m26
Session 2252.5m37
Session 2267.0m73
Session 2277.3m66
Session 2281.3m25
Session 2296.1m78
Session 2307.2m79
Session 2317.0m72
Session 2323.6m46
Session 2333.7m42
Session 2346.7m70
Session 2356.1m80
Session 2367.6m74
Session 2373.5m38
Session 2385.8m80
Session 2391.9m35
Session 2403.7m44
Session 2412.7m29
Session 2421.4m10
Session 2433.3m33
Session 2445.9m78
Session 2454.4m87
Session 2463.9m37
Session 2475.3m70
Session 2487.1m84
Session 2497.1m74
Session 2502.6m35
Session 2511.6m18
Session 2521.4m29
Session 2534.3m47
Session 2545.5m56
Session 2557.4m66
Session 2561.4m38
Session 2572.1m23
Session 2584.2m54
Session 2595.6m83
Session 2607.8m75
Session 2613.3m45
Session 2626.8m79
Session 2633.5m38
Session 2646.8m79
Session 2657.2m79
Session 2662.8m42
Session 2677.3m74
Session 2686.6m67
Session 2693.2m24
Session 2707.3m67
Session 2713.9m30
Session 2727.0m77
Session 2736.8m71
Session 2743.4m35
Session 2752.9m33
Session 2761.2m22
Session 2774.1m69
Session 2782.5m27
Session 2795.2m59
Session 2805.1m43
Session 2814.0m59
Session 2824.4m43
Session 2835.4m57
Session 2842.5m37
Session 2855.5m78
Session 2866.2m72
Session 2877.3m65
Session 2886.3m65
Session 2892.8m33
Session 2902.4m42
Session 2915.1m52
Session 2923.7m52
Session 2936.4m73
Session 2946.7m74
Session 2952.5m36
Session 2964.3m47
Session 2973.3m48
Session 2983.7m42
Session 2995.7m78
Session 3003.8m45
Session 3016.8m83
Session 3023.4m42
Session 3031.7m31
Session 3044.6m38
Session 3057.5m78
Session 3063.3m31
Session 3075.2m57
Session 3084.6m47
Session 3094.6m41
Session 3106.6m71
Session 3116.7m72
Session 3124.0m42
Session 3135.3m86
Session 3143.8m52
Session 3154.9m82
Session 3163.2m45
Session 3170.6m16
Session 3182.7m29
Session 3194.1m52
Session 3201.8m17
Session 3213.4m40
Session 3223.4m42
Session 3231.5m25
Session 3242.9m24
Session 3258.7m59
Session 3263.0m47
Session 3272.5m36
Session 3282.2m40
Session 3291.6m23
Session 3302.1m36
Session 3314.6m41
Session 3327.9m71
Session 3332.4m23
Session 3347.1m63
Session 3352.1m25
Session 3365.7m86
Session 3376.9m73
Session 3381.4m31
Session 3391.6m33
Session 3406.9m69
Session 3416.1m88
Session 3427.2m75
Session 3432.4m40
Session 3444.9m52
Session 3451.4m29
Session 3462.3m29
Session 3474.2m47
Session 3485.9m68
Session 3495.1m79
Session 3506.6m86
Session 3512.8m12
Session 3521.8m28
Session 3535.9m73
Session 3544.6m87
Session 3553.4m46
Session 3564.3m49
Session 3574.9m79
Session 3585.7m43
Session 3594.8m77
Session 3603.2m37
Session 3616.9m75
Session 3626.7m78
Session 3632.3m19
Session 3642.6m38
Session 3658.9m66
Session 3666.5m71
Session 3673.1m47
Session 3680.2m10
Session 3695.7m85
Session 3702.2m20
Session 3718.0m67
Session 3722.4m36
Session 3733.9m57
Session 3746.1m84
Session 3757.5m55
Session 3763.8m41
Session 3773.1m36
Session 3781.3m24
Session 3796.7m77
Session 3804.1m40
Session 3817.2m70
Session 3827.1m74
Session 3834.1m39
Session 3841.2m30
Session 3853.6m37
Session 3864.3m49
Session 3873.1m44
Session 3888.2m84
Session 3896.7m67
Session 3908.5m67
Session 3915.9m64
Session 3926.2m65
Session 3931.9m31
Session 3942.3m32
Session 3951.4m20
Session 3963.7m43
Session 3973.3m37
Session 3986.9m63
Session 3992.3m38
Session 4001.9m26
Options