PageSourceSearch

https://www.huttonsgroup.com/build/assets/index-2eZQAkjz.js

js huttonsgroup.com collected 2026-10-01 16:01:40 UTC 31,024 bytes, 29 lines download raw bytes

1import{u as Ut,f as Ot,c as Gt,g as Vt}from"./useAffordability-D7XCOaKl.js";import{g as _t}from"./ssd-iZOtVz90.js";import{a as jt}from"./bsdAbsd-DL3673rr.js";import{u as qt,a as Kt}from"./useHipUser-CDjYG9pd.js";import{u as Wt}from"./useProgressiveTimeline-DK_If8Xt.js";import{_ as zt,r as Yt,u as Ht}from"./AppLayout.vue_vue_type_script_setup_true_lang-DeOXhRkR.js";import{i as Xt,p as W,j as Jt,e as Ba,w as Ue,a as pe,b as z,o as Oe,u as fe,c as Fa,t as Ua,g as Oa,n as l,B as n,s as da,A as Qt}from"./app-CiZjbkE0.js";import"./debounce-DtSLDvQw.js";import{_ as Zt}from"./Button.vue_vue_type_script_setup_true_lang-BdjNNw_2.js";import{_ as Ga}from"./ModalDialog.vue_vue_type_script_setup_true_lang-BYzZPqit.js";import{f as m}from"./FormatNumber-DtJYAcXm.js";import{_ as el}from"./ListModalDialog.vue_vue_type_script_setup_true_lang-DMrLz48v.js";import{_ as al}from"./Applicant.vue_vue_type_script_setup_true_lang-zhnNdwQj.js";import{_ as tl}from"./ProgressiveTimeline.vue_vue_type_script_setup_true_lang-Bpt9hMr3.js";import{_ as ll}from"./PaymentBreakdownCard.vue_vue_type_script_setup_true_lang-TPedoO5M.js";import{_ as nl}from"./ExportPdfOptionsPanel.vue_vue_type_script_setup_true_lang-C5Z3ngdo.js";import"./HuttonsLogo-k4KVz4P7.js";import"./_plugin-vue_export-helper-DlAUqK2U.js";import"./FormInput.vue_vue_type_script_setup_true_lang-IVyRMuFo.js";import"./FormLabel.vue_vue_type_script_setup_true_lang-Cqo4t6HB.js";import"./Spinner.vue_vue_type_script_setup_true_lang-B5H8bArf.js";import"./Notification.vue_vue_type_script_setup_true_lang-DxY7CsPW.js";import"./FullwidthContainer.vue_vue_type_script_setup_true_lang-T0uzcdzI.js";import"./QuickShareTemplate.vue_vue_type_script_setup_true_lang-C3ZEPCi4.js";import"./Card.vue_vue_type_script_setup_true_lang-wcN5XyAK.js";import"./Heading.vue_vue_type_script_setup_true_lang-lhSE-GdR.js";import"./FormatDateTime-DEivd2nb.js";import"./Charts.vue_vue_type_script_setup_true_lang-B3nirFDJ.js";import"./DividerWithLabel.vue_vue_type_script_setup_true_lang-DidZUdrR.js";/* empty css            */import"./portal-Dnh6LYRc.js";import"./keyboard-Dbbjjs3d.js";import"./Toggle.vue_vue_type_script_setup_true_lang-ldlYoBeb.js";import"./TabBar.vue_vue_type_script_setup_true_lang-ynr12EpG.js";import"./AssessableMonthlyCommitments.vue_vue_type_script_setup_true_lang-Be8o5n8_.js";import"./AssessableMonthlyIncome.vue_vue_type_script_setup_true_lang-g6ERl332.js";import"./SuperPalExplainAssessableIncome.vue_vue_type_script_setup_true_lang-CXPsn-BG.js";import"./LinkIcon.vue_vue_type_script_setup_true_lang-BSxE_ABB.js";import"./SuperPal.vue_vue_type_script_setup_true_lang-C8BqcKcA.js";import"./FormDateInlineEdit.vue_vue_type_script_setup_true_lang-DCMXFHIE.js";import"./FormDatePicker.vue_vue_type_script_setup_true_lang-De1YcIbz.js";import"./Slider-BjNurnfm.js";const L=o=>Number(o??0),ul=o=>o.includes("Foundation Complete")?"Upon Foundation (10%)":o.includes("Reinforced Concrete Framework Complete")?"Upon Concrete Framework (10%)":o.includes("Partition Walls Complete")?"Upon Brick Wall (5%)":o.includes("Roofing / Ceiling Complete")?"Upon Ceiling (5%)":o.includes("Door, Window, Electrical Complete")?"Upon Interior, Electrical Plant / AC (5%)":o.includes("Car Park, Road & Drains Complete")?"Upon Roads / Drains / Carpark (5%)":o.includes("Legal Completion Date")?"Legal Completion Date (CSC) (15%)":o,Ge=o=>o==="Exercise S&P"?"S&P + 3 weeks":o==="Exercise S&P (15%)"?"OTP + 8 weeks":o==="Upon Foundation (10%)"||o==="Upon Concrete Framework (10%)"?"6 - 9 months":o==="Upon Brick Wall (5%)"||o==="Upon Ceiling (5%)"||o==="Upon Interior, Electrical Plant / AC (5%)"||o==="Upon Roads / Drains / Carpark (5%)"||o==="Temporary Occupation Permit (TOP) (25%)"?"3 - 6 months":o==="Legal Completion Date (CSC) (15%)"?"12 months":"",ue=(o,u)=>u===1&&String(o.stage??"").includes("Exercise S&P"),ma=o=>o<=5,ol=({baseTimeline:o,propertyPrice:u,exerciseSpDate:v,deriveExerciseSpDateFromOtp:s,stampDutyTotal:g})=>{if(!Array.isArray(o)||o.length<3)return o;const i=[...o],c=i[1],d=i[2];if(!(String(c?.stage??"").includes("Exercise S&P")&&String(d?.stage??"").includes("S&P Completion")))return i;const E={...d,stage:"Exercise S&P (15%)",displayDate:"S&P + 8 weeks",date:v??s(i[0]?.date)??d?.date,amount:Math.round(L(u)*.15)};return[i[0],c,E,...i.slice(3)].map((x,G)=>{const M=ul(String(x?.stage??""));return ue(x,G)?{...x,stage:"Exercise S&P",date:void 0,displayDate:Ge("Exercise S&P"),amount:Math.round(L(g))}:M==="Upon Interior, Electrical Plant / AC (5%)"?{...x,stage:M,amount:L(x?.amount)/2,displayDate:Ge(M)}:M==="Legal Completion Date (CSC) (15%)"?{...x,stage:M,amount:L(x?.amount)*1.5,displayDate:Ge(M)}:{...x,stage:M,displayDate:Ge(M)||x?.displayDate}})},Va=({timeline:o,idx:u,stampDutyTotal:v})=>{const s=o[u];return ue(s,u)?Math.round(L(v)):L(s?.amount)},rl=({timeline:o,idx:u,downpaymentAmount:v,stampDutyTotal:s})=>{const g=o[u];if(ue(g,u))return Math.round(L(s));let i=L(v);for(let c=0;c<=u;c++){if(ue(o[c],c))continue;const d=Va({timeline:o,idx:c,stampDutyTotal:s}),P=Math.min(i,d);if(i=Math.max(0,i-P),c===u)return P}return 0},sl=({timeline:o,idx:u,downpaymentAmount:v,selectedLoanAmount:s,stampDutyTotal:g})=>{if(ma(u))return 0;let i=L(v),c=0;for(let P=0;P<=u;P++){if(ue(o[P],P))continue;const E=Va({timeline:o,idx:P,stampDutyTotal:g}),w=Math.min(i,E);i=Math.max(0,i-w),!ma(P)&&w<E&&(c+=E-w)}const d=Math.max(0,L(s));return Math.min(Math.max(0,c),d)},il=({loanDrawn:o,idx:u,selectedLoanAmount:v,bankFloorRate:s,effectiveTenure:g})=>{if(!o||ma(u))return 0;const i=Math.max(0,L(v));if(!i)return 0;const c=L(s)/100/12,d=L(g)*12;if(!c||!d)return 0;const P=i*c*Math.pow(1+c,d)/(Math.pow(1+c,d)-1);return o/i*P},vl=({item:o,idx:u,showDates:v,foundationBeforeSP:s,formatTimelineExportDate:g})=>!v||ue(o,u)||s&&u===2&&String(o.stage??"").includes("Foundation Complete")?"":o.displayDate?o.displayDate:g(o.date),cl={class:"flex flex-col gap-y-6"},dl={class:"p-4"},ml={class:"relative p-6 space-y-4"},pl={key:0,class:"absolute inset-0 z-20 flex flex-col items-center justify-center gap-2 bg-white/80 backdrop-blur-sm rounded-b-xl"},fl={class:"text-sm text-gray-600"},bl={key:1,class:"text-sm text-red-500"}
1,le=30,be=90,hl=5.5,ne=4,he=55,Pe=30,ge="New Launch Purchase (Private)",Pl=56,rn=Xt({__name:"index",setup(o){const u=l(0),v=l(ne),s=l(!0),g=l(!0),i=l(he),c=l(Pe),d=l(0),P=l(1),E=l(4),w=l(!1),x=l(!1),G=l(!1),M=l(!0),Se=l(!0),ye=l(!1),Ve=l(""),Ne=l(!0),_e=l(!0),je=l(!0),qe=l(!0),Ke=l(!0),We=l(!0),ze=l(!0),Ye=l(!0),Y=l(!0),xe=l(!0),He=l(!0),Le=l(!0),oe=l(!1),H=l(null),D=l("pdf"),$=Ut(),{exportImage:_a,exportPDF:ja}=Ht(),{buyers:h,purchaseMode:Xe}=$,qa=n(()=>($.sessions?.value?.length??0)>0),{incomeWeightedAverageAge:X}=Vt(h),pa=n(()=>h.value.reduce((e,a)=>e+(a.assessableIncome||0),0)),fa=n(()=>h.value.reduce((e,a)=>e+(a.carLoan||0)+(a.housingLoan||0)+(a.creditCards||0)+(a.otherLoans||0),0)),Me=n(()=>X.value?Ot("HDB",X.value):le),re=n(()=>le),B=n(()=>Math.min(d.value,re.value));W(Me,(e,a)=>{const t=e||le,r=d.value;(r<=0&&a==null||r===(a||0)||r>re.value)&&(d.value=t)},{immediate:!0});const Ka=n(()=>Math.max(...h.value.map(e=>e.existingLoans||0),0)),J=n(()=>{const e=X.value+B.value;return Gt(Ka.value,e,B.value)}),y=l(0),A=l(!1),N=l(null),se=l(!1),we=l(0),F=n(()=>be),ie=n(()=>Math.max(0,Math.min(Number(y.value||0),F.value)));W(J,e=>{const a=Math.max(0,Math.min(Number(e||0),be)),t=Number(y.value||0);!A.value&&t!==a&&(y.value=a)},{immediate:!0}),W(F,(e,a)=>{const t=Number(y.value||0),r=a!==void 0&&t===Number(a),p=t>Number(e),S=r&&Number(e)>Number(a);(p||S)&&(y.value=Number(e),A.value=!1,se.value=!1,we.value++)},{immediate:!0});const De=e=>{y.value=Math.max(0,Math.min(Number(e||0),F.value))},Wa=e=>{De(Number(e||0)),N.value=null,A.value=!0},za=e=>{De(Number(e||0)),N.value=null,A.value=!0,se.value=!1,we.value++},ba=()=>{De(Number(J.value||0)),N.value=null,A.value=!1,se.value=!1,we.value++},Te=e=>{const a=Number(e||0),t=Number.isNaN(a)?0:Math.max(0,Math.floor(a)),r=u.value;if(!r){N.value=0,y.value=0;return}const p=Math.floor(r*(F.value/100)),S=Math.max(0,Math.min(t,p));N.value=S,De(Math.round(S/r*100)),A.value=!0},Ya=n(()=>Math.floor(u.value*(ie.value/100))),ha=l(!1),Ce=l(!1),Ee=l(!1),Je=l(!1),Qe=l(!1),$e=l(!1),Ze=l(!1),Pa=l(!1),ea=l(0),aa=l(0),ga=l(0),Sa=l(0),ya=l(0),ta=l(0),f=l(0),V=l(!1),Ae=n(()=>Q.value<=0?Math.floor(u.value):Math.floor(u.value-Q.value)),la=n(()=>Math.max(0,Math.round(100-Number(ie.value||0)))),Ie=n(()=>Number(ie.value||0)<=55?10:5),U=n(()=>Math.floor(u.value*(Ie.value/100))),_=n(()=>Math.max(Ae.value-U.value,0)),Ha=n(()=>{const e=f.value,a=v.value/100/12,t=B.value*12;if(!e||!a||!t)return 0;const r=Math.pow(1+a,t);return e*a*r/(r-1)}),Xa=n(()=>X.value?`${X.value}`:"-"),Ja=n(()=>Math.floor(pa.value*(Number(i.value||0)/100))),Qa=n(()=>Math.max(Ja.value-fa.value,0)),Za=n(()=>Math.floor(pa.value*(Number(c.value||0)/100))),et=n(()=>Math.max(Za.value-fa.value,0)),Q=n(()=>
1{if(!s.value||!u.value||ie.value<=0)return 0;const e=Ya.value||0;return N.value===null?e:Math.max(0,Math.min(Math.floor(N.value),Math.floor(u.value*(F.value/100))))}),ve=n(()=>{if(!s.value||!u.value)return 0;const e=Math.max(0,Math.min(Number(J.value||0),F.value));return e<=0?0:Math.floor(u.value*(e/100))});W([u,F],([e,a])=>{if(N.value===null)return;if(!e||a<=0){N.value=0;return}const t=Math.floor(e*(a/100));N.value=Math.max(0,Math.min(Math.floor(N.value),t))}),W(Q,e=>{if(!V.value){f.value=e;return}f.value>e&&(f.value=e)},{immediate:!0});const at=n(()=>`${Number(i.value||0)}%`),tt=n(()=>`${Number(c.value||0)}%`),lt=n(()=>`S$${m(Qa.value??0,{decimalPoints:0,locale:"en-SG"})}<sup>*</sup>`),nt=n(()=>`S$${m(et.value??0,{decimalPoints:0,locale:"en-SG"})}<sup>*</sup>`),Z=l(void 0),ee=l(void 0),Na=n(()=>B.value?`${B.value} years`:"-"),ut=n(()=>h.value.map(e=>e.nationality||"SINGAPOREAN")),ot=n(()=>h.value.map(e=>{const a=Math.max(0,Math.floor(Number(e.existingProperties??e.existingLoans??0)||0));return a>=2?"THIRD_PLUS":a===1?"SECOND":"FIRST"})),b=n(()=>jt(u.value,ut.value,ot.value,{foreignFtaEligible:h.value.map(e=>!!(e.isForeignFtaEligible??!1)),marriedToSingaporeCitizen:h.value.map(e=>!!(e.isMarriedToSingaporeCitizen??!1)),purchaseMode:Xe.value})),na=n(()=>`S$${m(b.value.bsd??0,{decimalPoints:0,locale:"en-SG"})}`),ua=n(()=>`S$${m(b.value.absd??0,{decimalPoints:0,locale:"en-SG"})}`),ke=n(()=>b.value.absd??0),Re=n(()=>!u.value||!ke.value?0:Math.round(ke.value/u.value*100)),T=l(3e3);W(u,()=>{V.value=!1});const j=l(!0),I=l(!1),xa=l("ec"),{timeline:ae}=Wt({price:()=>u.value,buyerStampDuty:()=>b.value.bsd??0,foundationBeforeSP:I,propertyType:xa}),ce=l(void 0),rt=e=>{if(!e)return null;const a=new Date(e);return Number.isNaN(a.getTime())?null:a},oa=e=>{const a=rt(e);if(!a)return;const t=new Date(a);return t.setDate(t.getDate()+Pl),t.toISOString()};W(()=>ae.value?.[0]?.date,e=>{ce.value=oa(e)},{immediate:!0});const q=n(()=>ol({baseTimeline:ae.value??[],propertyPrice:Number(u.value||0),exerciseSpDate:ce.value,deriveExerciseSpDateFromOtp:oa,stampDutyTotal:Number(b.value.total??0)})),st=e=>{if(ae.value?.length&&e?.length){const a=[...ae.value],t=e[0]?.date??a[0]?.date,r=t!==a[0]?.date;a[0]={...a[0],date:t},r&&(ce.value=oa(t)),e[1]?.date&&!r&&(ce.value=e[1].date),ae.value=a;return}e?.[1]?.date&&(ce.value=e[1].date),ae.value=[...e]},La=n(()=>Q.value<=0?u.value+(b.value.bsd||0)+(b.value.absd||0)+T.value:U.value+_.value+(b.value.bsd||0)+(b.value.absd||0)+T.value),de=n(()=>{const e=Math.round(La.value??0);return`S$${m(e,{decimalPoints:0,locale:"en-SG"})}`}),it=n(()=>{const e=Math.round(u.value??0);return`S$${m(e,{decimalPoints:0,locale:"en-SG"})}`}),ra=n(()=>`${ie.value??0}%`),Ma=n(()=>`S$${m(Ha.value??0,{decimalPoints:0,locale:"en-SG"})}`),{getAgentSignature:vt}=qt(),{user:wa,fetchUser:ct}=Kt(),sa=async()=>{const e=da().current();e&&await $.fetchSessions(e)},dt=()=>{const e=h.value??[];if(e.length!==1)return;const a=e[0];Number(a?.age??21)===21&&(a?.nationality??"SINGAPOREAN")==="SINGAPOREAN"&&Number(a?.income??0)===0&&Number(a?.variableIncome??0)===0&&Number(a?.carLoan??0)===0&&Number(a?.housingLoan??0)===0&&Number(a?.creditCards??0)===0&&Number(a?.otherLoans??0)===0&&Number(a?.ordinaryAccount??0)===0&&Number(a?.existingLoans??0)===0&&Number(a?.existingProperties??0)===0&&!(a?.isForeignFtaEligible??!1)&&h.value.splice(0,h.value.length)};Jt(async()=>{await ct(),await sa(),dt()});const Da=n(()=>!h.value.some(a=>Number(a?.age??21)!==21||(a?.nationality??"SINGAPOREAN")!=="SINGAPOREAN"||Number(a?.income??0)>0||Number(a?.variableIncome??0)>0||Number(a?.assessableIncome??0)>0||Number(a?.carLoan??0)>0||Number(a?.housingLoan??0)>0||Number(a?.creditCards??0)>0||Number(a?.otherLoans??0)>0||Number(a?.ordinaryAccount??0)>0||Number(a?.existingLoans??0)>0||Number(a?.existingProperties??0)>0||!!(a?.isForeignFtaEligible??!1)||!!(a?.isMarriedToSingaporeCitizen??!1))&&Xe.value==="INDIVIDUAL"&&u.value===0&&s.value===!0&&v.value===ne&&i.value===he&&c.value===Pe&&d.value===(Me.value||le)&&y.value===Math.max(0,Math.min(Number(J.value||0),be))&&f.value===0&&T.value===3e3&&Z.value===void 0&&ee.value===void 0&&j.value===!0&&I.value===!1),Be=e=>{if(!e)return null;const a=e.split("/");if(a.length===3){const r=Number(a[0]),p=Number(a[1])-1,S=Number(a[2]),k=new Date(S,p,r);if(!Number.isNaN(k.getTime()))return k}const t=new Date(e);return Number.isNaN(t.getTime())?null:t},mt=n(()=>{const e=Be(Z.value),a=Be(ee.value);if(!e||!a||a<e)return null;const t=1e3*60*60*24;return Math.floor((a.getTime()-e.getTime())/t)}),ia=n(()=>{const e=Be(Z.value),a=Be(ee.value);return!e||!a?null:_t(e,a)}),Ta=n(()=>!u.value||u.value<=0||ia.value===null?null:u.value*ia.value),O=n(()=>(u.value??0)>0),va=n(()=>!s.value),pt=n(()=>
1{if(!O.value)return;const e=ca.value.map(a=>{if(a.title==="Progressive Schedule"){const r=a.rows.map(p=>`${p.label}
2${p.value}`).join(`
3
4`);return`${a.title}:
5${r}`}const t=a.rows.map(r=>`${r.label}: ${r.value}`).join(`
6`);return`${a.title}:
7${t}`}).join(`
8
9`);return`${ge}
10
11Initial Total Cash Outlay: ${de.value}
12
13	${e}
14
15	${vt()}`}),ft=n(()=>{if(!O.value)return;const e=ca.value.map(a=>{if(a.title==="Progressive Schedule"){const r=a.rows.map(p=>`${p.label}
16${p.value}`).join(`
17
18`);return`${a.title}:
19${r}`}const t=a.rows.map(r=>`${r.label}: ${r.value}`).join(`
20`);return`${a.title}:
21${t}`}).join(`
22
23`);return`${ge}
24
25Initial Total Cash Outlay: ${de.value}
26
27${e}`}),bt=e=>{if(!e)return"";const a=new Date(e);return Number.isNaN(a.getTime())?"":a.toLocaleDateString("en-SG",{day:"numeric",month:"short",year:"numeric"})},Ca=(e,a)=>vl({item:q.value[a]??e,idx:a,showDates:j.value,foundationBeforeSP:I.value,formatTimelineExportDate:bt}),ht=e=>rl({timeline:q.value,idx:e,downpaymentAmount:Number(Ae.value??0),stampDutyTotal:Number(b.value.total??0)}),Pt=e=>sl({timeline:q.value,idx:e,downpaymentAmount:Number(Ae.value??0),selectedLoanAmount:Number(f.value??0),stampDutyTotal:Number(b.value.total??0)}),gt=(e,a)=>il({loanDrawn:Number(e??0),idx:a,selectedLoanAmount:Number(f.value??0),bankFloorRate:Number(v.value??0),effectiveTenure:Number(B.value??0)}),K=e=>{const a=Number(e??0);return a?`S$${m(a,{decimalPoints:0,locale:"en-SG"})}`:"-"},St=(e,a)=>e!==0&&a>0,yt=(e,a)=>e!==0&&e!==1&&a>0,Nt=(e,a)=>e!==0&&e!==1&&a>0,xt=(e,a)=>e!==0&&e!==1&&a>0,Lt=(e,a)=>a===2&&String(e?.stage??"").includes("Exercise S&P (15%)")||a>=3&&a<=5?"Cash / CPF":"Cash",Ea=(e,a)=>a===1&&String(e?.stage??"")==="Exercise S&P",$a=(e,a)=>{const t=Number(e?.amount??0),r=ht(a),p=s.value?Pt(a):0,S=s.value?gt(p,a):0,k=K(t),me=K(r),R=K(p),te=K(S),C=[];return St(a,t)&&k!=="-"&&C.push(`Payment ${k}`),Ea(e,a)&&Number(b.value.bsd??0)>0&&C.push(`Buyer Stamp Duty ${K(Number(b.value.bsd??0))}`),Ea(e,a)&&Number(b.value.absd??0)>0&&C.push(`Additional Buyer Stamp Duty ${K(Number(b.value.absd??0))}`),yt(a,r)&&me!=="-"&&C.push(`${Lt(e,a)} ${me}`),s.value&&Nt(a,p)&&R!=="-"&&C.push(`Loan ${R}`),s.value&&xt(a,S)&&te!=="-"&&C.push(`Installment ${te}`),C},Aa=n(()=>q.value.filter((e,a)=>!(I.value&&a===2&&e.stage.includes("Foundation Complete"))).map(e=>{const a=q.value.findIndex(k=>k===e),t=Ca(e,a),r=K(Number(e.amount??0)),p=Le.value?$a(e,a).join(`
28`):"",S=[`${a+1}. ${e.stage}`];return t&&S.push(t),p&&S.push(p),{label:S.join(`
29`),value:r}})),Mt=n(()=>{const e=[];return s.value&&Q.value>0?(e.push({label:`${la.value}% Down Payment`,value:`S$${m(U.value+_.value,{decimalPoints:0,locale:"en-SG"})}`}),e.push({label:`Cash (${Ie.value}%)`,value:`S$${m(U.value,{decimalPoints:0,locale:"en-SG"})}`}),e.push({label:"Remaining Down Payment (Cash / CPF)",value:`S$${m(_.value,{decimalPoints:0,locale:"en-SG"})}`})):e.push({label:"Full Cash Payment",value:`S$${m(u.value??0,{decimalPoints:0,locale:"en-SG"})}`}),e.push({label:"Stamp Duty",value:`S$${m(b.value.total??0,{decimalPoints:0,locale:"en-SG"})}`}),e.push({label:"BSD",value:na.value}),(b.value.absd??0)>0&&e.push({label:`ABSD (${Re.value}%)`,value:ua.value}),e.push({label:"Legal Fee",value:`S$${m(T.value,{decimalPoints:0,locale:"en-SG"})}`}),e.push({label:"Total",value:de.value}),e}),ca=n(()=>[{title:"Initial Cash Outlay",rows:Mt.value},...s.value?[{title:"Bank Loan",rows:[{label:"Property Price",value:`S$${m(u.value??0,{decimalPoints:0,locale:"en-SG"})}`},{label:"Loan To Value (LTV)",value:ra.value},{label:"Interest Rate (p.a)",value:`${Number(v.value||0).toFixed(2)}%`},{label:"Loan Tenure",value:Na.value},{label:"Loan Amount",value:`S$${m(f.value??0,{decimalPoints:0,locale:"en-SG"})}`}]}]:[],{title:"Progressive Schedule",rows:Aa.value}]),Fe=n(()=>O.value?{title:"Initial Total Cash Outlay",resultLabel:"Initial Total Cash Outlay",resultValue:de.value,pageTitle:ge,sections:ca.value,agent:wa.value??void 0}:null),wt=()=>{const e=[];Y.value&&e.push({key:"stages"}),xe.value&&e.push({key:"amortization"});const a=`${la.value}% Down Payment`,t=`${Ie.value}% Cash`,r=Number(b.value.total??0),p=Number(f.value??0),S=s.value?`Bank Loan (LTV ${Number(y.value||0).toFixed(0)}%)`:"Bank Loan",k=Number(U.value||0)+Number(_.value||0)+r+Number(T.value||0),me=[{label:"Property Price",kind:"group",value:`S$${m(u.value??0,{decimalPoints:0,locale:"en-SG"})}`},{label:"Down Payment",kind:"group"},{label:`Downpayment - ${a}`,value:`S$${m(U.value+_.value,{decimalPoints:0,locale:"en-SG"})}`},{label:`Downpayment - ${t}`,value:`S$${m(U.value??0,{decimalPoints:0,locale:"en-SG"})}`},{label:"Downpayment - Remaining Down Payment (Cash / CPF)",value:`S$${m(_.value??0,{decimalPoints:0,locale:"en-SG"})}`},{label:"Downpayment - Stamp Duty",value:`S$${m(r,{decimalPoints:0,locale:"en-SG"})}`},{label:"Stamp Duty - Buyer Stamp Duty (BSD)",value:na.value},{label:`Stamp Duty - Additional Buyer Stamp Duty (ABSD ${Re.value}%)`,value:ua.value},{label:"Downpayment - Legal Fee",value:`S$${m(T.value,{decimalPoints:0,locale:"en-SG"})}`},{label:"Total Cash Outlay",value:`S$${m(k,{decimalPoints:0,locale:"en-SG"})}`}];return s.value&&me.push({label:S,kind:"group",value:`S$${m(p,{decimalPoints:0,locale:"en-SG"})}`},{label:`Bank Loan - ${Number(y.value||0).toFixed(0)}% Loan To Value`,value:ra.value},{label:"Bank Loan - Loan Tenure",value:Na.value},{label:"Bank Loan - Interest Rate (P.A)",value:`${Number(v.value||0).toFixed(2)}%`},{label:"Monthly Instalment",kind:"group",value:Ma.value}),{pages:e,exportMode:D.value,reportTitle:ge,agent:Ne.value?wa.value??void 0:void 0,includeProfile:Ne.value,includeTableOfContents:_e.value,includeCoverPage:D.value!=="image"&&M.value,includePageNumbers:Se.value,includeProfilePhoto:je.value,includeProfileName:qe.value,includeProfileDesignation:Ke.value,includeProfileCea:We.value,includeProfileMobile:ze.value,includeProfileCompany:Ye.value,includeRecipientName:ye.value,recipientName:ye.value?Ve.value:"",coverImageUrl:"https://huttonsgroup.s3.ap-southeast-1.amazonaws.com/calculators/covers/bank-interest-rate.jpg",customSections:[...Y.value?[{key:"stages",title:"",rows:me}]:[],...xe.value?[{key:"amortization",title:"Schedule",rows:Aa.value}]:[]],customScheduleItems:q.value.map((R,te)=>{const C=Le.value?$a(R,te):[];return{index:te+1,stage:R.stage,date:He.value&&Ca(R,te)||void 0,amount:R?.amount!==null&&R?.amount!==void 0?`S$${m(Number(R.amount||0),{decimalPoints:0,locale:"en-SG"})}`:void 0,note:C.length>0?C.join(" | "):void 0}})}},Dt=async()=>{!O.value||!Fe.value||(H.value=null,va.value&&(Y.value=!1),D.value="pdf",G.value=!0)},Tt=async()=>{!O.value||!Fe.value||(H.value=null,va.value&&(Y.value=!1),D.value="image",G.value=!0)},Ct=async()=>
29{if(!(!O.value||!Fe.value)){oe.value=!0,H.value=null;try{const e=wt(),a=D.value==="image"?"private-new-launch-purchase-image-export":"private-new-launch-purchase-pdf-export",t=await Yt(a,e);D.value==="image"?await _a(t,"new-launch-purchase-private.png"):await ja(t,"new-launch-purchase-private.pdf"),G.value=!1}catch(e){console.error(e),H.value=`${D.value==="image"?"Image":"PDF"} export failed. Please try again.`}finally{oe.value=!1}}},Ia=n(()=>({propertyPrice:u.value,bankFloorRate:v.value,bankLoanEnabled:s.value,hideSlider:g.value,requestedTdsrPercent:i.value,requestedMsrPercent:c.value,requestedTenureYear:d.value,requestedLtvPercent:y.value,isUserAdjustingLtv:A.value,manualMaxLoanAmount:N.value,selectedLoanAmount:f.value,legalFee:T.value,showDates:j.value,foundationBeforeSP:I.value,otpPercent:P.value,exercisePercent:E.value,purchaseDate:Z.value,saleDate:ee.value,buyers:JSON.parse(JSON.stringify($.buyers.value)),buyerCount:$.buyers.value.length,purchaseMode:Xe.value,result:Ta.value!==null?{ssdAmount:Ta.value,ssdRate:ia.value,holdingPeriodInDays:mt.value}:null})),Et=async e=>{const a=await Qt.post(da("api.calculator.v1.sessions.save"),{RouteName:da().current(),Snapshot:Ia.value,Version:"v1",Title:e.title,AccessPassword:e.accessPassword,NeverExpires:e.neverExpires});return await sa(),a},$t=e=>{e&&(u.value=e.propertyPrice??0,v.value=e.bankFloorRate??ne,s.value=e.bankLoanEnabled??!0,g.value=e.hideSlider??!0,i.value=e.requestedTdsrPercent??he,c.value=e.requestedMsrPercent??Pe,d.value=e.requestedTenureYear??(Me.value||le),y.value=e.requestedLtvPercent??Math.max(0,Math.min(Number(J.value||0),be)),A.value=e.isUserAdjustingLtv??!1,N.value=e.manualMaxLoanAmount??null,f.value=e.selectedLoanAmount??0,T.value=e.legalFee??3e3,j.value=e.showDates??!0,I.value=e.foundationBeforeSP??!1,P.value=e.otpPercent??1,E.value=e.exercisePercent??4,Z.value=e.purchaseDate??void 0,ee.value=e.saleDate??void 0,$.loadSnapshot(e),(!Array.isArray(e?.buyers)||e.buyers.length===0)&&h.value.splice(0,h.value.length))},At=e=>{$.loadProfileSnapshot(e)},ka=e=>{At(e),w.value=!0},It=()=>{$.addBuyer(),w.value=!0},kt=()=>{if((h.value?.length??0)>0){w.value=!0;return}w.value=!0},Rt=()=>{x.value=!0},Ra=()=>{$.reset(),u.value=0,v.value=ne,s.value=!0,g.value=!0,i.value=he,c.value=Pe,d.value=Me.value||le,y.value=Math.max(0,Math.min(Number(J.value||0),be)),A.value=!1,N.value=null,f.value=0,T.value=3e3,j.value=!0,I.value=!1,P.value=1,E.value=4,Z.value=void 0,ee.value=void 0,h.value.splice(0,h.value.length)},Bt=n(()=>({propertyPrice:u.value,applicantCount:h.value.length,bankLoanEnabled:s.value,hideSlider:g.value,incomeWeightedAverageAge:X.value,formattedIwaa:Xa.value,isEditingPropertyPrice:ha.value,isEditingLoanToValue:se.value,loanToValueEditorKey:we.value,requestedLtvPercent:y.value,currentLtvCap:F.value,isEditingTdsr:Ce.value,tdsrEditorKey:ea.value,requestedTdsrPercent:i.value,formattedTdsr:at.value,formattedTdsrAmount:lt.value,isEditingMsr:Ee.value,msrEditorKey:aa.value,requestedMsrPercent:c.value,formattedMsrPercent:tt.value,formattedMsrAmount:nt.value,isEditingLoanTenure:Qe.value,loanTenureEditorKey:ga.value,requestedTenureYear:d.value,maxTenureYear:re.value,isEditingInterestRate:Je.value,interestRateEditorKey:Sa.value,bankFloorRate:v.value,defaultInterestRate:ne,formattedMaxPropertyPrice:it.value,formattedLtv:ra.value,isEditingMaxLoan:$e.value,maxLoanEditorKey:ta.value,maxLoanAmount:Q.value,bankLoanCapAmount:ve.value,defaultMaxLoanAmount:ve.value,isEditingBankLoan:Ze.value,bankLoanEditorKey:ya.value,selectedLoanAmount:f.value,formattedMonthlyInstallment:Ma.value,downpaymentPercent:la.value,minimumCashPercent:Ie.value,downpaymentCash:U.value,downpaymentCpf:_.value,stampDutyTotal:b.value.total??0,formattedBsd:na.value,absdAmount:ke.value,absdRate:Re.value,formattedAbsd:ua.value,isEditingLegalFee:Pa.value,legalFee:T.value,formattedInitialOutlay:de.value,totalInitialOutlay:La.value})),Ft={updatePropertyPrice:e=>{u.value=Number(e)},addApplicant:()=>{It()},openApplicants:()=>{kt()},loadProfile:()=>{Rt()},setEditingPropertyPrice:e=>{ha.value=e},toggleBankLoan:e=>{s.value=e},toggleHideSlider:e=>{g.value=e},updateLtv:e=>{Wa(e)},setEditingLoanToValue:e=>{se.value=e},updateLtvSlider:e=>{za(e)},resetLtv:()=>{ba()},updateMaxLoan:e=>{Te(e),ta.value++,$e.value=!1,V.value=!1},resetMaxLoan:()=>{ba(),ta.value++,$e.value=!1,V.value=!1},setEditingMaxLoan:e=>{$e.value=e},updateTdsr:e=>{i.value=Math.max(0,Math.min(Number(e||0),100))},setEditingTdsr:e=>{Ce.value=e},updateTdsrSlider:e=>{i.value=Number(e),Ce.value=!1,ea.value++},resetTdsr:()=>{i.value=he,Ce.value=!1,ea.value++},updateMsr:e=>{c.value=Math.max(0,Math.min(Number(e||0),100))},setEditingMsr:e=>{Ee.value=e},updateMsrSlider:e=>{c.value=Number(e),Ee.value=!1,aa.value++},resetMsr:()=>{c.value=Pe,Ee.value=!1,aa.value++},updateTenure:e=>{if(e===""||e===null||e===void 0){d.value=0;return}const a=Number(e);if(Number.isNaN(a)){d.value=0;return}const t=Math.max(0,Math.floor(a));d.value=Math.min(t,re.value)},setEditingLoanTenure:e=>{Qe.value=e},updateTenureSlider:e=>{d.value=Number(e),Qe.value=!1,ga.value++},resetTenure:()=>{d.value=re.value},updateInterestRate:e=>{if(e===""||e===null||e===void 0){v.value=0;return}const a=Number(e);if(Number.isNaN(a)){v.value=0;return}v.value=Math.min(Math.max(a,0),hl)},setEditingInterestRate:e=>{Je.value=e},updateInterestRateSlider:e=>{v.value=Number(e),Je.value=!1,Sa.value++},resetInterestRate:()=>{v.value=ne},updateSelectedLoan:e=>{const a=Math.max(0,Number(ve.value||0)),t=Math.max(0,Math.min(Number(e||0),a));f.value=Number.isNaN(t)?0:t,Te(f.value),V.value=!0},setEditingBankLoan:e=>{Ze.value=e},updateSelectedLoanSlider:e=>{const a=Math.max(0,Number(ve.value||0)),t=Math.max(0,Math.min(Number(e||0),a));f.value=Number.isNaN(t)?0:t,Te(f.value),V.value=!0,Ze.value=!1,ya.value++},resetSelectedLoan:()=>{const e=Math.max(0,Number(ve.value||0));f.value=e,Te(f.value),V.value=!1},updateLegalFee:e=>{T.value=Number(e)},setEditingLegalFee:e=>{Pa.value=e}};return(e,a)=>(Oe(),Ba(fe(zt),{askIncludeProfileOnShare:!0,exportDisabled:!O.value,exportPayload:Fe.value,newDisabled:Da.value,newHandler:Ra,onExportImageAction:Tt,onExportPdfAction:Dt,onSessionLoaded:$t,openDisabled:!qa.value,saveDisabled:Da.value,saveHandler:Et,saveResetHandler:Ra,saveStateSnapshot:Ia.value,shareDisabled:!O.value,sharePayload:pt.value,sharePayloadWithoutProfile:ft.value,showExportImageOption:!0,title:ge,onRefreshSessions:sa},{default:Ue(()=>[pe("div",cl,[z(ll,{actions:Ft,"card-width-class":"w-full max-w-190 md:w-3/4 lg:w-2/3 xl:w-1/2 2xl:w-1/3 mx-auto","show-cash-topup":!1,"show-full-cash-payment":!1,"show-applicant-actions":!0,state:Bt.value},null,8,["state"]),(Oe(),Ba(fe(tl),{key:`${v.value}-${B.value}`,absdAmount:ke.value,absdRate:Re.value,bankLoan:s.value,buyerStampDuty:b.value.bsd??0,downPaymentAmount:Ae.value,foundationBeforeSP:I.value,hideBreakdownForSecondStep:!0,hideCashForFirstStep:!0,hidePaymentForFirstStep:!0,interestRate:v.value,loanAmount:f.value,loanTenure:B.value,propertyType:xa.value,showDates:j.value,showLoanInstallmentForFirstStep:!1,loanInstallmentStartIndex:6,allowExerciseDateEdit:!1,timeline:q.value,"onUpdate:timeline":st,"onUpdate:showDates":a[0]||(a[0]=t=>j.value=t),"onUpdate:foundationBeforeSP":a[1]||(a[1]=t=>I.value=t)},null,8,["absdAmount","absdRate","bankLoan","buyerStampDuty","downPaymentAmount","foundationBeforeSP","interestRate","loanAmount","loanTenure","propertyType","showDates","timeline"]))]),z(Ga,{value:w.value,"onUpdate:value":a[2]||(a[2]=t=>w.value=t),closeButtonText:"Close",header:"Applicant Profiles",height:"max-h-[90vh] sm:max-h-[95vh]",width:"w-full max-w-5xl"},{default:Ue(()=>[pe("div",dl,[z(fe(al),{"show-action-buttons":!1,onLoaded:ka})])]),_:1},8,["value"]),z(Ga,{value:G.value,"onUpdate:value":a[19]||(a[19]=t=>G.value=t),closeButtonText:"Cancel",header:D.value==="image"?"Export Image Options":"Export PDF Options",width:"w-full max-w-lg"},{extraActions:Ue(()=>
29[z(fe(Zt),{id:"btn-export-pdf-confirm",isDisabled:oe.value,label:oe.value?"Exporting...":D.value==="image"?"Export Image":"Export PDF","bg-color":"bg-brand-primary-500",color:"text-white",onClick:Ct},null,8,["isDisabled","label"])]),default:Ue(()=>[pe("div",ml,[oe.value?(Oe(),Fa("div",pl,[a[21]||(a[21]=pe("div",{class:"h-8 w-8 animate-spin rounded-full border-2 border-gray-200 border-t-brand-primary-500"},null,-1)),pe("span",fl,"Generating "+Ua(D.value==="image"?"Image":"PDF")+"...",1)])):Oa("",!0),z(nl,{imageMode:D.value==="image",includeCoverPage:M.value,"onUpdate:includeCoverPage":a[3]||(a[3]=t=>M.value=t),includePageNumbers:Se.value,"onUpdate:includePageNumbers":a[4]||(a[4]=t=>Se.value=t),includeRecipientName:ye.value,"onUpdate:includeRecipientName":a[5]||(a[5]=t=>ye.value=t),recipientName:Ve.value,"onUpdate:recipientName":a[6]||(a[6]=t=>Ve.value=t),includeTableOfContents:_e.value,"onUpdate:includeTableOfContents":a[7]||(a[7]=t=>_e.value=t),includeProfile:Ne.value,"onUpdate:includeProfile":a[8]||(a[8]=t=>Ne.value=t),includeProfilePhoto:je.value,"onUpdate:includeProfilePhoto":a[9]||(a[9]=t=>je.value=t),includeProfileName:qe.value,"onUpdate:includeProfileName":a[10]||(a[10]=t=>qe.value=t),includeProfileDesignation:Ke.value,"onUpdate:includeProfileDesignation":a[11]||(a[11]=t=>Ke.value=t),includeProfileCea:We.value,"onUpdate:includeProfileCea":a[12]||(a[12]=t=>We.value=t),includeProfileMobile:ze.value,"onUpdate:includeProfileMobile":a[13]||(a[13]=t=>ze.value=t),includeProfileCompany:Ye.value,"onUpdate:includeProfileCompany":a[14]||(a[14]=t=>Ye.value=t),includeLoanSummary:Y.value,"onUpdate:includeLoanSummary":a[15]||(a[15]=t=>Y.value=t),includeSchedule:xe.value,"onUpdate:includeSchedule":a[16]||(a[16]=t=>xe.value=t),includeScheduleDate:He.value,"onUpdate:includeScheduleDate":a[17]||(a[17]=t=>He.value=t),includePaymentBreakdown:Le.value,"onUpdate:includePaymentBreakdown":a[18]||(a[18]=t=>Le.value=t),includeLoanSummaryDisabled:va.value,showTableOfContents:!0},null,8,["imageMode","includeCoverPage","includePageNumbers","includeRecipientName","recipientName","includeTableOfContents","includeProfile","includeProfilePhoto","includeProfileName","includeProfileDesignation","includeProfileCea","includeProfileMobile","includeProfileCompany","includeLoanSummary","includeSchedule","includeScheduleDate","includePaymentBreakdown","includeLoanSummaryDisabled"]),H.value?(Oe(),Fa("p",bl,Ua(H.value),1)):Oa("",!0)])]),_:1},8,["value","header"]),z(fe(el),{value:x.value,"onUpdate:value":a[20]||(a[20]=t=>x.value=t),"route-name":"calculator.profiles",onLoaded:ka},null,8,["value"])]),_:1},8,["exportDisabled","exportPayload","newDisabled","openDisabled","saveDisabled","saveStateSnapshot","shareDisabled","sharePayload","sharePayloadWithoutProfile"]))}});export{rn 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.