1import{r as t,s as E,j as e,H as te,C as ce,a as re}from"./index-BRZMNX8L.js";import{u as le}from"./usePageMeta-D3csaMKr.js";import{u as de}from"./useCanonical-swqe_rYG.js";const P=[{code:"fr",label:"France",flag:"ð«ð·"},{code:"be",label:"Belgique",flag:"ð§ðª"}],B=[{code:"pvt",label:"PVT",emoji:"ð"},{code:"yp",label:"Jeunes Pro",emoji:"ð¼"},{code:"coop",label:"Stage Coop",emoji:"ð"},{code:"vie",label:"VIE",emoji:"ð¢"}];function l(i){return i.toLocaleString("fr-FR").replace(/â¯/g," ")}function O(i,n){return Math.round((n.getTime()-i.getTime())/864e5)}function oe(i,n){const d=new Date(i);return d.setDate(d.getDate()+n),d}function ue(i){if(!i)return"jamais";const n=O(new Date(i),new Date);return n===0?"aujourd'hui":n===1?"hier":n<7?`il y a ${n} jours`:new Date(i).toLocaleDateString("fr-FR")}function U(i){const n=new Date(i.slice(0,10)+"T12:00:00Z");return`${n.getUTCDate()} ${n.toLocaleDateString("fr-FR",{month:"short",timeZone:"UTC"})}`}function S(i){const n=new Date(i);return`sem. du ${n.getDate()} ${n.toLocaleDateString("fr-FR",{month:"short"})}`}function me(i){return i?oe(new Date(i),7):null}function he(i){const n=new Map;for(const d of i){const f=`${d.country_code}/${d.category}`,m=n.get(f);(!m||d.season_year>m.season_year||d.season_year===m.season_year&&m.status==="closed"&&d.status!=="closed")&&n.set(f,d)}return[...n.values()]}function fe(){var F,L;const[i,n]=t.useState("fr"),[d,f]=t.useState("pvt"),[m,z]=t.useState([]),_=m.length?Math.max(...m.map(s=>s.season_year)):new Date().getFullYear();le({title:`Tracker EIC Canada ${_} · rondes, quotas, places restantes · pvtistes.ai`,description:`Suivez en direct le bassin EIC Canada ${_} : places restantes, historique des rondes, quota par catégorie (PVT, Jeunes Pro, Stage Coop) pour la France et la Belgique.`}),de("/tracker-eic");const[R,H]=t.useState([]),[I,V]=t.useState([]),[J,M]=t.useState(!0),[T,Q]=t.useState(new Date),[q,W]=t.useState(""),[x,Z]=t.useState(null),[je,xe]=t.useState(""),[pe,ve]=t.useState(!1),G=!1;t.useEffect(()=>{const s=setInterval(()=>Q(new Date),6e4);return()=>clearInterval(s)},[]),t.useEffect(()=>{(async()=>{M(!0);const{data:s}=await E.from("eic_pools").select("*"),{data:r}=await E.from("eic_rounds").select("*").order("round_number",{ascending:!0}),{data:p}=await E.from("eic_quota_changes").select("*").order("captured_at",{ascending:!0});z(he(s??[])),H(r??[]),V(p??[]),M(!1)})()},[]);const a=t.useMemo(()=>m.find(s=>s.country_code===i&&s.category===d)??null,[m,i,d]),D=t.useMemo(()=>a?I.filter(s=>s.pool_id===a.id):[],[a,I]),w=D[D.length-1],o=w&&Date.now()-new Date(w.data_date??w.captured_at).getTime()<30*864e5?w:null,h=t.useMemo(()=>a?R.filter(s=>s.pool_id===a.id&&!s.is_test_round):[],[a,R]),Y=t.useMemo(()=>new Set(m.filter(r=>r.country_code===i).map(r=>r.category)),[m,i]),k=a&&a.quota>0?Math.min(100,(a.quota-(a.seats_remaining??0))/a.quota*100):0,$=k>=100&&((a==null?void 0:a.seats_remaining)??0)===0?"100":(Math.floor(k*10)/10).toLocaleString("fr-FR",{maximumFractionDigits:1}),K=a?Math.max(0,a.quota-(a.seats_remaining??0)):0,c=h[h.length-1],A=h[h.length-2],C=c&&A?c.invitations-A.invitations:0,N=me((c==null?void 0:c.round_week)??null),g=t.useMemo(()=>{if(!N)return null;const s=N.getTime()-T.getTime();return s<=0?{days:0,hours:0,minutes:0,past:!0}:{days:Math.floor(s/864e5),hours:Math.floor(s%864e5/36e5),minutes:Math.floor(s%36e5/6e4),past:!1}},[N,T]),b=t.useMemo(()=>h.slice(-15),[h]),X=Math.max(1,...b.map(s=>s.invitations)),ee=()=>{if(!q||!a)return;const s=new Date(q),r=O(s,new Date);if(r<0)return;const p=h.filter(y=>new Date(y.round_week)>=s).length;Z({days:r,rounds:p})},se=(a==null?void 0:a.status)==="closed"?"Fermé":(a==null?void 0:a.status)==="closing_soon"?"Bientôt clos":"Ouvert";return e.jsxs("div",{className:"eic-root",children:[e.jsx("div",{className:"eic-blob eic-blob-1"}),e.jsx("div",{className:"eic-blob eic-blob-2"}),e.jsx("div",{className:"eic-blob eic-blob-3"}),e.jsx(te,{}),e.jsxs("div",{className:"eic-nuit",children:[e.jsxs("div",{className:"eic-update-banner",children:[e.jsx("span",{className:"eic-live-dot"}),e.jsxs("span",{children:["Données mises à jour ",e.jsx("strong",{children:ue((a==null?void 0:a.last_scraped_at)??null)})]})]}),e.jsxs("section",{className:"eic-header",children:[e.jsxs("span",{className:"eic-header-tag",children:[e.jsx("span",{className:"eic-pulse"}),"Tracker EIC Canada ",(a==null?void 0:a.season_year)??_]}),e.jsxs("h1",{className:"eic-h1",children:["Le PVT Canada, ",e.jsx("span",{className:"hl",children:"en temps réel."})]}),e.jsxs("p",{className:"eic-sub",children:["Suivez les ",e.jsx("strong",{children:"places restantes"}),", l'historique des rondes et la progression du quota EIC Canada pour la France et la Belgique. Données rafraîchies chaque semaine à partir d'IRCC et pvtistes.net."]})]}),e.jsxs("section",{className:"eic-selectors",children:[e.jsx("div",{className:"eic-pill-row",children:P.map(s=>e.jsxs("button",{className:`eic-pill ${i===s.code?"eic-pill-active":""}`,onClick:()=>n(s.code),children:[e.jsx("span",{className:"eic-pill-emoji",style:{display:"inline-flex",alignItems:"center"},children:e.jsx(ce,{code:s.code,name:s.label,size:"sm"})}),s.label]},s.code))}),e.jsx("div",{className:"eic-pill-row",children:B.map(s=>{const r=Y.has(s.code);return e.jsxs("button",{className:`eic-pill ${d===s.code?"eic-pill-active":""}`,onClick:()=>r&&f(s.code),disabled:!r,title:r?"":"Non proposé pour ce pays",children:[e.jsx("span",{className:"eic-pill-emoji",children:s.emoji}),s.label]},s.code)})})]})]}),a&&e.jsxs("div",{className:"eic-mrz","aria-hidden":"true",children:[e.jsx("span",{children:`EIC<CAN<${a.country_code.toUpperCase()}<${a.category.toUpperCase()}<<QUOTA<${a.quota}<<PLACES<${a.seats_remaining}<<BASSIN<${a.pool_size}`.padEnd(160,"<")}),e.jsx("span",{children:`SAISON<${a.season_year}<<RONDE<${(c==null?void 0:c.round_number)??0}<<INVITATIONS<${(c==null?void 0:c.invitations)??0}<<${$.replace(",","<")}<POURCENT`.padEnd(160,"<")})]}),J||!a?e.jsx("div",{className:"eic-loading",children:"Chargement des données EICâ¦"}):e.jsxs("div",{className:"eic-dash",children:[e.jsxs("div",{className:"eic-hero-card",children:[e.jsxs("div",{className:"eic-hero-left",children:[e.jsxs("span",{className:`eic-hero-status ${a.status==="closed"?"closed":""}`,children:[e.jsx("span",{className:"eic-live-dot"}),"Bassin ",se," · Saison ",a.season_year]}),e.jsx("div",{className:"eic-hero-num",children:l(a.seats_remaining)}),e.jsxs("div",{className:"eic-hero-label",children:["places restantes sur ",l(a.quota)]}),e.jsxs("div",{className:"eic-hero-meta",children:[e.jsxs("span",{className:"eic-hero-trend",children:["â² ",$," % du quota atteint"]}),e.jsxs("span",{children:["Dernière ronde : ",c?S(c.round_week):"â"]})]}),o&&e.jsxs("div",{className:"eic-hero-quota",children:[o.nouveau_quota>o.ancien_quota?"â²":"â¼"," ",o.nouveau_quota>o.ancien_quota?"+":"â",l(Math.abs(o.nouveau_quota-o.ancien_quota))," places"," ",o.nouveau_quota>o.ancien_quota?"ajoutées au":"retirées du"," quota le ",U(o.data_date??o.captured_at)," ","(",l(o.ancien_quota)," â ",l(o.nouveau_quota),")"]})]}),G]}),e.jsxs("div",{className:"eic-mini-stats",children:[e.jsxs("div",{className:"eic-mini",children:[e.jsx("div",{className:"eic-mini-icon",children:"ð
"}
1),e.jsxs("div",{className:"eic-mini-num",children:[c?c.round_number:"â"," ",e.jsx("small",{children:"rondes"})]}),e.jsx("div",{className:"eic-mini-label",children:"Rondes effectuées"}),e.jsxs("div",{className:"eic-mini-meta",children:["Dernière : ",c?S(c.round_week):"â"]})]}),e.jsxs("div",{className:"eic-mini",children:[e.jsx("div",{className:"eic-mini-icon",children:"ð¯"}),e.jsx("div",{className:"eic-mini-num",children:c?l(c.invitations):"â"}),e.jsx("div",{className:"eic-mini-label",children:"Invitations dernière ronde"}),e.jsx("div",{className:"eic-mini-meta",children:C>0?`â² +${l(C)} vs précédente`:C<0?`â¼ ${l(C)} vs précédente`:"Stable"})]}),e.jsxs("div",{className:"eic-mini",children:[e.jsx("div",{className:"eic-mini-icon",children:"ð¥"}),e.jsx("div",{className:"eic-mini-num",children:l(a.pool_size)}),e.jsx("div",{className:"eic-mini-label",children:"Candidats dans le bassin"}),e.jsx("div",{className:"eic-mini-meta",children:"en attente d'invitation"})]}),e.jsxs("div",{className:"eic-mini",children:[e.jsx("div",{className:"eic-mini-icon",children:"ð"}),e.jsxs("div",{className:"eic-mini-num",children:[$,e.jsx("small",{children:"%"})]}),e.jsx("div",{className:"eic-mini-label",children:"Quota atteint"}),e.jsxs("div",{className:"eic-mini-meta",children:[l(K)," / ",l(a.quota)," places attribuées"]})]})]}),e.jsxs("div",{className:"eic-card",children:[e.jsx("div",{className:"eic-card-head",children:e.jsxs("div",{className:"eic-card-title",children:[e.jsx("span",{children:"ð"}),b.length," dernières rondes"]})}),b.length===0?e.jsx("div",{className:"eic-loading",children:"Pas encore de rondes pour ce bassin."}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"eic-chart-wrap",children:b.map(s=>{const r=Math.max(4,s.invitations/X*100);return e.jsx("div",{className:"eic-bar",style:{height:`${r}%`},children:e.jsxs("div",{className:"eic-bar-tip",children:[l(s.invitations)," invitations",e.jsxs("small",{children:["Ronde ",s.round_number," · ",S(s.round_week)]})]})},s.id)})}),e.jsx("div",{className:"eic-chart-x",children:b.map(s=>e.jsxs("span",{children:["R",s.round_number]},s.id))})]})]}),e.jsxs("div",{className:"eic-countdown",children:[e.jsx("div",{className:"eic-cd-label",children:"Prochaine ronde estimée"}),e.jsx("div",{className:"eic-cd-title",children:N?`Semaine du ${N.toLocaleDateString("fr-FR",{day:"numeric",month:"long"})}`:"Aucune ronde prévue"}),g&&!g.past?e.jsxs("div",{className:"eic-cd-grid",children:[e.jsxs("div",{className:"eic-cd-unit",children:[e.jsx("div",{className:"eic-cd-unit-num",children:String(g.days).padStart(2,"0")}),e.jsx("div",{className:"eic-cd-unit-label",children:"Jours"})]}),e.jsxs("div",{className:"eic-cd-unit",children:[e.jsx("div",{className:"eic-cd-unit-num",children:String(g.hours).padStart(2,"0")}),e.jsx("div",{className:"eic-cd-unit-label",children:"Heures"})]}),e.jsxs("div",{className:"eic-cd-unit",children:[e.jsx("div",{className:"eic-cd-unit-num",children:String(g.minutes).padStart(2,"0")}),e.jsx("div",{className:"eic-cd-unit-label",children:"Min"})]})]}):null,e.jsx("div",{className:"eic-cd-note",children:"Estimation basée sur le rythme hebdomadaire habituel (lundi soir / mardi matin). Les dates peuvent varier â IRCC publie les chiffres le vendredi."})]}),e.jsxs("div",{className:"eic-waiting",children:[e.jsxs("h3",{children:["T'attends depuis ",e.jsx("span",{className:"accent",children:"combien de temps"})," ?"]}),e.jsx("p",{children:"Entre la date de ton dépôt dans le bassin pour savoir combien de rondes ont eu lieu depuis."}),e.jsxs("div",{className:"eic-waiting-row",children:[e.jsx("input",{type:"date",className:"eic-waiting-input",value:q,onChange:s=>W(s.target.value)}),e.jsx("button",{className:"eic-waiting-btn",onClick:ee,children:"Calculer â"})]}),x&&e.jsxs("div",{className:"eic-waiting-result",children:[e.jsx("div",{className:"eic-waiting-result-num",children:x.days===0?"Aujourd'hui":`${x.days} jour${x.days>1?"s":""}`}),e.jsx("div",{className:"eic-waiting-result-label",children:"d'attente depuis ton dépôt"}),e.jsxs("div",{className:"eic-waiting-result-meta",children:[e.jsxs("strong",{children:[x.rounds," ronde",x.rounds>1?"s ont eu lieu":" a eu lieu"]})," depuis ton dépôt dans le bassin"," ",(F=P.find(s=>
1s.code===i))==null?void 0:F.label," ",(L=B.find(s=>s.code===d))==null?void 0:L.label,". Reste connecté à ton compte IRCC chaque mardi."]})]})]}),e.jsxs("div",{className:"eic-draws",children:[e.jsx("div",{className:"eic-draws-head",children:e.jsxs("div",{className:"eic-card-title",children:[e.jsx("span",{children:"ð"}),"Historique des rondes ",(a==null?void 0:a.season_year)??_]})}),e.jsx("div",{className:"eic-table-wrap",children:e.jsxs("table",{className:"eic-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Ronde"}),e.jsx("th",{children:"Semaine"}),e.jsx("th",{style:{textAlign:"right"},children:"Invitations"}),e.jsx("th",{style:{textAlign:"right"},children:"Ãvolution"})]})}),e.jsx("tbody",{children:[...h].reverse().map((s,r,p)=>{const y=p[r+1],ae=D.filter(u=>{const j=(u.data_date??u.captured_at).slice(0,10);return r===0?j>=s.round_week:j>=s.round_week&&j<p[r-1].round_week}),v=y?s.invitations-y.invitations:0,ie=v>0?"up":v<0?"down":"flat",ne=v>0?"â²":v<0?"â¼":"â";return e.jsxs(t.Fragment,{children:[ae.map(u=>{const j=u.nouveau_quota>u.ancien_quota;return e.jsxs("tr",{className:"eic-quota-row",children:[e.jsx("td",{children:j?"Places ajoutées":"Places retirées"}),e.jsx("td",{children:U(u.data_date??u.captured_at)}),e.jsxs("td",{className:"eic-num",colSpan:2,style:{textAlign:"right"},children:[e.jsxs("span",{className:`eic-trend ${j?"up":"down"}`,children:[j?"+":"â",l(Math.abs(u.nouveau_quota-u.ancien_quota))," au quota"]})," ",e.jsxs("small",{children:["(",l(u.ancien_quota)," â ",l(u.nouveau_quota),")"]})]})]},u.id)}),e.jsxs("tr",{children:[e.jsxs("td",{children:["Ronde ",s.round_number]}),e.jsx("td",{children:S(s.round_week)}),e.jsx("td",{className:"eic-num",children:l(s.invitations)}),e.jsx("td",{style:{textAlign:"right"},children:e.jsxs("span",{className:`eic-trend ${ie}`,children:[ne," ",v!==0?l(Math.abs(v)):"â"]})})]})]},s.id)})})]})})]}),e.jsxs("div",{className:"eic-sources",children:["Sources :"," ",e.jsx("a",{href:a.source_url,target:"_blank",rel:"noopener noreferrer",children:"IRCC officiel"})," ","·"," ",e.jsx("a",{href:"https://pvtistes.net/pvt-canada-2026/",target:"_blank",rel:"noopener noreferrer",children:"pvtistes.net"})]})]}),e.jsx(re,{})]})}export{fe as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.