mirror of
https://github.com/direct-img/vibegif.direct-img.link.git
synced 2026-10-29 11:44:51 +00:00
Add 150 UI and page state stickers in three pending sections
404s, loaders, success, errors, empty states, confirmation, under construction, offline and more: 50 monochrome (ui), 50 colored (uicolor) and 50 with an anime girl (uianime), on /test until approved. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
// a party popper shakes, then bursts with a bang and confetti pieces and streamers flutter down, spinning as they fall
|
||||
const{sin,cos,PI,min,max,exp}=Math,T=2*PI
|
||||
export const frames=28,delay=70
|
||||
let z=11;const R=()=>(z=z*16807%2147483647)/2147483647
|
||||
const C=[...Array(14)].map((_,k)=>[-PI/4+(R()-.5)*1.7,90+R()*120,k%4,R()<.3?'#bbb':'#fff',R()*T,1+R()*2,R()*T,.7+R()*.6])
|
||||
const t0=.12
|
||||
export default(c,t)=>{
|
||||
const s=t-t0,mx=110,my=150
|
||||
if(s>0){
|
||||
const sc=min(1,(1-t)/.07),fall=u=>320*max(0,u-.12)**1.5
|
||||
for(const[a,d,k,f,r0,sp,ph,fz]of C){
|
||||
const e=1-exp(-11*s),x=mx+cos(a)*d*e+14*sin(T*s*2*fz+ph)*min(1,s*4),y=my+sin(a)*d*e+fall(s)*fz
|
||||
c.save();c.translate(x,y);c.rotate(r0+s*sp*T);c.scale(cos(T*s*3*fz+ph)*sc,sc);c.beginPath()
|
||||
if(k==0)c.rect(-11,-7,22,14);else if(k==1)c.arc(0,0,9,0,T);else if(k==2)c.moveTo(0,-11),c.lineTo(10,7),c.lineTo(-10,7),c.closePath();else c.ellipse(0,0,13,6,0,0,T)
|
||||
c.restore();c.lineWidth=5;c.fillStyle=f;c.fill();c.stroke()
|
||||
}
|
||||
c.fillStyle='#fff'
|
||||
for(const[a,d,o]of[[-1.15,120,0],[-.5,130,2]]){
|
||||
const e=1-exp(-9*s);for(const[w,st]of[[10,'#111'],[4,'#fff']]){c.lineWidth=w*sc;c.strokeStyle=st;c.beginPath()
|
||||
for(let u=0;u<=1;u+=.05){const L=d*e*(.35+.65*u),n=7*sin(u*12+s*20+o)*min(1,s*6);c.lineTo(mx+cos(a)*L-sin(a)*n,my+sin(a)*L+cos(a)*n+fall(s)*(1.1-.4*u)+40*s*u*u)}c.stroke()}
|
||||
}
|
||||
c.strokeStyle='#111'
|
||||
if(s<.12){const b=s/.12;for(let k=0;k<7;k++){const a=-PI/4+(k-3)*.42,r1=24+40*b,r2=r1+20*(1-b);for(const[w,st]of[[12,'#111'],[5,'#fff']])c.lineWidth=w,c.strokeStyle=st,c.beginPath(),c.moveTo(mx+cos(a)*r1,my+sin(a)*r1),c.lineTo(mx+cos(a)*r2,my+sin(a)*r2),c.stroke()}}
|
||||
}
|
||||
const sh=t<t0?.08*sin(T*t*14)*t/t0:t>.9?.05*sin(T*t*20)*(t-.9)/.1:0,rc=s>0&&s<.15?sin(PI*s/.15):0
|
||||
c.strokeStyle='#111';c.lineWidth=7
|
||||
c.save();c.translate(42-8*rc,222+8*rc);c.rotate(PI/4+sh)
|
||||
const cone=()=>{c.beginPath();c.moveTo(-9,6);c.lineTo(-38,-92);c.lineTo(38,-92);c.lineTo(9,6);c.quadraticCurveTo(0,11,-9,6)}
|
||||
cone();c.fill();c.save();cone();c.clip();c.fillStyle='#111'
|
||||
for(const v of[-70,-36])c.beginPath(),c.moveTo(-40,v),c.lineTo(40,v-20),c.lineTo(40,v-6),c.lineTo(-40,v+14),c.fill()
|
||||
c.restore();cone();c.stroke()
|
||||
c.beginPath();c.ellipse(0,-92,38,12,0,0,T);c.fill();c.stroke()
|
||||
if(s<0||s>.5){c.fillStyle='#111';c.beginPath();c.ellipse(0,-92,27,6,0,0,T);c.fill()}
|
||||
c.restore()
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
// a rubber stamp winds up, slams down on a sheet of paper and bounces back up leaving a check mark imprint, then the sheet slides away for a fresh one
|
||||
const{sin,cos,PI,min,max}=Math,T=2*PI
|
||||
export const frames=28,delay=70
|
||||
const cl=u=>min(1,max(0,u)),io=u=>(u=cl(u),u<.5?2*u*u:1-2*(1-u)**2),bk=u=>(u=cl(u),1+2.4*(u-1)**3+1.4*(u-1)**2)
|
||||
const paper=(c,x)=>{c.beginPath();c.moveTo(62+x,162);c.lineTo(194+x,162);c.lineTo(224+x,230);c.lineTo(32+x,230);c.closePath();c.fill();c.stroke()}
|
||||
const ink=(c,x)=>{c.save();c.translate(128+x,196);c.scale(1,.42);c.lineWidth=10;c.beginPath();c.arc(0,0,44,0,T);c.stroke();c.lineWidth=14;c.beginPath();c.moveTo(-20,0);c.lineTo(-6,16);c.lineTo(22,-16);c.stroke();c.restore()}
|
||||
export default(c,t)=>{
|
||||
const sl=-264*io((t-.74)/.22),q=sin(PI*cl((t-.31)/.11))
|
||||
const y=t<.24?124-10*io((t-.06)/.18):t<.31?114+82*cl((t-.24)/.07)**2:t<.42?196:196-72*bk((t-.42)/.16)
|
||||
paper(c,sl);paper(c,sl+264)
|
||||
const h=(y-124)/72
|
||||
if(t<.31||t>.42&&t<.74||t>.96){c.fillStyle='#ccc';c.beginPath();c.ellipse(128,196,30+22*h,9+4*h,0,0,T);c.fill();c.fillStyle='#fff'}
|
||||
if(t>.31)ink(c,sl)
|
||||
if(t>.6&&t<.74){const p=(t-.6)/.14;c.lineWidth=5;for(const[x,yy,r]of[[52,146,12],[206,154,10]]){const s=sin(PI*p)*r;c.beginPath();c.moveTo(x,yy-s*2);c.quadraticCurveTo(x,yy,x+s*2,yy);c.quadraticCurveTo(x,yy,x,yy+s*2);c.quadraticCurveTo(x,yy,x-s*2,yy);c.quadraticCurveTo(x,yy,x,yy-s*2);c.fill();c.stroke()}}
|
||||
if(q>.01)for(const d of[-1,1])for(const a of[-.5,0,.5]){const r1=72+14*q,r2=r1+16*q;for(const[w,s]of[[11,'#111'],[4,'#fff']])c.lineWidth=w,c.strokeStyle=s,c.beginPath(),c.moveTo(128+d*r1*cos(a),188-r1*.5*sin(a+.4)),c.lineTo(128+d*r2*cos(a),188-r2*.5*sin(a+.4)),c.stroke()}
|
||||
c.strokeStyle='#111';c.lineWidth=7
|
||||
c.save();c.translate(128,y);c.scale(1+.08*q,1-.12*q)
|
||||
c.fillStyle='#888';c.beginPath();c.roundRect(-48,-12,96,12,3);c.fill();c.stroke();c.fillStyle='#fff'
|
||||
c.beginPath();c.roundRect(-58,-38,116,28,9);c.fill();c.stroke()
|
||||
c.beginPath();c.roundRect(-14,-62,28,26,4);c.fill();c.stroke()
|
||||
c.beginPath();c.ellipse(0,-82,31,19,0,0,T);c.fill();c.stroke()
|
||||
c.lineWidth=5;c.beginPath();c.arc(0,-82,14,PI*1.15,PI*1.5);c.stroke()
|
||||
c.restore()
|
||||
}
|
||||
Reference in New Issue
Block a user