← Docs

Recipe: Button state machine

loading / disabled / success — a deterministic three-state toggle.

States

idleloadingsuccessdisabled

Transitions

idle ──[click]──▶ loading
loading ──[resolve]──▶ success
loading ──[reject]──▶ idle
success ──[timeout 2s]──▶ idle
disabled ──[enable]──▶ idle

Live preview

Save changes
Saving…
✓ Saved
Disabled

Tailwind recipe

// idle
bg-[#8B5CF6] text-white shadow-lg shadow-[#8B5CF6]/25

// loading
bg-[#8B5CF6]/60 text-white/70 cursor-wait

// success
bg-emerald-600 text-white shadow-lg shadow-emerald-600/25

// disabled
bg-gray-800 text-gray-500 cursor-not-allowed

Guard rules

  • 1.Ignore clicks while loading or success is visible.
  • 2.Auto-reset success after 2 seconds.
  • 3.On reject, return to idle — never leave button stuck.