1import{r as d,j as e,S as z,L as u}from"./index-pnw7vN9z.js";import{u as A}from"./useQuery-w2ZDMcwL.js";import{H as P,F as U}from"./Footer-BJxCwxzn.js";import{I as F}from"./input-CU8NR_7l.js";import{B as m}from"./badge-Dy75GR5N.js";import{S as B}from"./skeleton-CS5QBm4E.js";import{S as f,a as g,b as p,c as j,d as l}from"./select-DdMY3HtC.js";import{i as b,P as N}from"./PropertyImagePlaceholder-CuJbcaVW.js";import{S as R}from"./search--5xlIcyu.js";import{F as T}from"./filter-B9HGXkcW.js";import{A as M}from"./arrow-up-right-By_D_JlV.js";import{B as $}from"./building-2-B7Gazl9g.js";import"./utils-km2FGkQ4.js";import"./button-B9_AU6ak.js";import"./index-BK6zpKxl.js";import"./index-CPIMHoWU.js";function v({status:s}){return s==="raising"?e.jsx(m,{className:"bg-primary text-white text-xs font-semibold border-transparent",children:"Now Raising"}):s==="leasing"?e.jsx(m,{variant:"outline",className:"border-primary/40 text-primary text-xs font-medium",children:"Leasing"}):s==="realized"?e.jsx(m,{variant:"outline",className:"border-green-500/40 text-green-600 dark:text-green-400 text-xs font-medium",children:"Realized"}):e.jsx(m,{variant:"outline",className:"border-muted-foreground/30 text-muted-foreground text-xs font-medium",children:"Active"})}function ee(){const[s,w]=d.useState(""),[i,y]=d.useState("all"),[n,S]=d.useState("all"),{data:x,isLoading:k}=A({queryKey:["/api/properties"]}),r=(x==null?void 0:x.data)||[],h=d.useMemo(()=>Array.from(new Set(r.map(a=>a.state))).sort(),[r]),o=d.useMemo(()=>r.filter(t=>{const a=!s.trim()||t.name.toLowerCase().includes(s.toLowerCase())||t.city.toLowerCase().includes(s.toLowerCase())||t.state.toLowerCase().includes(s.toLowerCase()),c=i==="all"||t.status===i,C=n==="all"||t.state===n;return a&&c&&C}),[r,s,i,n]),L=d.useMemo(()=>r.reduce((t,a)=>{const c=parseInt(String(a.units).replace(/[^0-9]/g,""),10);return t+(isNaN(c)?0:c)},0),[r]);return e.jsxs("div",{className:"min-h-screen bg-background",children:[e.jsx(z,{title:"Track Record - LV5 Capital | Multifamily Real Estate Portfolio",description:"Explore LV5 Capital's portfolio of multifamily and commercial real estate investments. View property details, performance metrics, and our proven track record across key U.S. markets.",path:"/portfolio"}),e.jsx(P,{}),e.jsx("main",{className:"pt-28 pb-20",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-6 lg:px-8",children:[e.jsxs("div",{className:"mb-12",children:[e.jsx("p",{className:"text-primary font-medium text-sm tracking-wider uppercase mb-4","data-testid":"text-portfolio-label",children:"Track Record"}),e.jsx("h1",{className:"font-heading text-4xl md:text-5xl font-bold text-foreground mb-4","data-testid":"text-portfolio-title",children:"Portfolio Overview"}),e.jsxs("p",{className:"text-muted-foreground text-lg max-w-3xl font-body",children:["A summary of current and historical investments across our multifamily portfolio. We focus on"," ",e.jsx(u,{href:"/markets/ohio",className:"text-primary hover:underline",children:"Ohio multifamily markets"})," ","where affordable acquisition costs and strong rental demand create compelling returns."]})]}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 mb-12",children:[e.jsxs("div",{className:"bg-card border border-border/50 rounded-md p-5",children:[e.jsx("p",{className:"text-muted-foreground text-xs font-medium uppercase tracking-wider mb-1",children:"Total Properties"}),e.jsx("p",{className:"font-heading text-2xl font-bold text-foreground","data-testid":"text-total-properties",children:r.length})]}),e.jsxs("div",{className:"bg-card border border-border/50 rounded-md p-5",children:[e.jsx("p",{className:"text-muted-foreground text-xs font-medium uppercase tracking-wider mb-1",children:"Total Units"}),e.jsxs("p",{className:"font-heading text-2xl font-bold text-foreground","data-testid":"text-total-units",children:[L.toLocaleString(),"+"]})]}),e.jsxs("div",{className:"bg-card border border-border/50 rounded-md p-5",children:[e.jsx("p",{className:"text-muted-foreground text-xs font-medium uppercase tracking-wider mb-1",children:"Markets"}),e.jsx("p",{className:"font-heading text-2xl font-bold text-foreground","data-testid":"text-total-markets",children:h.length})]}),e.jsxs("div",{className:"bg-card border border-border/50 rounded-md p-5",children:[e.jsx("p",{className:"text-muted-foreground text-xs font-medium uppercase tracking-wider mb-1",children:"AUM"}),e.jsx("p",{className:"font-heading text-2xl font-bold text-foreground","data-testid":"text-aum",children:"$100M+"})]})]}),e.jsxs("div",{className:"flex flex-col md:flex-row gap-3 mb-8",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(R,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground"}),e.jsx(F,{type:"text",placeholder:"Search by name, city, or state...",value:s,onChange:t=>w(t.target.value),className:"pl-10","data-testid":"input-property-search"})]}),e.jsxs("div",{className:"flex gap-3",children:[e.jsxs(f,{value:i,onValueChange:y,children:[e.jsxs(g,{className:"w-[140px]","data-testid":"select-status-filter",children:[e.jsx(T,{className:"w-3.5 h-3.5 mr-1.5 text-muted-foreground"}),e.jsx(p,{placeholder:"Status"})]}),e.jsxs(j,{children:[e.jsx(l,{value:"all",children:"All Status"}),e.jsx(l,{value:"raising",children:"Now Raising"}),e.jsx(l,{value:"active",children:"Active"}),e.jsx(l,{value:"leasing",children:"Leasing"}),e.jsx(l,{value:"realized",children:"Realized"})]})]}),e.jsxs(f,{value:n,onValueChange:S,children:[e.jsx(g,{className:"w-[140px]","data-testid":"select-state-filter",children:e.jsx(p,{placeholder:"State"})}),e.jsxs(j,{children:[e.jsx(l,{value:"all",children:"All States"}),h.map(t=>e.jsx(l,{value:t,children:t},t))]})]})]})]}),k?e.jsx("div",{className:"space-y-3",children:Array.from({length:6}).map((t,a)=>e.jsx(B,{className:"h-16 w-full rounded-md"},a))}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"hidden md:block border border-border/50 rounded-md overflow-hidden",children:e.jsxs("table",{className:"w-full","data-testid":"table-track-record",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"bg-muted/50 border-b border-border/50",children:[e.jsx("th",{className:"text-left text-xs font-semibold text-muted-foreground uppercase tracking-wider px-5 py-3",children:"Property"}),e.jsx("th",{className:"text-left text-xs font-semibold text-muted-foreground uppercase tracking-wider px-5 py-3",children:"Location"}),e.jsx("th",{className:"text-left text-xs font-semibold text-muted-foreground uppercase tracking-wider px-5 py-3",children:"Type"}),e.jsx("th",{className:"text-right text-xs font-semibold text-muted-foreground uppercase tracking-wider px-5 py-3",children:"Units"}),e.jsx("th",{className:"text-left text-xs font-semibold text-muted-foreground uppercase tracking-wider px-5 py-3",children:"Year"}),e.jsx("th",{className:"text-left text-xs font-semibold text-muted-foreground uppercase tracking-wider px-5 py-3",children:"Status"}),e.jsx("th",{className:"px-5 py-3"})]})}),e.jsx("tbody",{children:o.map((t,a)=>e.jsxs("tr",{className:`border-b border-border/30 last:border-b-0 hover-elevate transition-colors ${a%2===0?"bg-card":"bg-card/50"}`,"data-testid":`row-property-${t.slug}`,children:[e.jsx("td",{className:"px-5 py-4",children:e.jsxs("div",{className:"flex items-center gap-3",children:[b(t.imageUrl)?e.jsx(N,{status:t.status,size:"sm",className:"w-10 h-10 rounded-md flex-shrink-0"}):e.jsx("img",{src:t.imageUrl,alt:t.name,className:"w-10 h-10 rounded-md object-cover flex-shrink-0",loading:"lazy",decoding:"async"}),e.jsx("span",{className:"font-medium text-sm text-foreground",children:t.name})]})}),e.jsxs("td",{className:"px-5 py-4 text-sm text-muted-foreground",children:[t.city,", ",t.state]}),e.jsx("td",{className:"px-5 py-4 text-sm text-muted-foreground capitalize",children:t.propertyType}),e.jsx("td",{className:"px-5 py-4 text-sm text-foreground text-right font-medium tabular-nums",children:t.units}),e.jsx("td",{className:"px-5 py-4 text-sm text-muted-foreground tabular-nums",children:t.yearBuilt||"â"}),e.jsx("td",{className:"px-5 py-4",children:e.jsx(v,{status:t.status})}),e.jsx("td",{className:"px-5 py-4",children:e.jsxs(u,{href:`/portfolio/${t.slug}`,className:"text-primary hover:underline text-sm inline-flex items-center gap-1","data-testid":`link-property-detail-${t.slug}`,children:["Details",e.jsx(M,{className:"w-3.5 h-3.5"})]})})]},t.id))})]})}),e.jsx("div",{className:"md:hidden space-y-3",children:o.map(t=>e.jsx(u,{href:`/portfolio/${t.slug}`,className:"block",children:e.jsx("div",{className:"bg-card border border-border/50 rounded-md p-4 hover-elevate","data-testid":`card-property-mobile-${t.slug}`,children:e.jsxs("div",{className:"flex items-start gap-3",children:[b(t.imageUrl)?e.jsx(N,{status:t.status,size:"sm",className:"w-14 h-14 roun
1ded-md flex-shrink-0"}):e.jsx("img",{src:t.imageUrl,alt:t.name,className:"w-14 h-14 rounded-md object-cover flex-shrink-0",loading:"lazy",decoding:"async"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("h3",{className:"font-medium text-sm text-foreground truncate",children:t.name}),e.jsx(v,{status:t.status})]}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-0.5",children:[t.city,", ",t.state]}),e.jsxs("div",{className:"flex items-center gap-3 mt-2 text-xs text-muted-foreground",children:[e.jsxs("span",{children:[t.units," units"]}),e.jsx("span",{className:"capitalize",children:t.propertyType}),t.yearBuilt&&e.jsx("span",{children:t.yearBuilt})]})]})]})})},t.id))}),o.length===0&&e.jsxs("div",{className:"py-16 text-center",children:[e.jsx($,{className:"w-12 h-12 text-muted-foreground/40 mx-auto mb-4"}),e.jsx("p",{className:"text-muted-foreground font-body",children:s||i!=="all"||n!=="all"?"No properties match your current filters.":"No properties available."})]}),e.jsx("div",{className:"mt-6 text-center",children:e.jsxs("p",{className:"text-muted-foreground text-xs font-body",children:["Showing ",o.length," of ",r.length," properties"]})})]})]})}),e.jsx(U,{})]})}export{ee 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.