PageSourceSearch

https://app.skillsyncer.com/build/assets/OnboardingIndex-DMvj8xPE.js

js skillsyncer.com collected 2026-09-25 19:06:33 UTC 29,656 bytes, 2 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ResumeWalkthrough-CKBidIik.js","assets/preload-helper-BfFHrpNk.js","assets/vue.esm-bundler-cbqk110L.js","assets/vue-router-dtzGjdMH.js","assets/vuex.esm-bundler-DvX-s-Jy.js","assets/resumeSections-D5zuVVnA.js","assets/app-IUpEuokI.js","assets/index-DcUBhOik.js","assets/_commonjsHelpers-_d1bhYXs.js","assets/resumeSkills-Cwq3L8pm.js","assets/JobStatus-CJOh0i9p.js","assets/_plugin-vue_export-helper-DlAUqK2U.js","assets/keyboard-D3mK9cT8.js","assets/open-closed-8OIEaUXm.js","assets/form-CNWMgHha.js","assets/BaseBadge-C9Mo2Ksq.js","assets/SpinnerIcon-CQvDeEnm.js","assets/BaseResumeSkeleton-BBmjrJKT.js","assets/XMarkIcon-BrwxbV_0.js","assets/lodash-M3e7TGU2.js","assets/templateDefaults-CmA7FAT7.js","assets/fontConfig-o4So3agE.js","assets/BaseSpinner-C_l5Zife.js","assets/SkillSort-CdI-c6kM.js","assets/index-CLl3_mKT.css","assets/mitt-DRMgoVpm.js","assets/BaseAlert-dsueqOHj.js","assets/BaseButton-kYTt77HF.js","assets/BaseCardStack-Bd3FcGg4.js","assets/BaseContentPlaceholders-BBfWObzq.js","assets/BaseContentPlaceholders-Cbrgiafd.css","assets/BaseContentPlaceholdersBox-Om6hgO9p.js","assets/BaseCustomTag-CBan1dTz.js","assets/tabs-jQHHFYkp.js","assets/BaseDot-DOfGKHD7.js","assets/BaseSelectInput-CuK5VAy7.js","assets/XCircleIcon-DlCcxaW9.js","assets/BaseFilterChips-D7VmLq0y.js","assets/BaseFittedPane--j3cgjg-.js","assets/resumeIssues-Csn_jsQ6.js","assets/BaseKeywordFocusBar-BvCdJAeq.js","assets/BaseMeterRow-B9ZTHRLD.js","assets/BaseScoreRing-B5CdVRyW.js","assets/BaseSkillListItem-BZj1tW6B.js","assets/BaseTab-ClFv4WB3.js","assets/BaseTabGroup-BpelOY2B.js","assets/app-C_wEnCi_.css","assets/profileUrls-DqXOs_b4.js","assets/formatGapMonths-D3tmnRNS.js","assets/templateHelpers-I-oM0Z7I.js","assets/ResumeReport-D9cB2U8e.js","assets/scrollWithin-CpwMvDQ9.js","assets/ScanActionButtons-DkZBuXop.js","assets/resumeEnums-Bcw3TDWB.js","assets/scroll-DIqF9I85.js"])))=>i.map(i=>d[i]);
2import{k as j,f as n,g as l,j as e,u,o as he,J as Le,e as N,m as G,F as L,x as T,v as D,t as p,A as M,y as de,l as me,z as be,r as i,c as d,n as Ve,V as We,b as Ke,a as Ye}from"./vue.esm-bundler-cbqk110L.js";import{u as Je}from"./vuex.esm-bundler-DvX-s-Jy.js";import{useRoute as Fe,useRouter as qe}from"./vue-router-dtzGjdMH.js";import{_ as He}from"./preload-helper-BfFHrpNk.js";import{R as Ge,X as Xe,o as ve,v as Ze,Y as Qe,u as et,A as tt,D as st}from"./index-DcUBhOik.js";import{_ as at}from"./ResumeScoreCircle-UJThINfi.js";import{_ as ot}from"./ResumeReport-D9cB2U8e.js";import{S as we}from"./SpinnerIcon-CQvDeEnm.js";import{b as nt,u as rt}from"./app-IUpEuokI.js";import{_ as lt}from"./ScanActionButtons-DkZBuXop.js";import{c as it}from"./Scans-DKjGTXbe.js";import{r as ut}from"./optimizeKeywords-BdpeEw_B.js";import"./_commonjsHelpers-_d1bhYXs.js";import"./resumeSkills-Cwq3L8pm.js";import"./JobStatus-CJOh0i9p.js";import"./_plugin-vue_export-helper-DlAUqK2U.js";import"./keyboard-D3mK9cT8.js";import"./open-closed-8OIEaUXm.js";import"./form-CNWMgHha.js";import"./BaseBadge-C9Mo2Ksq.js";import"./BaseResumeSkeleton-BBmjrJKT.js";import"./XMarkIcon-BrwxbV_0.js";import"./lodash-M3e7TGU2.js";import"./templateDefaults-CmA7FAT7.js";import"./fontConfig-o4So3agE.js";import"./BaseSpinner-C_l5Zife.js";import"./SkillSort-CdI-c6kM.js";import"./useAnimatedScore-AxczK-zZ.js";import"./resumeIssues-Csn_jsQ6.js";import"./formatGapMonths-D3tmnRNS.js";import"./scrollWithin-CpwMvDQ9.js";import"./mitt-DRMgoVpm.js";import"./BaseAlert-dsueqOHj.js";import"./BaseButton-kYTt77HF.js";import"./BaseCardStack-Bd3FcGg4.js";import"./BaseContentPlaceholders-BBfWObzq.js";import"./BaseContentPlaceholdersBox-Om6hgO9p.js";import"./BaseCustomTag-CBan1dTz.js";import"./tabs-jQHHFYkp.js";import"./BaseDot-DOfGKHD7.js";import"./BaseSelectInput-CuK5VAy7.js";import"./XCircleIcon-DlCcxaW9.js";import"./BaseFilterChips-D7VmLq0y.js";import"./BaseFittedPane--j3cgjg-.js";import"./BaseKeywordFocusBar-BvCdJAeq.js";import"./BaseMeterRow-B9ZTHRLD.js";import"./BaseScoreRing-B5CdVRyW.js";import"./BaseSkillListItem-BZj1tW6B.js";import"./BaseTab-ClFv4WB3.js";import"./BaseTabGroup-BpelOY2B.js";const dt={class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 shadow-sm"},ct={__name:"ResumeVerifyPrompt",emits:["open"],setup(t,{emit:v}){const x=v;return(h,o)=>{const w=j("BaseIcon");return n(),l("button",{type:"button",class:"group flex w-full items-center gap-3 rounded-xl border-2 border-blue-200 bg-gradient-to-br from-blue-50 to-indigo-50 px-4 py-3.5 text-left transition-all hover:border-blue-400 hover:shadow-md",onClick:o[0]||(o[0]=y=>x("open"))},[e("span",dt,[u(w,{name:"DocumentMagnifyingGlassIcon",size:"h-5 w-5",class:"text-white"})]),o[1]||(o[1]=e("span",{class:"min-w-0 flex-1"},[e("span",{class:"block text-sm font-bold text-gray-900"},"How an ATS read your resume"),e("span",{class:"mt-0.5 block text-xs leading-relaxed text-gray-600"}," Review the text and content that was extracted for each section, so you can confirm it matches your resume. ")],-1)),u(w,{name:"ArrowRightIcon",size:"h-4 w-4",class:"flex-shrink-0 text-blue-600 transition-transform group-hover:translate-x-0.5"})])}}},mt={class:"flex flex-col gap-3"},gt={class:"flex items-center gap-2"},pt={key:0,class:"flex w-full flex-col gap-4"},ft={key:0,class:"truncate text-xs text-gray-500"},yt={class:"grid grid-cols-2 gap-3"},vt={key:1,class:"text-xs font-semibold uppercase tracking-wide text-gray-500"},xt={key:1,class:"w-full py-2"},ht={class:"mb-4 flex items-center gap-3"},bt={class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full bg-blue-500"},wt={class:"min-w-0 flex-1"},kt={class:"text-sm font-semibold text-gray-900"},St={class:"mt-0.5 text-xs text-gray-500"},$t={class:"flex-shrink-0 text-xs font-semibold tabular-nums text-gray-500"},Ct={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200"},_t={key:2,class:"w-full py-2 text-center"},It={class:"mx-auto mb-3 flex h-12 w-12 items-center justify-center rounded-full bg-red-100"},Tt={class:"mx-auto mb-4 max-w-xs text-sm font-medium text-gray-900"},jt={key:3,class:"w-full"},Bt={class:"flex flex-col items-center px-4 py-14 text-center"},Et={class:"mt-3 flex items-center justify-between gap-3"},zt={key:0,class:"flex flex-col gap-2.5 px-1"},Rt={class:"text-xs leading-relaxed text-gray-500"},ie=250,ue=5e4,Pt={__name:"OnboardingResumePanel",props:{status:{type:String,default:"idle",validator:t=>["idle","uploading","error","ready"].includes(t)},progress:{type:Number,default:0},progressStep:{type:Object,default:()=>({title:"",description:""})},error:{type:String,default:""},errorCode:{type:String,default:""},canRetry:{type:Boolean,default:!0},fileName:{type:String,default:""},score:{type:Number,default:null},completionScore:{type:Number,default:null},contentScore:{type:Number,default:null},issueCounts:{type:Object,default:null},disabled:{type:Boolean,default:!1}},emits:["upload-started","retry","upgrade","error"],setup(t,{emit:v}){const x=We(()=>He(()=>import("./ResumeWalkthrough-CKBidIik.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54]))),h=["A score for completeness and writing quality.","The issues worth fixing, before you apply.","Your match score and missing keywords, once you add a job."],o=t,w=v,y=i(!1),I=i(""),S=i(!1),z=i(!1),R=i(null),b=i(null);function V(m){R.value=m,z.value=!0}const W=d(()=>o.status==="ready"),P=d(()=>{var m;
2return((m=o.issueCounts)==null?void 0:m.total)??0}),A=i(!1);let $=null;const K=m=>{A.value=m.matches};he(()=>{$=window.matchMedia("(min-width: 1024px)"),A.value=$.matches,$.addEventListener("change",K)}),Le(()=>$==null?void 0:$.removeEventListener("change",K));async function _(m){var s;S.value=!0,await Ve(),(s=b.value)==null||s.scrollToSection(m)}const k=d(()=>I.value.trim().length),Y=d(()=>k.value>=ie&&k.value<=ue),J=d(()=>k.value===0?`At least ${ie} characters.`:k.value<ie?`${k.value} of ${ie} characters minimum.`:k.value>ue?`That is longer than one resume. Maximum ${ue.toLocaleString()} characters.`:`${k.value.toLocaleString()} characters. Ready to read.`),ee=d(()=>k.value>ue?"text-red-600":"text-gray-500");function te(m,s){o.disabled||!s||w("upload-started",{file:s,fileName:s.name})}function B(){!Y.value||o.disabled||w("upload-started",{text:I.value.trim(),fileName:"Pasted Resume"})}return(m,s)=>{const X=j("BaseIcon"),Z=j("BaseStatInline"),O=j("BaseButton"),Q=j("BaseFileUploader"),ae=j("BaseLabel"),oe=j("BaseTextarea"),U=j("BaseCard");return n(),l("section",mt,[e("header",gt,[e("span",{class:N(["flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full text-xs font-bold transition-colors",W.value?"bg-emerald-100 text-emerald-700":"bg-blue-100 text-blue-700"])},[W.value?(n(),G(X,{key:0,name:"CheckIcon",size:"h-3.5 w-3.5"})):(n(),l(L,{key:1},[T("1")],64))],2),s[12]||(s[12]=e("h2",{class:"text-xs font-semibold uppercase tracking-wide text-gray-500"}," Your resume ",-1))]),u(U,{"container-class":"p-4 sm:p-5"},{default:D(()=>[W.value?(n(),l("div",pt,[u(at,{score:t.score,variant:"ring"},null,8,["score"]),t.fileName?(n(),l("p",ft,p(t.fileName),1)):M("",!0),e("div",yt,[e("button",{type:"button",class:"text-left",onClick:s[0]||(s[0]=c=>_("completion"))},[u(Z,{boxed:"",align:"center",label:"Completion",value:t.completionScore,suffix:"/ 100",hint:"Sections and contact details"},null,8,["value"])]),e("button",{type:"button",class:"text-left",onClick:s[1]||(s[1]=c=>_("content"))},[u(Z,{boxed:"",align:"center",label:"Content",value:t.contentScore,suffix:"/ 100",hint:"Phrasing, metrics, and impact"},null,8,["value"])])]),u(ct,{onOpen:s[2]||(s[2]=c=>V(null))}),u(de(x),{modelValue:z.value,"onUpdate:modelValue":s[3]||(s[3]=c=>z.value=c),"start-section":R.value},null,8,["modelValue","start-section"]),P.value?(n(),l("p",vt,p(P.value)+" "+p(P.value===1?"issue":"issues")+" found ",1)):M("",!0),S.value?M("",!0):(n(),l("button",{key:2,type:"button",class:"rounded-lg border border-gray-200 px-3 py-2 text-xs font-medium text-blue-600 transition-colors hover:bg-gray-50 lg:hidden",onClick:s[4]||(s[4]=c=>S.value=!0)},p(P.value?`See all ${P.value} ${P.value===1?"issue":"issues"}`:"See the full report"),1)),S.value||A.value?(n(),l("div",{key:3,class:N(S.value?"block":"hidden lg:block")},[u(ot,{ref_key:"reportRef",ref:b,navigable:!1,verifiable:"",onVerifySection:V},null,512)],2)):M("",!0)])):t.status==="uploading"?(n(),l("div",xt,[e("div",ht,[e("span",bt,[u(we,{class:"h-6 w-6 text-white"})]),e("div",wt,[e("p",kt,p(t.progressStep.title),1),e("p",St,p(t.progressStep.description),1)]),e("span",$t,p(Math.round(t.progress))+"% ",1)]),e("div",Ct,[e("div",{class:"h-full rounded-full bg-blue-600 transition-all duration-700 ease-out",style:me({width:`${t.progress}%`})},null,4)]),s[13]||(s[13]=e("p",{class:"mt-4 text-xs text-gray-500"}," Add the job description on the right while we read your resume. ",-1))])):t.status==="error"?(n(),l("div",_t,[e("span",It,[u(X,{name:"ExclamationTriangleIcon",size:"h-7 w-7",class:"text-red-600"})]),e("p",Tt,p(t.error),1),t.errorCode==="RESUME_LIMIT_REACHED"?(n(),G(O,{key:0,size:"sm",onClick:s[5]||(s[5]=c=>m.$emit("upgrade"))},{default:D(()=>[...s[14]||(s[14]=[T(" See plans ",-1)])]),_:1})):t.canRetry?(n(),G(O,{key:1,variant:"secondary",size:"sm",onClick:s[6]||(s[6]=c=>m.$emit("retry"))},{default:D(()=>[...s[15]||(s[15]=[T(" Try again ",-1)])]),_:1})):(n(),G(O,{key:2,variant:"secondary",size:"sm",onClick:s[7]||(s[7]=c=>m.$emit("retry"))},{default:D(()=>[...s[16]||(s[16]=[T(" Use a different file ",-1)])]),_:1}))])):(n(),l("div",jt,[y.value?(n(),l(L,{key:1},[u(ae,null,{default:D(()=>[...s[21]||(s[21]=[T("Paste your resume",-1)])]),_:1}),u(oe,{modelValue:I.value,"onUpdate:modelValue":s[10]||(s[10]=c=>I.value=c),disabled:t.disabled,placeholder:"Paste the full text of your resume here...",rows:"10",class:"mt-1"},null,8,["modelValue","disabled"]),e("p",{class:N(["mt-1.5 text-xs",ee.value])},p(J.value),3),e("div",Et,[e("button",{type:"button",class:"text-xs font-medium text-gray-500 transition-colors hover:text-gray-700",onClick:s[11]||(s[11]=c=>y.value=!1)}," Upload a file instead "),u(O,{size:"sm",disabled:!Y.value||t.disabled,onClick:B},{default:D(()=>[...s[22]||(s[22]=[T(" Read my resume ",-1)])]),_:1},8,["disabled"])])],64)):(n(),l(L,{key:0},[u(Q,{accept:de(Ge),disabled:t.disabled,onChange:te,onError:s[8]||(s[8]=c=>m.$emit("error",c))},{default:D(()=>[e("div",Bt,[u(X,{name:"CloudArrowUpIcon",size:"h-10 w-10",class:"mb-3 text-gray-400"}),s[17]||(s[17]=e("p",{class:"text-sm font-semibold text-gray-900"},"Drop your resume here",-1)),s[18]||(s[18]=e("p",{class:"mt-1 text-xs text-gray-500"},"or click to browse",-1)),s[19]||(s[19]=e("p",{class:"mt-3 text-xs text-gray-400"},"PDF, DOC, DOCX or TXT, up to 10MB",-1)),s[20]||(s[20]=e("p",{class:"mt-4 max-w-xs text-xs leading-relaxed text-gray-500"},[T(" This becomes your "),e("span",{class:"font-medium text-gray-700"},"base resume"),T(", the one every future scan starts from. ")],-1))])]),_:1},8,["accept","disabled"]),e("button",{type:"button",class:"mt-3 w-full text-center text-xs font-medium text-blue-600 transition-colors hover:text-blue-700",onClick:s[9]||(s[9]=c=>y.value=!0)}," Paste it as text instead ")],64))]))]),_:1}),t.status==="idle"?(n(),l("ul",zt,[(n(),l(L,null,be(h,c=>e("li",{key:c,class:"flex gap-2.5"},[s[23]||(s[23]=e("span",{class:"mt-1.5 h-1 w-1 flex-shrink-0 rounded-full bg-gray-300","aria-hidden":"true"},null,-1)),e("span",Rt,p(c),1)])),64))])):M("",!0)])}}},At={class:"flex flex-col gap-3"},Mt={class:"flex items-center gap-2"},Ot={class:"w-full space-y-3"},Dt={class:"flex gap-2 rounded-lg bg-gray-50 px-3 py-2.5"},Nt={__name:"OnboardingJobPanel",props:{awaiting:{type:Boolean,default:!1},hasJob:{type:Boolean,default:!1},idle:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1}},emits:["job-data-submitted","error"],setup(t,{expose:v}){const x=i(null);return v({jobStep:x}),(h,o)=>{const w=j("BaseIcon"),y=j("BaseCard");return n(),l("section",At,[e("header",Mt,[e("span",{class:N(["flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full text-xs font-bold transition-colors",t.hasJob?"bg-emerald-100 text-emerald-700":t.awaiting?"bg-blue-100 text-blue-700":"bg-gray-100 text-gray-400"])},[t.hasJob?(n(),G(w,{key:0,name:"CheckIcon",size:"h-3.5 w-3.5"})):(n(),l(L,{key:1},[T("2")],64))],2),e("h2",{class:N(["text-xs font-semibold uppercase tracking-wide transition-colors",t.awaiting||t.hasJob?"text-gray-500":"text-gray-400"])}," The job you want ",2)]),u(y,{class:N(t.awaiting?"ring-2 ring-blue-400 ring-offset-2 transition-shadow":"transition-shadow"),"container-class":"p-4 sm:p-5"},{default:D(()=>
2[e("div",Ot,[t.awaiting?(n(),G(nt,{key:0,title:t.idle?"Why paste a job description?":"Now add the job you are applying for",tone:t.idle?"amber":"blue",icon:"ArrowDownIcon"},{default:D(()=>[e("p",{class:N(["mt-0.5 text-xs leading-relaxed",t.idle?"text-amber-700":"text-blue-700"])}," A resume that reads well in general is not the same as a resume that reads well for one job. Recruiters search on the words a posting uses, so this is where you show on paper that you are qualified and relevant for the role you want. ",2),e("p",{class:N(["mt-1.5 text-xs leading-relaxed",t.idle?"text-amber-700":"text-blue-700"])}," Paste it and you'll see your match score and the exact keywords you're missing. Paste the whole posting, we'll pick out what counts. ",2)]),_:1},8,["title","tone"])):M("",!0),u(Xe,{ref_key:"jobStep",ref:x,"hide-header":"","hide-tracker":"","details-optional":"","editor-id":"onboarding-job","hide-tips":"","description-hint":"Paste the posting from the job site, not just the job title.",disabled:t.disabled,onJobDataSubmitted:o[0]||(o[0]=I=>h.$emit("job-data-submitted",I)),onError:o[1]||(o[1]=I=>h.$emit("error",I))},null,8,["disabled"])])]),_:1},8,["class"]),e("div",Dt,[u(w,{name:"DocumentDuplicateIcon",size:"h-4 w-4",class:"mt-0.5 flex-shrink-0 text-gray-400"}),o[2]||(o[2]=e("p",{class:"text-xs leading-relaxed text-gray-600"}," Scanning tailors a copy of your resume to this job. Your original stays as it is. ",-1))])])}}},Ut={class:"sticky bottom-0 z-20 border-t border-gray-200 bg-white/95 backdrop-blur"},Lt={class:"mx-auto flex max-w-6xl flex-col gap-2 px-4 py-3 sm:px-6 lg:flex-row lg:items-center lg:justify-between lg:gap-6"},Vt={class:"flex min-w-0 items-center gap-2"},Wt={class:"truncate text-xs text-gray-600"},Kt={__name:"OnboardingActionBar",props:{ready:{type:Boolean,default:!1},canOptimize:{type:Boolean,default:!0},busy:{type:Boolean,default:!1},hint:{type:String,default:""}},emits:["scan","optimize"],setup(t){return(v,x)=>{const h=j("BaseIcon");return n(),l("div",Ut,[e("div",Lt,[e("div",Vt,[u(h,{name:t.ready?"CheckCircleIcon":"InformationCircleIcon",size:"h-4 w-4",class:N(["flex-shrink-0",t.ready?"text-emerald-500":"text-gray-400"])},null,8,["name","class"]),e("p",Wt,p(t.hint),1)]),u(lt,{ready:t.ready,"can-optimize":t.canOptimize,busy:t.busy,stretch:"",onScan:x[0]||(x[0]=o=>v.$emit("scan")),onOptimize:x[1]||(x[1]=o=>v.$emit("optimize"))},null,8,["ready","can-optimize","busy"])])])}}},Yt={class:"flex min-h-screen flex-col items-center justify-center px-6 py-12"},Jt={key:0,class:"w-full max-w-md text-center"},Ft={key:0,class:"mt-1.5 text-sm text-gray-500"},qt={class:"mt-8 h-2 w-full overflow-hidden rounded-full bg-gray-200"},Ht={class:"mt-3 text-xs text-gray-500"},Gt={key:1,class:"w-full max-w-lg text-center"},Xt={class:"mt-6 text-lg font-semibold text-gray-900"},Zt={key:0,class:"mt-5 flex flex-wrap justify-center gap-2"},Qt={key:0,class:"rounded-full px-3 py-1 text-xs font-medium text-gray-400"},es={class:"mt-8 inline-flex items-center gap-2 text-sm text-gray-500"},xe=12,ts={__name:"OnboardingScanProgress",props:{stage:{type:String,default:"scanning",validator:t=>["scanning","reveal"].includes(t)},progress:{type:Number,default:0},scanningMessage:{type:String,default:"Comparing your experience to the posting"},jobLabel:{type:String,default:""},matchScore:{type:Number,default:null},missingKeywords:{type:Array,default:()=>[]},boostMessage:{type:String,default:""},mode:{type:String,default:"scan",validator:t=>["scan","optimize"].includes(t)}},setup(t){const v=t,x=d(()=>v.missingKeywords.slice(0,xe)),h=d(()=>Math.max(0,v.missingKeywords.length-xe)),o=d(()=>v.boostMessage?v.boostMessage:v.mode==="optimize"?"Adding them to your resume now":"Opening your scan");return(w,y)=>{const I=j("BaseProgressCircle");return n(),l("div",Yt,[y[2]||(y[2]=e("img",{src:"/img/main_logo.png",alt:"SkillSyncer",class:"mb-10 h-10 w-auto"},null,-1)),t.stage==="scanning"?(n(),l("div",Jt,[y[0]||(y[0]=e("h1",{class:"text-xl font-semibold text-gray-900"}," Scanning your resume ",-1)),t.jobLabel?(n(),l("p",Ft," against "+p(t.jobLabel),1)):M("",!0),e("div",qt,[e("div",{class:"h-full rounded-full bg-blue-600 transition-all duration-700 ease-out",style:me({width:`${t.progress}%`})},null,4)]),e("p",Ht,p(t.scanningMessage),1)])):t.stage==="reveal"?(n(),l("div",Gt,[u(I,{value:t.matchScore??0,radius:52,"font-size":"text-4xl",class:"mx-auto"},null,8,["value"]),y[1]||(y[1]=e("p",{class:"mt-3 text-sm font-medium text-gray-500"},"match score",-1)),e("h1",Xt,[t.missingKeywords.length?(n(),l(L,{key:0},[T(p(t.missingKeywords.length)+" "+p(t.missingKeywords.length===1?"keyword is":"keywords are")+" missing from your resume ",1)],64)):(n(),l(L,{key:1},[T(" Your resume already covers this posting's keywords ")],64))]),t.missingKeywords.length?(n(),l("div",Zt,[(n(!0),l(L,null,be(x.value,(S,z)=>(n(),l("span",{key:S,class:"rounded-full border border-amber-200 bg-amber-50 px-3 py-1 text-xs font-medium text-amber-800",style:me({animationDelay:`${z*40}ms`})},p(S),5))),128)),h.value?(n(),l("span",Qt," +"+p(h.value)+" more ",1)):M("",!0)])):M("",!0),e("p",es,[u(we,{class:"h-4 w-4 text-gray-400"}),T(" "+p(o.value),1)])])):M("",!0)])}}},ss={class:"min-h-screen bg-gray-50"},as={key:1,class:"flex min-h-screen flex-col"},os={class:"mx-auto w-full max-w-6xl px-4 pt-8 sm:px-6"},ns={class:"mt-5 text-2xl font-bold text-gray-900 sm:text-3xl"},rs={class:"mx-auto flex w-full max-w-6xl flex-1 items-start px-4 py-6 sm:px-6"},ls={class:"grid w-full grid-cols-1 gap-6 lg:grid-cols-12"},is={class:"lg:col-span-5"},us={class:"lg:sticky lg:top-6 lg:max-h-[calc(100vh-7rem)] lg:overflow-y-auto"},ds={class:"lg:col-span-7"},cs=2600,ms=25e3,ua={__name:"OnboardingIndex",setup(t){const v=Qe["keyword-boost"].credits,x=["Reading your bullet points","Finding where each keyword fits","Rewriting the lines that need it","Checking it still reads naturally"],h=[{title:"Reading your resume",description:"Extracting the text from your document"},{title:"Analyzing content",description:"Identifying experience, skills, and qualifications"},{title:"Organizing sections",description:"Structuring work history, education, and skills"},{title:"Scoring your resume",description:"Checking completeness and writing quality"},{title:"Finishing up",description:"Saving your resume"}],o=Je(),w=qe(),y=Fe(),{issueCounts:I}=rt(),S=i("build"),z=i("scan"),R=i(!1),b=i("idle"),V=i(""),W=i(""),P=i(!0),A=i(""),$=i(null),K=i(null),_=i(0),k=i(0);let Y=null;const J=i(null),ee=i(!1);let te=null;const B=i(0),m=i("Comparing your experience to the posting");let s=null,X=null;const Z=i(!1),O=i(0);let Q=null;const ae=i(null),oe=i([]),U=i(null),c=d(()=>o.getters["user/currentUser"]),ke=d(()=>o.getters["user/scansLeft"]),Se=d(()=>o.getters["user/isSubscribed"]),$e=d(()=>h[k.value]||h[h.length-1]),Ce=d(()=>{const a=o.getters["resumes/resumeCompletionCheckScore"];return a==null?null:Math.round(a)}),_e=d(()=>{const a=o.getters["resumes/resumeContentChecksScore"];return a==null?null:Math.round(a)}
2),Ie=d(()=>tt(o.getters["resumes/resumeCompletionCheckScore"],o.getters["resumes/resumeContentChecksScore"],!0)),ne=d(()=>!!J.value),re=d(()=>b.value==="ready"),ge=d(()=>re.value&&!ne.value),le=d(()=>ne.value&&(re.value||b.value==="uploading")),Te=d(()=>st(a=>o.getters[`resumes/${a}`])),je=d(()=>le.value&&Te.value),Be=d(()=>{var a;return o.getters["user/hasPremiumFeatures"]||(((a=c.value)==null?void 0:a.ai_credits)??0)>=v}),Ee=d(()=>{var f,C,q,g;const a=(C=(f=J.value)==null?void 0:f.job_title)==null?void 0:C.trim(),r=(g=(q=J.value)==null?void 0:q.company)==null?void 0:g.trim();return a&&r?`${a} at ${r}`:a||r||""}),ze=d(()=>R.value?"Starting your scan...":!re.value&&b.value!=="uploading"?"Add your resume to get started.":ne.value?b.value==="uploading"?"Still reading your resume. You can scan now.":"Ready to scan. Auto optimize also rewrites your resume around this job.":b.value==="uploading"?"Reading your resume. Add a job description to scan.":"Add a job description for your match score and the keywords recruiters will be looking for.");function pe(){_.value=0,k.value=0,Y=setInterval(()=>{if(_.value>=99){F();return}const a=99-_.value;_.value=Math.min(99,_.value+a*(.01+Math.random()*.02));const r=Math.floor(_.value/99*h.length);r>k.value&&k.value<h.length-1&&(k.value=r)},200)}function F(){Y&&(clearInterval(Y),Y=null)}function Re({file:a,text:r,fileName:f}){b.value="uploading",V.value="",W.value="",P.value=!0,A.value=f,pe();const C=new FormData;a?(C.append("file",a),C.append("name",f.replace(/\.[^/.]+$/,""))):(C.append("resume_text",r),C.append("name","Pasted Resume")),C.append("type","base"),C.append("default","true"),C.append("offers_validation","true");const q=new Promise((g,H)=>{setTimeout(()=>H(new Error("We could not read your resume in time. Try a smaller file or a different format.")),185e3)});K.value=Promise.race([o.dispatch("resumes/createResume",C),q]).then(async g=>{if(!g.success||!g.resume)throw W.value=g.error||"",P.value=g.shouldRetry!==!1,et(window.emitter,g.error_type,g),new Error(g.message||"We could not add that resume.");$.value=g.resume.id,await o.dispatch("resumes/fetchResume",{id:$.value}),F(),_.value=100,b.value="ready",A.value=o.getters["resumes/resumeName"]||A.value,w.replace({query:{...y.query,resume:$.value}})}).catch(g=>{var H,E;throw F(),b.value="error",V.value=((E=(H=g.response)==null?void 0:H.data)==null?void 0:E.message)||g.message||"We could not read that resume.",g})}function fe(){F(),_.value=0,k.value=0,b.value="idle",V.value="",A.value="",$.value=null,K.value=null;const{resume:a,...r}=y.query;w.replace({query:r})}function Pe(a){J.value=a}function Ae(){B.value=0,m.value="Comparing your experience to the posting",s=setInterval(()=>{if(B.value>=95)return;const a=95-B.value;B.value=Math.min(95,B.value+a*(.04+Math.random()*.04)),B.value>60?m.value="Matching keywords from the posting":B.value>30&&(m.value="Reading the job requirements")},220)}function ce(){s&&(clearInterval(s),s=null)}async function ye(a){var r,f,C,q,g,H;if(!(!le.value||R.value)){if(!Se.value&&ke.value<1){ve({reason:"scanLimit",source:"onboarding:scan-limit"});return}if(a==="optimize"&&!Be.value){Ze("onboarding:optimize");return}R.value=!0,z.value=a,S.value="scanning",Ae();try{if(b.value==="uploading"&&K.value&&await K.value,!$.value)throw new Error("Your resume is not ready yet. Please try again.");const E=await o.dispatch("scans/newScan",{...J.value,cv_txt:"",resume_uuid:$.value,scan_type:"smart"});if((r=E.data)!=null&&r.error)throw new Error(E.data.error);if(!((f=E.data)!=null&&f.scan))throw new Error("We could not create your scan. Please try again.");U.value=E.data.scan,ce(),B.value=100,ae.value=Math.round(Number(U.value.score)||0),oe.value=Me(U.value),S.value="reveal",a==="optimize"?await Oe():await new Promise(Ue=>{X=setTimeout(Ue,cs)}),De()}catch(E){ce(),R.value=!1,S.value="build",se(((q=(C=E.response)==null?void 0:C.data)==null?void 0:q.message)||((H=(g=E.response)==null?void 0:g.data)==null?void 0:H.error)||E.message||"We could not create your scan. Please try again.")}}}function Me(a){const r=it(a.hard_skills,a.soft_skills,a.other_skills,a.version);return ut(r).map(f=>f.keyword)}async function Oe(){var a,r;Z.value=!0,O.value=0,Q=setInterval(()=>{O.value=Math.min(O.value+1,x.length-1)},5e3);try{const f=await o.dispatch("scans/optimizeResumeJson",{scanUuid:U.value.uuid,strategy:"keyword-boost"});o.commit("scans/SET_PENDING_OPTIMIZATION",{scanUuid:U.value.uuid,strategy:"keyword-boost",changes:f})}catch(f){se(((r=(a=f.response)==null?void 0:a.data)==null?void 0:r.error)||f.message||"We could not optimize your resume. You can run it again from AI Tools."),z.value="scan"}finally{clearInterval(Q),Q=null,Z.value=!1}}function De(){const a=z.value==="optimize"?"ai":"job-match";w.push({name:"scans.resume",params:{id:U.value.uuid,panelA:"details",panelB:a}})}async function Ne(){if(le.value||!re.value){w.push({name:"dashboard"});return}const a=await o.dispatch("dialog/openDialog",{title:"One step from your match score",message:"Your resume is scored. Paste a job description and we will show how well you match, and which keywords you are missing.",yesLabel:"Add a job description",yesVariant:"primary",noLabel:"Skip to dashboard",variant:"secondary",hideNoButton:!1,size:"md"});o.dispatch("dialog/closeDialog"),a===!1&&w.push({name:"dashboard"})}function se(a){var r;(r=window.emitter)==null||r.emit("show-error",{notification:a})}return Ke(ge,a=>{clearTimeout(te),ee.value=!1,a&&(te=setTimeout(()=>{ee.value=!0},ms))}),he(async()=>{const a=y.query.resume;
2if(typeof a=="string"&&a){$.value=a,b.value="uploading",pe();try{await o.dispatch("resumes/fetchResume",{id:a}),F(),_.value=100,b.value="ready",A.value=o.getters["resumes/resumeName"]||""}catch{F(),fe(),se("We could not load that resume. Please add it again.")}}}),Ye(()=>{F(),ce(),clearInterval(Q),clearTimeout(X),clearTimeout(te)}),(a,r)=>(n(),l("div",ss,[S.value!=="build"?(n(),G(ts,{key:0,stage:S.value,progress:B.value,"scanning-message":m.value,"job-label":Ee.value,"match-score":ae.value,"missing-keywords":oe.value,mode:z.value,"boost-message":Z.value?x[O.value]:""},null,8,["stage","progress","scanning-message","job-label","match-score","missing-keywords","mode","boost-message"])):(n(),l("div",as,[e("header",os,[e("div",{class:"flex items-start justify-between gap-4"},[r[3]||(r[3]=e("img",{src:"/img/main_logo.png",alt:"SkillSyncer",class:"h-9 w-auto"},null,-1)),e("button",{type:"button",class:"-mr-2 flex-shrink-0 px-2 py-1 text-xs font-medium text-gray-400 transition-colors hover:text-gray-600",onClick:Ne}," Skip for now ")]),e("h1",ns," Welcome, "+p(c.value.first_name)+". ",1),r[4]||(r[4]=e("p",{class:"mt-1.5 text-sm text-gray-600"}," Add your resume and the job you are chasing. You will get a score for each, and the keywords standing between them. Scan to see where you stand, or scan and auto optimize to have your resume rewritten around the keywords the job is asking for. ",-1))]),e("div",rs,[e("div",ls,[e("div",is,[e("div",us,[u(Pt,{status:b.value,progress:_.value,"progress-step":$e.value,error:V.value,"error-code":W.value,"can-retry":P.value,"file-name":A.value,score:Ie.value,"completion-score":Ce.value,"content-score":_e.value,"issue-counts":de(I),disabled:R.value,onUploadStarted:Re,onRetry:fe,onUpgrade:r[0]||(r[0]=f=>de(ve)({reason:"resumeLimit",source:"onboarding:resume-limit"})),onError:se},null,8,["status","progress","progress-step","error","error-code","can-retry","file-name","score","completion-score","content-score","issue-counts","disabled"])])]),e("div",ds,[u(Nt,{awaiting:ge.value,"has-job":ne.value,idle:ee.value,disabled:R.value,onJobDataSubmitted:Pe,onError:se},null,8,["awaiting","has-job","idle","disabled"])])])]),u(Kt,{ready:le.value,"can-optimize":je.value,busy:R.value,hint:ze.value,onScan:r[1]||(r[1]=f=>ye("scan")),onOptimize:r[2]||(r[2]=f=>ye("optimize"))},null,8,["ready","can-optimize","busy","hint"])]))]))}};export{ua 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.