Skip to content

Add ThrusterButton - #46

Merged
radiumcoders merged 3 commits into
mainfrom
more-easter-eggs
Oct 17, 2026
Merged

radiumcoders merged 3 commits into
mainfrom
more-easter-eggs

Conversation

@radiumcoders

@radiumcoders radiumcoders commented Oct 17, 2026 •

Copy link
Copy Markdown
Owner

A magnetic button that flies to the cursor on compressed-air jets.

  • Parks on the floor of its container and treats the whole thing as its playground: the cursor comes in, it lifts off and flies onto the pointer, bouncing off walls; the cursor leaves, it lands where it is.
  • Two air jets on each of the bottom, left and right edges. No top jets, so it descends on gravity, and the autopilot cuts lift early on climbs so it doesn't overshoot into the ceiling.
  • Exhaust is a small WebGL2 stable-fluids sim (advection, pressure projection, vorticity confinement) fed by the jets, with a ground burst on touchdown. Falls back to flying without smoke if WebGL2 isn't available.
  • Props: thrust, tilt, playgroundClassName. Jet visuals are scaled against a fixed force so the look stays consistent across thrust values, and props are read live so dialing them never restarts the sim.
  • Docs page with two variants, registry entry, dial and static landing previews, llms.txt line.
  • The docs live-preview stage is now relative so the playground fills the stage rather than the whole frame with the props panel.

Checked: registry:test, typecheck, lint; flown headlessly in light and dark mode.

Summary by CodeRabbit

  • New Features
    • Added the Thruster Button, which flies toward the pointer and lands when the pointer leaves or touch ends. It features animated jets and smoke where supported, with flight disabled for reduced-motion settings and disabled buttons.
    • Added interactive previews and made the component available in the showcase and component registry.
  • Documentation
    • Added installation, usage, customization, and props guidance for the Thruster Button.

The button parks on the floor of its container and treats the whole
thing as its playground: move the cursor in and it lifts off and flies
its center onto the pointer, bouncing off the walls; move out and it
comes straight down and lands where it is.

It steers with two compressed-air jets on each of the bottom, left and
right edges. With no top jets it descends on gravity, so the autopilot
cuts lift early on a climb to avoid overshooting into the ceiling.

The exhaust is a small WebGL2 stable-fluids sim (advection, pressure
projection, vorticity confinement) that the jets feed with velocity and
smoke, plus a ground burst on touchdown. Without WebGL2 it still flies.

The docs live-preview stage is now relative so the playground fills the
stage rather than the whole frame with the props panel.
The fake top-left lighting drew dark outlines around every curl. The
smoke is now flat tint, with less density, a faster fade and a softer
touchdown burst.
Jet power and bank were scaled by the thrust prop, so low thrust always
read as full blast and high thrust barely smoked, even for the same
motion. They are now scaled against a fixed force.

Changing a prop also re-ran the flight effect, whose cleanup lost the
WebGL context; the re-run got the dead context back and the smoke never
returned. Props are now read through a ref, and dispose frees GPU
resources without losing the context.
@vercel

vercel Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
evil-buttons Ready Ready Preview Oct 17, 2026 4:33pm UTC

@coderabbitai

coderabbitai Bot commented Oct 17, 2026

Copy link
Copy Markdown

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: b46dfe06-096d-4894-9894-64901708fabe
📥 Commits

Reviewing files that changed from the base of the PR and between 0607cb2 and ab60c87.

📒 Files selected for processing: 12
  • components/evil-buttons/thruster-button.tsx
  • components/landing/previews/index.tsx
  • components/landing/previews/simple.tsx
  • components/landing/previews/static.tsx
  • components/landing/showcase.ts
  • components/live-preview.tsx
  • components/mdx-custom-components.tsx
  • content/docs/thruster-button.mdx
  • public/llms.txt
  • public/r/index.json
  • public/r/thruster-button.json
  • registry.components.json
+---------------------------------------------------+
| Great artists ship, but not before a code review. |
+---------------------------------------------------+
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@radiumcoders
radiumcoders merged commit cf5c6b0 into main Oct 17, 2026
2 of 4 checks passed

This branch was successfully deployed

1 active deployment
Preview — ab60c87b Deployed Oct 17, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant