vendor: 6,306 bytes, lines 1-11
1import{o as Re,ai as Me,r as N,aj as me,j as e,ak as J,al as Te,am as st,an as $e,ao as nt,ap as it,aq as P,R as he,x as ot,n as ct,ae as lt,i as ve,w as dt,u as mt,$ as Q,ar as oe,L as S,B as A,ad as we,A as ie,a1 as ht,P as ut,f as xt,d as gt,g as pt,H as yt,F as bt,T as ft}from"./index-DAbSqcd1.js";import{B as jt}from"./breadcrumb-DusOMBKl.js";import{u as Ie,z as d}from"./index-BefGftlg.js";import{D as vt}from"./dollar-sign-Chc_2_a7.js";import{S as wt}from"./scale-DYLhWz5M.js";import{T as Nt}from"./trending-down-DC3VK43I.js";import{M as Ct}from"./minus-CCrowWot.js";/** 2 * @license lucide-react v0.537.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 kt=[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]],St=Re("archive",kt);/** 7 * @license lucide-react v0.537.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 Pt=[["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}],["path",{d:"M13 6h8",key:"15sg57"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 18h8",key:"oe0vm4"}]],At=Re("list-checks",Pt);var ue="Collapsible",[Rt,Le]=Me(ue),[Mt,xe]=Rt(ue),Ee=N.forwardRef((t,a)=>{const{__scopeCollapsible:s,open:n,defaultOpen:o,disabled:c,onOpenChange:g,...u}=t,[p=!1,i]=me({prop:n,defaultProp:o,onChange:g});return e.jsx(Mt,{scope:s,disabled:c,contentId:Ie(),open:p,onOpenToggle:N.useCallback(()=>i(j=>!j),[i]),children:e.jsx(J.div,{"data-state":pe(p),"data-disabled":c?"":void 0,...u,ref:a})})});Ee.displayName=ue;var De="CollapsibleTrigger",_e=N.forwardRef((t,a)=>{const{__scopeCollapsible:s,...n}=t,o=xe(De,s);return e.jsx(J.button,{type:"button","aria-controls":o.contentId,"aria-expanded":o.open||!1,"data-state":pe(o.open),"data-disabled":o.disabled?"":void 0,disabled:o.disabled,...n,ref:a,onClick:Te(t.onClick,o.onOpenToggle)})});_e.displayName=De;var ge="CollapsibleContent",Be=N.forwardRef((t,a)=>{const{forceMount:s,...n}=t,o=xe(ge,t.__scopeCollapsible);return e.jsx(st,{present:s||o.open,children:({present:c})=>e.jsx(Tt,{...n,ref:a,present:c})})});Be.displayName=ge;var Tt=N.forwardRef((t,a)=>{const{__scopeCollapsible:s,present:n,children:o,...c}=t,g=xe(ge,s),[u,p]=N.useState(n),i=N.useRef(null),j=$e(a,i),m=N.useRef(0),C=m.current,k=N.useRef(0),D=k.current,R=g.open||u,M=N.useRef(R),T=N.useRef(void 0);return N.useEffect(()=>{const v=requestAnimationFrame(()=>M.current=!1);return()=>cancelAnimationFrame(v)},[]),nt(()=>{const v=i.current;if(v){T.current=T.current||{transitionDuration:v.style.transitionDuration,animationName:v.style.animationName},v.style.transitionDuration="0s",v.style.animationName="none";const L=v.getBoundingClientRect();m.current=L.height,k.current=L.width,M.current||(v.style.transitionDuration=T.current.transitionDuration,v.style.animationName=T.current.animationName),p(n)}},[g.open,n]),e.jsx(J.div,{"data-state":pe(g.open),"data-disabled":g.disabled?"":void 0,id:g.contentId,hidden:!R,...c,ref:j,style:{"--radix-collapsible-content-height":C?`${C}px`:void 0,"--radix-collapsible-content-width":D?`${D}px`:void 0,...t.style},children:R&&o})});function pe(t){return t?"open":"closed"}var $t=Ee,It=_e,Lt=Be,Et=N.createContext(void 0);function Dt(t){const a=N.useContext(Et);return t||a||"ltr"}var E="Accordion",_t=["Home","End","ArrowDown","ArrowUp","ArrowLeft","ArrowRight"],[ye,Bt,Ot]=it(E),[re,xa]=Me(E,[Ot,Le]),be=Le(),Oe=P.forwardRef((t,a)=>{const{type:s,...n}=t,o=n,c=n;return e.jsx(ye.Provider,{scope:t.__scopeAccordion,children:s==="multiple"?e.jsx(Yt,{...c,ref:a}):e.jsx(qt,{...o,ref:a})})});Oe.displayName=E;var[He,Ht]=re(E),[Fe,Ft]=re(E,{collapsible:!1}),qt=P.forwardRef((t,a)=>{const{value:s,defaultValue:n,onValueChange:o=()=>{},collapsible:c=!1,...g}=t,[u,p]=me({prop:s,defaultProp:n,onChange:o});return e.jsx(He,{scope:t.__scopeAccordion,value:u?[u]:[],onItemOpen:p,onItemClose:P.useCallback(()=>c&&p(""),[c,p]),children:e.jsx(Fe,{scope:t.__scopeAccordion,collapsible:c,children:e.jsx(qe,{...g,ref:a})})})}),Yt=P.forwardRef((t,a)=>{const{value:s,defaultValue:n,onValueChange:o=()=>{},...c}=t,[g=[],u]=me({prop:s,defaultProp:n,onChange:o}),p=P.useCallback(j=>u((m=[])=>[...m,j]),[u]),i=P.useCallback(j=>u((m=[])=>m.filter(C=>C!==j)),[u]);return e.jsx(He,{scope:t.__scopeAccordion,value:g,onItemOpen:p,onItemClose:i,children:e.jsx(Fe,{scope:t.__scopeAccordion,collapsible:!0,children:e.jsx(qe,{...c,ref:a})})})}),[Wt,se]=re(E),qe=P.forwardRef((t,a)=>{const{__scopeAccordion:s,disabled:n,dir:o,orientation:c="vertical",...g}=t,u=P.useRef(null),p=$e(u,a),i=Bt(s),m=Dt(o)==="ltr",C=Te(t.onKeyDown,k=>{var K;if(!_t.includes(k.key))return;const D=k.target,R=i().filter(r=>{var b;return!((b=r.ref.current)!=null&&b.disabled)}),M=R.findIndex(r=>r.ref.current===D),T=R.length;if(M===-1)return;k.preventDefault();let v=M;const L=0,Y=T-1,W=()=>{v=M+1,v>Y&&(v=L)},U=()=>{v=M-1,v<L&&(v=Y)};switch(k.key){case"Home":v=L;break;case"End":v=Y;break;case"ArrowRight":c==="horizontal"&&(m?W():U());break;case"ArrowDown":c==="vertical"&&W();break;case"ArrowLeft":c==="horizontal"&&(m?U():W());break;case"ArrowUp":c==="vertical"&&U();break}const X=v%T;(K=R[X].ref.current)==null||K.focus()});return e.jsx(Wt,{scope:s,disabled:n,direction:o,orientation:c,children:e.jsx(ye.Slot,{scope:s,children:e.jsx(J.div,{...g,"data-orientation":c,ref:p,onKeyDown:n?void 0:C})})})}),te="AccordionItem",[Ut,fe]=re(te),Ye=P.forwardRef((t,a)=>{const{__scopeAccordion:s,value:n,...o}=t,c=se(te,s),g=Ht(te,s),u=be(s),p=Ie(),i=n&&g.value.includes(n)||!1,j=c.disabled||t.disabled;return e.jsx(Ut,{scope:s,open:i,disabled:j,triggerId:p,children:e.jsx($t,{"data-orientation":c.orientation,"data-state":Ke(i),...u,...o,ref:a,disabled:j,open:i,onOpenChange:m=>{m?g.onItemOpen(n):g.onItemClose(n)}})})});Ye.displayName=te;var We="AccordionHeader",Ue=P.forwardRef((t,a)=>{const{__scopeAccordion:s,...n}=t,o=se(E,s),c=fe(We,s);return e.jsx(J.h3,{"data-orientation":o.orientation,"data-state":Ke(c.open),"data-disabled":c.disabled?"":void 0,...n,ref:a})});Ue.displayName=We;var ce="AccordionTrigger",Ve=P.forwardRef((t,a)=>{const{__scopeAccordion:s,...n}
11=t,o=se(E,s),c=fe(ce,s),g=Ft(ce,s),u=be(s);return e.jsx(ye.ItemSlot,{scope:s,children:e.jsx(It,{"aria-disabled":c.open&&!g.collapsible||void 0,"data-orientation":o.orientation,id:c.triggerId,...u,...n,ref:a})})});Ve.displayName=ce;var Ge="AccordionContent",ze=P.forwardRef((t,a)=>{const{__scopeAccordion:s,...n}=t,o=se(E,s),c=fe(Ge,s),g=be(s);return e.jsx(Lt,{role:"region","aria-labelledby":c.triggerId,"data-orientation":o.orientation,...g,...n,ref:a,style:{"--radix-accordion-content-height":"var(--radix-collapsible-content-height)","--radix-accordion-content-width":"var(--radix-collapsible-content-width)",...t.style}})});ze.displayName=Ge;function Ke(t){return t?"open":"closed"}var Vt=Oe,Gt=Ye,zt=Ue,Qe=Ve,Je=ze;const Kt=Vt,Xe=N.forwardRef(({className:t,...a},s)=>e.jsx(Gt,{ref:s,className:he("border-b",t),...a}));Xe.displayName="AccordionItem";const Ze=N.forwardRef(({className:t,children:a,...s},n)=>e.jsx(zt,{className:"flex",children:e.jsxs(Qe,{ref:n,className:he("flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",t),...s,children:[a,e.jsx(ot,{className:"h-4 w-4 shrink-0 transition-transform duration-200"})]})}));Ze.displayName=Qe.displayName;const et=N.forwardRef(({className:t,children:a,...s},n)=>e.jsx(Je,{ref:n,className:"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",...s,children:e.jsx("div",{className:he("pb-4 pt-0",t),children:a})}));et.displayName=Je.displayName;const le=["January","February","March","April","May","June","July","August","September","October","November","December"];function Qt(t){const a=/^([a-z]+)-(\d{4})$/.exec(t);if(!a)return null;const s=le.findIndex(o=>o.toLowerCase()===a[1]);if(s===-1)return null;const n=parseInt(a[2],10);return n<2e3||n>2100?null:{year:n,month:s+1}}const q=d.number().finite(),l=d.number().finite().nullable(),V=d.object({current:q,prior:l,pctChg:l}),Ne=d.object({name:d.string(),sales:l,dollarVolume:l,avgPrice:l,medianPrice:l,newListings:l,snlrTrendPct:l,activeListings:l,mosInvTrend:l,avgSpLpPct:l,avgLdom:l,avgPdom:l}),Ce=d.object({name:d.string(),sales:l,dollarVolume:l,avgPrice:l,medianPrice:l,newListings:l,avgSpLpPct:l,avgLdom:l,avgPdom:l}),Jt=d.object({type:d.string(),sales:d.object({barrie:l,restOfSimcoe:l,total:l}),avgPrice:d.object({barrie:l,restOfSimcoe:l,total:l}),yoyPct:d.object({salesBarrie:l,salesRest:l,salesTotal:l,priceBarrie:l,priceRest:l,priceTotal:l})}),Xt=d.object({type:d.string(),sales:l,dollarVolume:l,avgPrice:l,medianPrice:l,newListings:l,activeListings:l,avgSpLpPct:l,avgLdom:l}),Zt=d.object({range:d.string(),counts:d.record(d.string(),l)}),G=d.object({index:l,benchmark:l,yoyPct:l}),ke=d.object({name:d.string(),composite:G.nullable(),singleFamily:G.nullable(),sfDetached:G.nullable(),sfAttached:G.nullable(),townhouse:G.nullable(),apartment:G.nullable()}),ea=d.object({label:d.string(),period:d.string(),valuePct:q});d.object({period:d.object({year:q.int(),month:q.int().min(1).max(12),label:d.string()}),sourceUrl:d.string().url(),yoySummary:d.object({sales:V,newListings:V,activeListings:V,avgPrice:V,avgLdom:V,avgPdom:V}),mortgageRates:d.object({oneYear:l,threeYear:l,fiveYear:l,asOf:d.string()}),economicIndicators:d.array(ea),county:Ne,countyYtd:Ce,municipalities:d.array(Ne),municipalitiesYtd:d.array(Ce),homeTypes:d.array(Jt),homeTypeDetail:d.array(Xt),priceRanges:d.object({rows:d.array(Zt),totalSales:d.record(d.string(),l),avgPrice:d.record(d.string(),l)}),hpi:d.object({county:ke,municipalities:d.array(ke)}),historic:d.object({annual:d.array(d.object({year:q.int(),sales:l,avgPrice:l})),monthly:d.array(d.object({year:q.int(),month:q.int(),sales:l,avgPrice:l}))})});const ta={"Adjala-Tosorontio":"adjala-tosorontio",Barrie:"barrie",Bradford:"bradford-west-gwillimbury","Bradford West Gwillimbury":"bradford-west-gwillimbury",Clearview:"clearview",Collingwood:"collingwood",Essa:"essa",Innisfil:"innisfil",Midland:"midland","New Tecumseth":"new-tecumseth",Orillia:"orillia","Oro-Medonte":"oro-medonte",Penetanguishene:"penetanguishene",Ramara:"ramara",Severn:"severn",Springwater:"springwater",Tay:"tay",Tiny:"tiny","Wasaga Beach":"wasaga-beach"};function de(t,a,s=25){if(t<=0)return 0;const n=a/100,o=Math.pow(1+n/2,1/6)-1,c=s*12;return o===0?t/c:t*o/(1-Math.pow(1+o,-c))}function aa(t){return t<=5e5?t*.05:t<15e5?25e3+(t-5e5)*.1:t*.2}function tt(t,a){if(t>=15e5)return 0;const s=t-a,n=s/t;let o=0;return n>.9?o=.04:n>.85?o=.031:n>.8?o=.028:o=0,s*o}function at(t){return Math.max(t+2,5.25)}function ra(t,a,s){const n=a/t<.2?tt(t,a):0,o=t-a+n,c=de(o,at(s),25),g=t*.01/12;return(c+g+150)*12/.39}function sa(t){return t<40?{label:"Buyer's market",description:"More listings than buyers â buyers have negotiating leverage on price and conditions."}:t<=60?{label:"Balanced market",description:"Supply and demand are roughly even â prices tend to hold steady."}:{label:"Seller's market",description:"More buyers than listings â expect competition and faster sales."}}function x(t,a={}
11){return t==null||!isFinite(t)?"â":"$"+t.toLocaleString("en-CA",{minimumFractionDigits:a.decimals??0,maximumFractionDigits:a.decimals??0})}function f(t){return t==null||!isFinite(t)?"â":t.toLocaleString("en-CA",{maximumFractionDigits:0})}function ae(t,a=1){return t==null||!isFinite(t)?"â":t.toLocaleString("en-CA",{minimumFractionDigits:a,maximumFractionDigits:a})}function H(t,a=1){return t==null||!isFinite(t)?"â":`${t>0?"+":""}${t.toFixed(a)}%`}function w(t,a=1){return t==null||!isFinite(t)?"â":`${t.toFixed(a)}%`}function Se(t){const a=t.county.avgPrice;if(a==null)return null;const s=t.mortgageRates.fiveYear,n=aa(a),o=tt(a,n),c=a*.2,g=t.county.snlrTrendPct;return{avgPrice:a,rate5:s,minDown:n,minDownPct:n/a*100,cmhc:o,pmtMinDown:s!=null?de(a-n+o,s):null,pmt20:s!=null?de(a-c,s):null,down20:c,stressRate:s!=null?at(s):null,incomeEst:s!=null?ra(a,n,s):null,snlr:g,balance:g!=null?sa(g):null}}function Pe(t,a){var c,g;const s=t.period.label,n=t.county,o=[];if(a!=null&&a.balance&&n.snlrTrendPct!=null&&n.mosInvTrend!=null&&o.push({question:"Is Simcoe County a buyer's market or a seller's market right now?",answer:`As of ${s}, Simcoe County's sales-to-new-listings ratio (SNLR) is ${w(n.snlrTrendPct)} with about ${ae(n.mosInvTrend)} months of inventory â a ${a.balance.label.toLowerCase()}. ${a.balance.description} Homes are taking an average of ${f(n.avgLdom)} days to sell.`}),n.avgPrice!=null){const u=(c=t.hpi.county.composite)==null?void 0:c.benchmark;o.push({question:"What is the average house price in Simcoe County?",answer:`The average selling price in Simcoe County was ${x(n.avgPrice)} in ${s} (${H(t.yoySummary.avgPrice.pctChg)} year-over-year), with a median of ${x(n.medianPrice)}.${u!=null?` The MLS® HPI composite benchmark â a better measure of a "typical" home â was ${x(u)}.`:""} Detached homes averaged ${x(((g=t.homeTypeDetail.find(p=>p.type==="Detached"))==null?void 0:g.avgPrice)??null)}.`})}if((a==null?void 0:a.incomeEst)!=null&&a.stressRate!=null&&a.rate5!=null&&o.push({question:"What income do I need to buy an average home in Simcoe County?",answer:`Roughly ${x(Math.round(a.incomeEst/5e3)*5e3)} of gross household income would be needed to buy at the ${s} average price of ${x(a.avgPrice)} with the minimum down payment, once the mortgage stress test is applied (qualifying at ${w(a.stressRate,2)} instead of the ${w(a.rate5,2)} contract rate). This is an estimate â existing debts, property taxes and heating change the number, and a broker can often improve it by shopping lenders.`}),a&&o.push({question:"How much is the minimum down payment on an average Simcoe County home?",answer:`At the ${s} average price of ${x(a.avgPrice)}, the federal minimum down payment works out to ${x(Math.round(a.minDown))} (${ae(a.minDownPct)}% â 5% of the first $500,000 plus 10% of the remainder). Buying with less than 20% down adds a CMHC insurance premium of about ${x(Math.round(a.cmhc))} to the mortgage.`}),o.push({question:"When is new Simcoe County market data released?",answer:"The Toronto Regional Real Estate Board (TRREB) publishes its Simcoe County Market Watch in the first week of each month, covering the previous month. This page updates automatically as soon as the new report is available, and prior months move into the archive below."}),n.avgPrice!=null&&t.yoySummary.avgPrice.pctChg!=null){const u=t.yoySummary.avgPrice.pctChg<0;o.push({question:"Should I wait for Simcoe County prices to drop before buying?",answer:u?`Prices are ${w(Math.abs(t.yoySummary.avgPrice.pctChg))} lower than a year ago, which improves affordability â but timing the exact bottom is impossible, and a tightening market (new listings ${H(t.yoySummary.newListings.pctChg)} year-over-year) can turn quickly. The better question is what monthly payment fits your budget at today's rates. A pre-approval locks a rate for up to 120 days while you decide.`:`Prices are up ${w(Math.abs(t.yoySummary.avgPrice.pctChg))} year-over-year, so waiting has been costing buyers money in this market. The better question is what monthly payment fits your budget at today's rates. A pre-approval locks a rate for up to 120 days while you shop.`})}return o}const I="/simcoe-real-estate-market-stats";function na({pct:t,decimals:a=1}){if(t==null)return null;const s=t>0?ft:t<0?Nt:Ct,n=t>0?"text-emerald-600":t<0?"text-red-500":"text-gray-500";return e.jsxs("span",{className:`inline-flex items-center gap-1 text-sm font-medium ${n}`,children:[e.jsx(s,{className:"w-4 h-4","aria-hidden":"true"}),H(t,a)," yr/yr"]})}function z({icon:t,label:a,value:s,sub:n,delta:o,testId:c}){return e.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 shadow-sm p-5 flex flex-col gap-1.5","data-testid":c,children:[e.jsxs("div",{className:"flex items-center gap-2 text-gray-500",children:[e.jsx(t,{className:"w-4 h-4 text-tmc-gold","aria-hidden":"true"}),e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide",children:a})]}),e.jsx("div",{className:"text-2xl md:text-3xl font-bold text-tmc-dark",children:s}),e.jsxs("div",{className:"flex items-center gap-3 min-h-[1.25rem]",children:[o!==void 0&&e.jsx(na,{pct:o}),n&&e.jsx("span",{className:"text-xs text-gray-500",children:n})]})]})}function ia({points:t}){if(t.length<2)return null;const a=560,s=130,n=10,o=t.map(m=>m.value),c=Math.min(...o),u=Math.max(...o)-c||1,p=t.map((m,C)=>{const k=n+C*(a-2*n)/(t.length-1),D=s-n-(m.value-c)/u*(s-2*n);return{x:k,y:D}}),i=p.map(m=>`${m.x.toFixed(1)},${m.y.toFixed(1)}`).join(" "),j=p[p.length-1];return e.jsxs("div",{"data-testid":"sparkline-price-trend",children:[e.jsxs("svg",{viewBox:`0 0 ${a} ${s}`,className:"w-full h-auto",role:"img","aria-label":`Average price trend from ${t[0].label} (${x(t[0].value)}) to ${t[t.length-1].label} (${x(t[t.length-1].value)})`,children:[e.jsx("polyline",{points:i,fill:"none",stroke:"#C5AC77",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round"}),e.jsx("circle",{cx:j.x,cy:j.y,r:"4.5",fill:"#304050",stroke:"#C5AC77",strokeWidth:"2"})]}),e.jsxs("div",{className:"flex justify-between text-xs text-gray-500 mt-1",children:[e.jsxs("span",{children:[t[0].label," · ",x(t[0].value)]}),e.jsxs("span",{className:"font-semibold text-tmc-dark",children:[t[t.length-1].label," · ",x(t[t.length-1].value)]})]})]})}function $({children:t,id:a}){return e.jsx("h2",{id:a,className:"text-2xl md:text-3xl font-bold text-tmc-dark mb-4",children:t})}function y({children:t,align:a="right"}){return e.jsx("th",{className:`px-3 py-2.5 text-xs font-semibold uppercase tracking-wide text-gray-600 whitespace-nowrap ${a==="left"?"text-left":"text-right"}`,children:t})}function h({children:t,align:a="right",strong:s=!1}){return e.jsx("td",{className:`px-3 py-2.5 text-sm whitespace-nowrap ${a==="left"?"text-left":"text-right"} ${s?"font-semibold text-tmc-dark":"text-gray-700"}`,children:t})}function ga(){var L,Y,W,U,X,K;const[,t]=ct(`${I}/:slug`),a=(t==null?void 0:t.slug)??null,s=!a,[,n]=lt(),o=a?Qt(a)!==null:!0,c=ve({queryKey:["/api/market-reports"]}),g=ve({queryKey:a?["/api/market-reports",a]:["/api/market-reports/latest"],enabled:o,retry:!1});N.useEffect(()=>{var r;a&&((r=c.data)==null?void 0:r.latestSlug)===a&&n(I,{replace:!0})},[a,(L=c.data)==null?void 0:L.latestSlug,n]);const u=g.data,p=s||u!=null&&((Y=c.data)==null?void 0:Y.latestSlug)===u.slug;if(N.useEffect(()=>{if(!u)return;const r=u.data,b=r.period.label,F=p?I:`${I}/${u.slug}`,_=dt();mt({title:p?`Simcoe County Housing Market Stats â ${b} | TMC`:`Simcoe County Market Stats â ${b} Archive | TMC`,description:p?`Simcoe County housing market stats for ${b}: average price ${x(r.county.avgPrice)}, ${f(r.county.sales)} home sales, SNLR ${w(r.county.snlrTrendPct)}. What it means for your mortgage, down payment & buying power.`:`${b} Simcoe County housing market archive: average price ${x(r.county.avgPrice)}, ${f(r.county.sales)} home sales, ${f(r.county.newListings)} new listings. TRREB Market Watch data with mortgage context.`,canonicalUrl:`${Q}${F}`,keywords:`Simcoe County housing market, Simcoe County real estate statistics, ${b} market report, average house price Simcoe County, Barrie housing market`});const je=[],ne=B=>{if(_)return;const O=document.createElement("script");O.type="application/ld+json",O.text=JSON.stringify(B),O.setAttribute("data-market-stats-ld","1"),document.head.appendChild(O),je.push(O)},Z=`${Q}${F}`,rt=String(r.period.month).padStart(2,"0");if(ne({"@context":"https://schema.org","@type":"Dataset","@id":`${Z}#dataset`,name:`Simcoe County Housing Market Statistics â ${b}`,description:`Residential real estate statistics for Simcoe County, Ontario for ${b}, derived from the TRREB Market Watch report.`,url:Z,isBasedOn:r.sourceUrl,temporalCoverage:`${r.period.year}-${rt}`,spatialCoverage:{"@type":"Place",name:"Simcoe County, Ontario, Canada"},isAccessibleForFree:!0,creator:{"@type":"Organization",name:"TMC Greater Simcoe â The Mortgage Centre",url:Q}}),ne({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:Q},...p?[{"@type":"ListItem",position:2,name:"Simcoe County Market Stats",item:Z}]:[{"@type":"ListItem",position:2,name:"Simcoe County Market Stats",item:`${Q}${I}`},{"@type":"ListItem",position:3,name:b,item:Z}]]}),p){const B=Pe(r,Se(r));B.length&&ne({"@context":"https://schema.org","@type":"FAQPage",mainEntity:B.map(O=>
11({"@type":"Question",name:O.question,acceptedAnswer:{"@type":"Answer",text:O.answer}}))})}return()=>{je.forEach(B=>B.remove()),document.querySelectorAll("script[data-ssr-market-ld]").forEach(B=>B.remove())}},[u,p]),a&&!o)return e.jsx(ee,{children:e.jsx(Ae,{title:"Report not found",body:"That market report doesn't exist. Browse the latest Simcoe County market statistics instead."})});if(g.isLoading||a&&c.isLoading)return e.jsx(ee,{children:e.jsx("div",{className:"flex items-center justify-center min-h-[50vh]","data-testid":"market-stats-loading",children:e.jsx("div",{className:"w-8 h-8 border-4 border-tmc-gold border-t-transparent rounded-full animate-spin"})})});if(!u)return e.jsx(ee,{children:e.jsx(Ae,{title:a?"Report not found":"Market data is on its way",body:a?"We don't have a report for that month. Browse the latest Simcoe County market statistics instead.":"The latest TRREB Simcoe County Market Watch is being loaded. Check back in a few minutes."})});const i=u.data,j=i.period.label,m=Se(i),C=p?Pe(i,m):[],k=((W=c.data)==null?void 0:W.reports)??[],D=((U=c.data)==null?void 0:U.latestSlug)??u.slug,R=i.historic.monthly.slice(-13).filter(r=>r.avgPrice!=null).map(r=>({label:`${le[r.month-1].slice(0,3)} ${r.year}`,value:r.avgPrice})),M=i.economicIndicators.find(r=>r.label==="Bank of Canada Overnight Rate"),T=i.economicIndicators.find(r=>r.label==="Prime Rate"),v=i.economicIndicators.find(r=>r.label==="Inflation (Yr./Yr. CPI Growth)");return e.jsxs(ee,{children:[e.jsx("section",{className:"bg-tmc-dark text-white",children:e.jsxs("div",{className:"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-12 md:py-16",children:[e.jsx(jt,{withSchema:!1,variant:"dark",className:"mb-6",items:p?[{name:"Simcoe County Market Stats"}]:[{name:"Simcoe County Market Stats",href:I},{name:j}]}),e.jsxs("div",{className:"inline-flex items-center gap-2 bg-white/10 border border-white/20 rounded-full px-4 py-1.5 text-sm mb-5","data-testid":"badge-report-period",children:[e.jsx(oe,{className:"w-4 h-4 text-tmc-gold","aria-hidden":"true"}),"Simcoe Market Pulse · ",j,!p&&e.jsx("span",{className:"text-tmc-gold font-medium",children:"· Archive"})]}),e.jsxs("h1",{className:"text-3xl md:text-5xl font-bold leading-tight mb-4","data-testid":"heading-market-stats",children:["Simcoe County Real Estate Market Statistics",!p&&e.jsxs("span",{className:"block text-tmc-gold text-2xl md:text-3xl mt-2",children:[j," (Archive)"]})]}),e.jsx("p",{className:"text-lg text-gray-200 max-w-3xl mb-6",children:p?`Official MLS® numbers for ${j}, translated for people getting a mortgage â not selling houses. Average prices, competition levels, and what they mean for your down payment, monthly payment and approval.`:`Archived TRREB statistics for ${j}. Every figure below reflects the market as it was reported that month.`}),!p&&e.jsx("div",{className:"bg-white/10 border border-white/20 rounded-lg px-4 py-3 mb-6 max-w-3xl","data-testid":"banner-archive-notice",children:e.jsxs("p",{className:"text-sm text-gray-100",children:["You're viewing an archived month."," ",e.jsx(S,{href:I,className:"text-tmc-gold font-semibold underline underline-offset-2",children:"See the latest Simcoe County market stats â"})]})}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs(A,{onClick:()=>we("market-stats-hero"),className:"bg-tmc-gold hover:bg-tmc-light-gold text-tmc-dark font-semibold","data-testid":"button-get-preapproved",children:["Get Pre-Approved ",e.jsx(ie,{className:"w-4 h-4 ml-1"})]}),e.jsx("a",{href:"tel:+17052381097",onClick:()=>ht("tel:+17052381097","market-stats-hero"),children:e.jsxs(A,{variant:"outline",className:"border-white/40 bg-transparent text-white hover:bg-white/10 hover:text-white","data-testid":"button-call-craig",children:[e.jsx(ut,{className:"w-4 h-4 mr-1"})," 705-238-1097"]})})]})]})}),e.jsxs("main",{className:"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-10 md:py-14 space-y-14",children:[e.jsxs("section",{children:[e.jsxs($,{children:["Market at a Glance â ",j]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:[e.jsx(z,{icon:vt,label:"Average Price",value:x(i.county.avgPrice),delta:i.yoySummary.avgPrice.pctChg,testId:"stat-avg-price"}),e.jsx(z,{icon:xt,label:"Home Sales",value:f(i.county.sales),delta:i.yoySummary.sales.pctChg,testId:"stat-sales"}),e.jsx(z,{icon:At,label:"New Listings",value:f(i.county.newListings),delta:i.yoySummary.newListings.pctChg,testId:"stat-new-listings"}),e.jsx(z,{icon:wt,label:"SNLR (Trend)",value:w(i.county.snlrTrendPct),sub:m!=null&&m.balance?m.balance.label:void 0,testId:"stat-snlr"}),e.jsx(z,{icon:gt,label:"Avg. Days on Market",value:f(i.county.avgLdom),sub:`${ae(i.county.mosInvTrend)} months of inventory`,testId:"stat-dom"}),e.jsx(z,{icon:oe,label:"HPI Benchmark",value:x(((X=i.hpi.county.composite)==null?void 0:X.benchmark)??null),delta:((K=i.hpi.county.composite)==null?void 0:K.yoyPct)??null,testId:"stat-hpi"})]}),e.jsxs("div",{className:"mt-6 bg-white rounded-xl border border-gray-200 shadow-sm p-5",children:[e.jsxs("h3",{className:"text-sm font-semibold uppercase tracking-wide text-gray-600 mb-3",children:["Average Price â Last ",R.length," Months"]}),e.jsx(ia,{points:R})]}),e.jsxs("p",{className:"text-sm text-gray-600 mt-4","data-testid":"text-glance-summary",children:["Median price: ",e.jsx("strong",{children:x(i.county.medianPrice)})," · Active listings:"," ",e.jsx("strong",{children:f(i.county.activeListings)})," (",H(i.yoySummary.activeListings.pctChg)," yr/yr) · Sale-to-list ratio: ",e.jsx("strong",{children:w(i.county.avgSpLpPct,0)})," · Year-to-date:"," ",e.jsx("strong",{children:f(i.countyYtd.sales)})," sales at a ",e.jsx("strong",{children:x(i.countyYtd.avgPrice)})," ","average."]})]}),m&&e.jsxs("section",{className:"bg-gray-50 rounded-2xl border border-gray-200 p-6 md:p-8",children:[e.jsxs($,{children:["What ",j," Price
11s Mean If You're Buying"]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-5",children:[e.jsxs("div",{className:"bg-white rounded-lg border border-gray-200 p-5","data-testid":"card-min-down",children:[e.jsx("div",{className:"text-xs font-semibold uppercase tracking-wide text-gray-500 mb-1",children:"Minimum down payment on the average home"}),e.jsx("div",{className:"text-2xl font-bold text-tmc-dark",children:x(Math.round(m.minDown))}),e.jsxs("p",{className:"text-sm text-gray-600 mt-1.5",children:[ae(m.minDownPct),"% of ",x(m.avgPrice)," â 5% of the first $500K, 10% of the rest. Under 20% down adds â",x(Math.round(m.cmhc))," CMHC insurance to the loan."]})]}),m.pmtMinDown!=null&&m.rate5!=null&&e.jsxs("div",{className:"bg-white rounded-lg border border-gray-200 p-5","data-testid":"card-payment",children:[e.jsx("div",{className:"text-xs font-semibold uppercase tracking-wide text-gray-500 mb-1",children:"Estimated monthly payment"}),e.jsxs("div",{className:"text-2xl font-bold text-tmc-dark",children:["â",x(Math.round(m.pmtMinDown)),"/mo"]}),e.jsxs("p",{className:"text-sm text-gray-600 mt-1.5",children:["Minimum down, ",w(m.rate5,2)," 5-year rate, 25-year amortization.",m.pmt20!=null&&e.jsxs(e.Fragment,{children:[" With 20% down (",x(Math.round(m.down20)),"): â",x(Math.round(m.pmt20)),"/mo."]})]})]}),m.incomeEst!=null&&m.stressRate!=null&&e.jsxs("div",{className:"bg-white rounded-lg border border-gray-200 p-5","data-testid":"card-income",children:[e.jsx("div",{className:"text-xs font-semibold uppercase tracking-wide text-gray-500 mb-1",children:"Household income needed (est.)"}),e.jsxs("div",{className:"text-2xl font-bold text-tmc-dark",children:["â",x(Math.round(m.incomeEst/5e3)*5e3)]}),e.jsxs("p",{className:"text-sm text-gray-600 mt-1.5",children:["Stress-tested at ",w(m.stressRate,2)," (your rate + 2%). Debts, taxes and heat change this â a broker can often qualify you for more."]})]}),m.balance&&e.jsxs("div",{className:"bg-white rounded-lg border border-gray-200 p-5","data-testid":"card-balance",children:[e.jsx("div",{className:"text-xs font-semibold uppercase tracking-wide text-gray-500 mb-1",children:"Your negotiating position"}),e.jsx("div",{className:"text-2xl font-bold text-tmc-dark",children:m.balance.label}),e.jsx("p",{className:"text-sm text-gray-600 mt-1.5",children:m.balance.description})]})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsx(S,{href:"/resources/payment-calculator",children:e.jsx(A,{variant:"outline",className:"border-tmc-gold text-tmc-dark hover:bg-tmc-gold/10","data-testid":"link-payment-calculator",children:"Payment Calculator"})}),e.jsx(S,{href:"/resources/affordability-calculator",children:e.jsx(A,{variant:"outline",className:"border-tmc-gold text-tmc-dark hover:bg-tmc-gold/10","data-testid":"link-affordability-calculator",children:"Affordability Calculator"})}),e.jsx(S,{href:"/home-purchase-loan",children:e.jsxs(A,{className:"bg-tmc-dark text-white hover:bg-tmc-dark/90","data-testid":"link-home-purchase",children:["Start a Pre-Approval ",e.jsx(ie,{className:"w-4 h-4 ml-1"})]})})]})]}),e.jsxs("section",{children:[e.jsx($,{children:"Renewing or Refinancing This Year?"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mb-4",children:[e.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 shadow-sm p-5","data-testid":"card-rates",children:[e.jsxs("div",{className:"text-xs font-semibold uppercase tracking-wide text-gray-500 mb-2",children:["Posted rates (",i.mortgageRates.asOf,")"]}),e.jsxs("ul",{className:"space-y-1 text-sm text-gray-700",children:[e.jsxs("li",{className:"flex justify-between",children:[e.jsx("span",{children:"1-year fixed"}),e.jsx("strong",{children:w(i.mortgageRates.oneYear,2)})]}),e.jsxs("li",{className:"flex justify-between",children:[e.jsx("span",{children:"3-year fixed"}),e.jsx("strong",{children:w(i.mortgageRates.threeYear,2)})]}),e.jsxs("li",{className:"flex justify-between",children:[e.jsx("span",{children:"5-year fixed"}),e.jsx("strong",{children:w(i.mortgageRates.fiveYear,2)})]})]}),e.jsx("p",{className:"text-xs text-gray-500 mt-2",children:"Posted â best. Brokers routinely beat these."})]}),e.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 shadow-sm p-5","data-testid":"card-boc",children:[e.jsx("div",{className:"text-xs font-semibold uppercase tracking-wide text-gray-500 mb-2",children:"Rate environment"}),e.jsxs("ul",{className:"space-y-1 text-sm text-gray-700",children:[M&&e.jsxs("li",{className:"flex justify-between",children:[e.jsx("span",{children:"BoC overnight rate"}),e.jsx("strong",{children:w(M.valuePct,2)})]}),T&&e.jsxs("li",{className:"flex justify-between",children:[e.jsx("span",{children:"Prime rate"}),e.jsx("strong",{children:w(T.valuePct,2)})]}),v&&e.jsxs("li",{className:"flex justify-between",children:[e.jsx("span",{children:"Inflation (CPI)"}),e.jsx("strong",{children:w(v.valuePct,1)})]})]}),e.jsx("p",{className:"text-xs text-gray-500 mt-2",children:"These drive variable rates and HELOC pricing."})]}),e.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 shadow-sm p-5","data-testid":"card-equity",children:[e.jsx("div",{className:"text-xs font-semibold uppercase tracking-wide text-gray-500 mb-2",children:"Your home's value"}),e.jsx("p",{className:"text-sm text-gray-700",children:i.yoySummary.avgPrice.pctChg!=null&&i.yoySummary.avgPrice.pctChg<0?e.jsxs(e.Fragment,{children:["Average prices are ",e.jsxs("strong",{children:[w(Math.abs(i.yoySummary.avgPrice.pctChg))," lower"]})," than a year ago. If you're refinancing at a high loan-to-value, appraisal timing matters more than usual."]}):e.jsxs(e.Fragment,{children:["Average prices are ",e.jsx("strong",{children:H(i.yoySummary.avgPrice.pctChg)}
11)," year-over-year, which affects how much equity you can access when refinancing."]})})]})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsx(S,{href:"/mortgage-renewal",children:e.jsx(A,{variant:"outline",className:"border-tmc-gold text-tmc-dark hover:bg-tmc-gold/10","data-testid":"link-renewal",children:"Mortgage Renewal"})}),e.jsx(S,{href:"/refinance",children:e.jsx(A,{variant:"outline",className:"border-tmc-gold text-tmc-dark hover:bg-tmc-gold/10","data-testid":"link-refinance",children:"Refinancing"})}),e.jsx(S,{href:"/resources/refinance-calculator",children:e.jsx(A,{variant:"outline",className:"border-tmc-gold text-tmc-dark hover:bg-tmc-gold/10","data-testid":"link-refi-calculator",children:"Refinance Calculator"})})]})]}),e.jsxs("section",{children:[e.jsxs($,{children:[j," Prices & Sales by Municipality"]}),e.jsx("p",{className:"text-gray-600 mb-4 max-w-3xl",children:"Click a municipality for local mortgage guidance. Small markets swing hard month to month â judge them by trend, not one report."}),e.jsx("div",{className:"overflow-x-auto rounded-xl border border-gray-200 shadow-sm bg-white",children:e.jsxs("table",{className:"w-full","data-testid":"table-municipalities",children:[e.jsx("thead",{className:"bg-gray-50 border-b border-gray-200",children:e.jsxs("tr",{children:[e.jsx(y,{align:"left",children:"Municipality"}),e.jsx(y,{children:"Sales"}),e.jsx(y,{children:"Avg. Price"}),e.jsx(y,{children:"Median"}),e.jsx(y,{children:"New Listings"}),e.jsx(y,{children:"SNLR"}),e.jsx(y,{children:"Active"}),e.jsx(y,{children:"Days on Mkt"})]})}),e.jsxs("tbody",{className:"divide-y divide-gray-100",children:[e.jsxs("tr",{className:"bg-tmc-gold/10",children:[e.jsx(h,{align:"left",strong:!0,children:"Simcoe County (all)"}),e.jsx(h,{strong:!0,children:f(i.county.sales)}),e.jsx(h,{strong:!0,children:x(i.county.avgPrice)}),e.jsx(h,{strong:!0,children:x(i.county.medianPrice)}),e.jsx(h,{strong:!0,children:f(i.county.newListings)}),e.jsx(h,{strong:!0,children:w(i.county.snlrTrendPct)}),e.jsx(h,{strong:!0,children:f(i.county.activeListings)}),e.jsx(h,{strong:!0,children:f(i.county.avgLdom)})]}),i.municipalities.map(r=>{const b=ta[r.name];return e.jsxs("tr",{className:"hover:bg-gray-50",children:[e.jsx(h,{align:"left",children:b?e.jsx(S,{href:`/mortgage-broker-${b}`,className:"text-tmc-dark font-medium underline decoration-tmc-gold decoration-2 underline-offset-2 hover:text-tmc-gold","data-testid":`link-muni-${b}`,children:r.name}):r.name}),e.jsx(h,{children:f(r.sales)}),e.jsx(h,{children:x(r.avgPrice)}),e.jsx(h,{children:x(r.medianPrice)}),e.jsx(h,{children:f(r.newListings)}),e.jsx(h,{children:w(r.snlrTrendPct)}),e.jsx(h,{children:f(r.activeListings)}),e.jsx(h,{children:f(r.avgLdom)})]},r.name)})]})]})})]}),i.homeTypes.length>0&&e.jsxs("section",{children:[e.jsx($,{children:"By Home Type â Barrie vs Rest of Simcoe"}),e.jsx("div",{className:"overflow-x-auto rounded-xl border border-gray-200 shadow-sm bg-white",children:e.jsxs("table",{className:"w-full","data-testid":"table-home-types",children:[e.jsx("thead",{className:"bg-gray-50 border-b border-gray-200",children:e.jsxs("tr",{children:[e.jsx(y,{align:"left",children:"Home Type"}),e.jsx(y,{children:"Sales"}),e.jsx(y,{children:"Sales YoY"}),e.jsx(y,{children:"Avg. Price"}),e.jsx(y,{children:"Price YoY"}),e.jsx(y,{children:"Barrie Avg."}),e.jsx(y,{children:"Rest of Simcoe Avg."})]})}),e.jsx("tbody",{className:"divide-y divide-gray-100",children:i.homeTypes.map(r=>e.jsxs("tr",{className:"hover:bg-gray-50",children:[e.jsx(h,{align:"left",strong:!0,children:r.type}),e.jsx(h,{children:f(r.sales.total)}),e.jsx(h,{children:H(r.yoyPct.salesTotal)}),e.jsx(h,{children:x(r.avgPrice.total)}),e.jsx(h,{children:H(r.yoyPct.priceTotal)}),e.jsx(h,{children:x(r.avgPrice.barrie)}),e.jsx(h,{children:x(r.avgPrice.restOfSimcoe)})]},r.type))})]})})]}),i.priceRanges.rows.length>0&&e.jsxs("section",{children:[e.jsx($,{children:"What Sold at Each Price Point"}),e.jsxs("p",{className:"text-gray-600 mb-4 max-w-3xl",children:["Pair this with your"," ",e.jsx(S,{href:"/resources/affordability-calculator",className:"text-tmc-dark font-medium underline decoration-tmc-gold decoration-2 underline-offset-2",children:"maximum budget"})," ","â it shows how much real choice each bracket buys you in Simcoe County."]}),e.jsx("div",{className:"overflow-x-auto rounded-xl border border-gray-200 shadow-sm bg-white",children:e.jsxs("table",{className:"w-full","data-testid":"table-price-ranges",children:[e.jsx("thead",{className:"bg-gray-50 border-b border-gray-200",children:e.jsxs("tr",{children:[e.jsx(y,{align:"left",children:"Price Range"}),e.jsx(y,{children:"Detached"}),e.jsx(y,{children:"Semi"}),e.jsx(y,{children:"Att/Row TH"}),e.jsx(y,{children:"Condo TH"}),e.jsx(y,{children:"Condo Apt"}),e.jsx(y,{children:"All Types"})]})}),e.jsx("tbody",{className:"divide-y divide-gray-100",children:i.priceRanges.rows.map(r=>e.jsxs("tr",{className:"hover:bg-gray-50",children:[e.jsx(h,{align:"left",strong:!0,children:r.range}),e.jsx(h,{children:f(r.counts.detached??0)}),e.jsx(h,{children:f(r.counts.semiDetached??0)}),e.jsx(h,{children:f(r.counts.attRowTownhouse??0)}),e.jsx(h,{children:f(r.counts.condoTownhouse??0)}),e.jsx(h,{children:f(r.counts.condoApt??0)}),e.jsx(h,{strong:!0,children:f(r.counts.total??0)})]},r.range))})]})})]}),e.jsxs("section",{children:[e.jsx($,{children:"MLS® HPI Benchmark Prices"}),e.jsx("p",{className:"text-gray-600 mb-4 max-w-3xl",children:"The benchmark tracks a âtypicalâ home, so it's less distorted by a few luxury or bargain sales than the average. Lenders and appraisers watch it closely."}),e.jsx("div",{className:"overflow-x-auto rounded-xl border border-gray-200 shadow-sm bg-white",children:e.jsxs("table",{className:"w-full","data-testid":"table-hpi",children:[e.jsx("thead",{className:"bg-gray-50 border-b border-gray-200",children:e.jsxs("tr",{children:[e.jsx(y,{align:"left",children:"Area"}),e.jsx(y,{children:"Composite"}),e.jsx(y,{children:"Detached"}),e.jsx(y,{children:"Townhouse"}),e.jsx(y,{children:"Apartment"})]})}),e.jsx("tbody",{className:"divide-y divide-gray-100",children:[i.hpi.county,...i.hpi.municipalities].map((r,b)=>
11e.jsxs("tr",{className:b===0?"bg-tmc-gold/10":"hover:bg-gray-50",children:[e.jsx(h,{align:"left",strong:b===0,children:r.name}),["composite","sfDetached","townhouse","apartment"].map(F=>{const _=r[F];return e.jsx(h,{strong:b===0,children:(_==null?void 0:_.benchmark)!=null?e.jsxs(e.Fragment,{children:[x(_.benchmark)," ",e.jsxs("span",{className:"text-xs text-gray-500",children:["(",H(_.yoyPct),")"]})]}):"â"},F)})]},r.name))})]})})]}),e.jsxs("section",{children:[e.jsx($,{children:"Simcoe County Price History"}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[e.jsx("div",{className:"overflow-x-auto rounded-xl border border-gray-200 shadow-sm bg-white",children:e.jsxs("table",{className:"w-full","data-testid":"table-monthly-history",children:[e.jsx("thead",{className:"bg-gray-50 border-b border-gray-200",children:e.jsxs("tr",{children:[e.jsx(y,{align:"left",children:"Month"}),e.jsx(y,{children:"Sales"}),e.jsx(y,{children:"Avg. Price"})]})}),e.jsx("tbody",{className:"divide-y divide-gray-100",children:[...i.historic.monthly.slice(-13)].reverse().map(r=>e.jsxs("tr",{className:"hover:bg-gray-50",children:[e.jsxs(h,{align:"left",children:[le[r.month-1]," ",r.year]}),e.jsx(h,{children:f(r.sales)}),e.jsx(h,{children:x(r.avgPrice)})]},`${r.year}-${r.month}`))})]})}),e.jsx("div",{className:"overflow-x-auto rounded-xl border border-gray-200 shadow-sm bg-white",children:e.jsxs("table",{className:"w-full","data-testid":"table-annual-history",children:[e.jsx("thead",{className:"bg-gray-50 border-b border-gray-200",children:e.jsxs("tr",{children:[e.jsx(y,{align:"left",children:"Year"}),e.jsx(y,{children:"Sales"}),e.jsx(y,{children:"Avg. Price"})]})}),e.jsx("tbody",{className:"divide-y divide-gray-100",children:[...i.historic.annual].sort((r,b)=>b.year-r.year).map(r=>e.jsxs("tr",{className:"hover:bg-gray-50",children:[e.jsx(h,{align:"left",children:r.year}),e.jsx(h,{children:f(r.sales)}),e.jsx(h,{children:x(r.avgPrice)})]},r.year))})]})})]})]}),C.length>0&&e.jsxs("section",{children:[e.jsx($,{children:"Simcoe County Housing Market FAQs"}),e.jsx(Kt,{type:"single",collapsible:!0,className:"bg-white rounded-xl border border-gray-200 shadow-sm px-5","data-testid":"accordion-faqs",children:C.map((r,b)=>e.jsxs(Xe,{value:`faq-${b}`,className:b===C.length-1?"border-b-0":"",children:[e.jsx(Ze,{className:"text-left font-semibold text-tmc-dark hover:no-underline",children:r.question}),e.jsx(et,{className:"text-gray-700",children:r.answer})]},b))})]}),k.length>1&&e.jsxs("section",{children:[e.jsx($,{children:"Market Report Archive"}),e.jsx("div",{className:"flex flex-wrap gap-2","data-testid":"archive-links",children:k.map(r=>{const b=r.slug===D,F=b?I:`${I}/${r.slug}`;return r.slug===u.slug?e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-tmc-dark text-white px-4 py-1.5 text-sm font-medium",children:[e.jsx(St,{className:"w-3.5 h-3.5"})," ",r.label]},r.slug):e.jsxs(S,{href:F,className:"inline-flex items-center gap-1.5 rounded-full border border-gray-300 bg-white px-4 py-1.5 text-sm font-medium text-tmc-dark hover:border-tmc-gold hover:text-tmc-gold transition-colors","data-testid":`link-archive-${r.slug}`,children:[r.label,b&&e.jsx("span",{className:"text-xs text-tmc-gold",children:"(latest)"})]},r.slug)})})]}),e.jsx("section",{className:"bg-gray-50 rounded-2xl border border-gray-200 p-6 md:p-8",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(pt,{className:"w-5 h-5 text-tmc-gold mt-1 shrink-0","aria-hidden":"true"}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold text-tmc-dark mb-2",children:"About This Data"}),e.jsxs("p",{className:"text-sm text-gray-600 leading-relaxed",children:["Source:"," ",e.jsxs("a",{href:i.sourceUrl,target:"_blank",rel:"nofollow noopener noreferrer",className:"underline decoration-tmc-gold decoration-2 underline-offset-2 font-medium text-tmc-dark","data-testid":"link-source-pdf",children:["TRREB Simcoe County Market Watch â ",j," (PDF)"]}),", published by the Toronto Regional Real Estate Board. Statistics reflect MLS® transactions and may be revised by TRREB. Payment, down-payment and income figures are estimates calculated by TMC Greater Simcoe from the reported data (25-year amortization, semi-annual compounding) â not a quote or a commitment to lend. This page updates automatically when TRREB publishes each new monthly report."]})]})]})}),e.jsxs("section",{className:"bg-tmc-dark rounded-2xl p-8 md:p-10 text-center text-white",children:[e.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-3",children:"Numbers Are Nice. A Plan Is Better."}),e.jsx("p",{className:"text-gray-200 max-w-2xl mx-auto mb-6",children:"Craig Brunsdon and the TMC Greater Simcoe team shop 60+ lenders for buyers, renewers and refinancers across every community in this report. Pre-approvals in 24â48 hours."}),e.jsxs("div",{className:"flex flex-wrap justify-center gap-3",children:[e.jsxs(A,{onClick:()=>we("market-stats-cta"),className:"bg-tmc-gold hover:bg-tmc-light-gold text-tmc-dark font-semibold","data-testid":"button-cta-apply",children:["Apply Now ",e.jsx(ie,{className:"w-4 h-4 ml-1"})]}),e.jsx(S,{href:"/contact",children:e.jsx(A,{variant:"outline",className:"border-white/40 bg-transparent text-white hover:bg-white/10 hover:text-white","data-testid":"button-cta-contact",children:"Book a Free Consultation"})})]})]})]})]})}function ee({children:t}){return e.jsxs("div",{className:"min-h-screen bg-white flex flex-col",children:[e.jsx(yt,{}),e.jsx("div",{className:"flex-1",children:t}),e.jsx(bt,{})]})}function Ae({title:t,body:a}){return e.jsxs("div",{className:"max-w-2xl mx-auto px-4 py-24 text-center","data-testid":"market-stats-empty",children:[e.jsx(oe,{className:"w-12 h-12 text-tmc-gold mx-auto mb-4","aria-hidden":"true"}),e.jsx("h1",{className:"text-2xl font-bold text-tmc-dark mb-2",children:t}),e.jsx("p",{className:"text-gray-600 mb-6",children:a}),e.jsx(S,{href:I,children:e.jsx(A,{className:"bg-tmc-gold hover:bg-tmc-light-gold text-tmc-dark font-semibold",children:"View Latest Market Stats"})})]})}export{ga 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.