JSFiddle - React, Tailwind, and code Playground
HTML
<textarea id="output"></textarea>
CSS
#output {
width: 100%;
height: 1000px;
}
JavaScript
z=prompt(),_=0,p=function(i){v=[],c=0,x=[0],y=[0],s='unshift',k='slice',t='sort',h=[0,-1,0,1,0]
while(c<i.length){m='wasd'.indexOf(i[c++]);v[s]('^<v>'[m]);x[s](x[0]+h[m]);y[s](y[0]+h[m+1])}f=function(a,b){return a-b}
q=x[k]()[t](f)[0],e=x[k]()[t](function(a,b){return b-a})[0],w=y[k]()[t](f)[0],o=[]
while((i=y.pop())!=null){i-=w;j=x.pop()-q;t=(o[i]||Array(e+1-q).join(" ")).split("");t.splice(j,1,v.pop()||"@");o[i]=t.join("")}document.getElementById('output').value=o.join("\n")}
setInterval(function(){_<z.length&&p(z.substr(0,_++))},50);