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,31 @@
|
||||
// bunch of smiling balloons bobbing up on wavy strings tied with a bow, confetti fluttering down around them
|
||||
const{sin,cos,PI,min}=Math,T=2*PI
|
||||
export const frames=14,delay=100
|
||||
const B=[[128,74,'#ffd43b',.2,36],[70,108,'#ff6b6b',0,33],[186,108,'#4dabf7',.55,33]],BL='#ffa8a8'
|
||||
const CF=['#ff6b6b','#ffd43b','#4dabf7','#69db7c','#b197fc','#f783ac','#ffa94d']
|
||||
export default(c,t)=>{
|
||||
for(let k=0;k<9;k++){
|
||||
const p=(t*(1+k%2)+k*.37)%1,x=(k*71+20)%200+28+10*sin(p*T*2+k),y=6+p*236,s=min(1,4*sin(PI*p))
|
||||
if(s<.1)continue
|
||||
c.save();c.translate(x,y);c.rotate(p*T*(1+k%3));c.scale(s,s);c.fillStyle=CF[k%7];c.lineWidth=3;c.beginPath()
|
||||
if(k%3==0)c.rect(-7,-4,14,8);else if(k%3==1)c.arc(0,0,5,0,T);else c.moveTo(0,-7),c.lineTo(6,5),c.lineTo(-6,5),c.closePath()
|
||||
c.fill();c.stroke();c.restore()
|
||||
}
|
||||
const b=-6*sin(t*T),K=[128,222+b*.4],P=B.map(([x,y,,o,r])=>[x+6*sin(t*T+o*T),y+b+4*sin(2*T*t+o*T),r])
|
||||
for(const[w,st]of[[7,'#111'],[3,'#fff']]){c.lineWidth=w;c.strokeStyle=st;c.beginPath();for(const[x,y,r]of P){const w2=10*sin(2*T*t+x);c.moveTo(x,y+r*1.2+8);c.quadraticCurveTo((x+K[0])/2+w2,(y+K[1])/2+20,K[0],K[1])}c.stroke()}
|
||||
c.strokeStyle='#111'
|
||||
for(const[k,[x,y,r]]of P.entries()){
|
||||
const col=B[k][2]
|
||||
c.save();c.translate(x,y);c.rotate((x-128)/500)
|
||||
c.lineWidth=5;c.fillStyle=col;c.beginPath();c.moveTo(0,r*1.12);c.lineTo(-7,r*1.2+9);c.lineTo(7,r*1.2+9);c.closePath();c.fill();c.stroke()
|
||||
c.lineWidth=7;c.beginPath();c.ellipse(0,0,r,r*1.18,0,0,T);c.fill();c.stroke()
|
||||
c.fillStyle='#fff';c.beginPath();c.ellipse(-r*.45,-r*.5,r*.14,r*.26,.5,0,T);c.fill();c.beginPath();c.arc(-r*.2,-r*.82,r*.07,0,T);c.fill()
|
||||
c.fillStyle='#111';for(const d of[-1,1])c.beginPath(),c.arc(d*r*.3,r*.06,4.5,0,T),c.fill()
|
||||
c.lineWidth=4;c.beginPath();c.arc(0,r*.2,r*.2,.15*PI,.85*PI);c.stroke()
|
||||
c.fillStyle=BL;for(const d of[-1,1])c.beginPath(),c.ellipse(d*r*.56,r*.3,6,3.5,0,0,T),c.fill()
|
||||
c.restore()
|
||||
}
|
||||
c.save();c.translate(...K);c.fillStyle='#f783ac';c.lineWidth=4
|
||||
for(const d of[-1,1])c.beginPath(),c.moveTo(0,0),c.lineTo(d*16,-9),c.lineTo(d*16,9),c.closePath(),c.fill(),c.stroke()
|
||||
c.beginPath();c.arc(0,0,5,0,T);c.fill();c.stroke();c.restore()
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
// green badge pops in, a white check mark draws itself, a burst of colorful rays and sparkles goes off, then it shrinks away
|
||||
const{sin,cos,PI,min,max,hypot}=Math,T=2*PI
|
||||
export const frames=24,delay=60
|
||||
const GR='#51cf66',GD='#37b24d',CF=['#ffd43b','#ff6b6b','#4dabf7','#f783ac']
|
||||
const back=u=>{const s=2;return 1+(s+1)*(u-1)**3+s*(u-1)**2}
|
||||
const P=[[90,132],[116,158],[168,100]],L=hypot(26,26)+hypot(52,58)
|
||||
const sp=(c,x,y,s)=>{c.lineWidth=4;c.fillStyle='#fff';c.beginPath();c.moveTo(x,y-s);for(const[px,py,qx,qy]of[[s,0,s*.18,-s*.18],[0,s,s*.18,s*.18],[-s,0,-s*.18,s*.18],[0,-s,-s*.18,-s*.18]])c.quadraticCurveTo(x+qx,y+qy,x+px,y+py);c.fill();c.stroke()}
|
||||
export default(c,t)=>{
|
||||
const s=t<.15?back(t/.15):t>.85?1-((t-.85)/.15)**2:1,p=min(1,max(0,(t-.15)/.25)),b=(t-.38)/.32
|
||||
if(b>0&&b<1){
|
||||
for(let k=0;k<8;k++){
|
||||
const a=k*T/8+PI/8,r1=88+30*b,r2=r1+22*(1-b)
|
||||
for(const[w,st]of[[13,'#111'],[6,CF[k%4]]])c.lineWidth=w,c.strokeStyle=st,c.beginPath(),c.moveTo(128+cos(a)*r1,128+sin(a)*r1),c.lineTo(128+cos(a)*r2,128+sin(a)*r2),c.stroke()
|
||||
}
|
||||
c.strokeStyle='#111'
|
||||
for(let k=0;k<4;k++){const a=k*T/4-PI/2,r=92+16*b;sp(c,128+cos(a)*r,128+sin(a)*r,14*sin(PI*b))}
|
||||
}
|
||||
c.strokeStyle='#111'
|
||||
if(s<=.01)return
|
||||
c.translate(128,128);c.scale(s,s);c.translate(-128,-128);c.lineWidth=7/s
|
||||
c.fillStyle=GR;c.beginPath();c.arc(128,128,76,0,T);c.fill();c.stroke()
|
||||
c.strokeStyle=GD;c.lineWidth=6;c.beginPath();c.arc(128,128,62,0,T);c.stroke()
|
||||
c.strokeStyle='#fff';c.beginPath();c.arc(128,128,66,PI*1.1,PI*1.38);c.stroke()
|
||||
if(p>0)for(const[w,st]of[[28,'#111'],[16,'#fff']]){c.lineWidth=w;c.strokeStyle=st;c.setLineDash([L*p,999]);c.beginPath();for(const[x,y]of P)c.lineTo(x,y);c.stroke()}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
// gold medal with a star swinging on its red and blue ribbon, a glint sliding across it and sparkles popping around
|
||||
const{sin,cos,PI,max}=Math,T=2*PI
|
||||
export const frames=14,delay=90
|
||||
const G='#ffd43b',GD='#fab005',GE='#f59f00',RB=['#ff6b6b','#4dabf7']
|
||||
const sp=(c,x,y,s)=>{c.lineWidth=4;c.fillStyle='#fff';c.beginPath();c.moveTo(x,y-s);for(const[px,py,qx,qy]of[[s,0,s*.18,-s*.18],[0,s,s*.18,s*.18],[-s,0,-s*.18,s*.18],[0,-s,-s*.18,-s*.18]])c.quadraticCurveTo(x+qx,y+qy,x+px,y+py);c.fill();c.stroke()}
|
||||
const disc=(c,r)=>{c.beginPath();c.arc(0,170,r,0,T)}
|
||||
export default(c,t)=>{
|
||||
const a=.13*sin(t*T)
|
||||
for(const[x,y,o]of[[38,120,0],[220,104,.33],[214,216,.66],[46,224,.5]]){const s=12*max(0,sin(PI*((t*2+o)%1)));if(s>1.5)sp(c,x,y,s)}
|
||||
c.lineWidth=7;c.translate(128,20);c.rotate(a);c.scale(.94,.94)
|
||||
for(const[k,d]of[[0,1],[1,-1]]){
|
||||
const q=()=>{c.beginPath();c.moveTo(d*58,0);c.lineTo(d*22,0);c.lineTo(-d*16,112);c.lineTo(d*18,112);c.closePath()}
|
||||
q();c.fillStyle=RB[k];c.fill()
|
||||
c.save();q();c.clip();c.strokeStyle='#fff';c.lineWidth=9;c.beginPath();c.moveTo(d*40,0);c.lineTo(d*1,112);c.stroke();c.restore()
|
||||
q();c.stroke()
|
||||
}
|
||||
c.fillStyle=GD;c.beginPath();c.roundRect(-20,100,40,22,7);c.fill();c.stroke()
|
||||
disc(c,62);c.fillStyle=GD;c.fill();c.stroke()
|
||||
disc(c,48);c.fillStyle=G;c.fill()
|
||||
c.save();disc(c,48);c.clip()
|
||||
c.fillStyle=GD;c.beginPath();c.arc(0,170,48,0,T);c.arc(-12,157,48,0,T,true);c.fill()
|
||||
const g=t*360-120;c.strokeStyle='#fff';c.lineWidth=14;c.beginPath();c.moveTo(g-40,240);c.lineTo(g+30,100);c.stroke();c.lineWidth=5;c.beginPath();c.moveTo(g-16,240);c.lineTo(g+54,100);c.stroke()
|
||||
c.restore()
|
||||
c.lineWidth=5;disc(c,48);c.stroke()
|
||||
c.fillStyle=GE;c.beginPath();for(let k=0;k<10;k++){const r=k%2?14:31,b=k*PI/5-PI/2;c.lineTo(cos(b)*r,172+sin(b)*r)}c.closePath();c.fill();c.lineWidth=4;c.stroke()
|
||||
c.strokeStyle='#fff';c.lineWidth=6;c.beginPath();c.arc(0,170,54,PI*1.12,PI*1.36);c.stroke()
|
||||
}
|
||||
Reference in New Issue
Block a user