FIx some for production again

This commit is contained in:
Montech
2026-09-15 17:26:42 +03:30
parent afde44ab8a
commit 3bc97461e0
195 changed files with 258003 additions and 344 deletions
+5
View File
@@ -0,0 +1,5 @@
*
!dist/
!dist/**
!nginx.conf
!Dockerfile
+3
View File
@@ -0,0 +1,3 @@
# Dist is committed for Dokploy copy-only images.
node_modules/
*.tsbuildinfo
+3 -18
View File
@@ -1,22 +1,7 @@
FROM node:20-alpine AS builder
FROM docker.arvancloud.ir/nginx:latest
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable pnpm
WORKDIR /app
COPY . .
RUN pnpm install --frozen-lockfile
RUN pnpm --filter @lucky-wheel/api exec prisma generate
RUN pnpm run build:types
RUN pnpm --filter @lucky-wheel/client build
FROM nginx:alpine
COPY --from=builder /app/apps/client/dist /usr/share/nginx/html
COPY apps/client/nginx.conf /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY dist /usr/share/nginx/html
EXPOSE 80
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
import{d as t,b as s,h as a,e as r,v as o,u as n,S as l,E as x,a as d}from"./vendor-vue-kYoPQr5S.js";const m={class:"min-h-screen flex flex-col items-center justify-center px-6 py-12 text-center"},c={class:"mt-8 inline-flex items-center gap-2 text-amber-400/80 text-xs font-medium"},b=t({__name:"HomeView",setup(i){return(p,e)=>(d(),s("div",m,[e[1]||(e[1]=a('<div class="w-20 h-20 rounded-3xl bg-gradient-to-br from-amber-500 to-orange-600 flex items-center justify-center text-4xl shadow-lg shadow-amber-500/20 mb-6"> 🎡 </div><h1 class="text-2xl font-extrabold text-white mb-3">گردونه شانس</h1><p class="text-slate-400 text-sm max-w-sm leading-7 mb-2"> برای شرکت در قرعه‌کشی، لینک اختصاصی کمپین خود را از برگزارکننده دریافت کنید. </p><p class="text-slate-500 text-xs max-w-xs"> آدرس معمولاً به شکل <code dir="ltr" class="text-amber-400/90 bg-slate-800 px-1.5 py-0.5 rounded">/نام-کمپین</code> است. </p>',4)),r("div",c,[o(n(l),{class:"w-4 h-4"}),e[0]||(e[0]=x(" منتظر لینک کمپین باشید ",-1))])]))}});export{b as default};
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
import{d as o,b as n,e,u as l,y as r,a}from"./vendor-vue-kYoPQr5S.js";const x={class:"min-h-screen flex flex-col items-center justify-center px-6 py-12 text-center"},i=o({__name:"NotFoundView",setup(u){const s=r();return(d,t)=>(a(),n("div",x,[t[1]||(t[1]=e("div",{class:"text-6xl font-black text-slate-700 mb-4"},"۴۰۴",-1)),t[2]||(t[2]=e("h1",{class:"text-xl font-bold text-white mb-2"},"صفحه پیدا نشد",-1)),t[3]||(t[3]=e("p",{class:"text-slate-400 text-sm mb-8"},"آدرس وارد شده معتبر نیست.",-1)),e("button",{type:"button",class:"px-6 py-3 rounded-xl bg-slate-800 border border-slate-700 text-slate-200 text-sm font-semibold",onClick:t[0]||(t[0]=m=>l(s).push("/"))}," بازگشت به صفحه اصلی ")]))}});export{i as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{u as b,t as v}from"./wheel-classiccasinowheel-DHnlMe5J.js";import{d as B,a as l,b as o,e,n as d,u as i,F as c,f as h,t as C,g as S,c as z}from"./vendor-vue-kYoPQr5S.js";const F={class:"relative w-full max-w-[340px] xs:max-w-[380px] sm:max-w-[420px] aspect-square mx-auto select-none"},L={class:"absolute inset-0 rounded-full p-3.5 border-4 border-pink-300 shadow-[0_10px_0_#f9a8d4,0_16px_28px_rgba(244,114,182,0.35)]",style:{background:"linear-gradient(180deg, #ffe4e6 0%, #fbcfe8 100%)"}},P={class:"w-full h-full rounded-full border-4 border-white relative overflow-hidden bg-rose-50"},D=["d","fill"],N=["transform"],R={x:"150",y:"45","text-anchor":"middle",fill:"#ffffff","font-size":"11","font-weight":"900",class:"wheel-slice-text font-sans",style:{"paint-order":"stroke fill",stroke:"rgba(0,0,0,0.2)","stroke-width":"2px"}},V=["href"],W=["cx","cy"],q=["cx","cy","fill"],E={class:"absolute -top-4 left-1/2 -translate-x-1/2 z-20 pointer-events-none drop-shadow-[0_5px_0_#db2777]"},M=B({__name:"CandyLandWheel",props:{segments:{},targetSegmentIndex:{},spinning:{type:Boolean}},emits:["spin-finished"],setup(f,{emit:u}){const x=f,m=u,{wheelStyle:p,pointerStyle:g,getSlicePath:w,getTextRotation:y,makePegs:_}=b(x,()=>m("spin-finished"),{radius:138,pegRadius:142}),n=["#fb7185","#fbbf24","#34d399","#60a5fa","#c084fc","#f472b6"],k=z(()=>_(24,142).map((a,s)=>({...a,color:n[s%n.length]})));return(a,s)=>(l(),o("div",F,[e("div",L,[e("div",P,[(l(),o("svg",{class:"w-full h-full",style:d(i(p)),viewBox:"0 0 300 300"},[(l(!0),o(c,null,h(f.segments,(t,r)=>(l(),o("g",{key:t.id},[e("path",{d:i(w)(r),fill:t.color||n[r%n.length],stroke:"#ffffff","stroke-width":"3"},null,8,D),e("g",{transform:i(y)(r)},[e("text",R,C(i(v)(t.title)),1),t.image?(l(),o("image",{key:0,href:t.image,x:"138",y:"54",width:"24",height:"24"},null,8,V)):S("",!0)],8,N)]))),128)),(l(!0),o(c,null,h(k.value,(t,r)=>(l(),o("g",{key:r},[e("circle",{cx:t.x,cy:t.y,r:"4.2",fill:"#fff",stroke:"#f9a8d4","stroke-width":"1.2"},null,8,W),e("circle",{cx:t.x,cy:t.y,r:"2.6",fill:t.color},null,8,q)]))),128)),s[0]||(s[0]=e("circle",{cx:"150",cy:"150",r:"32",fill:"#fb7185",stroke:"#fff","stroke-width":"4"},null,-1)),s[1]||(s[1]=e("circle",{cx:"150",cy:"150",r:"20",fill:"#fef08a",stroke:"#f9a8d4","stroke-width":"2"},null,-1)),s[2]||(s[2]=e("text",{x:"150",y:"157","text-anchor":"middle","font-size":"16"},"🍬",-1))],4))])]),e("div",E,[e("div",{style:d(i(g)),class:"w-10 h-[48px] origin-[50%_14px] will-change-transform"},[...s[3]||(s[3]=[e("svg",{width:"40",height:"48",viewBox:"0 0 40 48",fill:"none"},[e("path",{d:"M20 48L6 16C4 11 8 4 14 4H26C32 4 36 11 34 16L20 48Z",fill:"#fb7185",stroke:"#fff","stroke-width":"2.5"}),e("circle",{cx:"20",cy:"14",r:"5.5",fill:"#fef08a",stroke:"#fff","stroke-width":"2"})],-1)])],4)])]))}});export{M as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{u as w,t as k}from"./wheel-classiccasinowheel-DHnlMe5J.js";import{d as b,a as s,b as o,e as t,n as d,u as l,F as f,f as c,t as v,g as C,h as S}from"./vendor-vue-kYoPQr5S.js";const B={class:"relative w-full max-w-[340px] xs:max-w-[380px] sm:max-w-[420px] aspect-square mx-auto select-none"},$={class:"absolute inset-0 rounded-full p-2.5 shadow-[0_0_30px_rgba(56,189,248,0.45)]",style:{background:"linear-gradient(145deg, #e0f2fe, #38bdf8, #0284c7)"}},F={class:"w-full h-full rounded-full border-2 border-sky-100 relative overflow-hidden bg-[#082f49]/40 backdrop-blur-sm"},z=["d","fill"],L=["transform"],N={x:"150",y:"45","text-anchor":"middle",fill:"#f0f9ff","font-size":"11","font-weight":"700",class:"wheel-slice-text font-sans"},V=["href"],D=["points"],G={class:"absolute -top-3 left-1/2 -translate-x-1/2 z-20 pointer-events-none drop-shadow-[0_0_10px_#7dd3fc]"},W=b({__name:"CrystalIceWheel",props:{segments:{},targetSegmentIndex:{},spinning:{type:Boolean}},emits:["spin-finished"],setup(a,{emit:h}){const p=a,u=h,{wheelStyle:m,pointerStyle:x,getSlicePath:y,getTextRotation:_,pegs:g}=w(p,()=>u("spin-finished"),{radius:138,pegRadius:143}),n=["#0ea5e9","#38bdf8","#7dd3fc","#0284c7","#e0f2fe","#0369a1"];return(I,r)=>(s(),o("div",B,[t("div",$,[t("div",F,[(s(),o("svg",{class:"w-full h-full",style:d(l(m)),viewBox:"0 0 300 300"},[(s(!0),o(f,null,c(a.segments,(e,i)=>(s(),o("g",{key:e.id},[t("path",{d:l(y)(i),fill:e.color||n[i%n.length],stroke:"#e0f2fe","stroke-width":"1.2",opacity:"0.92"},null,8,z),t("g",{transform:l(_)(i)},[t("text",N,v(l(k)(e.title)),1),e.image?(s(),o("image",{key:0,href:e.image,x:"138",y:"54",width:"24",height:"24"},null,8,V)):C("",!0)],8,L)]))),128)),(s(!0),o(f,null,c(l(g),(e,i)=>(s(),o("g",{key:i},[t("polygon",{points:`${e.x},${e.y-4.5} ${e.x+2.4},${e.y+2.2} ${e.x-2.4},${e.y+2.2}`,fill:"#e0f2fe",stroke:"#7dd3fc","stroke-width":"0.6",opacity:"0.95"},null,8,D)]))),128)),r[0]||(r[0]=S('<circle cx="150" cy="150" r="30" fill="url(#iceCore)" stroke="#e0f2fe" stroke-width="2"></circle><circle cx="150" cy="150" r="16" fill="#0369a1" stroke="#bae6fd" stroke-width="1.5"></circle><text x="150" y="156" text-anchor="middle" font-size="14">❄️</text><defs><radialGradient id="iceCore" cx="40%" cy="35%" r="65%"><stop offset="0%" stop-color="#e0f2fe"></stop><stop offset="55%" stop-color="#38bdf8"></stop><stop offset="100%" stop-color="#0369a1"></stop></radialGradient></defs>',4))],4))])]),t("div",G,[t("div",{style:d(l(x)),class:"w-8 h-[42px] origin-[50%_10px] will-change-transform"},[...r[1]||(r[1]=[t("svg",{width:"32",height:"42",viewBox:"0 0 32 42",fill:"none"},[t("path",{d:"M16 42L4 12C2 7 6 2 11 2H21C26 2 30 7 28 12L16 42Z",fill:"#38bdf8",stroke:"#e0f2fe","stroke-width":"1.5"}),t("circle",{cx:"16",cy:"10",r:"4",fill:"#e0f2fe",stroke:"#0284c7","stroke-width":"1"})],-1)])],4)])]))}});export{W as default};
@@ -0,0 +1 @@
import{u as w,t as b}from"./wheel-classiccasinowheel-DHnlMe5J.js";import{d as k,a as s,b as o,e,n as d,u as l,F as f,f as c,t as v,g as F,h as S}from"./vendor-vue-kYoPQr5S.js";const B={class:"relative w-full max-w-[340px] xs:max-w-[380px] sm:max-w-[420px] aspect-square mx-auto select-none"},C={class:"absolute inset-0 rounded-full p-2.5 shadow-[0_0_35px_rgba(249,115,22,0.55)]",style:{background:"linear-gradient(145deg, #fbbf24, #f97316, #dc2626, #7f1d1d)"}},z={class:"w-full h-full rounded-full border-2 border-orange-300 relative overflow-hidden bg-[#1a0505]"},G=["d","fill"],L=["transform"],N={x:"150",y:"45","text-anchor":"middle",fill:"#fff7ed","font-size":"11","font-weight":"800",class:"wheel-slice-text font-sans"},T=["href"],V=["cx","cy","transform"],$={class:"absolute -top-3 left-1/2 -translate-x-1/2 z-20 pointer-events-none drop-shadow-[0_0_12px_#f97316]"},W=k({__name:"FireFlameWheel",props:{segments:{},targetSegmentIndex:{},spinning:{type:Boolean}},emits:["spin-finished"],setup(a,{emit:p}){const h=a,m=p,{wheelStyle:u,pointerStyle:x,getSlicePath:g,getTextRotation:_,pegs:y}=w(h,()=>m("spin-finished"),{radius:138,pegRadius:143}),n=["#7f1d1d","#b91c1c","#ea580c","#c2410c","#9a3412","#450a0a"];return(D,i)=>(s(),o("div",B,[e("div",C,[e("div",z,[(s(),o("svg",{class:"w-full h-full",style:d(l(u)),viewBox:"0 0 300 300"},[(s(!0),o(f,null,c(a.segments,(t,r)=>(s(),o("g",{key:t.id},[e("path",{d:l(g)(r),fill:t.color||n[r%n.length],stroke:"#fdba74","stroke-width":"1.2"},null,8,G),e("g",{transform:l(_)(r)},[e("text",N,v(l(b)(t.title)),1),t.image?(s(),o("image",{key:0,href:t.image,x:"138",y:"54",width:"24",height:"24"},null,8,T)):F("",!0)],8,L)]))),128)),(s(!0),o(f,null,c(l(y),(t,r)=>(s(),o("g",{key:r},[e("ellipse",{cx:t.x,cy:t.y,rx:"2.2",ry:"4.2",fill:"url(#flameTip)",transform:`rotate(${r*15} ${t.x} ${t.y})`},null,8,V)]))),128)),i[0]||(i[0]=S('<circle cx="150" cy="150" r="30" fill="url(#emberCore)" stroke="#fdba74" stroke-width="2"></circle><circle cx="150" cy="150" r="16" fill="#7f1d1d" stroke="#f97316" stroke-width="1.5"></circle><text x="150" y="156" text-anchor="middle" font-size="14">🔥</text><defs><radialGradient id="flameTip" cx="50%" cy="20%" r="80%"><stop offset="0%" stop-color="#fef08a"></stop><stop offset="55%" stop-color="#f97316"></stop><stop offset="100%" stop-color="#b91c1c"></stop></radialGradient><radialGradient id="emberCore" cx="40%" cy="35%" r="65%"><stop offset="0%" stop-color="#fdba74"></stop><stop offset="100%" stop-color="#7f1d1d"></stop></radialGradient></defs>',4))],4))])]),e("div",$,[e("div",{style:d(l(x)),class:"w-9 h-[44px] origin-[50%_12px] will-change-transform"},[...i[1]||(i[1]=[e("svg",{width:"36",height:"44",viewBox:"0 0 36 44",fill:"none"},[e("path",{d:"M18 44L5 14C3 9 7 3 12 3H24C29 3 33 9 31 14L18 44Z",fill:"#f97316",stroke:"#fef08a","stroke-width":"1.5"}),e("circle",{cx:"18",cy:"12",r:"4.5",fill:"#dc2626",stroke:"#fef08a","stroke-width":"1.2"})],-1)])],4)])]))}});export{W as default};
@@ -0,0 +1 @@
import{u as v,t as S}from"./wheel-classiccasinowheel-DHnlMe5J.js";import{d as B,a as o,b as n,e as t,n as u,u as r,F as i,f as a,t as F,g as z,c as C}from"./vendor-vue-kYoPQr5S.js";const M={class:"relative w-full max-w-[340px] xs:max-w-[380px] sm:max-w-[420px] aspect-square mx-auto select-none"},L={class:"absolute inset-0 rounded-full p-2.5 shadow-[0_0_40px_rgba(99,102,241,0.45)]",style:{background:"linear-gradient(135deg, #6366f1, #a855f7, #0ea5e9)"}},P={class:"w-full h-full rounded-full border border-indigo-300/40 relative overflow-hidden bg-[#050816]"},D=["cx","cy","r"],I=["d","fill"],N=["transform"],R={x:"150",y:"45","text-anchor":"middle",fill:"#eef2ff","font-size":"11","font-weight":"700",class:"wheel-slice-text font-sans"},V=["href"],W=["cx","cy"],q=["cx","cy"],A={class:"absolute -top-3 left-1/2 -translate-x-1/2 z-20 pointer-events-none drop-shadow-[0_0_10px_#a78bfa]"},H=B({__name:"GalaxySpaceWheel",props:{segments:{},targetSegmentIndex:{},spinning:{type:Boolean}},emits:["spin-finished"],setup(c,{emit:h}){const x=c,m=h,{wheelStyle:y,pointerStyle:p,getSlicePath:g,getTextRotation:_,pegs:w}=v(x,()=>m("spin-finished"),{radius:138,pegRadius:143}),d=["#1e1b4b","#312e81","#4c1d95","#0f172a","#1e3a8a","#581c87"],k=C(()=>Array.from({length:28},(b,s)=>{const e=s*47%360,l=40+s*13%90,f=(e-90)*Math.PI/180;return{x:150+l*Math.cos(f),y:150+l*Math.sin(f),s:.6+s%3*.4}}));return(b,s)=>(o(),n("div",M,[t("div",L,[t("div",P,[(o(),n("svg",{class:"w-full h-full",style:u(r(y)),viewBox:"0 0 300 300"},[(o(!0),n(i,null,a(k.value,(e,l)=>(o(),n("circle",{key:"st"+l,cx:e.x,cy:e.y,r:e.s,fill:"#e0e7ff",opacity:"0.7"},null,8,D))),128)),(o(!0),n(i,null,a(c.segments,(e,l)=>(o(),n("g",{key:e.id},[t("path",{d:r(g)(l),fill:e.color||d[l%d.length],stroke:"#a5b4fc","stroke-width":"1","stroke-opacity":"0.6"},null,8,I),t("g",{transform:r(_)(l)},[t("text",R,F(r(S)(e.title)),1),e.image?(o(),n("image",{key:0,href:e.image,x:"138",y:"54",width:"24",height:"24"},null,8,V)):z("",!0)],8,N)]))),128)),(o(!0),n(i,null,a(r(w),(e,l)=>(o(),n("g",{key:l},[t("circle",{cx:e.x,cy:e.y,r:"3",fill:"#0f172a",stroke:"#c4b5fd","stroke-width":"1"},null,8,W),t("circle",{cx:e.x,cy:e.y,r:"1.4",fill:"#a78bfa"},null,8,q)]))),128)),s[0]||(s[0]=t("circle",{cx:"150",cy:"150",r:"30",fill:"#0b1026",stroke:"#818cf8","stroke-width":"2"},null,-1)),s[1]||(s[1]=t("circle",{cx:"150",cy:"150",r:"18",fill:"#312e81",stroke:"#e879f9","stroke-width":"1.5"},null,-1)),s[2]||(s[2]=t("text",{x:"150",y:"156","text-anchor":"middle","font-size":"14"},"🌌",-1))],4))])]),t("div",A,[t("div",{style:u(r(p)),class:"w-8 h-[42px] origin-[50%_10px] will-change-transform"},[...s[3]||(s[3]=[t("svg",{width:"32",height:"42",viewBox:"0 0 32 42",fill:"none"},[t("path",{d:"M16 42L4 12C2 7 6 2 11 2H21C26 2 30 7 28 12L16 42Z",fill:"#a78bfa",stroke:"#fff","stroke-width":"1.4"}),t("circle",{cx:"16",cy:"10",r:"4",fill:"#e879f9"})],-1)])],4)])]))}});export{H as default};
@@ -0,0 +1 @@
import{u as _,t as k}from"./wheel-classiccasinowheel-DHnlMe5J.js";import{d as b,a as o,b as s,e,n as a,u as r,F as c,f as n,t as v,g as G,h as d}from"./vendor-vue-kYoPQr5S.js";const P={class:"relative w-full max-w-[340px] xs:max-w-[380px] sm:max-w-[420px] aspect-square mx-auto select-none"},S={class:"absolute inset-0 rounded-full p-3 shadow-[0_15px_40px_rgba(0,0,0,0.8)]",style:{background:"linear-gradient(135deg, #d4af37 0%, #f3e5ab 25%, #aa7c11 50%, #fdf6c7 75%, #8a6408 100%)"}},B={class:"w-full h-full rounded-full border-2 border-amber-200/60 relative overflow-hidden bg-gradient-to-b from-stone-900 to-black"},C=["d","fill"],L=["transform"],z={x:"150",y:"45","text-anchor":"middle",fill:"#fdf6c7","font-size":"11","font-weight":"700",class:"wheel-slice-text font-sans tracking-wider"},D=["href"],F=["cx","cy"],V=["cx","cy"],N=["cx","cy"],H={class:"absolute -top-3.5 left-1/2 -translate-x-1/2 z-20 pointer-events-none drop-shadow-[0_4px_10px_rgba(212,175,55,0.6)]"},W=b({__name:"LuxuryGoldWheel",props:{segments:{},targetSegmentIndex:{},spinning:{type:Boolean}},emits:["spin-finished"],setup(f,{emit:p}){const u=f,x=p,{wheelStyle:h,pointerStyle:y,getSlicePath:m,getTextRotation:g,pegs:w}=_(u,()=>x("spin-finished"),{radius:138,pegRadius:143});return(I,i)=>(o(),s("div",P,[e("div",S,[e("div",B,[(o(),s("svg",{class:"w-full h-full",style:a(r(h)),viewBox:"0 0 300 300"},[(o(!0),s(c,null,n(f.segments,(t,l)=>(o(),s("g",{key:t.id},[e("path",{d:r(m)(l),fill:t.color||(l%2===0?"#1c1917":"#0c0a09"),stroke:"#d4af37","stroke-width":"1.5"},null,8,C),e("g",{transform:r(g)(l)},[e("text",z,v(r(k)(t.title)),1),t.image?(o(),s("image",{key:0,href:t.image,x:"138",y:"54",width:"24",height:"24"},null,8,D)):G("",!0)],8,L)]))),128)),(o(!0),s(c,null,n(r(w),(t,l)=>(o(),s("g",{key:l},[e("circle",{cx:t.x,cy:t.y,r:"4.2",fill:"#1c1917",stroke:"#aa7c11","stroke-width":"0.7"},null,8,F),e("circle",{cx:t.x,cy:t.y,r:"3.3",fill:"url(#luxuryPeg3D)",stroke:"#fdf6c7","stroke-width":"0.5"},null,8,V),e("circle",{cx:t.x-.9,cy:t.y-1,r:"0.8",fill:"#ffffff",opacity:"0.85"},null,8,N)]))),128)),i[0]||(i[0]=d('<circle cx="150" cy="150" r="30" fill="url(#luxuryGoldGrad)" stroke="#fdf6c7" stroke-width="2"></circle><circle cx="150" cy="150" r="22" fill="#1c1917" stroke="#aa7c11" stroke-width="1"></circle><text x="150" y="156" text-anchor="middle" font-size="14" font-family="serif" font-weight="bold" fill="#fdf6c7">VIP</text><defs><linearGradient id="luxuryGoldGrad" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" stop-color="#fdf6c7"></stop><stop offset="50%" stop-color="#d4af37"></stop><stop offset="100%" stop-color="#8a6408"></stop></linearGradient><radialGradient id="luxuryPeg3D" cx="35%" cy="30%" r="70%"><stop offset="0%" stop-color="#ffffff"></stop><stop offset="30%" stop-color="#fdf6c7"></stop><stop offset="70%" stop-color="#d4af37"></stop><stop offset="100%" stop-color="#543d03"></stop></radialGradient></defs>',4))],4))])]),e("div",H,[e("div",{style:a(r(y)),class:"w-9 h-[46px] origin-[50%_12px] will-change-transform"},[...i[1]||(i[1]=[d('<svg width="36" height="46" viewBox="0 0 36 46" fill="none" class="overflow-visible"><path d="M18 46L5 14C3 9 7 3 12 3H24C29 3 33 9 31 14L18 46Z" fill="url(#luxuryPointerGrad)" stroke="#fff" stroke-width="1.2"></path><path d="M18 41L8 14C7 11 9 6 13 6H23C27 6 29 11 28 14L18 41Z" fill="none" stroke="rgba(255,255,255,0.4)" stroke-width="0.8"></path><circle cx="18" cy="12" r="4.5" fill="#1c1917" stroke="#fdf6c7" stroke-width="1.5"></circle><circle cx="17.2" cy="10.8" r="1.1" fill="#ffffff" opacity="0.85"></circle><defs><linearGradient id="luxuryPointerGrad" x1="0" y1="0" x2="1" y2="1"><stop offset="0%" stop-color="#fdf6c7"></stop><stop offset="50%" stop-color="#d4af37"></stop><stop offset="100%" stop-color="#543d03"></stop></linearGradient></defs></svg>',1)])],4)])]))}});export{W as default};
@@ -0,0 +1 @@
import{u as y,t as _}from"./wheel-classiccasinowheel-DHnlMe5J.js";import{d as v,a as s,b as l,e,n as a,u as i,F as f,f as d,t as b,g as k}from"./vendor-vue-kYoPQr5S.js";const B={class:"relative w-full max-w-[340px] xs:max-w-[380px] sm:max-w-[420px] aspect-square mx-auto select-none"},S={class:"absolute inset-0 rounded-full p-2 bg-slate-800/80 backdrop-blur border border-slate-700 shadow-2xl"},F={class:"w-full h-full rounded-full relative overflow-hidden bg-slate-900"},C=["d","fill"],z=["transform"],L={x:"150",y:"45","text-anchor":"middle",fill:"#ffffff","font-size":"11","font-weight":"600",class:"wheel-slice-text tracking-normal font-sans"},P=["href"],D=["cx","cy"],M={class:"absolute -top-2.5 left-1/2 -translate-x-1/2 z-20 pointer-events-none drop-shadow-md"},W=v({__name:"MinimalFlatWheel",props:{segments:{},targetSegmentIndex:{},spinning:{type:Boolean}},emits:["spin-finished"],setup(r,{emit:c}){const m=r,u=c,{wheelStyle:h,pointerStyle:p,getSlicePath:x,getTextRotation:g,pegs:w}=y(m,()=>u("spin-finished"),{radius:142,pegRadius:144});return(N,o)=>(s(),l("div",B,[e("div",S,[e("div",F,[(s(),l("svg",{class:"w-full h-full",style:a(i(h)),viewBox:"0 0 300 300"},[(s(!0),l(f,null,d(r.segments,(t,n)=>(s(),l("g",{key:t.id},[e("path",{d:i(x)(n),fill:t.color||(n%2===0?"#3b82f6":"#6366f1"),stroke:"#ffffff","stroke-width":"1"},null,8,C),e("g",{transform:i(g)(n)},[e("text",L,b(i(_)(t.title)),1),t.image?(s(),l("image",{key:0,href:t.image,x:"138",y:"54",width:"24",height:"24"},null,8,P)):k("",!0)],8,z)]))),128)),(s(!0),l(f,null,d(i(w),(t,n)=>(s(),l("circle",{key:n,cx:t.x,cy:t.y,r:"2",fill:"#ffffff",opacity:"0.8"},null,8,D))),128)),o[0]||(o[0]=e("circle",{cx:"150",cy:"150",r:"28",fill:"#ffffff",filter:"drop-shadow(0 2px 6px rgba(0,0,0,0.2))"},null,-1)),o[1]||(o[1]=e("circle",{cx:"150",cy:"150",r:"14",fill:"#0f172a"},null,-1))],4))])]),e("div",M,[e("div",{style:a(i(p)),class:"w-7 h-[34px] origin-[50%_6px] will-change-transform"},[...o[2]||(o[2]=[e("svg",{width:"28",height:"34",viewBox:"0 0 28 34",fill:"none",class:"overflow-visible"},[e("path",{d:"M14 34L2 6C0.5 3 2.5 0 6 0H22C25.5 0 27.5 3 26 6L14 34Z",fill:"#3b82f6",stroke:"#ffffff","stroke-width":"2"})],-1)])],4)])]))}});export{W as default};
@@ -0,0 +1 @@
import{u as w,t as _}from"./wheel-classiccasinowheel-DHnlMe5J.js";import{d as k,a as l,b as i,e,n as f,u as o,F as a,f as c,t as b,g as v}from"./vendor-vue-kYoPQr5S.js";const B={class:"relative w-full max-w-[340px] xs:max-w-[380px] sm:max-w-[420px] aspect-square mx-auto select-none"},S={class:"absolute inset-0 rounded-full p-2 bg-gradient-to-tr from-cyan-500 via-fuchsia-600 to-blue-600 shadow-[0_0_30px_rgba(0,240,255,0.4)] animate-neon-pulse"},C={class:"w-full h-full rounded-full border-2 border-cyan-400 relative overflow-hidden bg-[#070913]"},F=["d","fill"],z=["transform"],L={x:"150",y:"45","text-anchor":"middle",fill:"#ffffff","font-size":"11","font-weight":"800",class:"wheel-slice-text tracking-wide uppercase font-sans"},N=["href"],P=["cx","cy"],D=["cx","cy"],R={class:"absolute -top-3 left-1/2 -translate-x-1/2 z-20 pointer-events-none drop-shadow-[0_0_12px_#00f0ff]"},E=k({__name:"NeonCyberWheel",props:{segments:{},targetSegmentIndex:{},spinning:{type:Boolean}},emits:["spin-finished"],setup(n,{emit:d}){const u=n,p=d,{wheelStyle:m,pointerStyle:x,getSlicePath:h,getTextRotation:y,pegs:g}=w(u,()=>p("spin-finished"),{radius:138,pegRadius:143});return(V,t)=>(l(),i("div",B,[e("div",S,[e("div",C,[(l(),i("svg",{class:"w-full h-full",style:f(o(m)),viewBox:"0 0 300 300"},[(l(!0),i(a,null,c(n.segments,(s,r)=>(l(),i("g",{key:s.id},[e("path",{d:o(h)(r),fill:s.color||(r%2===0?"#111827":"#1e1b4b"),stroke:"#00f0ff","stroke-width":"1.5","stroke-opacity":"0.8"},null,8,F),e("g",{transform:o(y)(r)},[e("text",L,b(o(_)(s.title)),1),s.image?(l(),i("image",{key:0,href:s.image,x:"138",y:"54",width:"24",height:"24"},null,8,N)):v("",!0)],8,z)]))),128)),(l(!0),i(a,null,c(o(g),(s,r)=>(l(),i("g",{key:r},[e("circle",{cx:s.x,cy:s.y,r:"3.2",fill:"#05070e",stroke:"#00f0ff","stroke-width":"1"},null,8,P),e("circle",{cx:s.x,cy:s.y,r:"1.5",fill:"#00f0ff"},null,8,D)]))),128)),t[0]||(t[0]=e("circle",{cx:"150",cy:"150",r:"32",fill:"#05070e",stroke:"#00f0ff","stroke-width":"2"},null,-1)),t[1]||(t[1]=e("circle",{cx:"150",cy:"150",r:"22",fill:"#1e1b4b",stroke:"#ec4899","stroke-width":"2"},null,-1)),t[2]||(t[2]=e("circle",{cx:"150",cy:"150",r:"10",fill:"#00f0ff",class:"animate-ping",opacity:"0.3"},null,-1)),t[3]||(t[3]=e("circle",{cx:"150",cy:"150",r:"8",fill:"#00f0ff"},null,-1))],4))])]),e("div",R,[e("div",{style:f(o(x)),class:"w-[34px] h-[42px] origin-[50%_10px] will-change-transform"},[...t[4]||(t[4]=[e("svg",{width:"34",height:"42",viewBox:"0 0 34 42",fill:"none",class:"overflow-visible"},[e("path",{d:"M17 42L4 12C2 7 6 2 11 2H23C28 2 32 7 30 12L17 42Z",fill:"#00f0ff",stroke:"#ffffff","stroke-width":"1.5"}),e("circle",{cx:"17",cy:"10",r:"4",fill:"#ff007f"})],-1)])],4)])]))}});export{E as default};
@@ -0,0 +1 @@
import{u as k,t as v}from"./wheel-classiccasinowheel-DHnlMe5J.js";import{d as B,a as l,b as o,e,n as c,u as i,F as d,f as h,t as C,g as S,c as P}from"./vendor-vue-kYoPQr5S.js";const z={class:"relative w-full max-w-[340px] xs:max-w-[380px] sm:max-w-[420px] aspect-square mx-auto select-none"},F={class:"absolute inset-0 rounded-full p-3.5 bg-amber-400 border-4 border-amber-600 shadow-[0_12px_0_#b45309,0_20px_25px_rgba(0,0,0,0.5)]"},L={class:"w-full h-full rounded-full border-4 border-white relative overflow-hidden bg-amber-50"},D=["d","fill"],N=["transform"],R={x:"150",y:"45","text-anchor":"middle",fill:"#ffffff","font-size":"12","font-weight":"900",class:"wheel-slice-text font-sans tracking-wide",style:{"paint-order":"stroke fill",stroke:"rgba(0,0,0,0.3)","stroke-width":"2px"}},V=["href"],W=["cx","cy"],q=["cx","cy","fill"],E=["cx","cy"],H={class:"absolute -top-4 left-1/2 -translate-x-1/2 z-20 pointer-events-none drop-shadow-[0_6px_0_#991b1b]"},T=B({__name:"PlayfulCartoonWheel",props:{segments:{},targetSegmentIndex:{},spinning:{type:Boolean}},emits:["spin-finished"],setup(n,{emit:x}){const u=n,m=x,{wheelStyle:p,pointerStyle:w,getSlicePath:y,getTextRotation:_,makePegs:b}=k(u,()=>m("spin-finished"),{radius:138,pegRadius:142}),f=["#f43f5e","#8b5cf6","#06b6d4","#10b981","#f59e0b","#ec4899"],g=P(()=>b(24,142).map((a,s)=>({...a,color:f[s%f.length]})));return(a,s)=>(l(),o("div",z,[e("div",F,[e("div",L,[(l(),o("svg",{class:"w-full h-full",style:c(i(p)),viewBox:"0 0 300 300"},[(l(!0),o(d,null,h(n.segments,(t,r)=>(l(),o("g",{key:t.id},[e("path",{d:i(y)(r),fill:t.color||f[r%f.length],stroke:"#ffffff","stroke-width":"3"},null,8,D),e("g",{transform:i(_)(r)},[e("text",R,C(i(v)(t.title)),1),t.image?(l(),o("image",{key:0,href:t.image,x:"138",y:"54",width:"24",height:"24"},null,8,V)):S("",!0)],8,N)]))),128)),(l(!0),o(d,null,h(g.value,(t,r)=>(l(),o("g",{key:r},[e("circle",{cx:t.x,cy:t.y,r:"4",fill:"#ffffff",stroke:"#b45309","stroke-width":"1.5"},null,8,W),e("circle",{cx:t.x,cy:t.y,r:"2.8",fill:t.color},null,8,q),e("circle",{cx:t.x-.8,cy:t.y-.8,r:"0.8",fill:"#ffffff"},null,8,E)]))),128)),s[0]||(s[0]=e("circle",{cx:"150",cy:"150",r:"32",fill:"#ef4444",stroke:"#ffffff","stroke-width":"4"},null,-1)),s[1]||(s[1]=e("circle",{cx:"150",cy:"150",r:"22",fill:"#facc15",stroke:"#b45309","stroke-width":"2"},null,-1)),s[2]||(s[2]=e("text",{x:"150",y:"157","text-anchor":"middle","font-size":"20"},"✨",-1))],4))])]),e("div",H,[e("div",{style:c(i(w)),class:"w-[42px] h-[50px] origin-[50%_14px] will-change-transform"},[...s[3]||(s[3]=[e("svg",{width:"42",height:"50",viewBox:"0 0 42 50",fill:"none",class:"overflow-visible"},[e("path",{d:"M21 50L6 16C4 11 8 4 14 4H28C34 4 38 11 36 16L21 50Z",fill:"#ef4444",stroke:"#ffffff","stroke-width":"3"}),e("circle",{cx:"21",cy:"14",r:"6",fill:"#facc15",stroke:"#ffffff","stroke-width":"2"})],-1)])],4)])]))}});export{T as default};
@@ -0,0 +1 @@
import{u as g,t as _}from"./wheel-classiccasinowheel-DHnlMe5J.js";import{d as b,a as s,b as l,e,n as c,u as i,F as d,f,t as v,g as B,h as S}from"./vendor-vue-kYoPQr5S.js";const C={class:"relative w-full max-w-[340px] xs:max-w-[380px] sm:max-w-[420px] aspect-square mx-auto select-none"},F={class:"absolute inset-0 rounded-full p-3 shadow-[0_12px_30px_rgba(60,30,10,0.55)]",style:{background:"linear-gradient(145deg, #c9a36a 0%, #6b3f1e 40%, #3e2412 100%)"}},z={class:"w-full h-full rounded-full border-[3px] border-[#c9a36a] relative overflow-hidden",style:{background:"radial-gradient(circle at 40% 35%, #5c3a1e 0%, #2a160c 70%)"}},A=["d","fill"],D=["transform"],G={x:"150",y:"45","text-anchor":"middle",fill:"#fff8e7","font-size":"11","font-weight":"700",class:"wheel-slice-text font-sans"},H=["href"],L=["cx","cy"],N=["cx","cy"],R=["x1","y1","x2","y2"],V={class:"absolute -top-3 left-1/2 -translate-x-1/2 z-20 pointer-events-none drop-shadow-lg"},E=b({__name:"RusticWoodWheel",props:{segments:{},targetSegmentIndex:{},spinning:{type:Boolean}},emits:["spin-finished"],setup(a,{emit:x}){const u=a,h=x,{wheelStyle:p,pointerStyle:y,getSlicePath:m,getTextRotation:w,pegs:k}=g(u,()=>h("spin-finished"),{radius:138,pegRadius:143}),n=["#8B5A2B","#A0522D","#6B4226","#C4A484","#8B5A2B","#5D4037"];return(W,o)=>(s(),l("div",C,[e("div",F,[e("div",z,[(s(),l("svg",{class:"w-full h-full",style:c(i(p)),viewBox:"0 0 300 300"},[o[0]||(o[0]=e("circle",{cx:"150",cy:"150",r:"136",fill:"none",stroke:"#4a2c14","stroke-width":"8",opacity:"0.35"},null,-1)),o[1]||(o[1]=e("circle",{cx:"150",cy:"150",r:"120",fill:"none",stroke:"#7a4a22","stroke-width":"2",opacity:"0.25"},null,-1)),(s(!0),l(d,null,f(a.segments,(t,r)=>(s(),l("g",{key:t.id},[e("path",{d:i(m)(r),fill:t.color||n[r%n.length],stroke:"#3e2723","stroke-width":"1.5"},null,8,A),e("g",{transform:i(w)(r)},[e("text",G,v(i(_)(t.title)),1),t.image?(s(),l("image",{key:0,href:t.image,x:"138",y:"54",width:"24",height:"24"},null,8,H)):B("",!0)],8,D)]))),128)),(s(!0),l(d,null,f(i(k),(t,r)=>(s(),l("g",{key:r},[e("circle",{cx:t.x,cy:t.y,r:"4",fill:"#2c1810",stroke:"#8d6e63","stroke-width":"0.8"},null,8,L),e("circle",{cx:t.x,cy:t.y,r:"2.6",fill:"url(#woodBolt)"},null,8,N),e("line",{x1:t.x-1.6,y1:t.y,x2:t.x+1.6,y2:t.y,stroke:"#5d4037","stroke-width":"0.7"},null,8,R)]))),128)),o[2]||(o[2]=S('<circle cx="150" cy="150" r="30" fill="url(#woodHub)" stroke="#d7ccc8" stroke-width="2"></circle><circle cx="150" cy="150" r="18" fill="#3e2723" stroke="#a1887f" stroke-width="1.5"></circle><text x="150" y="156" text-anchor="middle" font-size="14" fill="#efebe9">🪵</text><defs><radialGradient id="woodBolt" cx="35%" cy="30%" r="70%"><stop offset="0%" stop-color="#efebe9"></stop><stop offset="50%" stop-color="#9e9e9e"></stop><stop offset="100%" stop-color="#424242"></stop></radialGradient><radialGradient id="woodHub" cx="40%" cy="35%" r="65%"><stop offset="0%" stop-color="#bcaaa4"></stop><stop offset="100%" stop-color="#5d4037"></stop></radialGradient></defs>',4))],4))])]),e("div",V,[e("div",{style:c(i(y)),class:"w-9 h-[44px] origin-[50%_12px] will-change-transform"},[...o[3]||(o[3]=[e("svg",{width:"36",height:"44",viewBox:"0 0 36 44",fill:"none"},[e("path",{d:"M18 44L5 14C3 9 7 3 12 3H24C29 3 33 9 31 14L18 44Z",fill:"#8d6e63",stroke:"#efebe9","stroke-width":"1.5"}),e("circle",{cx:"18",cy:"12",r:"4.5",fill:"#5d4037",stroke:"#d7ccc8","stroke-width":"1.2"})],-1)])],4)])]))}});export{E as default};
+19
View File
@@ -0,0 +1,19 @@
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🎡</text></svg>" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>گردونه شانس و قرعه‌کشی</title>
<!-- Google Font Vazirmatn -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Vazirmatn:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
<script type="module" crossorigin src="/assets/index-DZsNn1RR.js"></script>
<link rel="modulepreload" crossorigin href="/assets/vendor-vue-kYoPQr5S.js">
<link rel="stylesheet" crossorigin href="/assets/index-nuCNT7vr.css">
</head>
<body class="bg-slate-900 text-slate-100 font-sans antialiased selection:bg-brand-500 selection:text-white overflow-x-hidden min-h-screen">
<div id="app"></div>␍
</body>
</html>
+19 -5
View File
@@ -1,9 +1,18 @@
server {
listen 80;
server_name localhost;
server_name _;
root /usr/share/nginx/html;
index index.html;
# Docker's embedded DNS. Without re-resolving at request time, nginx caches the
# api container's IP from startup and keeps returning 502 ("no live upstreams")
# after the api container restarts with a new IP.
resolver 127.0.0.11 valid=10s ipv6=off;
location /api/ {
proxy_pass http://api:3000/api/;
set $api_upstream http://luckywheel-api:3000;
proxy_pass $api_upstream$request_uri;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
@@ -15,7 +24,8 @@ server {
}
location /uploads/ {
proxy_pass http://api:3000/uploads/;
set $api_upstream http://luckywheel-api:3000;
proxy_pass $api_upstream$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@@ -23,8 +33,12 @@ server {
}
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ~* \.(?:ico|css|js|gif|jpe?g|png|woff2?|eot|ttf|svg)$ {
expires 6M;
access_log off;
add_header Cache-Control "public";
}
}