PageSourceSearch

https://aventislearning.sg/assets/Certificates-CtydQdY_.js

js aventislearning.sg collected 2026-10-09 21:20:13 UTC 34,543 bytes, 21 lines download raw bytes

1import{r as S,j as e}from"./vendor-react-WWe_5588.js";import{i as z,F as L,t as x,k as r,C as p,d as f,s as U,n as D,o as E,a1 as M,B as N,I as w,q as k,y as u,D as K,a0 as Z}from"./index-DgQF9_9e.js";import{A as ee,S as ae,F as V,U as te}from"./AdminLayout-tLyShkyC.js";import{T as se,a as ie,b as B,c as W}from"./tabs-CvW09hDk.js";import{S as Q}from"./settings-2-9zOgmzoV.js";import{C as G}from"./circle-x-BZr439Ch.js";import{C as _}from"./clock-CdJOQHtI.js";import{L as Y}from"./linkedin-Uk_u8RUL.js";import{C as ce}from"./chevron-up-CAHVt4u1.js";import{C as re}from"./chevron-down-Bxs8NxVX.js";import{R as P}from"./refresh-cw-CuVw6eu8.js";import{S as H}from"./shield-check-BqKmdDg3.js";import{U as le}from"./upload-jK9a0u4R.js";import{E as ne}from"./eye-CrYUZRMi.js";import"./vendor-radix-WTULBCDH.js";import"./vendor-tiptap-T0AR0VUJ.js";import"./calendar-days-Cb4h0H80.js";import"./log-out-DX4cBk2Y.js";import"./tag-C-1CmtAH.js";import"./newspaper-DVf2oWLo.js";/**
2 * @license lucide-react v0.453.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const de=z("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/**
7 * @license lucide-react v0.453.0 - ISC
8 *
9 * This source code is licensed under the ISC license.
10 * See the LICENSE file in the root directory of this source tree.
11 */const oe=z("ImagePlay",[["path",{d:"m11 16-5 5",key:"j5f7ct"}],["path",{d:"M11 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v6.5",key:"7s81lt"}],["path",{d:"M15.765 22a.5.5 0 0 1-.765-.424V13.38a.5.5 0 0 1 .765-.424l5.878 3.674a1 1 0 0 1 0 1.696z",key:"1omb6s"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}]]);/**
12 * @license lucide-react v0.453.0 - ISC
13 *
14 * This source code is licensed under the ISC license.
15 * See the LICENSE file in the root directory of this source tree.
16 */const me=z("Share2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]);/**
17 * @license lucide-react v0.453.0 - ISC
18 *
19 * This source code is licensed under the ISC license.
20 * See the LICENSE file in the root directory of this source tree.
21 */const X=z("ShieldOff",[["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M5 5a1 1 0 0 0-1 1v7c0 5 3.5 7.5 7.67 8.94a1 1 0 0 0 .67.01c2.35-.82 4.48-1.97 5.9-3.71",key:"1jlk70"}],["path",{d:"M9.309 3.652A12.252 12.252 0 0 0 11.24 2.28a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1v7a9.784 9.784 0 0 1-.08 1.264",key:"18rp1v"}]]),J={studentName:{x:50,y:45,fontSize:36,fontColor:"#1a1a2e",fontWeight:"bold"},courseTitle:{x:50,y:55,fontSize:22,fontColor:"#16213e",fontWeight:"bold"},completionDate:{x:50,y:65,fontSize:14,fontColor:"#333333",fontWeight:"normal"},trainerName:{x:50,y:72,fontSize:14,fontColor:"#333333",fontWeight:"normal"},credentialId:{x:50,y:90,fontSize:10,fontColor:"#666666",fontWeight:"normal"}};function Re(){const[i,n]=S.useState("certificates");return e.jsx(ee,{"data-loc":"client/src/pages/admin/Certificates.tsx:47",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:48",className:"space-y-6",children:[e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:49",className:"flex items-center justify-between",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:50",children:[e.jsx("h1",{"data-loc":"client/src/pages/admin/Certificates.tsx:51",className:"text-2xl font-bold text-gray-900",children:"E-Certificates"}),e.jsx("p",{"data-loc":"client/src/pages/admin/Certificates.tsx:52",className:"text-gray-500 mt-1",children:"Manage certificate generation, templates, and delivery"})]})}),e.jsxs(se,{"data-loc":"client/src/pages/admin/Certificates.tsx:56",value:i,onValueChange:n,children:[e.jsxs(ie,{"data-loc":"client/src/pages/admin/Certificates.tsx:57",children:[e.jsxs(B,{"data-loc":"client/src/pages/admin/Certificates.tsx:58",value:"certificates",children:[e.jsx(L,{"data-loc":"client/src/pages/admin/Certificates.tsx:59",className:"w-4 h-4 mr-2"}),"Certificates"]}),e.jsxs(B,{"data-loc":"client/src/pages/admin/Certificates.tsx:62",value:"template",children:[e.jsx(Q,{"data-loc":"client/src/pages/admin/Certificates.tsx:63",className:"w-4 h-4 mr-2"}),"Template Settings"]})]}),e.jsx(W,{"data-loc":"client/src/pages/admin/Certificates.tsx:68",value:"certificates",children:e.jsx(ge,{"data-loc":"client/src/pages/admin/Certificates.tsx:69"})}),e.jsx(W,{"data-loc":"client/src/pages/admin/Certificates.tsx:72",value:"template",children:e.jsx(pe,{"data-loc":"client/src/pages/admin/Certificates.tsx:73"})})]})]})})}function xe({certId:i,verificationToken:n}){const{data:c,isLoading:o}=x.certificates.getCertificateEngagement.useQuery({id:i},{enabled:!!n});if(!n)return e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:95",className:"px-4 py-3 bg-gray-50 border-t text-sm text-gray-400 italic",children:"No verification token — 
21certificate was generated before LinkedIn sharing was enabled."});if(o)return e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:103",className:"px-4 py-3 bg-blue-50 border-t text-sm text-gray-500",children:"Loading engagement data..."});if(!c)return e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:111",className:"px-4 py-3 bg-blue-50 border-t text-sm text-gray-400 italic",children:"No engagement events recorded yet."});const b=[{icon:e.jsx(ne,{"data-loc":"client/src/pages/admin/Certificates.tsx:118",className:"w-4 h-4 text-blue-500"}),label:"Verification Page Views",count:c.verificationPageViewed},{icon:e.jsx(K,{"data-loc":"client/src/pages/admin/Certificates.tsx:119",className:"w-4 h-4 text-green-500"}),label:"PDF Downloads",count:c.pdfDownloaded},{icon:e.jsx(me,{"data-loc":"client/src/pages/admin/Certificates.tsx:120",className:"w-4 h-4 text-[#0077b5]"}),label:"LinkedIn Share Clicks",count:c.linkedinShareClicked},{icon:e.jsx(de,{"data-loc":"client/src/pages/admin/Certificates.tsx:121",className:"w-4 h-4 text-purple-500"}),label:"Caption Copies",count:c.captionCopied},{icon:e.jsx(te,{"data-loc":"client/src/pages/admin/Certificates.tsx:122",className:"w-4 h-4 text-orange-500"}),label:"Add to Profile Clicks",count:c.addToProfileClicked}];return e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:126",className:"px-4 py-4 bg-blue-50/60 border-t border-blue-100",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:127",className:"flex items-center gap-2 mb-3",children:[e.jsx(Y,{"data-loc":"client/src/pages/admin/Certificates.tsx:128",className:"w-4 h-4 text-[#0077b5]"}),e.jsx("span",{"data-loc":"client/src/pages/admin/Certificates.tsx:129",className:"text-sm font-semibold text-gray-700",children:"LinkedIn Sharing Engagement"}),e.jsxs("span",{"data-loc":"client/src/pages/admin/Certificates.tsx:130",className:"ml-auto text-xs text-gray-400 font-mono",children:["Total: ",c.total," event",c.total!==1?"s":""]})]}),e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:134",className:"grid grid-cols-2 md:grid-cols-5 gap-3",children:b.map(({icon:y,label:l,count:j})=>e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:136",className:"bg-white rounded-lg border border-blue-100 px-3 py-2 flex flex-col items-center gap-1",children:[y,e.jsx("span",{"data-loc":"client/src/pages/admin/Certificates.tsx:138",className:"text-xl font-bold text-gray-800",children:j}),e.jsx("span",{"data-loc":"client/src/pages/admin/Certificates.tsx:139",className:"text-[10px] text-gray-500 text-center leading-tight",children:l})]},l))}),n&&e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:144",className:"mt-3 flex items-center gap-2",children:[e.jsx("span",{"data-loc":"client/src/pages/admin/Certificates.tsx:145",className:"text-xs text-gray-400",children:"Verification URL:"}),e.jsxs("a",{"data-loc":"client/src/pages/admin/Certificates.tsx:146",href:`/certificate/verify/${n}`,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-blue-600 hover:underline flex items-center gap-1",children:["/certificate/verify/",n.slice(0,12),"…",e.jsx(Z,{"data-loc":"client/src/pages/admin/Certificates.tsx:153",className:"w-3 h-3"})]})]})]})}function ge(){const{data:i,isLoading:n,refetch:c}=x.certificates.list.useQuery(),{data:o}=x.certificates.stats.useQuery(),[b,y]=S.useState(null),[l,j]=S.useState(""),[C,m]=S.useState(1),h=50,I=x.certificates.resend.useMutation({onSuccess:a=>{r.success(a.message),c()},onError:a=>r.error(a.message)}),t=x.certificates.revokePublicVerification.useMutation({onSuccess:()=>{r.success("Public verification page disabled."),c()},onError:a=>r.error(a.message)}),s=x.certificates.enablePublicVerification.useMutation({onSuccess:()=>{r.success("Public verification page re-enabled."),c()},onError:a=>r.error(a.message)}),d=x.certificates.regeneratePreview.useMutation({onSuccess:()=>{r.success("Social preview image regenerated."),c()},onError:a=>r.error(a.message)}),g=(i??[]).filter(a=>l?new Date(a.completionDate).toISOString().slice(0,10)===l:!0),T=
21Math.max(1,Math.ceil(g.length/h)),q=g.slice((C-1)*h,C*h),O=a=>{switch(a){case"sent":return e.jsxs(u,{"data-loc":"client/src/pages/admin/Certificates.tsx:202",className:"bg-green-100 text-green-700 border-green-200",children:[e.jsx(U,{"data-loc":"client/src/pages/admin/Certificates.tsx:202",className:"w-3 h-3 mr-1"}),"Sent"]});case"failed":return e.jsxs(u,{"data-loc":"client/src/pages/admin/Certificates.tsx:204",className:"bg-red-100 text-red-700 border-red-200",children:[e.jsx(G,{"data-loc":"client/src/pages/admin/Certificates.tsx:204",className:"w-3 h-3 mr-1"}),"Failed"]});case"generated":return e.jsxs(u,{"data-loc":"client/src/pages/admin/Certificates.tsx:206",className:"bg-blue-100 text-blue-700 border-blue-200",children:[e.jsx(V,{"data-loc":"client/src/pages/admin/Certificates.tsx:206",className:"w-3 h-3 mr-1"}),"Generated"]});default:return e.jsxs(u,{"data-loc":"client/src/pages/admin/Certificates.tsx:208",className:"bg-gray-100 text-gray-700 border-gray-200",children:[e.jsx(_,{"data-loc":"client/src/pages/admin/Certificates.tsx:208",className:"w-3 h-3 mr-1"}),"Pending"]})}},$=a=>a.verificationToken?a.revokedAt||a.isPublicVerificationEnabled===!1?e.jsxs(u,{"data-loc":"client/src/pages/admin/Certificates.tsx:217",className:"bg-red-100 text-red-700 border-red-200 text-xs",children:[e.jsx(X,{"data-loc":"client/src/pages/admin/Certificates.tsx:217",className:"w-3 h-3 mr-1"}),"Revoked"]}):e.jsxs(u,{"data-loc":"client/src/pages/admin/Certificates.tsx:219",className:"bg-emerald-100 text-emerald-700 border-emerald-200 text-xs",children:[e.jsx(H,{"data-loc":"client/src/pages/admin/Certificates.tsx:219",className:"w-3 h-3 mr-1"}),"Active"]}):e.jsx(u,{"data-loc":"client/src/pages/admin/Certificates.tsx:214",className:"bg-gray-100 text-gray-500 border-gray-200 text-xs",children:"No Token"}),A=a=>a.revokedAt!==null||a.isPublicVerificationEnabled===!1;return e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:226",className:"space-y-4",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:228",className:"grid grid-cols-1 md:grid-cols-5 gap-4",children:[e.jsx(p,{"data-loc":"client/src/pages/admin/Certificates.tsx:229",children:e.jsx(f,{"data-loc":"client/src/pages/admin/Certificates.tsx:230",className:"pt-4 pb-4",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:231",className:"flex items-center gap-3",children:[e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:232",className:"p-2 bg-blue-100 rounded-lg",children:e.jsx(L,{"data-loc":"client/src/pages/admin/Certificates.tsx:233",className:"w-5 h-5 text-blue-600"})}),e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:235",children:[e.jsx("p",{"data-loc":"client/src/pages/admin/Certificates.tsx:236",className:"text-sm text-gray-500",children:"Total"}),e.jsx("p",{"data-loc":"client/src/pages/admin/Certificates.tsx:237",className:"text-xl font-bold",children:o?.total??0})]})]})})}),e.jsx(p,{"data-loc":"client/src/pages/admin/Certificates.tsx:242",children:e.jsx(f,{"data-loc":"client/src/pages/admin/Certificates.tsx:243",className:"pt-4 pb-4",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:244",className:"flex items-center gap-3",children:[e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:245",className:"p-2 bg-green-100 rounded-lg",children:e.jsx(U,{"data-loc":"client/src/pages/admin/Certificates.tsx:246",className:"w-5 h-5 text-green-600"})}),e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:248",children:[e.jsx("p",{"data-loc":"client/src/pages/admin/Certificates.tsx:249",className:"text-sm text-gray-500",children:"Sent"}),e.jsx("p",{"data-loc":"client/src/pages/admin/Certificates.tsx:250",className:"text-xl font-bold",children:o?.sent??0})]})]})})}),e.jsx(p,{"data-loc":"client/src/pages/admin/Certificates.tsx:255",children:e.jsx(f,{"data-loc":"client/src/pages/admin/Certificates.tsx:256",className:"pt-4 pb-4",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:257",className:"flex items-center gap-3",children:[e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:258",className:"p-2 bg-red-100 rounded-lg",children:e.jsx(G,{"data-loc":"client/src/pages/admin/Certificates.tsx:259",className:"w-5 h-5 text-red-600"})}),e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:261",children:[e.jsx("p",{"data-loc":"client/src/pages/admin/Certificates.tsx:262",className:"text-sm text-gray-500",children:"Failed"}),e.jsx("p",{"data-loc":"client/src/pages/admin/Certificates.tsx:263",className:"text-xl font-bold",children:o?.failed??0})]})]})})}),e.jsx(p,{"data-loc":"client/src/pages/admin/Certificates.tsx:268",children:e.jsx(f,{"data-loc":"client/src/pages/admin/Certificates.tsx:269",className:"pt-4 pb-4",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:270",className:"flex items-center gap-3",children:[e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:271",className:"p-2 bg-yellow-100 rounded-lg",children:e.jsx(_,{"data-loc":"client/src/pages/admin/Certificates.tsx:272",className:"w-5 h-5 text-yellow-600"})}),e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:274",children:[e.jsx("p",{"data-loc":"client/src/pages/admin/Certificates.tsx:275",className:"text-sm text-gray-500",children:"Pending"}),e.jsx("p",{"data-loc":"client/src/pages/admin/Certificates.tsx:276",className:"text-xl font-bold",children:o?.pending??0})]})]})})}),e.jsx(p,{"data-loc":"client/src/pages/admin/Certificates.tsx:281",children:e.jsx(f,{"data-loc":"client/src/pages/admin/Certificates.tsx:282",className:"pt-4 pb-4",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:283",className:"flex items-center gap-3",children:[e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:284",className:"p-2 bg-[#e8f3fb] rounded-lg",children:e.jsx(Y,{"data-loc":"client/src/pages/admin/Certificates.tsx:285",className:"w-5 h-5 text-[#0077b5]"})}),e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:287",children:[e.jsx("p",{"data-loc":"client/src/pages/admin/Certificates.tsx:288",className:"text-sm text-gray-500",children:"With Sharing"}),e.jsx("p",{"data-loc":"client/src/pages/admin/Certificates.tsx:289",className:"text-xl font-bold",children:(i??[]).filter(a=>a.verificationToken&&!A(a)).length})]})]})})})]}),e.jsxs(p,{"data-loc":"client/src/pages/admin/Certificates.tsx:299",children:[e.jsxs(D,{"data-loc":"client/src/pages/admin/Certificates.tsx:300",children:[e.jsx(E,{"data-loc":"client/src/pages/admin/Certificates.tsx:301",className:"text-lg",children:"Certificate Records"}),e.jsx(M,{"data-loc":"client/src/pages/admin/Certificates.tsx:302",children:"All generated certificates with delivery status and LinkedIn sharing analytics. 
21Click the chevron on any row to view engagement details."}),e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:306",className:"flex flex-wrap items-center gap-3 mt-3",children:[e.jsx("label",{"data-loc":"client/src/pages/admin/Certificates.tsx:307",className:"text-sm text-gray-600 font-medium whitespace-nowrap",children:"Completion Date:"}),e.jsx("input",{"data-loc":"client/src/pages/admin/Certificates.tsx:308",type:"date",value:l,onChange:a=>{j(a.target.value),m(1)},className:"border border-gray-200 rounded-md px-3 py-1.5 text-sm bg-white focus:outline-none focus:ring-2 focus:ring-blue-500"}),l&&e.jsx("button",{"data-loc":"client/src/pages/admin/Certificates.tsx:315",onClick:()=>{j(""),m(1)},className:"text-xs text-gray-500 hover:text-gray-700 underline",children:"Clear"}),e.jsxs("span",{"data-loc":"client/src/pages/admin/Certificates.tsx:320",className:"ml-auto text-xs text-gray-400",children:[g.length," record",g.length!==1?"s":""]})]})]}),e.jsx(f,{"data-loc":"client/src/pages/admin/Certificates.tsx:323",className:"p-0",children:n?e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:325",className:"text-center py-8 text-gray-500 px-6",children:"Loading certificates..."}):!i||i.length===0?e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:327",className:"text-center py-12 text-gray-500 px-6",children:[e.jsx(L,{"data-loc":"client/src/pages/admin/Certificates.tsx:328",className:"w-12 h-12 mx-auto mb-3 text-gray-300"}),e.jsx("p",{"data-loc":"client/src/pages/admin/Certificates.tsx:329",className:"font-medium",children:"No certificates generated yet"}),e.jsx("p",{"data-loc":"client/src/pages/admin/Certificates.tsx:330",className:"text-sm mt-1",children:'Certificates are automatically generated when a session is marked as "Completed"'})]}):e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:333",className:"overflow-x-auto",children:e.jsxs("table",{"data-loc":"client/src/pages/admin/Certificates.tsx:334",className:"w-full text-sm",children:[e.jsx("thead",{"data-loc":"client/src/pages/admin/Certificates.tsx:335",children:e.jsxs("tr",{"data-loc":"client/src/pages/admin/Certificates.tsx:336",className:"border-b text-left text-gray-500 bg-gray-50",children:[e.jsx("th",{"data-loc":"client/src/pages/admin/Certificates.tsx:337",className:"py-3 px-4 font-medium w-8"}),e.jsx("th",{"data-loc":"client/src/pages/admin/Certificates.tsx:338",className:"py-3 px-4 font-medium",children:"Credential ID"}),e.jsx("th",{"data-loc":"client/src/pages/admin/Certificates.tsx:339",className:"py-3 px-4 font-medium",children:"Learner"}),e.jsx("th",{"data-loc":"client/src/pages/admin/Certificates.tsx:340",className:"py-3 px-4 font-medium",children:"Course"}),e.jsx("th",{"data-loc":"client/src/pages/admin/Certificates.tsx:341",className:"py-3 px-4 font-medium",children:"Date"}),e.jsx("th",{"data-loc":"client/src/pages/admin/Certificates.tsx:342",className:"py-3 px-4 font-medium",children:"Status"}),e.jsx("th",{"data-loc":"client/src/pages/admin/Certificates.tsx:343",className:"py-3 px-4 font-medium",children:"Verification"}),e.jsx("th",{"data-loc":"client/src/pages/admin/Certificates.tsx:344",className:"py-3 px-4 font-medium",children:"Actions"})]})}),e.jsx("tbody",{"data-loc":"client/src/pages/admin/Certificates.tsx:347",children:q.map(a=>{const R=A(a),F=!!a.verificationToken,v=b===a.id;return e.jsxs(e.Fragment,{children:[e.jsxs("tr",{"data-loc":"client/src/pages/admin/Certificates.tsx:355",className:`border-b last:border-0 hover:bg-gray-50 transition-colors ${v?"bg-blue-50/30":""}`,children:[e.jsx("td",{"data-loc":"client/src/pages/admin/Certificates.tsx:360",className:"py-3 px-4",children:e.jsx("button",{"data-loc":"client/src/pages/admin/Certificates.tsx:361",onClick:()=>y(v?null:a.id),className:"text-gray-400 hover:text-blue-600 transition-colors",title:v?"Collapse":"View engagement",children:v?e.jsx(ce,{"data-loc":"client/src/pages/admin/Certificates.tsx:367",className:"w-4 h-4"}):e.jsx(re,{"data-loc":"client/src/pages/admin/Certificates.tsx:368",className:"w-4 h-4"})})}),e.jsx("td",{"data-loc":"client/src/pages/admin/Certificates.tsx:373",className:"py-3 px-4 font-mono text-xs",children:a.credentialId}),e.jsxs("td",{"data-loc":"client/src/pages/admin/Certificates.tsx:376",className:"py-3 px-4",children:[e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:377",className:"font-medium",children:a.learnerName}),e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:378",className:"text-xs text-gray-400",children:a.learnerEmail})]}),e.jsx("td",{"data-loc":"client/src/pages/admin/Certificates.tsx:382",className:"py-3 px-4 max-w-[200px]",children:e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:383",className:"truncate",title:a.courseTitle,children:a.courseTitle})}),e.jsx("td",{"data-loc":"client/src/pages/admin/Certificates.tsx:387",className:"py-3 px-4 whitespace-nowrap",children:new Date(a.completionDate).toLocaleDateString("en-SG",{day:"numeric",month:"short",year:"numeric"})}),e.jsx("td",{"data-loc":"client/src/pages/admin/Certificates.tsx:394",className:"py-3 px-4",children:O(a.status)}),e.jsx("td",{"data-loc":"client/src/pages/admin/Certificates.tsx:397",className:"py-3 px-4",children:$(a)}),e.jsx("td",{"data-loc":"client/src/pages/admin/Certificates.tsx:402",className:"py-3 px-4",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:403",className:"flex flex-wrap gap-1.5",children:[e.jsxs(N,{"data-loc":"client/src/pages/admin/Certificates.tsx:405",variant:"outline",size:"sm",onClick:()=>I.mutate({id:a.id}),disabled:I.isPending,title:"Resend certificate email",children:[e.jsx(ae,{"data-loc":"client/src/pages/admin/Certificates.tsx:412",className:"w-3 h-3 mr-1"}),"Resend"]}),a.pdfUrl&&e.jsx(N,{"data-loc":"client/src/pages/admin/Certificates.tsx:418",variant:"ghost",size:"sm",asChild:!0,title:"View PDF",children:e.jsxs("a",{"data-loc":"client/src/pages/admin/Certificates.tsx:419",href:a.pdfUrl,target:"_blank",rel:"noopener noreferrer",children:[e.jsx(V,{"data-loc":"client/src/pages/admin/Certificates.tsx:420",className:"w-3 h-3 mr-1"}),"PDF"]})}),F&&e.jsxs(N,{"data-loc":"client/src/pages/admin/Certificates.tsx:428",variant:"ghost",size:"sm",onClick:()=>d.mutate({id:a.id}),disabled:d.isPending&&d.variables?.id===a.id,title:"Regenerate LinkedIn social preview image",className:"text-purple-600 hover:text-purple-700 hover:bg-purple-50",children:[d.isPending&&d.variables?.id===a.id?e.jsx(P,{"data-loc":"client/src/pages/admin/Certificates.tsx:437",className:"w-3 h-3 mr-1 animate-spin"}):e.jsx(oe,{"data-loc":"client/src/pages/admin/Certificates.tsx:438",className:"w-3 h-3 mr-1"}),"Preview"]}),F&&!R&&e.jsxs(N,{"data-loc":"client/src/pages/admin/Certificates.tsx:445",variant:"ghost",size:"sm",onClick:()=>t.mutate({id:a.id}),disabled:t.isPending&&t.variables?.id===a.id,title:"Disable public verification page",className:"text-red-600 hover:text-red-700 hover:bg-red-50",children:[t.isPending&&t.variables?.id===a.id?e.jsx(P,{"data-loc":"client/src/pages/admin/Certificates.tsx:454",className:"w-3 h-3 animate-spin"}):e.jsx(X,{"data-loc":"client/src/pages/admin/Certificates.tsx:455",className:"w-3 h-3 mr-1"}),"Revoke"]}),F&&R&&e.jsxs(N,{"data-loc":"client/src/pages/admin/Certificates.tsx:460",variant:"ghost",size:"sm",onClick:()=>s.mutate({id:a.id}),disabled:s.isPending&&s.variables?.id===a.id,title:"Re-enable public verification page",className:"text-emerald-600 hover:text-emerald-700 hover:bg-emerald-50",children:[s.isPending&&s.variables?.id===a.id?e.jsx(P,{"data-loc":"client/src/pages/admin/Certificates.tsx:469",className:"w-3 h-3 animate-spin"}):e.jsx(H,{"data-loc":"client/src/pages/admin/Certificates.tsx:470",className:"w-3 h-3 mr-1"}),"Enable"]})]})})]},a.id),v&&e.jsx("tr",{"data-loc":"client/src/pages/admin/Certificates.tsx:480",className:"border-b last:border-0",children:e.jsx("td",{"data-loc":"client/src/pages/admin/Certificates.tsx:481",colSpan:8,className:"p-0",children:e.jsx(xe,{"data-loc":"client/src/pages/admin/Certificates.tsx:482",certId:a.id,verificationToken:a.verificationToken??null})})},`${a.id}-engagement`)]})})})]})})}),T>1&&e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:495",className:"flex items-center justify-center gap-2 py-4 border-t",children:[e.jsx("button",{"data-loc":"client/src/pages/admin/Certificates.tsx:496",disabled:C<=1,onClick:()=>m(a=>Math.max(1,a-1)),className:"px-3 py-1.5 text-sm border rounded-md disabled:opacity-40 hover:bg-gray-50",children:"← Prev"}),e.jsxs("span",{"data-loc":"client/src/pages/admin/Certificates.tsx:501",className:"text-sm text-gray-600",children:["Page ",C," of ",T]}
21),e.jsx("button",{"data-loc":"client/src/pages/admin/Certificates.tsx:502",disabled:C>=T,onClick:()=>m(a=>Math.min(T,a+1)),className:"px-3 py-1.5 text-sm border rounded-md disabled:opacity-40 hover:bg-gray-50",children:"Next →"})]})]})]})}function pe(){const{data:i,refetch:n}=x.certificates.getDefaultTemplate.useQuery(),c=x.certificates.uploadBackground.useMutation({onSuccess:()=>{r.success("Background image uploaded successfully"),n()},onError:t=>r.error(t.message)}),o=x.certificates.updatePlacements.useMutation({onSuccess:()=>{r.success("Text placements updated successfully"),n()},onError:t=>r.error(t.message)}),[b,y]=S.useState(i?.textPlacements||J),l=i?.textPlacements||J,j=async t=>{const s=t.target.files?.[0];if(!s||!i)return;if(!s.type.startsWith("image/")){r.error("Please upload an image file (PNG or JPEG)");return}if(s.size>5*1024*1024){r.error("File size must be under 5MB");return}const d=new FileReader;d.onload=()=>{const g=d.result.split(",")[1];c.mutate({templateId:i.id,fileBase64:g,fileName:s.name,contentType:s.type})},d.readAsDataURL(s)},C=()=>{i&&o.mutate({templateId:i.id,textPlacements:b})},m=(t,s,d)=>{y(g=>({...g,[t]:{...g[t],[s]:d}}))},h={name:"John Tan Wei Ming",course:"Leadership Excellence Programme",date:"20 July 2026",credentialId:"CERT-2026-X7K2M"};return e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:592",className:"space-y-6",children:[e.jsx("style",{"data-loc":"client/src/pages/admin/Certificates.tsx:595",children:"@import url('https://fonts.googleapis.com/css2?family=Dancing+Script:wght@700&display=swap');"}),e.jsxs(p,{"data-loc":"client/src/pages/admin/Certificates.tsx:596",children:[e.jsxs(D,{"data-loc":"client/src/pages/admin/Certificates.tsx:597",children:[e.jsxs(E,{"data-loc":"client/src/pages/admin/Certificates.tsx:598",className:"text-lg flex items-center gap-2",children:[e.jsx(L,{"data-loc":"client/src/pages/admin/Certificates.tsx:599",className:"w-5 h-5"}),"Certificate Preview"]}),e.jsx(M,{"data-loc":"client/src/pages/admin/Certificates.tsx:602",children:"Live preview using sample data. Reflects the actual certificate design."})]}),e.jsxs(f,{"data-loc":"client/src/pages/admin/Certificates.tsx:606",children:[e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:607",className:"flex justify-center",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:609",className:"relative overflow-hidden rounded-lg border border-gray-200 shadow-md",style:{width:380,aspectRatio:"595 / 842"},children:[e.jsx("img",{"data-loc":"client/src/pages/admin/Certificates.tsx:614",src:i?.backgroundUrl||"/manus-storage/cert-background-new_d4c4d358.png",alt:"Certificate background",className:"absolute inset-0 w-full h-full object-cover"}),e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:621",className:"absolute w-full text-center",style:{top:"47%",left:0,fontFamily:"'Dancing Script', cursive",fontSize:28,fontWeight:700,color:"#1a2b5c",letterSpacing:.5,lineHeight:1.2},children:h.name}),e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:638",className:"absolute w-full text-center px-8",style:{top:"61%",left:0,fontFamily:"Georgia, serif",fontSize:13,fontWeight:700,color:"#1a2b5c",lineHeight:1.3},children:h.course}),e.jsx("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:654",className:"absolute w-full text-center",style:{top:"67.5%",left:0,fontFamily:"Arial, sans-serif",fontSize:10,color:"#444444",lineHeight:1.2},children:h.date}),e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:669",style:{position:"absolute",bottom:"2.5%",left:"4%",fontFamily:"Arial, sans-serif",fontSize:6,color:"#ffffff",opacity:.85,letterSpacing:.3},children:["Ref No: ",h.credentialId]})]})}),e.jsx("p",{"data-loc":"client/src/pages/admin/Certificates.tsx:685",className:"text-xs text-center text-muted-foreground mt-2",children:"Sample preview — actual certificate uses real learner data"})]})]}),e.jsxs(p,{"data-loc":"client/src/pages/admin/Certificates.tsx:692",children:[e.jsxs(D,{"data-loc":"client/src/pages/admin/Certificates.tsx:693",children:[e.jsxs(E,{"data-loc":"client/src/pages/admin/Certificates.tsx:694",className:"text-lg flex items-center gap-2",children:[e.jsx(le,{"data-loc":"client/src/pages/admin/Certificates.tsx:695",className:"w-5 h-5"}
21),"Certificate Background"]}),e.jsx(M,{"data-loc":"client/src/pages/admin/Certificates.tsx:698",children:"Upload a background image (PNG/JPEG, max 5MB) for the certificate layout. Recommended size: 842 x 595 pixels (A4 landscape)."})]}),e.jsx(f,{"data-loc":"client/src/pages/admin/Certificates.tsx:703",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:704",className:"space-y-4",children:[i?.backgroundUrl&&e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:706",className:"border rounded-lg p-4 bg-gray-50",children:[e.jsx("p",{"data-loc":"client/src/pages/admin/Certificates.tsx:707",className:"text-sm text-gray-600 mb-2",children:"Current background:"}),e.jsx("img",{"data-loc":"client/src/pages/admin/Certificates.tsx:708",src:i.backgroundUrl,alt:"Certificate background",className:"max-h-48 rounded border"})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:715",className:"flex items-center gap-4",children:[e.jsx(w,{"data-loc":"client/src/pages/admin/Certificates.tsx:716",type:"file",accept:"image/png,image/jpeg",onChange:j,className:"max-w-sm"}),c.isPending&&e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:723",className:"flex items-center gap-2 text-sm text-gray-500",children:[e.jsx(P,{"data-loc":"client/src/pages/admin/Certificates.tsx:724",className:"w-4 h-4 animate-spin"}),"Uploading..."]})]}),!i?.backgroundUrl&&e.jsx("p",{"data-loc":"client/src/pages/admin/Certificates.tsx:730",className:"text-sm text-gray-500",children:"No custom background uploaded. The system will use a default professional certificate design."})]})})]}),e.jsxs(p,{"data-loc":"client/src/pages/admin/Certificates.tsx:739",children:[e.jsxs(D,{"data-loc":"client/src/pages/admin/Certificates.tsx:740",children:[e.jsxs(E,{"data-loc":"client/src/pages/admin/Certificates.tsx:741",className:"text-lg flex items-center gap-2",children:[e.jsx(Q,{"data-loc":"client/src/pages/admin/Certificates.tsx:742",className:"w-5 h-5"}),"Text Placement Configuration"]}),e.jsx(M,{"data-loc":"client/src/pages/admin/Certificates.tsx:745",children:"Set the X/Y position (as percentage of page width/height), font size, and color for each text element. X=50 means horizontally centered, Y=0 is top, Y=100 is bottom."})]}),e.jsx(f,{"data-loc":"client/src/pages/admin/Certificates.tsx:750",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:751",className:"space-y-6",children:[["studentName","courseTitle","completionDate","trainerName","credentialId"].map(t=>e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:753",className:"border rounded-lg p-4",children:[e.jsx("h4",{"data-loc":"client/src/pages/admin/Certificates.tsx:754",className:"font-medium mb-3 capitalize",children:t==="studentName"?"Student Name":t==="courseTitle"?"Course Title":t==="completionDate"?"Completion Date":t==="trainerName"?"Trainer Name":"Credential ID"}),e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:761",className:"grid grid-cols-2 md:grid-cols-5 gap-3",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:762",children:[e.jsx(k,{"data-loc":"client/src/pages/admin/Certificates.tsx:763",className:"text-xs",children:"X Position (%)"}),e.jsx(w,{"data-loc":"client/src/pages/admin/Certificates.tsx:764",type:"number",min:0,max:100,value:l[t].x,onChange:s=>m(t,"x",Number(s.target.value))})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:772",children:[e.jsx(k,{"data-loc":"client/src/pages/admin/Certificates.tsx:773",className:"text-xs",children:"Y Position (%)"}),e.jsx(w,{"data-loc":"client/src/pages/admin/Certificates.tsx:774",type:"number",min:0,max:100,value:l[t].y,onChange:s=>m(t,"y",Number(s.target.value))})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:782",children:[e.jsx(k,{"data-loc":"client/src/pages/admin/Certificates.tsx:783",className:"text-xs",children:"Font Size (pt)"}),e.jsx(w,{"data-loc":"client/src/pages/admin/Certificates.tsx:784",type:"number",min:8,max:72,value:l[t].fontSize,onChange:s=>m(t,"fontSize",Number(s.target.value))})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:792",children:[e.jsx(k,{"data-loc":"client/src/pages/admin/Certificates.tsx:793",className:"text-xs",children:"Font Color"}),e.jsx(w,{"data-loc":"client/src/pages/admin/Certificates.tsx:794",type:"color",value:l[t].fontColor,onChange:s=>m(t,"fontColor",s.target.value),className:"h-9"})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/Certificates.tsx:801",children:[e.jsx(k,{"data-loc":"client/src/pages/admin/Certificates.tsx:802",className:"text-xs",children:"Font Weight"}),e.jsxs("select",{"data-loc":"client/src/pages/admin/Certificates.tsx:803",className:"w-full h-9 border rounded-md px-2 text-sm",value:l[t].fontWeight,onChange:s=>m(t,"fontWeight",s.target.value),children:[e.jsx("option",{"data-loc":"client/src/pages/admin/Certificates.tsx:808",value:"normal",children:"Normal"}),e.jsx("option",{"data-loc":"client/src/pages/admin/Certificates.tsx:809",value:"bold",children:"Bold"})]})]})]})]},t)),e.jsx(N,{"data-loc":"client/src/pages/admin/Certificates.tsx:816",onClick:C,disabled:o.isPending,children:o.isPending?e.jsxs(e.Fragment,{children:[e.jsx(P,{"data-loc":"client/src/pages/admin/Certificates.tsx:818",className:"w-4 h-4 mr-2 animate-spin"}),"Saving..."]}):"Save Placement Settings"})]})})]})]})}export{Re 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.