gentelella
Version:
Gentelella v4 — free admin template. 60 pages, 20 chart variants, fully interactive inbox & kanban, live theme generator, component playground, PWA-ready. Vite 8, vanilla JS, no Bootstrap, no jQuery.
2 lines • 3.21 kB
JavaScript
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/details-ei_iEF3Z.js","js/toast-DgCSlJPv.js","js/rolldown-runtime-DEgBLETi.js","js/modal-MTuCfURV.js"])))=>i.map(i=>d[i]);
import{t as e}from"./main-v4-BFwmMcfm.js";var r=[["Acme Website Redesign","Acme Corp","On track","green","Refresh of the public marketing site with new brand identity.",78,"Apr 30",["SK","MR","EW"]],["Mobile App v2","Globex Inc","At risk","yellow","Major rewrite of the iOS/Android app on shared React Native core.",42,"Jun 15",["MK","LP","DR","YT"]],["Internal Dashboard","Initech","On track","green","New analytics dashboard replacing the legacy Tableau setup.",91,"May 12",["TH","MR"]],["Q2 Marketing Campaign","Acme Corp","On track","green","Cross-channel campaign for the new product line launch.",33,"May 28",["LP","EW","SK"]],["Payment Migration","Stark Ind.","Blocked","red","Move from legacy gateway to new processor with zero downtime.",18,"Jul 02",["DR","MK"]],["Design System v3","Internal","On track","green","Tokens, components, and Figma library refresh for v4 era.",64,"May 20",["SK","EW","LP","TH"]],["Help Center Rewrite","Umbrella Co","On hold","yellow","Migration to new docs platform with full content audit.",5,"TBD",["YT","MR"]],["SOC 2 Compliance","Internal","On track","green","Type II audit prep with controls, evidence, and policies.",72,"Jun 30",["DR","TH"]],["Pricing Experiment","Tyrell Corp","On track","green","A/B test of three new pricing tiers across funnel.",50,"May 05",["LP","MK"]]],n={primary:"var(--primary)",azure:"var(--azure)",purple:"var(--purple)",yellow:"var(--yellow)",red:"var(--red)",green:"var(--green)",blue:"var(--blue)"},a={SK:"azure",MR:"purple",EW:"yellow",MK:"red",LP:"green",DR:"blue",YT:"primary",TH:"purple"},t={green:"status-green",yellow:"status-yellow",red:"status-red"},s=document.getElementById("projects-grid");s.innerHTML=r.map(([e,r,s,i,o,l,d,c],p)=>`\n <button type="button" class="project-card" data-idx="${p}">\n <div class="top">\n <div>\n <div class="title">${e}</div>\n <div class="client">${r}</div>\n </div>\n <span class="status ${t[i]}">${s}</span>\n </div>\n <div class="desc">${o}</div>\n <div>\n <div style="display:flex;justify-content:space-between;font-size:11.5px;color:var(--text-muted);margin-bottom:4px">\n <span>Progress</span><span class="cell-strong">${l}%</span>\n </div>\n <div class="progress-thin"><div class="bar" style="width:${l}%;background:var(--${"red"===i?"red":"yellow"===i?"yellow":"primary"})"></div></div>\n </div>\n <div class="footer-row">\n <div class="avatars">\n ${c.map(e=>`<div class="av" style="background:${n[a[e]||"primary"]}">${e}</div>`).join("")}\n </div>\n <span>Due ${d}</span>\n </div>\n </button>\n`).join(""),e(async()=>{const{openProjectModal:e}=await import("./details-ei_iEF3Z.js");return{openProjectModal:e}},__vite__mapDeps([0,1,2,3])).then(({openProjectModal:e})=>{s.addEventListener("click",n=>{const a=n.target.closest(".project-card");if(!a)return;const t=parseInt(a.dataset.idx,10),s=r[t];if(!s)return;const[i,o,l,d,c,p,v,u]=s;e({title:i,client:o,status:l,sCls:d,desc:c,pct:p,due:v,members:u})})});