PageSourceSearch

https://www.huttonsgroup.com/build/assets/ProgressiveScheduleCustom-tONjfuyo.js

js huttonsgroup.com collected 2026-09-24 12:41:40 UTC 6,599 bytes, 1 lines download raw bytes

1import{i as _,n as O,c as l,b as y,w as x,f as k,u as c,a as s,F as I,v as B,g as u,B as D,z as b,t as i,o as r}from"./app-mFI3VYmo.js";import{_ as T}from"./Toggle.vue_vue_type_script_setup_true_lang-Dy-_DvGE.js";import"./debounce-DvcxFQhK.js";import{_ as j}from"./Button.vue_vue_type_script_setup_true_lang-k3cvwrGg.js";import{_ as A}from"./Card.vue_vue_type_script_setup_true_lang-Be3n1fxU.js";import{_ as F}from"./Heading.vue_vue_type_script_setup_true_lang-BrV_tX0v.js";import{f as h}from"./FormatNumber-DtJYAcXm.js";/* empty css            */import"./Spinner.vue_vue_type_script_setup_true_lang-CpQlG5al.js";const $={key:0,class:"flex flex-col gap-y-4 mt-4"},E={class:"flex items-center justify-between text-sm"},U={class:"space-y-6",role:"list"},N={class:"flex items-center justify-center size-6 rounded-full bg-brand-secondary-500 text-xs font-semibold text-brand-secondary-100"},R={class:"flex flex-col w-full gap-y-1"},L={class:"flex items-center justify-between w-full"},z={class:"font-medium text-gray-900"},V={key:0,class:"text-xs text-gray-500"},G={class:"mt-2 flex flex-col w-full gap-y-1"},M={key:0,class:"flex justify-between"},W={class:"font-semibold text-gray-900"},H={key:1,class:"flex justify-between"},q={class:"font-semibold text-gray-900"},J={key:2,class:"flex items-center justify-between"},K={class:"text-xs text-gray-500"},Q={class:"flex items-center gap-2"},X={class:"font-semibold text-gray-900"},Y={key:3,class:"flex justify-between"},Z={class:"font-bold text-gray-900"},mt=_({__name:"ProgressiveScheduleCustom",props:{price:{},timeline:{},buyerStampDuty:{default:0},absdAmount:{default:0},absdRate:{default:0},showDates:{type:Boolean,default:!1},foundationBeforeSP:{type:Boolean,default:!1},propertyType:{default:"ec"}},emits:["open:absd-modal"],setup(o,{emit:v}){const d=o,C=v,m=O(d.showDates);function p(e,t){const a=new Date(e);return a.setDate(a.getDate()+t),a}function n(e,t){const a=new Date(e);return a.setMonth(a.getMonth()+t),a}const w=D(()=>{const e=Number(d.price??0);if(!e)return[];const t=new Date;return d.propertyType==="commercial"?[{stage:"OTP (Option Fee 5%)",amount:e*.05,date:t.toISOString()},{stage:"Exercise S&P (15%)",amount:e*.15,date:p(t,21).toISOString(),displayDate:"S&P + 8 weeks"},{stage:"Upon Foundation (10%)",amount:e*.1,displayDate:"9 - 12 months"},{stage:"Upon Concrete Framework (10%)",amount:e*.1,displayDate:"3 - 6 months"},{stage:"Upon Brick Wall (5%)",amount:e*.05,displayDate:"3 - 6 months"},{stage:"Upon Ceiling (5%)",amount:e*.05,displayDate:"3 - 6 months"},{stage:"Upon Interior (5%)",amount:e*.05,displayDate:"3 - 6 months"},{stage:"Upon Electrical Plant / AC (5%)",amount:e*.05,displayDate:"3 - 6 months"},{stage:"Upon Roads / Drains / Carpark (5%)",amount:e*.05,displayDate:"3 - 6 months"},{stage:"Temporary Occupation Permit - TOP (25%)",amount:e*.25,displayDate:"6 - 12 months"},{stage:"Legal Completion Date - CSC (10%)",amount:e*.1,displayDate:"12 months"}]:[{stage:"OTP (Option Fee 5%)",amount:e*.05,date:t.toISOString()},{stage:"Exercise S&P",amount:e*.15,date:p(t,14).toISOString(),displayDate:"S&P + 3 weeks"},...d.foundationBeforeSP?[{stage:"Foundation Complete (10%)",amount:0,date:p(t,21).toISOString(),displayDate:""},{stage:"S&P Completion (25%)",amount:e*.25,date:n(t,3).toISOString()}]:[{stage:"S&P Completion (15%)",amount:e*.15,date:p(t,21).toISOString()},{stage:"Foundation Complete (10%)",amount:e*.1,date:n(t,3).toISOString(),displayDate:"3 months"}],{stage:"Reinforced Concrete Framework Complete (10%)",amount:e*.1,date:n(t,6).toISOString(),displayDate:"6 months"},{stage:"Partition Walls Complete (5%)",amount:e*.05,date:n(t,9).toISOString(),displayDate:"9 months"},{stage:"Roofing / Ceiling Complete (5%)",amount:e*.05,date:n(t,12).toISOString(),displayDate:"12 months"},{stage:"Door, Window, Electrical Complete (10%)",amount:e*.1,date:n(t,15).toISOString(),displayDate:"15 months"},{stage:"Car Park, Road & Drains Complete (5%)",amount:e*.05,date:n(t,18).toISOString(),displayDate:"18 months"},{stage:"Temporary Occupation Permit (TOP) (25%)",amount:e*.25,date:n(t,24).toISOString(),displayDate:"24 months"},{stage:"Legal Completion Date (CSC) (10%)",amount:e*.1,date:n(t,30).toISOString(),displayDate:"30 months"}]}),g=D(()=>d.timeline&&d.timeline.length>0?d.timeline:w.value),f=e=>{const t=Number(e??0);return t?`S$${h(t,{decimalPoints:0,locale:"en-SG"})}`:"-"},P=e=>e?new Date(e).toLocaleDateString("en-SG",{day:"numeric",month:"short",year:"numeric"}):"";return(e,t)=>g.value.length?(r(),l("div",$,[y(c(F),{level:"h3",margin:"mb-0"},{default:x(()=>[...t[2]||(t[2]=[k("Progressive Schedule",-1)])]),_:1}),s("div",E,[t[3]||(t[3]=s("span",{class:"text-gray-600"},"Show dates in timeline",-1)),y(c(T),{value:m.value,labelPosition:"inside",offLabel:"Hide",onLabel:"Show","onUpdate:value":t[0]||(t[0]=a=>m.value=a)},null,8,["value"])]),s("ul",U,[(r(!0),l(I,null,B(g.value,(a,S)=>(r(),l("li",{key:a.stage,class:"relative flex gap-x-4"},[s("div",{class:b([S===g.value.length-1?"h-6":"-bottom-10","absolute left-0 flex w-6 justify-center",m.value?"top-4":"top-1"])},[...t[4]||(t[4]=[s("div",{class:"w-px bg-brand-secondary-300"},null,-1)])],2),s("div",{class:b([m.value?"mt-4":"mt-1","relative flex size-6 flex-none items-center justify-center"])},[s("div",N,i(S+1),1)],2),y(c(A),{class:"flex-auto text-sm text-gray-500",margin:"m-0",padding:"py-2 px-4"},{default:x(()=>[s("div",R,[s("div",L,[s("span",z,i(a.stage),1)]),m.value||a.displayDate?(r(),l("div",V,i(m.value?P(a.date):a.displayDate),1)):u("",!0),s("div",G,[a.amount>0?(r(),l("div",M,[t[5]||(t[5]=s("span",{class:"text-xs text-gray-500"},"Payment",-1)),s("span",W,i(f(a.amount)),1)])):u("",!0),a.stage.includes("Exercise S&P")&&(o.buyerStampDuty??0)>0?(r(),l("div",H,[t[6]||(t[6]=s("span",{class:"text-xs text-gray-500"},"Buyer Stamp Duty",-1)),s("span",q,i(f(o.buyerStampDuty)),1)])):u("",!0),a.stage.includes("Exercise S&P")&&(o.absdAmount??0)>0?(r(),l("div",J,[s("span",K,"Additional Buyer Stamp Duty"+i(o.absdRate?` (ABSD ${o.absdRate}%)`:""),1),s("div",Q,[s("span",X,i(f(o.absdAmount)),1),y(c(j),{"bg-color":"bg-white hover:bg-gray-50",border:"border border-gray-300",color:"text-gray-700",label:"Check ABSD",padding:"px-2 py-1",typography:"text-xs",onClick:t[1]||(t[1]=tt=>C("open:absd-modal"))})])])):u("",!0),a.stage.includes("Exercise S&P")&&(o.absdAmount??0)>0?(r(),l("div",Y,[t[7]||(t[7]=s("span",{class:"text-xs text-gray-500"},"Total",-1)),s("span",Z," S$"+i(c(h)(a.amount+(o.buyerStampDuty??0)+(o.absdAmount??0),{decimalPoints:0,locale:"en-SG"})),1)])):u("",!0)])])]),_:2},1024)]))),128))])])):u("",!0)}});
1export{mt 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.