var __gh = require("react").createElement, __gf = require("react").Fragment; var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var stdin_exports={};__export(stdin_exports,{default:()=>stdin_default,featureConfig:()=>featureConfig});module.exports=__toCommonJS(stdin_exports);var dataSources=[{table:"arquitectura__proyectos"},{table:"arquitectura__modelos"},{table:"arquitectura__plantas"},{table:"arquitectura__estancias"},{table:"arquitectura__elementos"},{table:"arquitectura__partidas"}];var import_react7=__toESM(require("react")),import_lucide_react6=require("lucide-react");var import_react=__toESM(require("react")),import_framer_motion=require("framer-motion"),import_lucide_react=require("lucide-react"),INK="#1d1d1f",INK_2="#48484a",MUTED="#86868b",FAINT="#aeaeb2",HAIRLINE="#e5e5e7",CANVAS="#f2f2f7",FILL="rgba(118,118,128,0.12)",ACCENT="#635BFF",RADIO=14,SHADOW_CARD="0 1px 2px rgba(16,24,40,0.04)",SHADOW_PICK="0 1px 3px rgba(0,0,0,0.10), 0 0 0 0.5px rgba(0,0,0,0.04)",EASE=[.22,1,.36,1],ROJO="#ff3b30",CHIP_ENCIMA="rgba(118,118,128,0.2)",fmt=(max,min=0)=>new Intl.NumberFormat("es-ES",{maximumFractionDigits:max,minimumFractionDigits:min,useGrouping:"always"}),ENTERO=fmt(0),DOS=fmt(2),DOS_FIJOS=fmt(2,2),numero=n=>ENTERO.format(n);function medida(n,unidad,decimales=2){return n==null||!Number.isFinite(Number(n))?"sin dato":`${fmt(decimales,decimales).format(Number(n))}\xA0${unidad}`}var euros=n=>`${DOS_FIJOS.format(n)}\xA0\u20AC`;function plural(n,uno,varios){return`${numero(n)} ${n===1?uno:varios}`}var MESES=["ene","feb","mar","abr","may","jun","jul","ago","sept","oct","nov","dic"];function fecha(iso){if(!iso)return"sin fecha";let d=new Date(iso);return`${d.getDate()} ${MESES[d.getMonth()]} ${d.getFullYear()}`}function Lienzo({children}){let compacto=useCompacto(760);return __gh("div",{style:{background:CANVAS,minHeight:"100dvh",padding:"clamp(16px, 3vw, 36px) clamp(16px, 4vw, 64px) 56px",paddingRight:compacto?16:"max(clamp(16px, 4vw, 64px), 80px)",boxSizing:"border-box"},"data-gufi-src":"components/kit.tsx:59"},__gh("div",{style:{display:"flex",flexDirection:"column",gap:22},"data-gufi-src":"components/kit.tsx:60"},children))}function Cabecera({titulo,sub,volver,acciones}){return __gh("header",{style:{display:"flex",flexDirection:"column",gap:6},"data-gufi-src":"components/kit.tsx:68"},volver&&__gh("a",{href:volver.href,onClick:volver.onClick,style:{...estiloAccion({pequeno:!0}),color:INK_2},"data-gufi-src":"components/kit.tsx:70"},__gh(Chip,{icono:import_lucide_react.ChevronLeft,pequeno:!0}),volver.texto),__gh("div",{style:{display:"flex",alignItems:"flex-end",gap:12,flexWrap:"wrap"},"data-gufi-src":"components/kit.tsx:75"},__gh("div",{style:{flex:"1 1 260px",minWidth:0},"data-gufi-src":"components/kit.tsx:76"},__gh("h1",{style:{fontSize:26,fontWeight:650,letterSpacing:"-0.6px",color:INK,margin:0,overflowWrap:"anywhere"},"data-gufi-src":"components/kit.tsx:77"},titulo),sub&&__gh("p",{style:{fontSize:13,color:MUTED,margin:"3px 0 0"},"data-gufi-src":"components/kit.tsx:78"},sub)),acciones&&__gh("div",{style:{display:"flex",alignItems:"center",gap:14,flexWrap:"wrap"},"data-gufi-src":"components/kit.tsx:80"},acciones)))}function Barra({izquierda,derecha}){return __gh("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},"data-gufi-src":"components/kit.tsx:89"},__gh("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap",flex:"1 1 auto",minWidth:0},"data-gufi-src":"components/kit.tsx:90"},izquierda),derecha&&__gh("div",{style:{display:"flex",alignItems:"center",gap:14,flexWrap:"wrap"},"data-gufi-src":"components/kit.tsx:91"},derecha))}function Punto({tono:tono2}){let c={ok:"#34c759",aviso:"#ff9f0a",mal:ROJO,info:ACCENT,mudo:"#c7c7cc"}[tono2];return __gh("span",{"aria-hidden":!0,style:{width:7,height:7,borderRadius:99,background:c,flexShrink:0,display:"inline-block"},"data-gufi-src":"components/kit.tsx:99"})}function Tarjeta({children,style}){return __gh("div",{style:{background:"#fff",borderRadius:RADIO,border:`1px solid ${HAIRLINE}`,boxShadow:SHADOW_CARD,overflow:"hidden",...style},"data-gufi-src":"components/kit.tsx:103"},children)}function Grupo({titulo,cuenta,sub,derecha,pie,children}){return __gh("section",{style:{minWidth:0},"data-gufi-src":"components/kit.tsx:109"},(titulo||derecha)&&__gh("header",{style:{display:"flex",alignItems:"flex-end",gap:12,padding:"0 4px 8px"},"data-gufi-src":"components/kit.tsx:111"},__gh("div",{style:{flex:1,minWidth:0},"data-gufi-src":"components/kit.tsx:112"},titulo&&__gh("h3",{style:{fontSize:15,fontWeight:600,letterSpacing:"-0.3px",color:INK,margin:0},"data-gufi-src":"components/kit.tsx:114"},titulo,cuenta!=null&&__gh("span",{style:{color:FAINT,fontWeight:500,marginLeft:8,fontVariantNumeric:"tabular-nums"},"data-gufi-src":"components/kit.tsx:116"},numero(cuenta))),sub&&__gh("p",{style:{fontSize:12.5,color:MUTED,margin:"2px 0 0",lineHeight:1.45},"data-gufi-src":"components/kit.tsx:119"},sub)),derecha&&__gh("div",{style:{display:"flex",alignItems:"center",gap:12,flexShrink:0},"data-gufi-src":"components/kit.tsx:121"},derecha)),__gh(Tarjeta,null,children),pie&&__gh("p",{style:{fontSize:12,color:MUTED,margin:"7px 4px 0",lineHeight:1.45},"data-gufi-src":"components/kit.tsx:125"},pie))}function Fila({lead,titulo,sub,valor:valor2,valorSub,control,onClick,href,primera,elegida}){let lleva=!!(onClick||href),cuerpo=__gh(__gf,null,lead&&__gh("span",{style:{marginRight:12,display:"flex"},"data-gufi-src":"components/kit.tsx:138"},lead),__gh("span",{style:{flex:1,minWidth:0,display:"flex",alignItems:"center",gap:12,padding:"9px 16px 9px 0",minHeight:52,borderTop:primera?"none":`1px solid ${HAIRLINE}`},"data-gufi-src":"components/kit.tsx:139"},__gh("span",{style:{flex:1,minWidth:0},"data-gufi-src":"components/kit.tsx:140"},__gh("span",{style:{display:"block",fontSize:13.5,fontWeight:500,color:INK,overflowWrap:"anywhere"},"data-gufi-src":"components/kit.tsx:141"},titulo),sub&&__gh("span",{style:{display:"block",fontSize:12,color:MUTED,marginTop:1,overflowWrap:"anywhere"},"data-gufi-src":"components/kit.tsx:142"},sub)),valor2!=null&&__gh("span",{style:{textAlign:"right",fontVariantNumeric:"tabular-nums",flexShrink:0,maxWidth:"45%",minWidth:0},"data-gufi-src":"components/kit.tsx:145"},__gh("span",{style:{display:"block",fontSize:13,fontWeight:600,color:INK,overflowWrap:"anywhere"},"data-gufi-src":"components/kit.tsx:146"},valor2),valorSub&&__gh("span",{style:{display:"block",fontSize:11.5,color:MUTED,overflowWrap:"anywhere"},"data-gufi-src":"components/kit.tsx:147"},valorSub)),control,lleva&&!control&&__gh("span",{"aria-hidden":!0,style:{color:"#c7c7cc",fontSize:18,lineHeight:1},"data-gufi-src":"components/kit.tsx:151"},"\u203A"))),estilo={display:"flex",alignItems:"center",paddingLeft:16,cursor:lleva?"pointer":void 0,background:elegida?"rgba(99,91,255,0.05)":void 0,color:"inherit",textDecoration:"none"};return href?__gh("a",{href,style:estilo,"data-gufi-src":"components/kit.tsx:156"},cuerpo):__gh("div",{role:onClick?"button":void 0,tabIndex:onClick?0:void 0,onClick,onKeyDown:onClick?e=>e.key==="Enter"&&onClick():void 0,style:estilo,"data-gufi-src":"components/kit.tsx:158"},cuerpo)}function ConPunto({tono:tono2,children}){return __gh("span",{style:{display:"inline-flex",alignItems:"center",gap:6},"data-gufi-src":"components/kit.tsx:167"},tono2&&__gh(Punto,{tono:tono2}),children)}function Cifras({compacto,columnas=4,children}){let lista=import_react.default.Children.toArray(children);return __gh(Tarjeta,null,__gh("div",{style:{display:"grid",gridTemplateColumns:`repeat(${compacto?2:columnas}, minmax(0, 1fr))`,gap:1,background:HAIRLINE},"data-gufi-src":"components/kit.tsx:181"},lista.map((c,i)=>__gh("div",{key:i,style:{background:"#fff",minWidth:0,gridColumn:compacto&&lista.length%2===1&&i===lista.length-1?"span 2":void 0},"data-gufi-src":"components/kit.tsx:184"},c))))}function Cifra({etiqueta,valor:valor2,sub,tono:tono2,onClick,elegida,compacta}){let dentro=__gh(__gf,null,__gh("div",{style:{display:"flex",alignItems:"center",gap:7,fontSize:12,color:MUTED,minWidth:0},"data-gufi-src":"components/kit.tsx:194"},tono2&&__gh(Punto,{tono:tono2}),__gh("span",{style:{flex:1,minWidth:0},"data-gufi-src":"components/kit.tsx:196"},etiqueta),onClick&&__gh("span",{"aria-hidden":!0,style:{color:"#c7c7cc",fontSize:16,lineHeight:1},"data-gufi-src":"components/kit.tsx:197"},"\u203A")),__gh("div",{style:{fontSize:compacta?20:26,fontWeight:600,color:INK,letterSpacing:compacta?"-0.3px":"-0.5px",fontVariantNumeric:"tabular-nums",marginTop:4,overflowWrap:"anywhere"},"data-gufi-src":"components/kit.tsx:199"},valor2),sub&&__gh("div",{style:{fontSize:12,color:MUTED,marginTop:2,lineHeight:1.35},"data-gufi-src":"components/kit.tsx:200"},sub),elegida&&__gh("span",{"aria-hidden":!0,style:{position:"absolute",left:16,right:16,bottom:0,height:2,borderRadius:99,background:ACCENT},"data-gufi-src":"components/kit.tsx:201"})),estilo={position:"relative",background:"#fff",padding:"14px 16px",minWidth:0,textAlign:"left",border:"none",fontFamily:"inherit",display:"block",width:"100%",boxSizing:"border-box",color:"inherit",cursor:onClick?"pointer":void 0};return onClick?__gh("button",{type:"button",onClick,"aria-pressed":elegida,style:estilo,"data-gufi-src":"components/kit.tsx:205"},dentro):__gh("div",{style:estilo,"data-gufi-src":"components/kit.tsx:206"},dentro)}function Segmentado({opciones,valor:valor2,onCambio,id,lleno,pequeno}){return __gh("div",{role:"tablist",style:{display:lleno?"flex":"inline-flex",alignSelf:lleno?"stretch":"flex-start",flexShrink:0,background:FILL,borderRadius:9,padding:2,gap:2,maxWidth:"100%",overflowX:"auto"},"data-gufi-src":"components/kit.tsx:213"},opciones.map(o=>{let elegida=o.valor===valor2;return __gh("button",{key:o.valor,type:"button",role:"tab","aria-selected":elegida,onClick:()=>onCambio(o.valor),style:{position:"relative",flex:lleno?"1 1 0":void 0,border:"none",background:"transparent",padding:pequeno?"4px 10px":"6px clamp(9px, 2.6vw, 14px)",borderRadius:7,fontSize:pequeno?12.5:13,fontWeight:elegida?600:500,color:INK,cursor:"pointer",whiteSpace:"nowrap",fontFamily:"inherit"},"data-gufi-src":"components/kit.tsx:217"},elegida&&__gh(import_framer_motion.motion.span,{layoutId:`seg-${id}`,transition:{duration:.25,ease:EASE},style:{position:"absolute",inset:0,background:"#fff",borderRadius:7,boxShadow:SHADOW_PICK}}),__gh("span",{style:{position:"relative"},"data-gufi-src":"components/kit.tsx:220"},o.texto,o.cuenta!=null&&__gh("span",{style:{color:FAINT,fontWeight:500,marginLeft:6},"data-gufi-src":"components/kit.tsx:222"},numero(o.cuenta))))}))}var FLOTANTE={background:"#fff",borderRadius:16,boxShadow:"0 10px 30px rgba(0,0,0,0.10), 0 0 0 0.5px rgba(0,0,0,0.08)"};function BotonIcono({icono:I,titulo,texto:texto2,onClick,activo,deshabilitado}){let{encima,eventos}=useEncima(),lado=34;return __gh("button",{type:"button",onClick,disabled:deshabilitado,title:titulo,"aria-label":titulo,"aria-pressed":activo,...eventos,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",gap:6,flexShrink:0,height:lado,minWidth:lado,padding:texto2?"0 11px 0 9px":0,borderRadius:10,border:"none",boxSizing:"border-box",background:activo?"rgba(118,118,128,0.16)":encima&&!deshabilitado?"rgba(118,118,128,0.08)":"transparent",color:INK,fontFamily:"inherit",fontSize:12.5,fontWeight:activo?600:500,whiteSpace:"nowrap",cursor:deshabilitado?"default":"pointer",opacity:deshabilitado?.35:1,transition:"background-color 150ms ease"},"data-gufi-src":"components/kit.tsx:241"},__gh(I,{size:17,strokeWidth:1.8,"aria-hidden":!0}),texto2)}function Capsula({icono:I,children,titulo,onClick,activo,deshabilitado,insignia,pequeno}){let{encima,eventos}=useEncima(),[abajo,setAbajo]=import_react.default.useState(!1),alto=pequeno?30:34;return __gh("button",{type:"button",onClick,disabled:deshabilitado,title:titulo,"aria-label":titulo,"aria-pressed":activo,...eventos,onPointerDown:()=>setAbajo(!0),onPointerUp:()=>setAbajo(!1),onPointerCancel:()=>setAbajo(!1),onPointerLeave:()=>{setAbajo(!1),eventos.onPointerLeave()},style:{display:"inline-flex",alignItems:"center",justifyContent:"center",gap:7,flexShrink:0,height:alto,minWidth:alto,padding:children?`0 ${pequeno?12:14}px 0 ${pequeno?10:11}px`:0,borderRadius:99,border:"none",boxSizing:"border-box",fontFamily:"inherit",fontSize:pequeno?12.5:13,fontWeight:600,color:INK,whiteSpace:"nowrap",background:activo?"rgba(118,118,128,0.22)":encima&&!deshabilitado?"rgba(118,118,128,0.17)":"rgba(118,118,128,0.1)",transform:abajo&&!deshabilitado?"scale(0.96)":"none",cursor:deshabilitado?"default":"pointer",opacity:deshabilitado?.4:1,transition:"background-color 150ms ease, transform 180ms cubic-bezier(0.22, 1, 0.36, 1)"},"data-gufi-src":"components/kit.tsx:260"},__gh(I,{size:pequeno?14:16,strokeWidth:2,"aria-hidden":!0}),children,insignia?__gh("span",{"aria-label":`${insignia} sin ver`,style:{minWidth:18,height:18,padding:"0 5px",borderRadius:99,background:ACCENT,color:"#fff",fontSize:11,fontWeight:700,display:"grid",placeItems:"center",boxSizing:"border-box"},"data-gufi-src":"components/kit.tsx:270"},insignia):null)}function Interruptor({encendido,onCambio,titulo}){return __gh("button",{type:"button",role:"switch","aria-checked":encendido,"aria-label":titulo,onClick:e=>{e.stopPropagation(),onCambio(!encendido)},style:{position:"relative",flexShrink:0,width:44,height:26,borderRadius:99,border:"none",padding:0,cursor:"pointer",background:encendido?ACCENT:"rgba(120,120,128,0.24)",transition:"background-color 200ms ease"},"data-gufi-src":"components/kit.tsx:278"},__gh("span",{"aria-hidden":!0,style:{position:"absolute",top:2,left:encendido?20:2,width:22,height:22,borderRadius:99,background:"#fff",boxShadow:"0 2px 5px rgba(0,0,0,0.18)",transition:"left 200ms cubic-bezier(0.22, 1, 0.36, 1)"},"data-gufi-src":"components/kit.tsx:280"}))}function useEncima(){let[encima,setEncima]=import_react.default.useState(!1);return{encima,eventos:{onPointerEnter:e=>e.pointerType==="mouse"&&setEncima(!0),onPointerLeave:()=>setEncima(!1)}}}function Chip({icono:I,peligro,pequeno,encima,activo}){let lado=pequeno?24:28;return __gh("span",{"aria-hidden":!0,style:{width:lado,height:lado,borderRadius:99,flexShrink:0,display:"grid",placeItems:"center",background:activo?"#fff":encima?CHIP_ENCIMA:FILL,boxShadow:activo?`0 0 0 1px ${HAIRLINE}, ${SHADOW_PICK}`:void 0,color:peligro?ROJO:INK,transition:"background-color 150ms ease"},"data-gufi-src":"components/kit.tsx:295"},__gh(I,{size:pequeno?13:15,strokeWidth:1.9}))}function estiloAccion({deshabilitado,pequeno}){return{display:"inline-flex",alignItems:"center",gap:pequeno?6:8,boxSizing:"border-box",minHeight:pequeno?26:30,padding:0,border:"none",background:"transparent",color:INK,fontSize:pequeno?12.5:13,fontWeight:500,fontFamily:"inherit",lineHeight:1.25,whiteSpace:"nowrap",textDecoration:"none",textAlign:"left",flexShrink:0,width:"fit-content",maxWidth:"100%",cursor:deshabilitado?"default":"pointer",opacity:deshabilitado?.4:1}}var ICONO_POR_VERBO=[[/^ver( \S+)? más/i,import_lucide_react.ChevronDown],[/^(cancelar|no)$/i,import_lucide_react.X],[/borr|elimin/i,import_lucide_react.Trash2],[/quit|descart/i,import_lucide_react.X],[/^copi/i,import_lucide_react.Copy],[/^(cambi|edit)/i,import_lucide_react.Pencil],[/^(volver a|probar otra vez|actualiz)/i,import_lucide_react.RotateCw],[/^(atrás|volver)/i,import_lucide_react.ChevronLeft],[/^subir/i,import_lucide_react.Upload],[/^(añad|nuev|crea|cargar)/i,import_lucide_react.Plus],[/^(guard|listo|hecho|aplicar|usar)/i,import_lucide_react.Check],[/^(descarg|export)/i,import_lucide_react.Download],[/^medir/i,import_lucide_react.Ruler]],SOLO_ICONO=/^(copiar|quitar|cambiar|editar|abrir|borrar|cancelar|no)$/i;function textoDe(n){return n==null||typeof n=="boolean"?"":typeof n=="string"||typeof n=="number"?String(n):Array.isArray(n)?n.map(textoDe).join(""):import_react.default.isValidElement(n)?textoDe(n.props.children):""}function iconoDe(texto2,fuera){if(fuera)return import_lucide_react.ArrowUpRight;for(let[re,icono]of ICONO_POR_VERBO)if(re.test(texto2.trim()))return icono;return import_lucide_react.ChevronRight}function Accion({children,onClick,href,fuera,icono,peligro,pequeno,deshabilitado,titulo,soloIcono,activo}){let{encima,eventos}=useEncima(),texto2=textoDe(children).trim(),solo=soloIcono??SOLO_ICONO.test(texto2),I=icono??iconoDe(texto2,fuera),estilo={...estiloAccion({deshabilitado,pequeno}),fontWeight:activo?600:500},dentro=__gh(__gf,null,__gh(Chip,{icono:I,peligro,pequeno,encima:encima&&!deshabilitado,activo}),!solo&&children),nombre=titulo??(solo?texto2:void 0);return href&&!deshabilitado?__gh("a",{href,target:fuera?"_blank":void 0,rel:fuera?"noreferrer":void 0,title:nombre,"aria-label":solo?texto2:void 0,style:estilo,...eventos,"data-gufi-src":"components/kit.tsx:358"},dentro):__gh("button",{type:"button",onClick,disabled:deshabilitado,"aria-pressed":activo,title:nombre,"aria-label":solo?texto2:void 0,style:estilo,...eventos,"data-gufi-src":"components/kit.tsx:360"},dentro)}function Principal({children,onClick,deshabilitado,icono:I,capsula}){let{encima,eventos}=useEncima(),[abajo,setAbajo]=import_react.default.useState(!1);return __gh("button",{type:"button",onClick,disabled:deshabilitado,...eventos,onPointerDown:()=>setAbajo(!0),onPointerUp:()=>setAbajo(!1),onPointerCancel:()=>setAbajo(!1),onPointerLeave:()=>{setAbajo(!1),eventos.onPointerLeave()},style:{display:"inline-flex",alignItems:"center",justifyContent:"center",gap:6,minHeight:capsula?34:32,padding:capsula?"0 16px 0 13px":"0 14px",border:"none",borderRadius:capsula?99:9,background:encima&&!deshabilitado?"#5249f0":ACCENT,color:"#fff",fontSize:13,fontWeight:600,fontFamily:"inherit",whiteSpace:"nowrap",cursor:deshabilitado?"default":"pointer",opacity:deshabilitado?.4:1,boxShadow:capsula?"0 4px 12px rgba(99,91,255,0.28)":"none",transform:abajo&&!deshabilitado?"scale(0.96)":"none",transition:"background-color 150ms ease, transform 180ms cubic-bezier(0.22, 1, 0.36, 1)",width:"fit-content",maxWidth:"100%"},"data-gufi-src":"components/kit.tsx:371"},I&&__gh(I,{size:15,strokeWidth:2,"aria-hidden":!0}),children)}function FilaAccion({children,onClick,href,icono,peligro,primera}){let{encima,eventos}=useEncima(),I=icono??(href?import_lucide_react.ArrowRight:iconoDe(textoDe(children))),estilo={display:"flex",alignItems:"center",width:"100%",boxSizing:"border-box",paddingLeft:16,border:"none",background:"transparent",color:INK,fontFamily:"inherit",textAlign:"left",textDecoration:"none",cursor:"pointer"},dentro=__gh(__gf,null,__gh("span",{"aria-hidden":!0,style:{width:26,height:26,borderRadius:7,marginRight:12,flexShrink:0,display:"grid",placeItems:"center",background:encima?CHIP_ENCIMA:FILL,color:peligro?ROJO:INK},"data-gufi-src":"components/kit.tsx:391"},__gh(I,{size:15,strokeWidth:1.9})),__gh("span",{style:{flex:1,minWidth:0,display:"flex",alignItems:"center",minHeight:48,padding:"8px 16px 8px 0",borderTop:primera?"none":`1px solid ${HAIRLINE}`,fontSize:13.5,fontWeight:500},"data-gufi-src":"components/kit.tsx:394"},children));return href?__gh("a",{href,style:estilo,...eventos,"data-gufi-src":"components/kit.tsx:397"},dentro):__gh("button",{type:"button",onClick,style:estilo,...eventos,"data-gufi-src":"components/kit.tsx:398"},dentro)}function FilaMas({quedan,onClick}){return __gh("div",{style:{display:"flex",justifyContent:"center",padding:"10px 16px",borderTop:`1px solid ${HAIRLINE}`},"data-gufi-src":"components/kit.tsx:404"},__gh(Accion,{pequeno:!0,icono:import_lucide_react.ChevronDown,onClick},`Ver ${numero(Math.min(quedan,20))} m\xE1s`))}function Buscador({valor:valor2,onCambio,placeholder,ancho}){let[foco,setFoco]=import_react.default.useState(!1);return __gh("div",{style:{position:"relative",minWidth:0,width:ancho??240,maxWidth:"100%"},"data-gufi-src":"components/kit.tsx:414"},__gh(import_lucide_react.Search,{"aria-hidden":!0,style:{position:"absolute",width:15,height:15,left:11,top:"50%",transform:"translateY(-50%)",color:MUTED,pointerEvents:"none"}}),__gh("input",{type:"search",value:valor2,onChange:e=>onCambio(e.target.value),onFocus:()=>setFoco(!0),onBlur:()=>setFoco(!1),placeholder:placeholder??"Buscar","aria-label":placeholder??"Buscar",style:{width:"100%",boxSizing:"border-box",height:36,paddingLeft:34,paddingRight:32,borderRadius:10,fontSize:13.5,color:INK,fontFamily:"inherit",outline:"none",background:foco?"#fff":FILL,border:`1px solid ${foco?ACCENT:"transparent"}`,boxShadow:foco?"0 0 0 3px rgba(99,91,255,0.12)":"none",WebkitAppearance:"none"},"data-gufi-src":"components/kit.tsx:416"}),valor2&&__gh("button",{type:"button",onClick:()=>onCambio(""),"aria-label":"Vaciar",style:{position:"absolute",right:9,top:"50%",transform:"translateY(-50%)",color:FAINT,background:"transparent",border:"none",padding:0,lineHeight:0,cursor:"pointer"},"data-gufi-src":"components/kit.tsx:419"},__gh(import_lucide_react.X,{style:{width:15,height:15}})))}function Menu({boton,ancho=260,alinear="izquierda",arriba,children}){let[abierto,setAbierto]=import_react.default.useState(!1),caja=import_react.default.useRef(null);return import_react.default.useEffect(()=>{if(!abierto)return;let fuera=ev=>caja.current&&!caja.current.contains(ev.target)&&setAbierto(!1),esc=ev=>ev.key==="Escape"&&setAbierto(!1);return document.addEventListener("mousedown",fuera),document.addEventListener("keydown",esc),()=>{document.removeEventListener("mousedown",fuera),document.removeEventListener("keydown",esc)}},[abierto]),__gh("div",{ref:caja,style:{position:"relative",display:"inline-block",maxWidth:"100%"},"data-gufi-src":"components/kit.tsx:443"},boton(()=>setAbierto(v=>!v),abierto),abierto&&__gh("div",{role:"menu",style:{position:"absolute",...arriba?{bottom:"100%",marginBottom:6}:{top:"100%",marginTop:6},[alinear==="derecha"?"right":"left"]:0,zIndex:60,width:ancho,maxWidth:"calc(100vw - 32px)",maxHeight:360,overflowY:"auto",background:"#fff",borderRadius:12,boxShadow:"0 12px 32px rgba(0,0,0,0.12), 0 0 0 0.5px rgba(0,0,0,0.06)",padding:6},"data-gufi-src":"components/kit.tsx:446"},children(()=>setAbierto(!1))))}function MenuItem({children,sub,detalle,onClick,elegido}){return __gh("button",{type:"button",role:"menuitem",onClick,style:{display:"flex",alignItems:"center",gap:10,width:"100%",boxSizing:"border-box",textAlign:"left",minHeight:36,padding:"7px 10px",borderRadius:8,border:"none",background:"transparent",fontSize:13,color:INK,fontFamily:"inherit",cursor:"pointer"},"data-gufi-src":"components/kit.tsx:456"},__gh("span",{style:{flex:1,minWidth:0},"data-gufi-src":"components/kit.tsx:458"},__gh("span",{style:{display:"block",fontWeight:elegido?600:500,overflowWrap:"anywhere"},"data-gufi-src":"components/kit.tsx:459"},children),sub&&__gh("span",{style:{display:"block",fontSize:11.5,color:MUTED},"data-gufi-src":"components/kit.tsx:460"},sub)),detalle&&__gh("span",{style:{flexShrink:0,fontSize:12,color:FAINT,fontVariantNumeric:"tabular-nums"},"data-gufi-src":"components/kit.tsx:462"},detalle),elegido&&__gh("span",{"aria-hidden":!0,style:{color:ACCENT,fontSize:14,fontWeight:700},"data-gufi-src":"components/kit.tsx:463"},"\u2713"))}function BotonMenu({children,onClick,abierto}){return __gh("button",{type:"button",onClick,"aria-expanded":abierto,style:{display:"inline-flex",alignItems:"center",gap:8,padding:"7px 12px",minHeight:36,borderRadius:10,border:`1px solid ${HAIRLINE}`,background:"#fff",boxShadow:SHADOW_CARD,fontSize:13.5,fontWeight:600,color:INK,cursor:"pointer",fontFamily:"inherit",textAlign:"left",maxWidth:"100%"},"data-gufi-src":"components/kit.tsx:471"},__gh("span",{style:{minWidth:0,overflowWrap:"anywhere"},"data-gufi-src":"components/kit.tsx:473"},children),__gh(import_lucide_react.ChevronDown,{size:13,strokeWidth:2,style:{color:MUTED,flexShrink:0}}))}function Vacio({titulo,texto:texto2,accion}){return __gh("div",{style:{padding:"26px 16px",textAlign:"center"},"data-gufi-src":"components/kit.tsx:482"},__gh("p",{style:{fontSize:14,fontWeight:600,color:INK,margin:0},"data-gufi-src":"components/kit.tsx:483"},titulo),texto2&&__gh("p",{style:{fontSize:13,lineHeight:1.45,color:MUTED,margin:"4px auto 0",maxWidth:"52ch"},"data-gufi-src":"components/kit.tsx:484"},texto2),accion&&__gh("div",{style:{marginTop:14,display:"flex",justifyContent:"center"},"data-gufi-src":"components/kit.tsx:485"},accion))}function Aviso({titulo,texto:texto2,accion}){return __gh(Tarjeta,null,__gh("div",{style:{display:"flex",gap:12,alignItems:"flex-start",padding:"14px 16px"},"data-gufi-src":"components/kit.tsx:494"},__gh(import_lucide_react.AlertCircle,{size:18,strokeWidth:1.9,style:{color:ROJO,flexShrink:0,marginTop:1},"aria-hidden":!0}),__gh("div",{style:{flex:1,minWidth:0},"data-gufi-src":"components/kit.tsx:496"},__gh("p",{style:{fontSize:13.5,fontWeight:600,color:INK,margin:0},"data-gufi-src":"components/kit.tsx:497"},titulo),texto2&&__gh("p",{style:{fontSize:12.5,color:MUTED,margin:"3px 0 0",lineHeight:1.45,overflowWrap:"anywhere"},"data-gufi-src":"components/kit.tsx:498"},texto2),accion&&__gh("div",{style:{marginTop:10},"data-gufi-src":"components/kit.tsx:499"},accion))))}function FilasCargando({n}){return __gh(__gf,null,Array.from({length:n},(_,i)=>__gh("div",{key:i,style:{display:"flex",alignItems:"center",gap:12,padding:"0 16px",minHeight:52,borderTop:i?`1px solid ${HAIRLINE}`:"none"},"data-gufi-src":"components/kit.tsx:510"},__gh("span",{style:{flex:1},"data-gufi-src":"components/kit.tsx:511"},__gh("span",{style:{display:"block",height:11,width:"45%",borderRadius:6,background:FILL},"data-gufi-src":"components/kit.tsx:512"}),__gh("span",{style:{display:"block",height:9,width:"28%",borderRadius:6,background:FILL,marginTop:7},"data-gufi-src":"components/kit.tsx:513"})),__gh("span",{style:{width:54,height:12,borderRadius:6,background:FILL},"data-gufi-src":"components/kit.tsx:515"}))))}function Progreso({valor:valor2}){return __gh("span",{style:{display:"block",height:4,borderRadius:99,background:FILL,overflow:"hidden"},"data-gufi-src":"components/kit.tsx:525"},__gh("span",{style:{display:"block",height:"100%",width:`${Math.round(Math.max(0,Math.min(1,valor2))*100)}%`,background:INK,borderRadius:99,transition:"width 200ms ease"},"data-gufi-src":"components/kit.tsx:526"}))}function useCompacto(limite=760){let[compacto,setCompacto]=import_react.default.useState(()=>typeof window<"u"&&window.innerWidth{let f=()=>setCompacto(window.innerWidthwindow.removeEventListener("resize",f)},[limite]),compacto}function textoError(e){return e&&typeof e=="object"&&"message"in e?String(e.message):String(e)}function Cargando({ancho=72}){return __gh("span",{"aria-label":"Cargando",style:{display:"inline-block",width:ancho,height:22,borderRadius:6,background:FILL,verticalAlign:"middle"},"data-gufi-src":"components/kit.tsx:550"})}var import_react2=__toESM(require("react"));function rutaDe(archivo){let a=Array.isArray(archivo)?archivo[0]:archivo;return typeof a=="string"?a:a&&typeof a=="object"&&typeof a.url=="string"?a.url:null}var FIRMAS=new Map;function useMiniaturas(gufi,rutas){let[urls,setUrls]=import_react2.default.useState({}),clave=rutas.join(` `);return import_react2.default.useEffect(()=>{let vivo=!0;for(let r of rutas)FIRMAS.has(r)||gufi.dataProvider.getDownloadUrl(r).then(u=>{FIRMAS.set(r,u),vivo&&setUrls(x=>({...x,[r]:u}))});return()=>{vivo=!1}},[clave]),Object.fromEntries(rutas.map(r=>[r,FIRMAS.get(r)??urls[r]]).filter(([,u])=>u))}var import_react3=__toESM(require("react")),import_lucide_react2=require("lucide-react");var ETAPAS=["Diagn\xF3stico","Propuesta","Dise\xF1o preliminar","Materiales","Presupuesto","En obra","Postventa"],indiceEtapa=e=>ETAPAS.indexOf(e);function tramoDe(e){let i=indiceEtapa(e);return i<0?null:i<=4?"estudio":i===5?"obra":"postventa"}function MiniMetodo({etapa}){let i=indiceEtapa(etapa);return __gh("span",{"aria-label":i<0?"Sin etapa":`Etapa ${i+1} de ${ETAPAS.length}`,style:{display:"inline-flex",gap:3,flexShrink:0},"data-gufi-src":"sections/etapas.tsx:21"},ETAPAS.map((_,j)=>__gh("span",{key:j,style:{width:10,height:3,borderRadius:99,background:j<=i?INK:"rgba(118,118,128,0.22)"},"data-gufi-src":"sections/etapas.tsx:22"})))}function Metodo({etapa,compacto,onCambio}){let actual=indiceEtapa(etapa),siguiente=actual>=0&&actual{let v=via.current;if(!compacto||!v||actual<0)return;let parada=v.children[actual];parada&&(v.scrollLeft=parada.offsetLeft-v.clientWidth/2+parada.offsetWidth/2)},[compacto,actual]),__gh(Grupo,{titulo:"Etapa",sub:compacto&&actual>=0?`${actual+1} de ${ETAPAS.length}`:void 0,pie},__gh("div",{ref:via,role:"radiogroup","aria-label":"Etapa del proyecto",style:{display:"grid",gridTemplateColumns:compacto?`repeat(${ETAPAS.length}, 96px)`:`repeat(${ETAPAS.length}, minmax(0, 1fr))`,padding:"18px 8px 14px",overflowX:compacto?"auto":void 0,scrollbarWidth:"none"},"data-gufi-src":"sections/etapas.tsx:42"},ETAPAS.map((e,j)=>{let hecha=jonCambio(e),style:{position:"relative",display:"flex",flexDirection:"column",alignItems:"center",gap:9,padding:"0 4px",border:"none",background:"transparent",fontFamily:"inherit",cursor:"pointer",minWidth:0},"data-gufi-src":"sections/etapas.tsx:48"},j>0&&__gh("span",{"aria-hidden":!0,style:{position:"absolute",top:8,right:"50%",width:"100%",height:2,background:j<=actual?INK:HAIRLINE},"data-gufi-src":"sections/etapas.tsx:50"}),__gh("span",{"aria-hidden":!0,style:{position:"relative",width:18,height:18,borderRadius:99,boxSizing:"border-box",display:"grid",placeItems:"center",background:es||hecha?INK:"#fff",border:es||hecha?"none":`2px solid ${HAIRLINE}`,boxShadow:es?"0 0 0 5px rgba(29,29,31,0.10)":"none"},"data-gufi-src":"sections/etapas.tsx:51"},hecha&&__gh(import_lucide_react2.Check,{size:11,strokeWidth:3,color:"#fff"})),__gh("span",{style:{fontSize:12.5,fontWeight:es?650:500,color:es||hecha?INK:MUTED,textAlign:"center",lineHeight:1.25},"data-gufi-src":"sections/etapas.tsx:54"},e))})))}var MODOS=[{valor:"modelo",texto:"Modelo",corto:"Modelo"},{valor:"planos",texto:"Planos",corto:"Planos"},{valor:"mediciones",texto:"Mediciones",corto:"Medici\xF3n"},{valor:"presupuesto",texto:"Presupuesto",corto:"Precio"},{valor:"cambios",texto:"Cambios",corto:"Cambios"}],ALZADOS=[{lado:"norte",nombre:"Norte"},{lado:"sur",nombre:"Sur"},{lado:"este",nombre:"Este"},{lado:"oeste",nombre:"Oeste"}],esAlzado=v=>v!=="3d"&&v!=="planta",PLURAL={Muro:"Muros","Muro cortina":"Muros cortina",Puerta:"Puertas",Ventana:"Ventanas",Forjado:"Forjados",Cubierta:"Cubiertas",Pilar:"Pilares",Viga:"Vigas",Escalera:"Escaleras",Rampa:"Rampas",Barandilla:"Barandillas",Revestimiento:"Revestimientos",Solado:"Solados","Falso techo":"Falsos techos",Cimentaci\u00F3n:"Cimentaciones",Carpinter\u00EDa:"Carpinter\xEDa",Mobiliario:"Mobiliario",Instalaciones:"Instalaciones",Otro:"Otros"},ORDEN_CATEGORIAS=["Muro","Muro cortina","Puerta","Ventana","Forjado","Cubierta","Solado","Falso techo","Revestimiento","Pilar","Viga","Escalera","Rampa","Barandilla","Cimentaci\xF3n","Carpinter\xEDa","Mobiliario","Instalaciones","Otro"];function faseCorta(fase){return fase==="Estado actual"?"Estado actual":fase==="Estado reformado"?"Reformado":null}var import_react5=__toESM(require("react")),import_lucide_react4=require("lucide-react");function reportar(e){e&&typeof e=="object"&&e.code==="AVISO"||Promise.reject(e instanceof Error?e:new Error(String(e)))}function aviso(mensaje){return Object.assign(new Error(mensaje),{code:"AVISO"})}var import_react4=__toESM(require("react")),import_lucide_react3=require("lucide-react");function Campo({etiqueta,children,primera}){return __gh("div",{style:{display:"flex",alignItems:"center",gap:14,minHeight:48,padding:"6px 16px",borderTop:primera?"none":`1px solid ${HAIRLINE}`,flexWrap:"wrap"},"data-gufi-src":"sections/editar.tsx:11"},__gh("span",{style:{flex:"0 0 auto",minWidth:112,fontSize:13.5,color:MUTED},"data-gufi-src":"sections/editar.tsx:12"},etiqueta),__gh("div",{style:{flex:"1 1 140px",minWidth:0,display:"flex",justifyContent:"flex-end",alignItems:"center"},"data-gufi-src":"sections/editar.tsx:13"},children))}var aNumero=t=>{let limpio=t.replace(/\s|€/g,"").replace(/\./g,"").replace(",",".");return limpio===""?null:Number(limpio)},deNumero=n=>n==null||n===""?"":Number(n).toLocaleString("es-ES",{maximumFractionDigits:2});function Entrada({valor:valor2,onGuardar,placeholder,numero:numero2,sufijo,autoFocus,anchoMax=420,largo}){let area=import_react4.default.useRef(null),inicial=numero2?deNumero(valor2):valor2==null?"":String(valor2),[texto2,setTexto]=import_react4.default.useState(inicial),[foco,setFoco]=import_react4.default.useState(!1);import_react4.default.useEffect(()=>{foco||setTexto(inicial)},[inicial]);let n=numero2?aNumero(texto2):null,malo=!!(numero2&&texto2.trim()!==""&&(n==null||Number.isNaN(n))),guardar=()=>{if(malo){setTexto(inicial);return}texto2!==inicial&&onGuardar(numero2?n:texto2.trim()===""?null:texto2.trim())};import_react4.default.useLayoutEffect(()=>{let el=area.current;el&&(el.style.height="auto",el.style.height=`${el.scrollHeight}px`)},[texto2,largo]);let comunes={value:texto2,autoFocus,placeholder,onFocus:()=>setFoco(!0),onBlur:()=>{setFoco(!1),guardar()},onKeyDown:e=>{e.key==="Enter"&&(e.preventDefault(),e.currentTarget.blur()),e.key==="Escape"&&(setTexto(inicial),e.currentTarget.blur())}},estilo={flex:1,minWidth:0,border:"none",outline:"none",background:foco?FILL:"transparent",borderRadius:8,padding:"7px 10px",fontFamily:"inherit",fontSize:14,fontWeight:500,lineHeight:1.4,color:INK,textAlign:"right",fontVariantNumeric:numero2?"tabular-nums":void 0,transition:"background-color .15s"};return __gh("span",{style:{display:"inline-flex",alignItems:"center",gap:6,width:"100%",maxWidth:anchoMax,justifyContent:"flex-end"},"data-gufi-src":"sections/editar.tsx:65"},largo?__gh("textarea",{ref:area,rows:1,...comunes,onChange:e=>setTexto(e.target.value.replace(/\n/g," ")),style:{...estilo,resize:"none",overflow:"hidden",display:"block"},"data-gufi-src":"sections/editar.tsx:67"}):__gh("input",{...comunes,inputMode:numero2?"decimal":void 0,onChange:e=>setTexto(e.target.value),style:estilo,"data-gufi-src":"sections/editar.tsx:69"}),sufijo&&__gh("span",{style:{fontSize:13.5,color:MUTED,flexShrink:0},"data-gufi-src":"sections/editar.tsx:71"},sufijo))}function Eleccion({valor:valor2,opciones,onCambio,vacio="Elegir"}){let[q,setQ]=import_react4.default.useState(""),t=q.trim().toLowerCase().normalize("NFD").replace(/[̀-ͯ]/g,""),lista=t?opciones.filter(o=>o.texto.toLowerCase().normalize("NFD").replace(/[̀-ͯ]/g,"").includes(t)).sort((a,b)=>+!a.texto.toLowerCase().startsWith(t)-+!b.texto.toLowerCase().startsWith(t)):opciones,elegida=opciones.find(o=>o.valor===valor2);return __gh(Menu,{alinear:"derecha",ancho:280,boton:(abrir2,abierto)=>__gh("button",{type:"button",onClick:abrir2,"aria-expanded":abierto,style:{display:"inline-flex",alignItems:"center",gap:6,border:"none",background:abierto?FILL:"transparent",borderRadius:8,padding:"7px 10px",fontFamily:"inherit",fontSize:14,fontWeight:500,color:elegida?INK:MUTED,cursor:"pointer"},"data-gufi-src":"sections/editar.tsx:84"},elegida?elegida.texto:vacio,__gh(import_lucide_react3.ChevronDown,{size:14,strokeWidth:2,style:{color:MUTED},"aria-hidden":!0}))},cerrar=>__gh(__gf,null,opciones.length>6&&__gh("div",{style:{padding:"2px 2px 6px"},"data-gufi-src":"sections/editar.tsx:92"},__gh(Buscador,{valor:q,onCambio:setQ,placeholder:"Buscar",ancho:"100%"})),lista.map(o=>__gh(MenuItem,{key:o.valor,elegido:o.valor===valor2,sub:o.sub,onClick:()=>{cerrar(),setQ(""),onCambio(o.valor)}},o.texto))))}var COLORES=["#a8794f","#c49a6c","#7a5236","#e6e2db","#f4f1ea","#d9cfbf","#c8c5bf","#8f8b86","#5b5e63","#b4583a","#2e6b6f","#202124"];function Colores({valor:valor2,onCambio}){return __gh("span",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap",justifyContent:"flex-end"},"data-gufi-src":"sections/editar.tsx:106"},COLORES.map(c=>{let es=(valor2??"").toLowerCase()===c;return __gh("button",{key:c,type:"button",onClick:()=>onCambio(c),"aria-label":`Color ${c}`,"aria-pressed":es,style:{width:24,height:24,borderRadius:99,border:"none",padding:0,cursor:"pointer",background:c,boxShadow:es?`0 0 0 2px #fff, 0 0 0 3.5px ${INK}`:"inset 0 0 0 0.5px rgba(0,0,0,0.25)",transition:"box-shadow .15s"},"data-gufi-src":"sections/editar.tsx:110"})}),__gh("span",{style:{width:96},"data-gufi-src":"sections/editar.tsx:114"},__gh(Entrada,{valor:valor2,onGuardar:v=>v&&/^#[0-9a-f]{6}$/i.test(String(v))&&onCambio(String(v).toLowerCase()),placeholder:"#rrggbb"})))}function Borrar({que,onBorrar}){let[seguro,setSeguro]=import_react4.default.useState(!1);return seguro?__gh("span",{style:{display:"inline-flex",gap:14,alignItems:"center",flexWrap:"wrap"},"data-gufi-src":"sections/editar.tsx:123"},__gh("span",{style:{fontSize:13,color:MUTED},"data-gufi-src":"sections/editar.tsx:124"},`\xBFBorrar ${que}?`),__gh(Accion,{pequeno:!0,peligro:!0,icono:import_lucide_react3.Trash2,onClick:onBorrar},"S\xED, borrar"),__gh(Accion,{pequeno:!0,icono:import_lucide_react3.X,soloIcono:!1,onClick:()=>setSeguro(!1)},"No")):__gh(Accion,{pequeno:!0,peligro:!0,icono:import_lucide_react3.Trash2,soloIcono:!1,onClick:()=>setSeguro(!0)},"Borrar")}function PieEdicion({izquierda,onListo,listo="Listo",principal:principal2}){return __gh("div",{style:{display:"flex",alignItems:"center",gap:12,padding:"8px 16px 10px",borderTop:`1px solid ${HAIRLINE}`,flexWrap:"wrap"},"data-gufi-src":"sections/editar.tsx:137"},__gh("span",{style:{flex:1},"data-gufi-src":"sections/editar.tsx:138"},izquierda),principal2?__gh(Principal,{icono:import_lucide_react3.Check,onClick:onListo},listo):__gh(Accion,{pequeno:!0,icono:import_lucide_react3.Check,onClick:onListo},listo))}var UNIDAD={Unidades:"ud",Longitud:"m",Superficie:"m\xB2",Volumen:"m\xB3"},MAGNITUDES=["Unidades","Longitud","Superficie","Volumen"],SE_MIDE_EN=["Estancia",...ORDEN_CATEGORIAS.filter(c=>c!=="Otro")],TANDA=20;function Campos({p,cambiar,autoFocus}){let compacto=useCompacto(760);return __gh(__gf,null,__gh(Campo,{etiqueta:"Descripci\xF3n",primera:!0},__gh(Entrada,{valor:p.descripcion,onGuardar:v=>cambiar("descripcion",v),placeholder:"Qu\xE9 es, como sale en el presupuesto",autoFocus,largo:!0,anchoMax:560})),__gh(Campo,{etiqueta:"C\xF3digo"},__gh(Entrada,{valor:p.codigo,onGuardar:v=>cambiar("codigo",v),placeholder:"Opcional",anchoMax:160})),__gh(Campo,{etiqueta:"Se mide en"},__gh(Eleccion,{valor:p.aplica_a??null,onCambio:v=>cambiar("aplica_a",v),opciones:SE_MIDE_EN.map(c=>({valor:c,texto:c==="Estancia"?"Estancias":PLURAL[c]??c}))})),__gh(Campo,{etiqueta:"Magnitud"},compacto?__gh(Eleccion,{valor:p.magnitud??"Superficie",onCambio:v=>cambiar("magnitud",v),opciones:MAGNITUDES.map(m=>({valor:m,texto:`${m} (${UNIDAD[m]})`}))}):__gh(Segmentado,{id:`magnitud-${p.id??"nueva"}`,pequeno:!0,valor:p.magnitud??"Superficie",onCambio:v=>cambiar("magnitud",v),opciones:MAGNITUDES.map(m=>({valor:m,texto:`${m} (${UNIDAD[m]})`}))})),__gh(Campo,{etiqueta:"S\xF3lo si contiene"},__gh(Entrada,{valor:p.contiene,onGuardar:v=>cambiar("contiene",v),placeholder:"Cualquier tipo o material",anchoMax:260})),__gh(Campo,{etiqueta:"En una reforma"},__gh(Segmentado,{id:`obra-${p.id??"nueva"}`,pequeno:!0,valor:p.obra==="Derribo"?"Derribo":"Obra nueva",onCambio:v=>cambiar("obra",v),opciones:[{valor:"Obra nueva",texto:"Obra nueva"},{valor:"Derribo",texto:"Derribo"}]})),__gh(Campo,{etiqueta:"Precio sin IVA"},__gh(Entrada,{numero:!0,valor:p.precio,onGuardar:v=>cambiar("precio",v),sufijo:`\u20AC/${UNIDAD[p.magnitud]??"ud"}`,anchoMax:180})),__gh(Campo,{etiqueta:"Activa"},__gh(Interruptor,{titulo:"Activa",encendido:p.activa!==!1,onCambio:v=>cambiar("activa",v)})))}function Precios({gufi}){let{data,loading,reload}=gufi.useData("arquitectura__partidas",{sorters:[{field:"orden",order:"asc"}],pageSize:2e3,realtime:!0}),[q,setQ]=import_react5.default.useState(""),[ver,setVer]=import_react5.default.useState({}),[abierta,setAbierta]=import_react5.default.useState(null),[nueva,setNueva]=import_react5.default.useState(null),[cargandoEjemplo,setCargandoEjemplo]=import_react5.default.useState(!1),todas=data??[],t=q.trim().toLowerCase(),lista=t?todas.filter(p=>[p.codigo,p.descripcion,p.aplica_a,p.contiene].some(x=>String(x??"").toLowerCase().includes(t))):todas;async function guardar(id,campo,v){try{await gufi.dataProvider.update({resource:"arquitectura__partidas",id,variables:{[campo]:v}})}catch(e){gufi.toastError(textoError(e)),reportar(e)}}async function borrar(id){try{await gufi.dataProvider.deleteOne({resource:"arquitectura__partidas",id}),setAbierta(null),gufi.toastSuccess("Partida borrada")}catch(e){gufi.toastError(textoError(e)),reportar(e)}}async function anadir(){if(nueva)try{let orden=todas.reduce((m,p)=>Math.max(m,Number(p.orden??0)),0)+1;await gufi.dataProvider.create({resource:"arquitectura__partidas",variables:{activa:!0,obra:"Obra nueva",magnitud:"Superficie",...nueva,orden}}),setNueva(null),gufi.toastSuccess("Partida a\xF1adida")}catch(e){gufi.toastError(textoError(e)),reportar(e)}}async function ejemplo(){setCargandoEjemplo(!0);try{let r=await gufi.automation("arquitectura_precios_de_ejemplo",{});reload(),gufi.toastSuccess(`${r.creadas} partidas de ejemplo: c\xE1mbialas por tus precios`)}catch(e){gufi.toastError(textoError(e)),reportar(e)}finally{setCargandoEjemplo(!1)}}let grupoDe=p=>SE_MIDE_EN.includes(p.aplica_a)?p.aplica_a:"Otro",lista2=SE_MIDE_EN.concat(["Otro"]).map(c=>[c,lista.filter(p=>grupoDe(p)===c)]).filter(([,l])=>l.length);return __gh(__gf,null,__gh(Barra,{izquierda:todas.length>8?__gh(Buscador,{valor:q,onCambio:setQ,placeholder:"Buscar partida"}):null,derecha:__gh(Principal,{icono:import_lucide_react4.Plus,onClick:()=>{setAbierta(null),setNueva({magnitud:"Superficie",aplica_a:"Muro",obra:"Obra nueva"})},deshabilitado:!!nueva},"Nueva partida")}),nueva&&__gh("section",{className:"arq-entra","data-gufi-src":"sections/precios.tsx:110"},__gh(Tarjeta,null,__gh(Campos,{p:nueva,autoFocus:!0,cambiar:(campo,v)=>setNueva(n=>({...n,[campo]:v}))}),__gh(PieEdicion,{izquierda:__gh(Accion,{pequeno:!0,soloIcono:!1,onClick:()=>setNueva(null)},"Cancelar"),listo:"A\xF1adir la partida",principal:!0,onListo:()=>nueva.descripcion?void anadir():gufi.toastError("Falta la descripci\xF3n")}))),loading?__gh(Grupo,null,__gh(FilasCargando,{n:5})):todas.length===0&&!nueva?__gh(Grupo,null,__gh(Vacio,{titulo:"A\xFAn no hay precios",texto:"Cada partida dice en qu\xE9 se mide (muros, ventanas, estancias\u2026) y a cu\xE1nto. Con ellas, el presupuesto de un modelo sale solo.",accion:__gh(Accion,{icono:import_lucide_react4.Plus,onClick:ejemplo,deshabilitado:cargandoEjemplo},"Cargar precios de ejemplo")})):lista.length===0?__gh(Grupo,null,__gh(Vacio,{titulo:`Ninguna partida con \xAB${q}\xBB`})):lista2.map(([c,l])=>{let n=ver[c]??TANDA;return __gh(Grupo,{key:c,titulo:c==="Estancia"?"Estancias":PLURAL[c]??c,cuenta:l.length},l.slice(0,n).map((p,i)=>{let es=abierta===p.id,apagada=p.activa===!1;return __gh(import_react5.default.Fragment,{key:p.id},__gh(Fila,{primera:i===0,elegida:es,onClick:()=>setAbierta(es?null:p.id),titulo:__gh(ConPunto,{tono:apagada?"mudo":null},p.descripcion),sub:[p.codigo,p.magnitud&&`por ${String(p.magnitud).toLowerCase()}`,p.contiene&&`s\xF3lo \xAB${p.contiene}\xBB`,p.obra==="Derribo"&&"derribo",apagada&&"desactivada"].filter(Boolean).join(" \xB7 "),valor:p.precio==null?"sin precio":`${euros(Number(p.precio))}/${UNIDAD[p.magnitud]??"ud"}`}),es&&__gh("div",{className:"arq-entra",style:{background:"#fafafa",borderTop:`1px solid ${HAIRLINE}`},"data-gufi-src":"sections/precios.tsx:141"},__gh(Campos,{p,cambiar:(campo,v)=>{guardar(p.id,campo,v)}}),__gh(PieEdicion,{izquierda:__gh(Borrar,{que:"esta partida",onBorrar:()=>{borrar(p.id)}}),onListo:()=>setAbierta(null)})))}),l.length>n&&__gh(FilaMas,{quedan:l.length-n,onClick:()=>setVer(v=>({...v,[c]:n+TANDA}))}))}),__gh("p",{style:{fontSize:12,color:MUTED,margin:"-8px 4px 0"},"data-gufi-src":"sections/precios.tsx:154"},"Precios sin IVA. Toca una partida para cambiarla."))}var import_react6=__toESM(require("react")),import_lucide_react5=require("lucide-react");var import_react_dom=require("react-dom");function conTransicion(cambiar){let d=document;typeof d.startViewTransition=="function"?d.startViewTransition(()=>(0,import_react_dom.flushSync)(cambiar)):cambiar()}var vtModelo=id=>({viewTransitionName:`arq-modelo-${id}`}),vtProyecto=id=>({viewTransitionName:`arq-proyecto-${id}`}),CSS_TRANSICION=` ::view-transition-group(*){animation-duration:.48s;animation-timing-function:cubic-bezier(.32,.72,0,1)} ::view-transition-old(root),::view-transition-new(root){animation-duration:.28s} @keyframes arq-entra{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}} .arq-entra{animation:arq-entra .34s cubic-bezier(.22,1,.36,1) both} @media (prefers-reduced-motion: reduce){::view-transition-group(*),::view-transition-old(root),::view-transition-new(root){animation-duration:0s}.arq-entra{animation:none}} `,escalonado=i=>i<10?{animationDelay:`${i*30}ms`}:void 0,tocaSinTeclas=e=>e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey;function navega(href,ir){return{href,onClick:e=>{tocaSinTeclas(e)&&(e.preventDefault(),conTransicion(ir))}}}var TANDA2=24;function Muestra({color}){return __gh("span",{"aria-hidden":!0,style:{width:14,height:14,borderRadius:99,background:color||"#ffffff",boxShadow:"inset 0 0 0 0.5px rgba(0,0,0,0.25)",flexShrink:0,display:"inline-block"},"data-gufi-src":"sections/materiales.tsx:17"})}function Baldosa({m,elegida,onClick,orden}){return __gh("button",{type:"button",onClick,"aria-expanded":elegida,className:"arq-entra",style:{...escalonado(orden),display:"flex",flexDirection:"column",gap:10,minWidth:0,padding:0,border:"none",background:"transparent",fontFamily:"inherit",textAlign:"left",cursor:"pointer",opacity:m.activo===!1?.5:1},"data-gufi-src":"sections/materiales.tsx:23"},__gh("span",{style:{display:"block",width:"100%",aspectRatio:"4 / 3",borderRadius:16,background:m.color||FILL,boxShadow:elegida?`0 0 0 2px #fff, 0 0 0 3.5px ${INK}`:"inset 0 0 0 0.5px rgba(0,0,0,0.12)",transition:"box-shadow .2s"},"data-gufi-src":"sections/materiales.tsx:25"}),__gh("span",{style:{display:"flex",flexDirection:"column",gap:2,padding:"0 2px"},"data-gufi-src":"sections/materiales.tsx:26"},__gh("span",{style:{fontSize:14,fontWeight:600,color:INK,overflowWrap:"anywhere",lineHeight:1.3},"data-gufi-src":"sections/materiales.tsx:27"},m.nombre),__gh("span",{style:{fontSize:12.5,color:MUTED,overflowWrap:"anywhere"},"data-gufi-src":"sections/materiales.tsx:28"},[m.marca,m.precio!=null?`${euros(Number(m.precio))}/m\xB2`:"sin precio",m.activo===!1&&"desactivado"].filter(Boolean).join(" \xB7 "))))}function Ficha({m,cambiar,autoFocus,pie}){let compacto=useCompacto(760);return __gh(Tarjeta,null,__gh("div",{style:{display:"grid",gridTemplateColumns:compacto?"1fr":"minmax(180px, 260px) minmax(0, 1fr)"},"data-gufi-src":"sections/materiales.tsx:39"},__gh("div",{style:{padding:16,borderRight:compacto?"none":`1px solid ${HAIRLINE}`,borderBottom:compacto?`1px solid ${HAIRLINE}`:"none"},"data-gufi-src":"sections/materiales.tsx:40"},__gh("span",{style:{display:"block",width:"100%",aspectRatio:compacto?"16 / 5":"1",borderRadius:14,background:m.color||FILL,boxShadow:"inset 0 0 0 0.5px rgba(0,0,0,0.12)",transition:"background-color .25s"},"data-gufi-src":"sections/materiales.tsx:41"})),__gh("div",{"data-gufi-src":"sections/materiales.tsx:43"},__gh(Campo,{etiqueta:"Nombre",primera:!0},__gh(Entrada,{valor:m.nombre,onGuardar:v=>cambiar("nombre",v),placeholder:"Porcel\xE1nico efecto madera\u2026",autoFocus,largo:!0})),__gh(Campo,{etiqueta:"Marca"},__gh(Entrada,{valor:m.marca,onGuardar:v=>cambiar("marca",v),placeholder:"Porcelanosa, Cosentino\u2026"})),__gh(Campo,{etiqueta:"Para"},__gh(Segmentado,{id:`uso-${m.id??"nuevo"}`,pequeno:!0,valor:m.uso==="Paredes"?"Paredes":"Suelo",onCambio:v=>cambiar("uso",v),opciones:[{valor:"Suelo",texto:"Suelos"},{valor:"Paredes",texto:"Paredes"}]})),__gh(Campo,{etiqueta:"Color"},__gh(Colores,{valor:m.color??null,onCambio:v=>cambiar("color",v)})),__gh(Campo,{etiqueta:"Precio sin IVA"},__gh(Entrada,{numero:!0,valor:m.precio,onGuardar:v=>cambiar("precio",v),sufijo:"\u20AC/m\xB2",anchoMax:180})),__gh(Campo,{etiqueta:"Referencia"},__gh(Entrada,{valor:m.referencia,onGuardar:v=>cambiar("referencia",v),placeholder:"Del cat\xE1logo",anchoMax:240})),__gh(Campo,{etiqueta:"Activo"},__gh(Interruptor,{titulo:"Activo",encendido:m.activo!==!1,onCambio:v=>cambiar("activo",v)})))),pie)}function Materiales({gufi}){let compacto=useCompacto(760),{data,loading,reload}=gufi.useData("arquitectura__materiales",{sorters:[{field:"marca",order:"asc"}],pageSize:2e3,realtime:!0}),[q,setQ]=import_react6.default.useState(""),[ver,setVer]=import_react6.default.useState({}),[abierto,setAbierto]=import_react6.default.useState(null),[nuevo,setNuevo]=import_react6.default.useState(null),[cargando,setCargando]=import_react6.default.useState(!1),todos=data??[],t=q.trim().toLowerCase(),lista=t?todos.filter(m=>[m.nombre,m.marca,m.referencia].some(x=>String(x??"").toLowerCase().includes(t))):todos;async function guardar(id,campo,v){try{await gufi.dataProvider.update({resource:"arquitectura__materiales",id,variables:{[campo]:v}})}catch(e){gufi.toastError(textoError(e)),reportar(e)}}async function borrar(id){try{await gufi.dataProvider.deleteOne({resource:"arquitectura__materiales",id}),setAbierto(null),gufi.toastSuccess("Material borrado")}catch(e){gufi.toastError(textoError(e)),reportar(e)}}async function anadir(){if(nuevo){if(!nuevo.nombre){gufi.toastError("Falta el nombre");return}try{await gufi.dataProvider.create({resource:"arquitectura__materiales",variables:{activo:!0,uso:"Suelo",...nuevo}}),setNuevo(null),gufi.toastSuccess("Material a\xF1adido")}catch(e){gufi.toastError(textoError(e)),reportar(e)}}}async function ejemplo(){setCargando(!0);try{let r=await gufi.automation("arquitectura_materiales_de_ejemplo",{});reload(),gufi.toastSuccess(`${r.creados} materiales de ejemplo: c\xE1mbialos por los vuestros`)}catch(e){gufi.toastError(textoError(e)),reportar(e)}finally{setCargando(!1)}}let columnas=`repeat(auto-fill, minmax(${compacto?150:200}px, 1fr))`,muestrario=(uso,titulo,sub)=>{let de=lista.filter(m=>(m.uso==="Paredes"?"Paredes":"Suelo")===uso),n=ver[uso]??TANDA2;return de.length===0?null:__gh("section",{key:uso,style:{display:"flex",flexDirection:"column",gap:14},"data-gufi-src":"sections/materiales.tsx:125"},__gh("div",{style:{padding:"0 4px"},"data-gufi-src":"sections/materiales.tsx:126"},__gh("h3",{style:{fontSize:20,fontWeight:700,letterSpacing:"-0.4px",color:INK,margin:0},"data-gufi-src":"sections/materiales.tsx:127"},titulo,__gh("span",{style:{color:MUTED,fontWeight:500,fontSize:15,marginLeft:8},"data-gufi-src":"sections/materiales.tsx:127"},de.length)),__gh("p",{style:{fontSize:13,color:MUTED,margin:"2px 0 0"},"data-gufi-src":"sections/materiales.tsx:128"},sub)),__gh("div",{style:{display:"grid",gridTemplateColumns:columnas,gridAutoFlow:"row dense",gap:compacto?"18px 14px":"26px 20px"},"data-gufi-src":"sections/materiales.tsx:130"},de.slice(0,n).flatMap((m,i)=>{let es=abierto===m.id,baldosa2=__gh(Baldosa,{key:m.id,m,orden:i,elegida:es,onClick:()=>{setNuevo(null),setAbierto(es?null:m.id)}});return es?[baldosa2,__gh("div",{key:`ficha-${m.id}`,className:"arq-entra",style:{gridColumn:"1 / -1"},"data-gufi-src":"sections/materiales.tsx:138"},__gh(Ficha,{m,cambiar:(campo,v)=>{guardar(m.id,campo,v)},pie:__gh(PieEdicion,{izquierda:__gh(Borrar,{que:`\xAB${m.nombre}\xBB`,onBorrar:()=>{borrar(m.id)}}),onListo:()=>setAbierto(null)})}))]:[baldosa2]})),de.length>n&&__gh(Grupo,null,__gh(FilaMas,{quedan:de.length-n,onClick:()=>setVer(v=>({...v,[uso]:n+TANDA2}))})))};return __gh(__gf,null,__gh(Barra,{izquierda:todos.length>8?__gh(Buscador,{valor:q,onCambio:setQ,placeholder:"Buscar material o marca"}):null,derecha:__gh(Principal,{icono:import_lucide_react5.Plus,onClick:()=>{setAbierto(null),setNuevo({uso:"Suelo",color:"#c49a6c"})},deshabilitado:!!nuevo},"Nuevo material")}),nuevo&&__gh("div",{className:"arq-entra","data-gufi-src":"sections/materiales.tsx:157"},__gh(Ficha,{m:nuevo,autoFocus:!0,cambiar:(campo,v)=>setNuevo(n=>({...n,[campo]:v})),pie:__gh(PieEdicion,{izquierda:__gh(Accion,{pequeno:!0,soloIcono:!1,onClick:()=>setNuevo(null)},"Cancelar"),listo:"A\xF1adir el material",principal:!0,onListo:()=>{anadir()}})})),loading?__gh("div",{style:{display:"grid",gridTemplateColumns:columnas,gap:20},"data-gufi-src":"sections/materiales.tsx:163"},[0,1,2,3].map(i=>__gh("span",{key:i,style:{aspectRatio:"4 / 3",borderRadius:16,background:FILL},"data-gufi-src":"sections/materiales.tsx:163"}))):todos.length===0&&!nuevo?__gh(Grupo,null,__gh(Vacio,{titulo:"A\xFAn no hay materiales",texto:"Los suelos y los revestimientos con los que trabaj\xE1is, con su color y su precio por m\xB2. En el modelo se elige el de cada estancia y el presupuesto los suma solo.",accion:__gh(Accion,{icono:import_lucide_react5.Plus,onClick:ejemplo,deshabilitado:cargando},"Cargar materiales de ejemplo")})):lista.length===0?__gh(Grupo,null,__gh(Vacio,{titulo:`Ning\xFAn material con \xAB${q}\xBB`})):__gh(__gf,null,muestrario("Suelo","Suelos","Se cuentan por la superficie \xFAtil de cada estancia"),muestrario("Paredes","Paredes","Por per\xEDmetro \xD7 altura de cada estancia, sin descontar huecos")))}var MARGEN="clamp(16px, 4vw, 64px)";function Maqueta({imagen,texto:texto2,radio}){return imagen?__gh("img",{src:imagen,alt:"",style:{display:"block",width:"100%",aspectRatio:"16 / 10",objectFit:"cover",borderRadius:radio,background:CANVAS},"data-gufi-src":"sections/proyectos.tsx:23"}):__gh("div",{style:{display:"grid",placeItems:"center",width:"100%",aspectRatio:"16 / 10",borderRadius:radio,background:FILL,padding:16,boxSizing:"border-box",textAlign:"center",fontSize:13,color:MUTED},"data-gufi-src":"sections/proyectos.tsx:25"},texto2)}function Etapa({etapa}){let i=indiceEtapa(etapa);return __gh("span",{style:{display:"inline-flex",alignItems:"center",gap:10},"data-gufi-src":"sections/proyectos.tsx:32"},__gh(MiniMetodo,{etapa}),__gh("span",{style:{fontSize:13,fontWeight:500,color:INK},"data-gufi-src":"sections/proyectos.tsx:34"},i<0?"Sin etapa":String(etapa)))}function Proyectos({gufi,url,seccion,ir}){let compacto=useCompacto(760),{data:proyectos,loading}=gufi.useData("arquitectura__proyectos",{pageSize:1e3,sorters:[{field:"__updated_at__",order:"desc"}],realtime:!0}),{data:modelos}=gufi.useData("arquitectura__modelos",{pageSize:2e3,sorters:[{field:"version",order:"desc"}],realtime:!0}),[q,setQ]=import_react7.default.useState(""),[tramo,setTramo]=import_react7.default.useState("todos"),empresa=gufi.context.activeCompany,porProyecto=import_react7.default.useMemo(()=>{let m=new Map;for(let x of modelos??[]){let k=Number(x.proyecto),e=m.get(k)??{ultimo:null,reformado:null,n:0};e.n+=1,!e.ultimo&&x.estado==="Medido"&&(e.ultimo=x),!e.reformado&&x.estado==="Medido"&&x.fase==="Estado reformado"&&(e.reformado=x),m.set(k,e)}return m},[modelos]),todos=proyectos??[],destacado=todos.find(p=>porProyecto.get(Number(p.id))?.ultimo)??todos[0]??null,t=q.trim().toLowerCase(),lista=todos.filter(p=>(tramo==="todos"||tramoDe(p.estado)===tramo)&&(!t||[p.nombre,p.cliente,p.referencia].some(x=>String(x??"").toLowerCase().includes(t)))),principalDe=p=>{let e=porProyecto.get(Number(p.id));return e?.reformado??e?.ultimo??null},miniaturaDe=p=>rutaDe(principalDe(p)?.miniatura),rutas=[...destacado?[destacado]:[],...lista].map(miniaturaDe).filter(r=>!!r),miniaturas=useMiniaturas(gufi,rutas),imagenDe=p=>{let r=miniaturaDe(p);return r?miniaturas[r]:void 0},nuevo=()=>gufi.openNewRow("arquitectura__proyectos"),cuenta=x=>todos.filter(p=>tramoDe(p.estado)===x).length,cabecera=__gh("header",{style:{position:"sticky",top:0,zIndex:10,display:"grid",gridTemplateColumns:compacto?"auto 1fr auto":"minmax(0, 1fr) auto minmax(0, 1fr)",alignItems:"center",gap:12,minHeight:60,padding:`8px ${MARGEN}`,background:"#fff",borderBottom:`1px solid ${HAIRLINE}`,boxSizing:"border-box"},"data-gufi-src":"sections/proyectos.tsx:82"},__gh("a",{href:url("/"),"aria-label":empresa.name,style:{display:"flex",alignItems:"center",minWidth:0,textDecoration:"none"},"data-gufi-src":"sections/proyectos.tsx:83"},empresa.logo?__gh("img",{src:empresa.logo,alt:empresa.name,style:{height:compacto?20:24,maxWidth:150,objectFit:"contain",display:"block"},"data-gufi-src":"sections/proyectos.tsx:85"}):__gh("span",{style:{fontSize:15,fontWeight:650,color:INK,overflowWrap:"anywhere"},"data-gufi-src":"sections/proyectos.tsx:86"},empresa.name)),__gh("div",{style:{display:"flex",justifyContent:compacto?"flex-end":"center"},"data-gufi-src":"sections/proyectos.tsx:88"},__gh(Segmentado,{id:"inicio",pequeno:compacto,valor:seccion,onCambio:v=>conTransicion(()=>ir(v)),opciones:[{valor:"proyectos",texto:"Proyectos"},{valor:"precios",texto:"Precios"},{valor:"materiales",texto:"Materiales"}]})),__gh("div",{style:{display:"flex",justifyContent:"flex-end"},"data-gufi-src":"sections/proyectos.tsx:91"},seccion==="proyectos"&&(compacto?__gh(BotonIcono,{icono:import_lucide_react6.Plus,titulo:"Nuevo proyecto",onClick:nuevo}):__gh(Accion,{icono:import_lucide_react6.Plus,onClick:nuevo},"Nuevo proyecto"))));if(seccion!=="proyectos"){let precios=seccion==="precios";return __gh("div",{style:{minHeight:"100dvh",background:CANVAS},"data-gufi-src":"sections/proyectos.tsx:100"},cabecera,__gh("main",{style:{padding:`clamp(20px, 3vw, 40px) ${MARGEN} 64px`,display:"flex",flexDirection:"column",gap:22},"data-gufi-src":"sections/proyectos.tsx:102"},__gh("div",{"data-gufi-src":"sections/proyectos.tsx:103"},__gh("h1",{style:{fontSize:"clamp(26px, 2.6vw, 34px)",fontWeight:700,letterSpacing:"-0.03em",color:INK,margin:0},"data-gufi-src":"sections/proyectos.tsx:104"},precios?"Precios":"Materiales"),__gh("p",{style:{fontSize:14,color:MUTED,margin:"4px 0 0"},"data-gufi-src":"sections/proyectos.tsx:105"},precios?"Tu tarifa: cada partida dice en qu\xE9 se mide y a cu\xE1nto. De aqu\xED sale el presupuesto de cada modelo.":"Los suelos y revestimientos con los que trabaj\xE1is. Se eligen por estancia en el modelo y el presupuesto los suma.")),precios?__gh(Precios,{gufi}):__gh(Materiales,{gufi})))}let portada=null;if(loading)portada=__gh("div",{style:{margin:`32px ${MARGEN}`,aspectRatio:compacto?"16 / 13":"16 / 6",borderRadius:24,background:FILL},"data-gufi-src":"sections/proyectos.tsx:116"});else if(!destacado)portada=__gh("section",{style:{minHeight:"70dvh",display:"grid",placeItems:"center",padding:`32px ${MARGEN}`,textAlign:"center"},"data-gufi-src":"sections/proyectos.tsx:119"},__gh("div",{style:{maxWidth:560},"data-gufi-src":"sections/proyectos.tsx:120"},__gh("h1",{style:{fontSize:"clamp(30px, 4vw, 52px)",fontWeight:700,letterSpacing:"-0.035em",lineHeight:1.05,color:INK,margin:0},"data-gufi-src":"sections/proyectos.tsx:121"},"Tu primer proyecto"),__gh("p",{style:{fontSize:16,color:MUTED,lineHeight:1.5,margin:"12px 0 24px"},"data-gufi-src":"sections/proyectos.tsx:122"},"Cr\xE9alo y s\xFAbele su modelo IFC (en Revit: Archivo \u203A Exportar \u203A IFC). Se ve en 3D, se mide solo y de ah\xED sale el presupuesto."),__gh(Principal,{icono:import_lucide_react6.Plus,onClick:nuevo},"Nuevo proyecto")));else{let e=porProyecto.get(Number(destacado.id)),u=principalDe(destacado),i=indiceEtapa(destacado.estado),maqueta=__gh("a",{...u?navega(url(`/modelo/${u.id}`),()=>ir("visor",{modelo:u.id})):navega(url(`/proyecto/${destacado.id}`),()=>ir("proyecto",{proyecto:destacado.id})),"aria-label":"Abrir el modelo en 3D",style:{display:"block",minWidth:0,...u?vtModelo(u.id):{}},"data-gufi-src":"sections/proyectos.tsx:132"},__gh(Maqueta,{imagen:imagenDe(destacado),texto:u?"La maqueta sale al abrir el modelo":"S\xFAbele su modelo IFC",radio:compacto?18:28}));portada=__gh("section",{style:{display:"grid",gridTemplateColumns:compacto?"1fr":"minmax(300px, 0.75fr) minmax(0, 1.5fr)",alignItems:"center",gap:compacto?18:"clamp(28px, 4vw, 72px)",padding:`${compacto?"14px":"clamp(24px, 3vw, 48px)"} ${MARGEN} ${compacto?"8px":"24px"}`,minHeight:compacto?void 0:"min(calc(100dvh - 160px), 820px)",boxSizing:"border-box"},"data-gufi-src":"sections/proyectos.tsx:137"},compacto&&maqueta,__gh("div",{style:{display:"flex",flexDirection:"column",alignItems:"flex-start",gap:14,minWidth:0},"data-gufi-src":"sections/proyectos.tsx:139"},__gh("span",{style:{fontSize:13,color:MUTED},"data-gufi-src":"sections/proyectos.tsx:140"},e&&e.n?`\xDAltimo proyecto \xB7 ${fecha(u?.medido_at??destacado.__updated_at__)}`:"\xDAltimo proyecto"),__gh("h1",{style:{fontSize:compacto?30:"clamp(34px, 3.4vw, 60px)",fontWeight:700,letterSpacing:"-0.035em",lineHeight:1.04,color:INK,margin:0,overflowWrap:"anywhere"},"data-gufi-src":"sections/proyectos.tsx:141"},__gh("span",{style:{...vtProyecto(destacado.id),display:"inline-block"},"data-gufi-src":"sections/proyectos.tsx:141"},destacado.nombre)),__gh("p",{style:{fontSize:compacto?15:17,color:MUTED,margin:0,overflowWrap:"anywhere"},"data-gufi-src":"sections/proyectos.tsx:142"},[destacado.cliente,destacado.referencia].filter(Boolean).join(" \xB7 ")||"Sin cliente"),__gh("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},"data-gufi-src":"sections/proyectos.tsx:143"},__gh(Etapa,{etapa:destacado.estado}),i>=0&&__gh("span",{style:{fontSize:13,color:MUTED},"data-gufi-src":"sections/proyectos.tsx:145"},`etapa ${i+1} de ${ETAPAS.length}`)),u&&__gh("div",{style:{display:"flex",gap:"clamp(18px, 2vw, 32px)",flexWrap:"wrap",padding:"6px 0"},"data-gufi-src":"sections/proyectos.tsx:148"},[[medida(u.superficie_util,"m\xB2",1),"\xFAtiles"],[plural(e?.n??0,"versi\xF3n","versiones"),faseCorta(u.fase)??"la \xFAltima"],[String(u.estancias??"sin dato"),"estancias"]].map(([v,s])=>__gh("span",{key:s,style:{display:"flex",flexDirection:"column"},"data-gufi-src":"sections/proyectos.tsx:154"},__gh("span",{style:{fontSize:compacto?19:22,fontWeight:600,letterSpacing:"-0.02em",color:INK,fontVariantNumeric:"tabular-nums"},"data-gufi-src":"sections/proyectos.tsx:155"},v),__gh("span",{style:{fontSize:12.5,color:MUTED},"data-gufi-src":"sections/proyectos.tsx:156"},s)))),__gh("div",{style:{display:"flex",alignItems:"center",gap:18,flexWrap:"wrap",marginTop:4},"data-gufi-src":"sections/proyectos.tsx:161"},__gh("a",{...navega(url(`/proyecto/${destacado.id}`),()=>ir("proyecto",{proyecto:destacado.id})),style:{textDecoration:"none"},"data-gufi-src":"sections/proyectos.tsx:162"},__gh(Principal,null,"Abrir el proyecto")),u&&__gh("a",{...navega(url(`/modelo/${u.id}`),()=>ir("visor",{modelo:u.id})),style:{textDecoration:"none",display:"inline-flex"},"data-gufi-src":"sections/proyectos.tsx:163"},__gh(Accion,{icono:import_lucide_react6.Box},"Ver en 3D")),u&&__gh(Accion,{icono:import_lucide_react6.Receipt,href:url(`/modelo/${u.id}/presupuesto`)},"Presupuesto"))),!compacto&&maqueta)}let rejilla=todos.length>1&&__gh("section",{style:{padding:`${compacto?24:40}px ${MARGEN} 72px`,display:"flex",flexDirection:"column",gap:20},"data-gufi-src":"sections/proyectos.tsx:174"},__gh("h2",{style:{fontSize:compacto?22:26,fontWeight:700,letterSpacing:"-0.03em",color:INK,margin:0},"data-gufi-src":"sections/proyectos.tsx:175"},"Todos los proyectos"),__gh(Barra,{izquierda:__gh(Segmentado,{id:"tramo",valor:tramo,onCambio:setTramo,opciones:[{valor:"todos",texto:"Todos",cuenta:todos.length},{valor:"estudio",texto:"En estudio",cuenta:cuenta("estudio")},{valor:"obra",texto:"En obra",cuenta:cuenta("obra")},{valor:"postventa",texto:"Postventa",cuenta:cuenta("postventa")}]}),derecha:todos.length>6?__gh(Buscador,{valor:q,onCambio:setQ,placeholder:"Buscar proyecto o cliente",ancho:compacto?"100%":280}):void 0}),lista.length===0?__gh(Vacio,{titulo:q?`Ning\xFAn proyecto con \xAB${q}\xBB`:"Ning\xFAn proyecto en este tramo"}):__gh("div",{style:{display:"grid",gridTemplateColumns:`repeat(auto-fill, minmax(${compacto?240:"clamp(260px, 22vw, 380px)"}, 1fr))`,gap:compacto?"24px 16px":"36px clamp(20px, 2vw, 32px)"},"data-gufi-src":"sections/proyectos.tsx:190"},lista.map((p,n)=>{let e=porProyecto.get(Number(p.id)),u=principalDe(p),vuela=p.id!==destacado?.id;return __gh("a",{key:p.id,...navega(url(`/proyecto/${p.id}`),()=>ir("proyecto",{proyecto:p.id})),className:"arq-entra",style:{...escalonado(n),display:"flex",flexDirection:"column",gap:12,minWidth:0,textDecoration:"none",color:"inherit"},"data-gufi-src":"sections/proyectos.tsx:197"},__gh("span",{style:{display:"block",...vuela&&u?vtModelo(u.id):{}},"data-gufi-src":"sections/proyectos.tsx:198"},__gh(Maqueta,{imagen:imagenDe(p),texto:u?"La maqueta sale al abrir el modelo":"Sin modelo todav\xEDa",radio:18})),__gh("span",{style:{display:"flex",flexDirection:"column",gap:4,padding:"0 2px"},"data-gufi-src":"sections/proyectos.tsx:199"},__gh("span",{style:{fontSize:16,fontWeight:600,letterSpacing:"-0.2px",color:INK,overflowWrap:"anywhere",...vuela?vtProyecto(p.id):{}},"data-gufi-src":"sections/proyectos.tsx:200"},p.nombre),__gh("span",{style:{fontSize:13,color:MUTED,overflowWrap:"anywhere"},"data-gufi-src":"sections/proyectos.tsx:201"},[p.cliente,u?plural(e?.n??0,"versi\xF3n","versiones"):"sin modelo"].filter(Boolean).join(" \xB7 ")),__gh("span",{style:{marginTop:4},"data-gufi-src":"sections/proyectos.tsx:202"},__gh(Etapa,{etapa:p.estado}))))})));return __gh("div",{style:{minHeight:"100dvh",background:CANVAS},"data-gufi-src":"sections/proyectos.tsx:213"},cabecera,portada,rejilla)}var import_react10=__toESM(require("react")),import_lucide_react8=require("lucide-react");var PREFIJO={EXA:1e18,PETA:1e15,TERA:1e12,GIGA:1e9,MEGA:1e6,KILO:1e3,HECTO:100,DECA:10,DECI:.1,CENTI:.01,MILLI:.001,MICRO:1e-6,NANO:1e-9},CATEGORIA={IFCWALL:"Muro",IFCWALLSTANDARDCASE:"Muro",IFCWALLELEMENTEDCASE:"Muro",IFCCURTAINWALL:"Muro cortina",IFCDOOR:"Puerta",IFCDOORSTANDARDCASE:"Puerta",IFCWINDOW:"Ventana",IFCWINDOWSTANDARDCASE:"Ventana",IFCSLAB:"Forjado",IFCSLABSTANDARDCASE:"Forjado",IFCSLABELEMENTEDCASE:"Forjado",IFCROOF:"Cubierta",IFCCOLUMN:"Pilar",IFCCOLUMNSTANDARDCASE:"Pilar",IFCBEAM:"Viga",IFCBEAMSTANDARDCASE:"Viga",IFCSTAIR:"Escalera",IFCSTAIRFLIGHT:"Escalera",IFCRAMP:"Rampa",IFCRAMPFLIGHT:"Rampa",IFCRAILING:"Barandilla",IFCCOVERING:"Revestimiento",IFCFOOTING:"Cimentaci\xF3n",IFCPILE:"Cimentaci\xF3n",IFCPLATE:"Carpinter\xEDa",IFCPLATESTANDARDCASE:"Carpinter\xEDa",IFCMEMBER:"Carpinter\xEDa",IFCMEMBERSTANDARDCASE:"Carpinter\xEDa",IFCFURNISHINGELEMENT:"Mobiliario",IFCFURNITURE:"Mobiliario",IFCSYSTEMFURNITUREELEMENT:"Mobiliario",IFCBUILDINGELEMENTPROXY:"Otro"},SIN_MEDIR=new Set(["IFCSITE","IFCBUILDING","IFCBUILDINGSTOREY","IFCSPACE","IFCOPENINGELEMENT","IFCOPENINGSTANDARDCASE","IFCANNOTATION","IFCGRID","IFCVIRTUALELEMENT"]),ORIENTADAS=new Set(["Muro","Muro cortina","Viga","Barandilla","Escalera","Rampa","Carpinter\xEDa","Puerta","Ventana","Pilar"]),DE_SUPERFICIE=new Set(["Forjado","Cubierta","Solado","Falso techo","Revestimiento"]),LINEALES=new Set(["Pilar","Viga","Barandilla","Escalera","Rampa","Carpinter\xEDa","Muro cortina"]);function categoriaDe(clase,predefinido,clasePadre){return clasePadre==="IFCCURTAINWALL"?"Muro cortina":clase==="IFCSLAB"&&predefinido==="ROOF"?"Cubierta":clase==="IFCCOVERING"?predefinido==="FLOORING"?"Solado":predefinido==="CEILING"?"Falso techo":"Revestimiento":CATEGORIA[clase]?CATEGORIA[clase]:/^IFC(FLOW|DISTRIBUTION|ENERGY|PIPE|DUCT|CABLE|ELECTRIC|SANITARY|LIGHT|AIR|BOILER|PUMP|VALVE|FAN|TANK|OUTLET|SWITCHING|PROTECTIVE|UNITARY|SPACEHEATER|FIRESUPPRESSION|ALARM|SENSOR|ACTUATOR|CONTROLLER)/.test(clase)?"Instalaciones":"Otro"}var valor=a=>a==null?null:typeof a=="object"&&"value"in a?a.value:a,limpiarTipo=t=>t==null?null:t.replace(/:\d+$/,""),texto=a=>{let v=valor(a);return v==null||v===""?null:String(v)},redondea=(n,d)=>n==null||!Number.isFinite(n)?null:Math.round(n*10**d)/10**d,refs=x=>(Array.isArray(x)?x:x==null?[]:[x]).map(r=>typeof r=="object"&&r?r.value:r).filter(n=>typeof n=="number");function idsDe(api2,modelo,tipo){let v=api2.GetLineIDsWithType(modelo,tipo,!0),fuera=[];for(let i=0;i{if(!x)return 1;if(x.ConversionFactor)return Number(valor(x.ConversionFactor.ValueComponent))*factorDe(x.ConversionFactor.UnitComponent);let pre=texto(x.Prefix),base=pre?PREFIJO[pre]:1,tipo=texto(x.UnitType);return tipo==="AREAUNIT"?base**2:tipo==="VOLUMEUNIT"?base**3:base};for(let x of p.UnitsInContext?.Units??[]){let tipo=texto(x?.UnitType);tipo&&tipo in u&&(u[tipo]=factorDe(x))}let L=u.LENGTHUNIT,A=u.AREAUNIT,V=u.VOLUMEUNIT,plantas=idsDe(api2,modelo,W.IFCBUILDINGSTOREY).map(id=>{let l=api2.GetLine(modelo,id),cota=valor(l.Elevation);return{express_id:id,global_id:texto(l.GlobalId),nombre:texto(l.Name)??texto(l.LongName)??`Planta ${id}`,cota:cota==null?null:redondea(Number(cota)*L,3),orden:0,superficie_util:null}});plantas.sort((a,b)=>(a.cota??0)-(b.cota??0)),plantas.forEach((pl,i)=>pl.orden=i+1);let esPlanta=new Set(plantas.map(pl=>pl.express_id)),padre=new Map,contenidoEn=new Map;for(let r of idsDe(api2,modelo,W.IFCRELAGGREGATES)){let l=api2.GetLine(modelo,r),de=valor(l.RelatingObject);for(let h of refs(l.RelatedObjects))padre.set(h,de)}for(let r of idsDe(api2,modelo,W.IFCRELCONTAINEDINSPATIALSTRUCTURE)){let l=api2.GetLine(modelo,r),de=valor(l.RelatingStructure);for(let h of refs(l.RelatedElements))contenidoEn.set(h,de)}let plantaCache=new Map,plantaDe=id=>{if(plantaCache.has(id))return plantaCache.get(id);let x=id,fuera=null;for(let i=0;i<12&&x!=null;i++){if(esPlanta.has(x)){fuera=x;break}x=contenidoEn.get(x)??padre.get(x)}return plantaCache.set(id,fuera),fuera},tipoDe2=new Map;for(let r of idsDe(api2,modelo,W.IFCRELDEFINESBYTYPE)){let l=api2.GetLine(modelo,r),t=api2.GetLine(modelo,valor(l.RelatingType)),nombre=texto(t.Name);for(let h of refs(l.RelatedObjects))tipoDe2.set(h,nombre)}let cantidades=new Map,conjuntos=new Map,leerConjunto=id=>{let ya=conjuntos.get(id);if(ya)return ya;let l=api2.GetLine(modelo,id),nombre=texto(l.Name)??"",q={};for(let qid of refs(l.Quantities)){let ql=api2.GetLine(modelo,qid),n=texto(ql.Name);n&&(ql.LengthValue!=null?q[n]=Number(valor(ql.LengthValue))*L:ql.AreaValue!=null?q[n]=Number(valor(ql.AreaValue))*A:ql.VolumeValue!=null?q[n]=Number(valor(ql.VolumeValue))*V:ql.CountValue!=null&&(q[n]=Number(valor(ql.CountValue))))}let r={estandar:/^(Qto_|BaseQuantities)/i.test(nombre),q};return conjuntos.set(id,r),r};for(let r of idsDe(api2,modelo,W.IFCRELDEFINESBYPROPERTIES)){let l=api2.GetLine(modelo,r),pd=valor(l.RelatingPropertyDefinition);if(pd==null||api2.GetLineType(modelo,pd)!==W.IFCELEMENTQUANTITY)continue;let c=leerConjunto(pd);for(let h of refs(l.RelatedObjects)){let prev=cantidades.get(h)??{};cantidades.set(h,c.estandar?{...prev,...c.q}:{...c.q,...prev})}}let materiales=new Map,nombresMaterial=(id,prof=0)=>{if(id==null||prof>6)return[];let l=api2.GetLine(modelo,id),t=claseDe(api2,modelo,id);return t==="IFCMATERIAL"?[texto(l.Name)].filter(x=>!!x):t==="IFCMATERIALLAYERSETUSAGE"?nombresMaterial(valor(l.ForLayerSet),prof+1):t==="IFCMATERIALLAYERSET"?refs(l.MaterialLayers).flatMap(x=>nombresMaterial(x,prof+1)):t==="IFCMATERIALLAYER"?nombresMaterial(valor(l.Material),prof+1):t==="IFCMATERIALLIST"?refs(l.Materials).flatMap(x=>nombresMaterial(x,prof+1)):t==="IFCMATERIALCONSTITUENTSET"?refs(l.MaterialConstituents).flatMap(x=>nombresMaterial(x,prof+1)):t==="IFCMATERIALCONSTITUENT"?nombresMaterial(valor(l.Material),prof+1):t==="IFCMATERIALPROFILESETUSAGE"?nombresMaterial(valor(l.ForProfileSet),prof+1):t==="IFCMATERIALPROFILESET"?refs(l.MaterialProfiles).flatMap(x=>nombresMaterial(x,prof+1)):t==="IFCMATERIALPROFILE"?nombresMaterial(valor(l.Material),prof+1):[]};for(let r of idsDe(api2,modelo,W.IFCRELASSOCIATESMATERIAL)){let l=api2.GetLine(modelo,r),nombres=[...new Set(nombresMaterial(valor(l.RelatingMaterial)))];if(nombres.length!==0)for(let h of refs(l.RelatedObjects))materiales.set(h,nombres.join(" \xB7 "))}let espacios=idsDe(api2,modelo,W.IFCSPACE);return{L,A,V,plantas,plantaDe,padre,tipoDe:tipoDe2,cantidades,materiales,espacios}}function rectanguloMinimo(puntos){let p=puntos.slice().sort((a,b)=>a[0]-b[0]||a[1]-b[1]),cruz=(o,a,b)=>(a[0]-o[0])*(b[1]-o[1])-(a[1]-o[1])*(b[0]-o[0]),abajo=[];for(let q of p){for(;abajo.length>=2&&cruz(abajo[abajo.length-2],abajo[abajo.length-1],q)<=0;)abajo.pop();abajo.push(q)}let arriba=[];for(let i=p.length-1;i>=0;i--){let q=p[i];for(;arriba.length>=2&&cruz(arriba[arriba.length-2],arriba[arriba.length-1],q)<=0;)arriba.pop();arriba.push(q)}let h=abajo.slice(0,-1).concat(arriba.slice(0,-1));if(h.length<3)return null;let mejor=null;for(let i=0;idMax&&(dMax=d),nnMax&&(nMax=n)}let w=dMax-dMin,e=nMax-nMin;(!mejor||w*e{let c=clases.get(id);return c||(c=claseDe(api2,modelo,id),clases.set(id,c)),c};function geometria(id,pos,indices){let c=clase(id),g=geo.get(id);g||(g={vol:0,vol2:0,aArriba:0,aAbajo:0,aLado:0,min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0],puntos:c==="IFCSPACE"?null:new Map,bordes:c==="IFCSPACE"?new Map:null},geo.set(id,g));for(let i=0;ig.max[0]&&(g.max[0]=x),y>g.max[1]&&(g.max[1]=y),z>g.max[2]&&(g.max[2]=z),g.puntos&&g.puntos.size<4e3&&g.puntos.set(Math.round(x*100)+","+Math.round(z*100),[x,z])}for(let t=0;t.1)g.aArriba+=area;else if(haciaArriba<-.1){if(g.aAbajo+=area,g.bordes){let k=(x,y,z)=>Math.round(x*1e3)+","+Math.round(y*1e3)+","+Math.round(z*1e3),pk=[k(ax,ay,az),k(bx,by,bz),k(cx,cy,cz)],q2=[[ax,az],[bx,bz],[cx,cz]];for(let e=0;e<3;e++){let i0=pk[e],i1=pk[(e+1)%3],key=i02){let r=rectanguloMinimo([...g.puntos.values()]);r&&(largo=r.largo,ancho=r.ancho)}let perimetro=null;if(g.bordes){perimetro=0;for(let b of g.bordes.values())b.n===1&&(perimetro+=b.largo)}let cerrado=Math.abs(g.vol)>1e-6&&Math.abs(g.vol-g.vol2)<=.01*Math.abs(g.vol)+1e-6;return{alto,largo,ancho,vol:cerrado?Math.abs(g.vol):null,aArriba:g.aArriba,aAbajo:g.aAbajo,aLado:g.aLado,perimetro}}let primero=(q,nombres)=>{for(let n of nombres)if(q[n]!=null&&Number.isFinite(q[n])&&q[n]>0)return q[n];return null};function resultado(){let{L,plantaDe,padre,tipoDe:tipoDe2,cantidades,materiales}=rel,estancias=[];for(let id of rel.espacios){let g=geo.get(id),l=api2.GetLine(modelo,id),q=cantidades.get(id)??{},m=medidasGeo(g,!1),supQ=primero(q,["NetFloorArea","GrossFloorArea","NetArea","GrossArea","Area"]);estancias.push({express_id:id,global_id:texto(l.GlobalId),planta:plantaDe(id),numero:texto(l.Name),nombre:texto(l.LongName)??texto(l.Name),superficie:redondea(supQ??m?.aAbajo??null,2),perimetro:redondea(primero(q,["NetPerimeter","GrossPerimeter","Perimeter"])??m?.perimetro??null,2),altura:redondea(primero(q,["Height","FinishCeilingHeight","ClearHeight"])??m?.alto??null,3),volumen:redondea(primero(q,["NetVolume","GrossVolume","Volume"])??m?.vol??null,3),medido_de:supQ!=null?"Modelo":"Geometr\xEDa"})}let elementos=[];for(let[id,g]of geo){let c=clase(id);if(SIN_MEDIR.has(c))continue;let l=api2.GetLine(modelo,id),pid=padre.get(id),categoria=categoriaDe(c,texto(l.PredefinedType),pid!=null?claseDe(api2,modelo,pid):null),q=cantidades.get(id)??{},m=medidasGeo(g,ORIENTADAS.has(categoria)),longitud=null,altura=null,ancho=null,superficie=null,volumen=null,deModelo=!1,usa=(v,deGeo)=>(v!=null&&(deModelo=!0),v??deGeo??null),volQ=primero(q,["NetVolume","GrossVolume","Volume"]);categoria==="Muro"?(longitud=usa(primero(q,["Length"]),m?.largo),altura=usa(primero(q,["Height"]),m?.alto),ancho=usa(primero(q,["Width","Thickness"]),m?.ancho),superficie=usa(primero(q,["NetSideArea","GrossSideArea","NetArea","GrossArea"]),m?Math.max(0,(m.aLado-2*m.alto*m.ancho)/2):null),volumen=usa(volQ,m?.vol)):categoria==="Puerta"||categoria==="Ventana"?(ancho=usa(l.OverallWidth!=null?Number(valor(l.OverallWidth))*L:primero(q,["Width"]),m?.largo),altura=usa(l.OverallHeight!=null?Number(valor(l.OverallHeight))*L:primero(q,["Height"]),m?.alto),superficie=usa(primero(q,["Area"]),ancho!=null&&altura!=null?ancho*altura:null)):DE_SUPERFICIE.has(categoria)?(superficie=usa(primero(q,["NetArea","GrossArea","Area","NetSideArea"]),m?.aArriba),volumen=usa(volQ,m?.vol),ancho=usa(primero(q,["Depth","Width","Thickness"]),m&&m.vol!=null&&m.aArriba>0?m.vol/m.aArriba:null)):categoria==="Muro cortina"&&/PLATE/.test(c)?(superficie=usa(primero(q,["NetArea","GrossArea","Area"]),m?m.largo*m.alto:null),ancho=m?.ancho??null):LINEALES.has(categoria)?(longitud=usa(primero(q,["Length"]),categoria==="Pilar"?m?.alto:m?.largo),altura=m?.alto??null,volumen=usa(volQ,m?.vol)):(volumen=usa(volQ,m?.vol),superficie=usa(primero(q,["NetArea","GrossArea","Area"]),null),altura=m?.alto??null),elementos.push({express_id:id,global_id:texto(l.GlobalId),planta:plantaDe(id),categoria,clase_ifc:String(api2.GetNameFromTypeCode(api2.GetLineType(modelo,id))),tipo:limpiarTipo(tipoDe2.get(id)??texto(l.ObjectType)),nombre:texto(l.Name),material:materiales.get(id)??null,longitud:redondea(longitud,3),altura:redondea(altura,3),ancho:redondea(ancho,3),superficie:redondea(superficie,2),volumen:redondea(volumen,3),medido_de:deModelo?"Modelo":"Geometr\xEDa"})}return{plantas:rel.plantas.map(pl=>{let suyas=estancias.filter(e=>e.planta===pl.express_id),sup=suyas.reduce((s,e)=>s+(e.superficie??0),0);return{...pl,superficie_util:suyas.length?redondea(sup,2):null}}),estancias,elementos}}return{geometria,resultado,caja,clase}}function colocar(verts,m){let n=verts.length/6,pos=new Float32Array(n*3),nor=new Float32Array(n*3);for(let i=0;i({THREE,OrbitControls:orbita.OrbitControls,W})).catch(e=>{throw libs=null,new Error(`No se pudo cargar el visor 3D (three.js / web-ifc desde jsDelivr): ${e instanceof Error?e.message:String(e)}`)}),libs}var URL_GLTF=`${CDN}three@${VERSION_THREE}/examples/jsm/exporters/GLTFExporter.js/+esm`,gltf=null;function exportadorGltf(){return gltf??=import(URL_GLTF).catch(e=>{throw gltf=null,new Error(`No se pudo cargar el exportador de modelos (three.js desde jsDelivr): ${e instanceof Error?e.message:String(e)}`)}),gltf}var api=null;function lector(){return api??=librerias().then(async({W})=>{let a=new W.IfcAPI;return a.SetWasmPath(DIR_WASM,!0),await a.Init(void 0,!0),{api:a,W}}).catch(e=>{throw api=null,e}),api}async function abrir(bytes){let{api:a,W}=await lector(),modelo=a.OpenModel(bytes,{COORDINATE_TO_ORIGIN:!0});if(modelo<0)throw new Error("El fichero no se pudo abrir como IFC");return{api:a,W,modelo}}function recorrer(a,W,modelo,alTrozo){let conTrozos=espacio=>fm=>{let n=fm.geometries.size();for(let i=0;imed.geometria(t.id,t.pos,t.idx)),{...med.resultado(),esquema:String(a.GetModelSchema(modelo)),programa:programaDe(a,W,modelo)}}finally{a.CloseModel(modelo)}}var recien=null;function guardarRecien(modelo,bytes){recien={modelo,bytes}}async function bytesDe(gufi,modeloId,ruta){if(recien&&recien.modelo===modeloId)return recien.bytes;let url=/^https?:\/\//.test(ruta)?ruta:await gufi.dataProvider.getDownloadUrl(ruta),r=await fetch(url);if(!r.ok)throw new Error(`El almac\xE9n respondi\xF3 ${r.status} al bajar el modelo`);return new Uint8Array(await r.arrayBuffer())}var LOTE=2e3;async function alAlmacen(gufi,file,alAvanzar){let{key,url,tipo}=await gufi.automation("arquitectura_subida",{nombre:file.name,tamano:file.size});return await new Promise((ok,mal)=>{let xhr=new XMLHttpRequest;xhr.open("PUT",url),xhr.setRequestHeader("Content-Type",tipo),xhr.upload.onprogress=e=>e.lengthComputable&&alAvanzar(e.loaded/e.total),xhr.onload=()=>xhr.status>=200&&xhr.status<300?ok():mal(new Error(`El almac\xE9n respondi\xF3 ${xhr.status} a \xAB${file.name}\xBB`)),xhr.onerror=()=>mal(new Error(`Se cort\xF3 la subida de \xAB${file.name}\xBB`)),xhr.send(file)}),{url:key,name:file.name,mime:tipo,size:file.size}}async function guardarMedicion(gufi,modeloId,m,alPaso){await gufi.automation("arquitectura_medicion",{op:"empezar",modelo:modeloId});let{plantas:ids}=await gufi.automation("arquitectura_medicion",{op:"plantas",modelo:modeloId,plantas:m.plantas.map(({express_id,global_id,nombre,cota,orden,superficie_util})=>({express_id,global_id,nombre,cota,orden,superficie_util}))}),planta=p=>p==null?null:ids[String(p)]??null,estancias=m.estancias.map(e=>({...e,planta:planta(e.planta)})),elementos=m.elementos.map(e=>({...e,planta:planta(e.planta)})),total=estancias.length+elementos.length,hechas=0;for(let[tabla,filas]of[["estancias",estancias],["elementos",elementos]])for(let i=0;ialPaso({paso:"subir",avance:p,texto:`Subiendo ${Math.round(p*100)} %`})),{data:ultimas}=await gufi.query("arquitectura__modelos",{filters:[{field:"proyecto",operator:"eq",value:proyectoId}],sorters:[{field:"version",order:"desc"}],pageSize:1,sinTotal:!0}),siguienteVersion=(Number(ultimas[0]?.version)||0)+1,fila=await gufi.dataProvider.create({resource:"arquitectura__modelos",variables:{proyecto:proyectoId,nombre:file.name.replace(/\.ifc$/i,""),version:siguienteVersion,archivo,estado:"Midiendo"}}),modeloId=Number(fila?.data?.id??fila?.id);if(!modeloId)throw new Error("No se pudo crear la versi\xF3n del modelo");return guardarRecien(modeloId,bytes),await medirYGuardar(gufi,modeloId,bytes,alPaso),modeloId}async function volverAMedir(gufi,modeloId,ruta,alPaso){alPaso({paso:"subir",avance:0,texto:"Bajando el modelo"});let bytes=await bytesDe(gufi,modeloId,ruta);guardarRecien(modeloId,bytes),await medirYGuardar(gufi,modeloId,bytes,alPaso)}var import_lucide_react9=require("lucide-react");var import_react8=__toESM(require("react"));function useWebDelEstudio(gufi){let[web,setWeb]=import_react8.default.useState(void 0);return import_react8.default.useEffect(()=>{let vivo=!0;return gufi.automation("arquitectura_enlace",{op:"web"}).then(r=>{vivo&&setWeb(r.web)}).catch(e=>{reportar(e),vivo&&setWeb(null)}),()=>{vivo=!1}},[gufi]),web}var enlaceDeCasa=(web,codigo)=>`${web}/casa?c=${codigo}`;var import_react9=__toESM(require("react")),import_lucide_react7=require("lucide-react");var TONO={Nueva:"info",Respondida:"ok",Resuelta:"mudo"};function NotasDelCliente({gufi,proyecto,web,enlaces}){let{data}=gufi.useData("arquitectura__notas",{filters:[{field:"proyecto",operator:"eq",value:proyecto}],sorters:[{field:"id",order:"desc"}],pageSize:500,realtime:!0}),notas=data??[],[abierta,setAbierta]=import_react9.default.useState(null);if(!notas.length)return null;let nuevas=notas.filter(n=>n.estado==="Nueva").length;async function cambiar(id,variables){try{await gufi.dataProvider.update({resource:"arquitectura__notas",id,variables})}catch(e){gufi.toastError(textoError(e)),reportar(e)}}let codigoDe=enlace=>enlaces.find(e=>Number(e.id)===Number(enlace))?.codigo;return __gh(Grupo,{titulo:"Notas del cliente",cuenta:notas.length,sub:nuevas?`${nuevas===1?"Una nueva":`${nuevas} nuevas`}: t\xF3calas para responder. Tu cliente ve la respuesta en su chincheta.`:"Lo que tu cliente ha marcado en su casa. Ve tu respuesta en su chincheta."},notas.map((n,i)=>{let es=abierta===n.id,codigo=codigoDe(n.enlace);return __gh(import_react9.default.Fragment,{key:n.id},__gh(Fila,{primera:i===0,elegida:es,onClick:()=>setAbierta(es?null:n.id),titulo:__gh(ConPunto,{tono:TONO[n.estado]??"info"},__gh("span",{style:{whiteSpace:"pre-wrap"},"data-gufi-src":"sections/notas.tsx:39"},`\xAB${n.texto}\xBB`)),sub:[n.autor,n.estancia,n.planta,fecha(n.__created_at__),n.estado==="Nueva"?"sin responder":n.estado.toLowerCase()].filter(Boolean).join(" \xB7 ")}),es&&__gh("div",{className:"arq-entra",style:{background:"#fafafa",borderTop:`1px solid ${HAIRLINE}`},"data-gufi-src":"sections/notas.tsx:42"},__gh(Campo,{etiqueta:"Respuesta",primera:!0},__gh(Entrada,{largo:!0,anchoMax:560,valor:n.respuesta,placeholder:"Lo que le contestas",autoFocus:!n.respuesta,onGuardar:v=>{cambiar(n.id,{respuesta:v,estado:n.estado==="Resuelta"?"Resuelta":v?"Respondida":"Nueva"})}})),__gh(Campo,{etiqueta:"Resuelta"},__gh(Interruptor,{titulo:"Resuelta",encendido:n.estado==="Resuelta",onCambio:si=>{cambiar(n.id,{estado:si?"Resuelta":n.respuesta?"Respondida":"Nueva"})}})),web&&codigo&&__gh("div",{style:{padding:"8px 16px 12px",borderTop:`1px solid ${HAIRLINE}`},"data-gufi-src":"sections/notas.tsx:51"},__gh(Accion,{icono:import_lucide_react7.ArrowUpRight,href:`${enlaceDeCasa(web,codigo)}¬a=${n.id}`,fuera:!0},"Verla desde donde la dej\xF3"))))}))}var PASOS={subir:"Subir",medir:"Medir",guardar:"Guardar"};function Portada({titulo,m,imagen,enlace}){return __gh("a",{...enlace,style:{display:"flex",flexDirection:"column",gap:12,minWidth:0,textDecoration:"none",color:"inherit"},"data-gufi-src":"sections/proyecto.tsx:30"},imagen?__gh("img",{src:imagen,alt:"",style:{...vtModelo(m.id),display:"block",width:"100%",aspectRatio:"16 / 9",objectFit:"cover",borderRadius:22,background:CANVAS},"data-gufi-src":"sections/proyecto.tsx:32"}):__gh("div",{style:{display:"grid",placeItems:"center",width:"100%",aspectRatio:"16 / 9",borderRadius:22,background:FILL,fontSize:13,color:MUTED},"data-gufi-src":"sections/proyecto.tsx:33"},"La maqueta sale al abrirlo"),__gh("div",{style:{display:"flex",alignItems:"flex-end",gap:12,padding:"0 4px"},"data-gufi-src":"sections/proyecto.tsx:34"},__gh("span",{style:{flex:1,minWidth:0},"data-gufi-src":"sections/proyecto.tsx:35"},__gh("span",{style:{display:"block",fontSize:19,fontWeight:650,letterSpacing:"-0.4px",color:INK},"data-gufi-src":"sections/proyecto.tsx:36"},titulo),__gh("span",{style:{display:"block",fontSize:13,color:MUTED,marginTop:2},"data-gufi-src":"sections/proyecto.tsx:37"},`Versi\xF3n ${m.version??"s/n"} \xB7 ${fecha(m.medido_at??m.__created_at__)}`)),__gh("span",{style:{textAlign:"right",fontVariantNumeric:"tabular-nums"},"data-gufi-src":"sections/proyecto.tsx:39"},__gh("span",{style:{display:"block",fontSize:19,fontWeight:600,letterSpacing:"-0.3px",color:INK},"data-gufi-src":"sections/proyecto.tsx:40"},medida(m.superficie_util,"m\xB2",1)),__gh("span",{style:{display:"block",fontSize:12,color:MUTED},"data-gufi-src":"sections/proyecto.tsx:41"},"\xFAtiles"))))}function Proyecto({gufi,id,url,ir}){let compacto=useCompacto(760),{data:filas,loading,reload:releerProyecto}=gufi.useData("arquitectura__proyectos",{id,realtime:!0}),p=(filas??[])[0],{data:modelos,loading:cargandoModelos,reload}=gufi.useData("arquitectura__modelos",{filters:[{field:"proyecto",operator:"eq",value:id}],sorters:[{field:"version",order:"desc"}],pageSize:500,realtime:!0}),[trabajo,setTrabajo]=import_react10.default.useState(null),[error,setError]=import_react10.default.useState(null),[encima,setEncima]=import_react10.default.useState(!1),[cambiando,setCambiando]=import_react10.default.useState(!1),[vueltaNombre,setVueltaNombre]=import_react10.default.useState(0),elegir=import_react10.default.useRef(null),lista=modelos??[],medidos=lista.filter(m=>m.estado==="Medido"),actual=medidos.find(m=>m.fase==="Estado actual")??null,reformado=medidos.find(m=>m.fase==="Estado reformado")??null,ultimo=medidos[0]??null,portadas=actual||reformado?[actual&&{titulo:"Estado actual",m:actual},reformado&&{titulo:"Reformado",m:reformado}].filter(Boolean):ultimo?[{titulo:"\xDAltimo modelo",m:ultimo}]:[],principal2=reformado??ultimo,{data:enlaces}=gufi.useData("arquitectura__enlaces",{filters:[{field:"proyecto",operator:"eq",value:id}],sorters:[{field:"id",order:"desc"}],pageSize:50,realtime:!0}),enlace=principal2?(enlaces??[]).find(e=>Number(e.modelo)===Number(principal2.id)&&e.activo!==!1)??null:null,web=useWebDelEstudio(gufi),urlEnlace=enlace&&web?enlaceDeCasa(web,enlace.codigo):null;async function copiarEnlace(){if(urlEnlace)try{await navigator.clipboard.writeText(urlEnlace),gufi.toastSuccess("Enlace copiado")}catch(e){gufi.toastError(textoError(e)),reportar(e)}}let rutas=portadas.map(x=>rutaDe(x.m.miniatura)).filter(r=>!!r),miniaturas=useMiniaturas(gufi,rutas);async function subir(file){if(!trabajo){setError(null),setTrabajo({nombre:file.name,paso:{paso:"subir",avance:0,texto:"Empezando"}});try{let modeloId=await subirModelo(gufi,id,file,paso=>setTrabajo({nombre:file.name,paso}));gufi.toastSuccess(`\xAB${file.name}\xBB medido`),ir("visor",{modelo:modeloId})}catch(e){setError(textoError(e)),reportar(e),reload()}finally{setTrabajo(null)}}}async function remedir(m){if(trabajo)return;let ruta=rutaDe(m.archivo);if(!ruta){setError("Esta versi\xF3n no tiene el fichero IFC guardado: s\xFAbelo otra vez");return}setError(null),setTrabajo({nombre:m.nombre,paso:{paso:"subir",avance:0,texto:"Bajando el modelo"}});try{await volverAMedir(gufi,m.id,ruta,paso=>setTrabajo({nombre:m.nombre,paso})),gufi.toastSuccess(`\xAB${m.nombre}\xBB medido`),reload()}catch(e){setError(textoError(e)),reportar(e),reload()}finally{setTrabajo(null)}}let porMedir=lista.find(m=>m.estado==="Por medir")??null;import_react10.default.useEffect(()=>{porMedir&&!trabajo&&remedir(porMedir)},[porMedir?.id,!!trabajo]);async function cambiarEtapa(etapa){if(!(!p||p.estado===etapa))try{await gufi.dataProvider.update({resource:"arquitectura__proyectos",id,variables:{estado:etapa}}),releerProyecto()}catch(e){gufi.toastError(textoError(e)),reportar(e)}}async function guardarCampo(campo,v){try{await gufi.dataProvider.update({resource:"arquitectura__proyectos",id,variables:{[campo]:v}})}catch(e){gufi.toastError(textoError(e)),reportar(e)}}if(!loading&&!p)return __gh(Lienzo,null,__gh(Cabecera,{titulo:"Proyecto",volver:{texto:"Proyectos",href:url("/")}}),__gh(Aviso,{titulo:"Este proyecto no existe",texto:"Puede que lo hayan borrado. Vuelve a la lista de proyectos."}));let soltar={onDragOver:e=>{trabajo||(e.preventDefault(),setEncima(!0))},onDragLeave:()=>setEncima(!1),onDrop:e=>{e.preventDefault(),setEncima(!1);let f=e.dataTransfer.files?.[0];f&&subir(f)}};return __gh(Lienzo,null,__gh(Cabecera,{volver:{texto:"Proyectos",...navega(url("/"),()=>ir("proyectos"))},titulo:__gh("span",{style:{...vtProyecto(id),display:"inline-block"},"data-gufi-src":"sections/proyecto.tsx:183"},p?.nombre??" "),sub:p?[p.cliente,p.referencia].filter(Boolean).join(" \xB7 ")||"Sin cliente":void 0,acciones:__gh(__gf,null,__gh(Accion,{activo:cambiando,deshabilitado:!p,onClick:()=>setCambiando(c=>!c)},"Cambiar"),__gh(Principal,{icono:import_lucide_react8.Upload,onClick:()=>elegir.current?.click(),deshabilitado:!!trabajo},"Subir modelo IFC"))}),__gh("input",{ref:elegir,type:"file",accept:".ifc",style:{display:"none"},onChange:e=>{let f=e.target.files?.[0];e.target.value="",f&&subir(f)},"data-gufi-src":"sections/proyecto.tsx:192"}),p&&cambiando&&__gh("div",{className:"arq-entra","data-gufi-src":"sections/proyecto.tsx:199"},__gh(Tarjeta,null,__gh(Campo,{etiqueta:"Nombre",primera:!0},__gh(Entrada,{key:vueltaNombre,valor:p.nombre,largo:!0,autoFocus:!0,placeholder:"Nombre del proyecto",onGuardar:v=>{if(v==null){gufi.toastError("Falta el nombre"),setVueltaNombre(n=>n+1);return}guardarCampo("nombre",v)}})),__gh(Campo,{etiqueta:"Cliente"},__gh(Entrada,{valor:p.cliente,onGuardar:v=>{guardarCampo("cliente",v)},placeholder:"Para qui\xE9n es",largo:!0})),__gh(Campo,{etiqueta:"Referencia"},__gh(Entrada,{valor:p.referencia,onGuardar:v=>{guardarCampo("referencia",v)},placeholder:"Del estudio",anchoMax:240})),__gh(Campo,{etiqueta:"Notas"},__gh(Entrada,{valor:p.notas,onGuardar:v=>{guardarCampo("notas",v)},placeholder:"Opcional",largo:!0,anchoMax:560})),__gh(PieEdicion,{onListo:()=>setCambiando(!1)}))),p&&__gh(Metodo,{etapa:p.estado,compacto,onCambio:cambiarEtapa}),error&&__gh(Aviso,{titulo:"No se pudo terminar",texto:error}),trabajo&&__gh(Grupo,{titulo:`\xAB${trabajo.nombre}\xBB`,sub:"No cierres la pesta\xF1a hasta que termine: el modelo se mide en este navegador."},__gh("div",{style:{padding:"14px 16px",display:"flex",flexDirection:"column",gap:10},"data-gufi-src":"sections/proyecto.tsx:225"},__gh("div",{style:{display:"flex",gap:18,fontSize:12.5,color:MUTED},"data-gufi-src":"sections/proyecto.tsx:226"},Object.keys(PASOS).map(k=>__gh("span",{key:k,style:{color:k===trabajo.paso.paso?INK:MUTED,fontWeight:k===trabajo.paso.paso?600:500},"data-gufi-src":"sections/proyecto.tsx:228"},PASOS[k]))),__gh(Progreso,{valor:trabajo.paso.avance}),__gh("span",{style:{fontSize:12.5,color:MUTED},"data-gufi-src":"sections/proyecto.tsx:232"},trabajo.paso.texto))),portadas.length>0&&__gh("section",{style:{display:"flex",flexDirection:"column",gap:12},"data-gufi-src":"sections/proyecto.tsx:238"},__gh("div",{style:{padding:"0 4px"},"data-gufi-src":"sections/proyecto.tsx:239"},__gh("h3",{style:{fontSize:15,fontWeight:600,letterSpacing:"-0.3px",color:INK,margin:0},"data-gufi-src":"sections/proyecto.tsx:240"},actual||reformado?"La reforma":"El modelo"),__gh("p",{style:{fontSize:12.5,color:MUTED,margin:"2px 0 0"},"data-gufi-src":"sections/proyecto.tsx:241"},actual&&reformado?"Lo que hay y lo que se va a hacer: de la diferencia salen los derribos y la obra nueva":actual?"Falta el reformado: s\xFAbelo y m\xE1rcalo como tal en su inspector":reformado?"Falta el estado actual: s\xFAbelo para presupuestar derribos y obra nueva":"Tocar la maqueta abre el modelo")),__gh("div",{style:{display:"grid",gridTemplateColumns:compacto||portadas.length===1?"1fr":"1fr 1fr",gap:compacto?24:"clamp(20px, 2.4vw, 40px)",maxWidth:portadas.length===1&&!compacto?900:void 0},"data-gufi-src":"sections/proyecto.tsx:243"},portadas.map(x=>{let r=rutaDe(x.m.miniatura);return __gh(Portada,{key:x.m.id,titulo:x.titulo,m:x.m,imagen:r?miniaturas[r]:void 0,enlace:navega(url(`/modelo/${x.m.id}`),()=>ir("visor",{modelo:x.m.id}))})})),principal2&&__gh(Grupo,null,__gh(FilaAccion,{primera:!0,href:url(`/modelo/${principal2.id}/presupuesto`)},reformado&&actual?"Presupuesto de la reforma":"Presupuesto"),medidos.length>1&&__gh(FilaAccion,{href:url(`/modelo/${principal2.id}/cambios`)},reformado&&actual?"Qu\xE9 cambia con la reforma":"Qu\xE9 cambia frente a la versi\xF3n anterior"),__gh(FilaAccion,{href:url(`/modelo/${principal2.id}/mediciones`)},"Mediciones")),principal2&&__gh(Grupo,{titulo:"Para el cliente",sub:"Su casa en vuestra web: la gira en 3D, la recorre planta a planta, cambia los acabados, la pone en su sal\xF3n con el m\xF3vil y ve los planos y, si quer\xE9is, el presupuesto. Sin cuenta ni aplicaci\xF3n."},__gh(Fila,{primera:!0,lead:__gh(import_lucide_react9.Share,{size:17,strokeWidth:1.8,"aria-hidden":!0}),titulo:enlace?urlEnlace?urlEnlace.replace(/^https:\/\//,""):"Publicado":"Publicarla para el cliente",sub:enlace?`${Number(enlace.visitas??0)===1?"Abierto 1 vez":`Abierto ${numero(Number(enlace.visitas??0))} veces`}${enlace.ultima_visita?`, la \xFAltima el ${fecha(enlace.ultima_visita)}`:""}`:"Se prepara con el modelo de la versi\xF3n de portada",onClick:()=>ir("cliente",{modelo:principal2.id}),control:urlEnlace?__gh("span",{onClick:e=>e.stopPropagation(),style:{display:"flex"},"data-gufi-src":"sections/proyecto.tsx:262"},__gh(Accion,{pequeno:!0,icono:import_lucide_react9.Copy,onClick:copiarEnlace},"Copiar")):void 0})),__gh(NotasDelCliente,{gufi,proyecto:id,web,enlaces:enlaces??[]})),__gh("div",{...soltar,style:{borderRadius:16,outline:encima?"2px dashed #635BFF":"none",outlineOffset:4},"data-gufi-src":"sections/proyecto.tsx:269"},__gh(Grupo,{titulo:"Versiones del modelo",cuenta:cargandoModelos?void 0:lista.length,pie:"Suelta aqu\xED un .ifc o s\xFAbelo con el bot\xF3n. Desde Revit: Archivo \u203A Exportar \u203A IFC. En una reforma, sube el estado actual y el reformado y m\xE1rcalos as\xED en el inspector de cada uno."},cargandoModelos?__gh(FilasCargando,{n:3}):lista.length===0?__gh(Vacio,{titulo:"A\xFAn no hay ning\xFAn modelo",texto:"Sube el IFC del proyecto: se ver\xE1 en 3D y sus estancias, muros, puertas y ventanas quedar\xE1n medidos.",accion:__gh(Principal,{icono:import_lucide_react8.Upload,onClick:()=>elegir.current?.click()},"Subir modelo IFC")}):__gh(__gf,null,lista.map((m,i)=>{let mal=m.estado==="Error",aMedias=m.estado==="Midiendo"||m.estado==="Por medir";return __gh(Fila,{key:m.id,primera:i===0,href:mal||aMedias?void 0:url(`/modelo/${m.id}`),titulo:__gh(ConPunto,{tono:mal?"mal":aMedias?"aviso":null},[`Versi\xF3n ${m.version??"s/n"}`,faseCorta(m.fase)].filter(Boolean).join(" \xB7 ")),sub:mal?`No se pudo medir: ${m.error??"sin motivo"}`:aMedias?m.estado==="Por medir"?"Levantado aparte: se mide aqu\xED, ahora":"Se cort\xF3 mientras se med\xEDa":[m.nombre,fecha(m.medido_at??m.__created_at__),m.plantas!=null&&`${numero(m.plantas)} plantas`,m.programa].filter(Boolean).join(" \xB7 "),valor:mal||aMedias?void 0:medida(m.superficie_util,"m\xB2",1),valorSub:mal||aMedias?void 0:"\xFAtiles",control:mal||aMedias?__gh(Accion,{pequeno:!0,onClick:()=>remedir(m),deshabilitado:!!trabajo},"Volver a medir"):void 0})}),__gh(FilaAccion,{icono:import_lucide_react8.Upload,onClick:()=>elegir.current?.click()},"Subir una versi\xF3n nueva")))))}var import_react20=__toESM(require("react"));var import_react19=__toESM(require("react")),import_lucide_react17=require("lucide-react");function tipoDe(nombre){let n=nombre.toLowerCase();return/tarima|parquet|roble|madera|nogal|haya|pino|laminad|espiga/.test(n)?"madera":/m[áa]rmol|silestone|dekton|cuarzo|granito|piedra|travertino|pizarra/.test(n)?"piedra":/porcel[áa]nic|cer[áa]mic|baldosa|gres|azulejo|hidr[áa]ulic|terrazo/.test(n)?"baldosa":/microcemento|cemento|hormig/.test(n)?"cemento":"liso"}var RUGOSIDAD={madera:.55,piedra:.2,baldosa:.32,cemento:.78,liso:.7};function semilla(texto2){let h=2166136261;for(let i=0;i>>0;return()=>(s=Math.imul(s,1664525)+1013904223>>>0,s/4294967296)}var rgb=hex=>{let h=hex.replace("#","");return[parseInt(h.slice(0,2),16),parseInt(h.slice(2,4),16),parseInt(h.slice(4,6),16)]},tono=(c,f,a=1)=>`rgba(${c.map(x=>Math.max(0,Math.min(255,Math.round(x*f)))).join(",")},${a})`;function envolver(dibujar){for(let dx of[-1024,0,1024])for(let dy of[-1024,0,1024])dibujar(dx,dy)}function grano(g,c,azar,intensidad){let img=g.getImageData(0,0,1024,1024),d=img.data;for(let i=0;i{g.fillStyle=tono(c,f),g.fillRect(x+dx,y+dy,largo,ancho);for(let v=0;v<9;v++){let yy=y+dy+azar()*ancho;g.strokeStyle=tono(c,f*(.78+azar()*.12),.18+azar()*.2),g.lineWidth=.6+azar()*1.6,g.beginPath(),g.moveTo(x+dx,yy);for(let s=1;s<=6;s++)g.lineTo(x+dx+largo*s/6,yy+(azar()-.5)*ancho*.25);g.stroke()}g.fillStyle=tono(c,.62,.55),g.fillRect(x+dx,y+dy+ancho-2,largo,2),g.fillRect(x+dx+largo-2,y+dy,2,ancho)})}}grano(g,c,azar,10)}function baldosa(g,c,azar){let lado=Math.round(307.2),n=Math.ceil(1024/lado),paso=1024/n;g.fillStyle=tono(c,.8),g.fillRect(0,0,1024,1024);for(let i=0;i{g.save(),g.strokeStyle=tono(c,.55+azar()*.2,.18+azar()*.22),g.lineWidth=.8+azar()*2.4,g.shadowColor=tono(c,.6,.4),g.shadowBlur=6,g.beginPath(),g.moveTo(x0+dx,y0+dy);let x=x0,y=y0;for(let s=0;s<8;s++){let nx=x+(azar()-.3)*220,ny=y+(azar()-.5)*160;g.quadraticCurveTo(x+(azar()-.5)*120+dx,y+(azar()-.5)*120+dy,nx+dx,ny+dy),x=nx,y=ny}g.stroke(),g.restore()})}let ancho=Math.round(1.2*512),alto=Math.round(.6*512);g.fillStyle=tono(c,.75,.35);for(let y=0;y<=1024;y+=alto)g.fillRect(0,y-1,1024,2);for(let y=0,fila=0;y<1024;y+=alto,fila++)for(let x=fila%2?ancho/2:0;x<=1024;x+=ancho)g.fillRect(x-1,y,2,alto);grano(g,c,azar,4)}function cemento(g,c,azar){g.fillStyle=tono(c,1),g.fillRect(0,0,1024,1024);for(let k=0;k<90;k++){let x=azar()*1024,y=azar()*1024,r=40+azar()*180,claro=azar()>.5;envolver((dx,dy)=>{let gr=g.createRadialGradient(x+dx,y+dy,0,x+dx,y+dy,r);gr.addColorStop(0,tono(c,claro?1.08:.92,.22)),gr.addColorStop(1,tono(c,1,0)),g.fillStyle=gr,g.fillRect(x+dx-r,y+dy-r,r*2,r*2)})}grano(g,c,azar,9)}function texturaDeSuelo(nombre,color){let lienzo=document.createElement("canvas");lienzo.width=1024,lienzo.height=1024;let g=lienzo.getContext("2d",{willReadFrequently:!0});if(!g)throw new Error("Este navegador no deja dibujar las texturas (canvas 2D)");let tipo=tipoDe(nombre),c=rgb(color),azar=semilla(`${nombre}|${color}`);return tipo==="madera"?madera(g,c,azar):tipo==="baldosa"?baldosa(g,c,azar):tipo==="piedra"?piedra(g,c,azar):tipo==="cemento"?cemento(g,c,azar):(g.fillStyle=tono(c,1),g.fillRect(0,0,1024,1024),grano(g,c,azar,6)),{lienzo,tipo}}var ACCENT2="#635BFF",ALTURA_CORTE=1.2,NARANJA="#ff9f0a",ACABADOS={maqueta:{nombre:"Maqueta",sub:"Blanca, como una maqueta de estudio",colores:{Muro:"#f1f0ed",Pilar:"#f1f0ed",Viga:"#f1f0ed",Forjado:"#e6e4df",Cubierta:"#e2e0db",Solado:"#e9e7e2",Escalera:"#ecebe7",Puerta:"#dcd9d3",Ventana:"#cfd6dc",Carpinter\u00EDa:"#cfd6dc","Muro cortina":"#cfd6dc",Barandilla:"#bdbab4",Cimentaci\u00F3n:"#d9d7d2"},resto:"#efeeeb"},mediterraneo:{nombre:"Mediterr\xE1neo",sub:"Cal blanca, barro y madera",colores:{Muro:"#f3efe6",Pilar:"#f3efe6",Viga:"#f3efe6",Revestimiento:"#efe8db",Cubierta:"#b4583a",Forjado:"#d8b48c",Solado:"#c98d5e","Falso techo":"#faf8f3",Escalera:"#d9cdb8",Puerta:"#7a4a24",Ventana:"#2e6b6f",Carpinter\u00EDa:"#2e6b6f","Muro cortina":"#2e6b6f",Barandilla:"#2a2a2a",Cimentaci\u00F3n:"#bdb6aa"}},senorial:{nombre:"Se\xF1orial",sub:"Roble en espiga, blanco roto y bronce",colores:{Muro:"#f4f1ea",Pilar:"#f4f1ea",Viga:"#f4f1ea",Revestimiento:"#e9e2d4",Cubierta:"#4a4e55",Forjado:"#e7e1d6",Solado:"#a87b4f","Falso techo":"#faf8f4",Escalera:"#8f6a45",Puerta:"#f7f5f0",Ventana:"#3b3630",Carpinter\u00EDa:"#3b3630","Muro cortina":"#3b3630",Barandilla:"#9c8250",Cimentaci\u00F3n:"#c9c4ba"}},nordico:{nombre:"N\xF3rdico",sub:"Madera clara y negro",colores:{Muro:"#ece9e3",Pilar:"#ece9e3",Viga:"#cfae7e",Revestimiento:"#b9a17c",Cubierta:"#3f454c",Forjado:"#d8c3a0",Solado:"#d8c3a0","Falso techo":"#f7f6f3",Escalera:"#cfae7e",Puerta:"#cfae7e",Ventana:"#1f2326",Carpinter\u00EDa:"#1f2326","Muro cortina":"#1f2326",Barandilla:"#1f2326",Cimentaci\u00F3n:"#a9a7a3"}},contemporaneo:{nombre:"Contempor\xE1neo",sub:"Microcemento, blanco y carpinter\xEDa negra",colores:{Muro:"#f5f5f3",Pilar:"#f5f5f3",Viga:"#f5f5f3",Revestimiento:"#d6d3ce",Cubierta:"#5b5e63",Forjado:"#cfccc6",Solado:"#bdb9b2","Falso techo":"#fbfbfa",Escalera:"#bdb9b2",Puerta:"#efeeec",Ventana:"#202124",Carpinter\u00EDa:"#202124","Muro cortina":"#202124",Barandilla:"#202124",Cimentaci\u00F3n:"#b2afa9"}}},ESTILOS={sombreado:"Con sombras",coherente:"Colores planos",oculta:"L\xEDneas",alambre:"Alambre"},Creciente=class{constructor(Tipo,inicial=4096){this.Tipo=Tipo;this.datos=new Tipo(inicial)}datos;n=0;reservar(extra){if(this.n+extra<=this.datos.length)return;let cap=this.datos.length*2;for(;cap{let c=categorias.get(id);if(!c){let padre=rel.padre.get(id);c=categoriaDe(claseDe(api2,modelo,id),texto(api2.GetLine(modelo,id).PredefinedType),padre!=null?claseDe(api2,modelo,padre):null),categorias.set(id,c)}return c};recorrer(api2,W,modelo,t=>{medidor.geometria(t.id,t.pos,t.idx);let planta=rel.plantaDe(t.id)??SIN_PLANTA,cat=t.espacio?"Estancia":categoria(t.id),c=t.color.map(x=>Math.round(x*20)/20),clave=`${t.espacio?"e":"p"}|${planta}|${cat}|${c.join(",")}`,lote=lotes.get(clave);lote||(lote={clave,planta,categoria:cat,espacio:t.espacio,color:c,pos:new Creciente(Float32Array),nor:new Creciente(Float32Array),eid:new Creciente(Float32Array,1365),idx:new Creciente(Uint32Array)},lotes.set(clave,lote));let base=lote.pos.n/3,nv=t.pos.length/3;lote.pos.reservar(t.pos.length),lote.pos.datos.set(t.pos,lote.pos.n),lote.pos.n+=t.pos.length,lote.nor.reservar(t.nor.length),lote.nor.datos.set(t.nor,lote.nor.n),lote.nor.n+=t.nor.length,lote.eid.reservar(nv),lote.eid.datos.fill(t.id,lote.eid.n,lote.eid.n+nv),lote.eid.n+=nv;let desde=lote.idx.n;lote.idx.reservar(t.idx.length);for(let i=0;i{let l=(minimos.get(p.express_id)??[]).slice().sort((a,b)=>a-b);return{id:p.express_id,nombre:p.nombre,orden:p.orden,base:l.length?l[Math.floor(l.length*.2)]:null}}),ordenDe=new Map(plantas.map(p=>[p.id,p.orden])),renderer;try{renderer=new THREE.WebGLRenderer({antialias:!0,alpha:!1})}catch{throw api2.CloseModel(modelo),new Error("Este navegador no puede dibujar en 3D (WebGL est\xE1 apagado o no hay tarjeta gr\xE1fica)")}renderer.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),renderer.localClippingEnabled=!0;let FONDO=new THREE.Color("#f2f2f7");renderer.setClearColor(FONDO,1);let lienzo=renderer.domElement;Object.assign(lienzo.style,{display:"block",width:"100%",height:"100%",touchAction:"none"}),contenedor.appendChild(lienzo);let etiquetas=document.createElement("div");Object.assign(etiquetas.style,{position:"absolute",inset:"0",pointerEvents:"none",overflow:"hidden"}),contenedor.appendChild(etiquetas);let escena=new THREE.Scene;escena.add(new THREE.HemisphereLight(16777215,13224401,1.7));let sol=new THREE.DirectionalLight(16777215,1.5);sol.position.set(.6,1,.8),escena.add(sol);let persp=new THREE.PerspectiveCamera(45,1,.05,2e4),orto=new THREE.OrthographicCamera(-10,10,10,-10,.01,1e5),camara=persp,mando=new OrbitControls(persp,lienzo);mando.enableDamping=!0,mando.dampingFactor=.12,mando.screenSpacePanning=!0;let corte=new THREE.Plane(new THREE.Vector3(0,-1,0),1e6),planos=[corte],raiz=new THREE.Group;escena.add(raiz);let mallas=[],conBordes=triangulos<4e5;for(let lote of lotes.values()){let geo=new THREE.BufferGeometry;geo.setAttribute("position",new THREE.BufferAttribute(lote.pos.final(),3)),geo.setAttribute("normal",new THREE.BufferAttribute(lote.nor.final(),3)),geo.setAttribute("eid",new THREE.BufferAttribute(lote.eid.final(),1)),geo.setIndex(new THREE.BufferAttribute(lote.idx.final(),1)),geo.computeBoundingSphere(),geo.computeBoundingBox();let[r,g,b,a]=lote.color,mat=lote.espacio?new THREE.MeshLambertMaterial({color:new THREE.Color(ACCENT2),transparent:!0,opacity:.18,depthWrite:!1,side:THREE.DoubleSide,clippingPlanes:planos}):new THREE.MeshLambertMaterial({color:new THREE.Color().setRGB(r,g,b,THREE.SRGBColorSpace),transparent:a<.99,opacity:a,depthWrite:a>=.99,side:THREE.DoubleSide,clippingPlanes:planos,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1}),malla=new THREE.Mesh(geo,mat);if(lote.sombreado=mat,lote.original=mat.color.clone(),malla.userData.lote=lote,malla.visible=!lote.espacio,lote.mesh=malla,raiz.add(malla),mallas.push(malla),conBordes&&!lote.espacio&&a>=.99){let bordes=new THREE.LineSegments(new THREE.EdgesGeometry(geo,35),new THREE.LineBasicMaterial({color:1907999,transparent:!0,opacity:.22,clippingPlanes:planos}));lote.bordes=bordes,raiz.add(bordes)}}let resaltado=new THREE.Group;escena.add(resaltado);let fases=new THREE.Group;escena.add(fases);let lineasMedida=new THREE.Group;escena.add(lineasMedida);let sucio=!0,vivo=!0,grabando=!1,vista="3d",plantaVista=null,conCorte=!0,conEstancias=!1,estilo="sombreado",acabado=null,filtroNuevos=null,margen=0,margenDer=0,margenAbajo=0,modo="mirar",seleccion=[],medidas=[],pendiente=null,pintar=()=>{sucio=!0};mando.addEventListener("change",pintar),mando.addEventListener("start",()=>{vuelo=null});let alturaCorte=()=>{if(vista!=="planta"||plantaVista==null||!conCorte)return null;let p=plantas.find(x=>x.id===plantaVista);return p?.base!=null?p.base+ALTURA_CORTE:null};function aplicarVisibilidad(){let sel=vista==="planta"&&plantaVista!=null?ordenDe.get(plantaVista)??null:null;for(let m of mallas){let l=m.userData.lote,ve=sel==null?!0:l.planta!==SIN_PLANTA&&(ordenDe.get(l.planta)??0)<=sel;l.espacio&&(ve=ve&&conEstancias&&(sel==null||l.planta===plantaVista)),m.visible=ve,l.bordes&&(l.bordes.visible=ve&&estilo!=="alambre")}corte.constant=alturaCorte()??1e6,pintar()}function aplicarMateriales(){let blanco=new THREE.Color("#ffffff"),medioTono=new THREE.Color("#c9c9ce");for(let m of mallas){let l=m.userData.lote;if(l.espacio)continue;let vidrio=l.color[3]<.99,hex=acabado&&!vidrio?ACABADOS[acabado].colores[l.categoria]??ACABADOS[acabado].resto:void 0,base=hex?new THREE.Color(hex):l.original,color=filtroNuevos&&!vidrio?medioTono:base;l.sombreado.color.copy(color),estilo==="sombreado"?(m.material=l.sombreado,l.sombreado.wireframe=!1):(l.plano||(l.plano=new THREE.MeshBasicMaterial({transparent:l.sombreado.transparent,opacity:l.sombreado.opacity,depthWrite:l.sombreado.depthWrite,side:THREE.DoubleSide,clippingPlanes:planos,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})),l.plano.color.copy(estilo==="oculta"&&!vidrio?blanco:color),l.plano.wireframe=estilo==="alambre",m.material=l.plano),l.bordes&&(l.bordes.visible=m.visible&&estilo!=="alambre",l.bordes.material.opacity=estilo==="oculta"?.75:.22)}pintar()}let caja=new THREE.Box3;function cajaDe(ids){if(caja.makeEmpty(),ids&&ids.length)for(let id of ids){let c=medidor.caja(id);c&&(caja.expandByPoint(new THREE.Vector3(...c.min)),caja.expandByPoint(new THREE.Vector3(...c.max)))}else{let edificio=mallas.filter(m=>m.visible&&!m.userData.lote.espacio&&m.userData.lote.planta!==SIN_PLANTA);for(let m of edificio.length?edificio:mallas.filter(x=>x.visible&&!x.userData.lote.espacio))caja.union(m.geometry.boundingBox)}return caja}function usar(c){camara=c,mando.object=c,mando.enableRotate=c===persp}let sinMovimiento=typeof window<"u"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,vuelo=null;function volar(objetivo,posicion,dura=720){let de=new THREE.Spherical().setFromVector3(persp.position.clone().sub(mando.target)),a=new THREE.Spherical().setFromVector3(posicion.clone().sub(objetivo)),dt=a.theta-de.theta;dt=Math.atan2(Math.sin(dt),Math.cos(dt)),a.theta=de.theta+dt,vuelo={t0:performance.now(),dura,deObj:mando.target.clone(),aObj:objetivo.clone(),de,a},sucio=!0}function pasoDeVuelo(ahora){if(!vuelo)return;let t=Math.min(1,(ahora-vuelo.t0)/vuelo.dura),e=t<1?1-Math.pow(1-t,4):1;mando.target.lerpVectors(vuelo.deObj,vuelo.aObj,e);let sph=new THREE.Spherical(vuelo.de.radius+(vuelo.a.radius-vuelo.de.radius)*e,vuelo.de.phi+(vuelo.a.phi-vuelo.de.phi)*e,vuelo.de.theta+(vuelo.a.theta-vuelo.de.theta)*e);persp.position.copy(mando.target).add(new THREE.Vector3().setFromSpherical(sph)),persp.lookAt(mando.target),t>=1&&(vuelo=null),sucio=!0}function encuadrar(ids,suave=!1){let c=cajaDe(ids);if(c.isEmpty())return;let centro=c.getCenter(new THREE.Vector3),tam=c.getSize(new THREE.Vector3),radio=Math.max(tam.length()/2,.5),[mi,md]=margenesUtiles(),ma=margenAbajoUtil(),w=Math.max(lienzo.clientWidth-mi-md,1),h=Math.max(lienzo.clientHeight-ma,1),aspect=w/h;if(camara===orto){let dir=vista==="planta"?new THREE.Vector3(0,1,1e-4):new THREE.Vector3(...ALZADOS2[vista]),ancho=vista==="planta"?tam.x:Math.abs(dir.x)>0?tam.z:tam.x,alto=vista==="planta"?tam.z:tam.y,medio=Math.max(alto/2,ancho/2/aspect,1)*1.12;orto.top=medio,orto.bottom=-medio,orto.left=-medio*aspect,orto.right=medio*aspect,orto.zoom=1,orto.position.copy(centro).addScaledVector(dir.normalize(),radio*4),orto.near=.01,orto.far=radio*10,orto.updateProjectionMatrix()}else{let medio=persp.fov*Math.PI/360,horizontal=Math.atan(Math.tan(medio)*aspect),dist=radio/Math.sin(Math.min(medio,horizontal))*(ids&&ids.length?1:aspect>=1?.8:.95),actual=persp.position.clone().sub(mando.target),dir=actual.lengthSq()>0&&vista==="3d"&&sucioOrientacion?actual.normalize():new THREE.Vector3(...DIRECCIONES.iso).normalize(),destino=centro.clone().addScaledVector(dir,dist);if(suave&&vista==="3d"&&!sinMovimiento){persp.near=Math.min(persp.near,Math.max(dist/1e3,.01)),persp.far=Math.max(persp.far,dist*50),persp.updateProjectionMatrix(),volar(centro,destino);return}persp.position.copy(destino),persp.near=Math.max(dist/1e3,.01),persp.far=dist*50,persp.updateProjectionMatrix()}mando.target.copy(centro),mando.update(),pintar()}let sucioOrientacion=!1;function orientar(cara){if(vista!=="3d")return;let dist=Math.max(persp.position.distanceTo(mando.target),1),dir=new THREE.Vector3(...DIRECCIONES[cara]).normalize(),destino=mando.target.clone().addScaledVector(dir,dist);if(!sinMovimiento){volar(mando.target.clone(),destino,640);return}persp.position.copy(destino),mando.update(),pintar()}function ver(tipo,planta){vista=tipo,plantaVista=tipo==="planta"?planta??plantas[0]?.id??null:null,usar(tipo==="3d"?persp:orto),aplicarVisibilidad(),aplicarMateriales(),encuadrar()}let matResaltado=new THREE.MeshBasicMaterial({color:new THREE.Color(ACCENT2),transparent:!0,opacity:.55,depthTest:!0,side:THREE.DoubleSide,clippingPlanes:planos,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:-2}),matNuevo=new THREE.MeshLambertMaterial({color:new THREE.Color(NARANJA),side:THREE.DoubleSide,clippingPlanes:planos,polygonOffset:!0,polygonOffsetFactor:-1,polygonOffsetUnits:-1});function trozos(grupo,ids,material,orden){for(let h of[...grupo.children])h.geometry.dispose(),grupo.remove(h);let porLote=new Map;for(let id of ids)for(let r of rangos.get(id)??[]){let l=porLote.get(r.lote)??[],fuente=r.lote.mesh.geometry.index.array;for(let i=0;im.visible),!1))if(!(h!=null&&hit.point.y>h+1e-4))return{id:Math.round(hit.object.geometry.getAttribute("eid").getX(hit.face.a)),punto:hit.point};return null}let abajo=null,alBajar=ev=>{abajo={x:ev.clientX,y:ev.clientY,t:performance.now()}},alSubir=ev=>{if(!abajo)return;let quieto=Math.hypot(ev.clientX-abajo.x,ev.clientY-abajo.y)<6&&performance.now()-abajo.t<500;if(abajo=null,!quieto){sucioOrientacion=!0;return}let t=tocado(ev);if(modo==="medir"){if(!t)return;let p=[t.punto.x,t.punto.y,t.punto.z];if(!pendiente){pendiente=p,avisos.alPedirMedida(!0);return}let a=pendiente;pendiente=null,medidas.push({a,b:p,metros:Math.hypot(p[0]-a[0],p[1]-a[1],p[2]-a[2])});let linea=new THREE.Line(new THREE.BufferGeometry().setFromPoints([new THREE.Vector3(...a),new THREE.Vector3(...p)]),new THREE.LineBasicMaterial({color:1907999,depthTest:!1}));linea.renderOrder=4,lineasMedida.add(linea),avisos.alPedirMedida(!1),avisos.alMedir([...medidas]),pintar();return}let suma2=ev.ctrlKey||ev.metaKey,ids;t?suma2?ids=seleccion.includes(t.id)?seleccion.filter(x=>x!==t.id):[...seleccion,t.id]:ids=[t.id]:ids=suma2?seleccion:[],seleccionar(ids),avisos.alElegir(ids)};lienzo.addEventListener("pointerdown",alBajar),lienzo.addEventListener("pointerup",alSubir);let v=new THREE.Vector3;function colocarEtiquetas(){for(;etiquetas.childElementCountmedidas.length;)etiquetas.lastChild?.remove();let w=lienzo.clientWidth,hgt=lienzo.clientHeight;medidas.forEach((m,i)=>{v.set((m.a[0]+m.b[0])/2,(m.a[1]+m.b[1])/2,(m.a[2]+m.b[2])/2).project(camara);let e=etiquetas.children[i];e.textContent=`${m.metros.toLocaleString("es-ES",{minimumFractionDigits:2,maximumFractionDigits:2})}\xA0m`,e.style.left=`${(v.x+1)/2*w}px`,e.style.top=`${(1-v.y)/2*hgt}px`,e.style.display=v.z>1?"none":"block"})}function avisarCamara(){let off=camara.position.clone().sub(mando.target);avisos.alCamara(Math.atan2(off.x,off.z),Math.atan2(off.y,Math.hypot(off.x,off.z)))}let raf=0,bucle=()=>{if(!vivo||(raf=requestAnimationFrame(bucle),grabando))return;vuelo&&(pasoDeVuelo(performance.now()),avisarCamara()),(mando.update()||sucio)&&(sucio=!1,renderer.render(escena,camara),colocarEtiquetas(),avisarCamara())},ajustar=()=>{let w=contenedor.clientWidth,h=contenedor.clientHeight;if(!w||!h)return;renderer.setSize(w,h,!1),persp.aspect=w/h,persp.updateProjectionMatrix();let medio=(orto.top-orto.bottom)/2;orto.left=-medio*(w/h),orto.right=medio*(w/h),orto.updateProjectionMatrix(),desplazar(w,h),pintar()};function margenesUtiles(){return margen+margenDer>0&&contenedor.clientWidth>(margen+margenDer)*2?[margen,margenDer]:[0,0]}function margenAbajoUtil(){return margenAbajo>0&&contenedor.clientHeight>margenAbajo*1.6?margenAbajo:0}function desplazar(w,h){let[mi,md]=margenesUtiles(),corre=(mi-md)/2,sube=margenAbajoUtil()/2;for(let c of[persp,orto])corre||sube?c.setViewOffset(w,h,-corre,sube,w,h):c.clearViewOffset()}function sinDesplazar(){persp.clearViewOffset(),orto.clearViewOffset()}let observador=new ResizeObserver(ajustar);observador.observe(contenedor),ajustar(),aplicarVisibilidad(),aplicarMateriales(),encuadrar(),bucle();let num=(n,d=2)=>n.toLocaleString("es-ES",{maximumFractionDigits:d});function formatear(val){if(val==null)return"sin dato";let crudo=typeof val=="object"&&"value"in val?val.value:val,tipo=typeof val=="object"&&val&&typeof val.name=="string"?val.name:"";return crudo==="T"||crudo===!0?"S\xED":crudo==="F"||crudo===!1?"No":typeof crudo=="number"?/LENGTHMEASURE/.test(tipo)?`${num(crudo*rel.L,3)}\xA0m`:/AREAMEASURE/.test(tipo)?`${num(crudo*rel.A)}\xA0m\xB2`:/VOLUMEMEASURE/.test(tipo)?`${num(crudo*rel.V,3)}\xA0m\xB3`:num(crudo,3):String(crudo)}function filasDe(pset){let fuera=[];for(let p of pset.HasProperties??[]){let nombre=p?.Name?.value;nombre&&(p.NominalValue!==void 0?fuera.push({nombre,valor:formatear(p.NominalValue)}):Array.isArray(p.EnumerationValues)&&fuera.push({nombre,valor:p.EnumerationValues.map(formatear).join(", ")}))}for(let q of pset.Quantities??[]){let nombre=q?.Name?.value;nombre&&fuera.push({nombre,valor:formatear(q.LengthValue??q.AreaValue??q.VolumeValue??q.CountValue??q.WeightValue??q.TimeValue)})}return fuera}async function propiedades(id){let grupos=[];for(let p of await api2.properties.getPropertySets(modelo,id,!0)){let filas=filasDe(p);filas.length&&grupos.push({titulo:p?.Name?.value??"Propiedades",filas})}for(let t of await api2.properties.getTypeProperties(modelo,id,!0))for(let p of t.HasPropertySets??[]){let filas=filasDe(p);filas.length&&grupos.push({titulo:`${p?.Name?.value??"Propiedades"} (del tipo)`,filas})}return grupos}function acotar(g,c,W2,H,px,letra){let aPantalla=(x,y,z)=>{let p=new THREE.Vector3(x,y,z).project(orto);return[(p.x+1)/2*W2,(1-p.y)/2*H]},num2=n=>n.toLocaleString("es-ES",{minimumFractionDigits:2,maximumFractionDigits:2}),texto2=(t,x,y,ang,tam,caja2=!1)=>{g.save(),g.translate(x,y);let a=ang;if(a>Math.PI/2+.01&&(a-=Math.PI),a<-Math.PI/2-.01&&(a+=Math.PI),g.rotate(a),g.font=`500 ${tam}px -apple-system, Helvetica, Arial, sans-serif`,g.textAlign="center",g.textBaseline="middle",caja2){let w=g.measureText(t).width+tam*.6;g.fillStyle="#ffffff",g.fillRect(-w/2,-tam*.65,w,tam*1.3)}else g.lineWidth=tam*.35,g.strokeStyle="rgba(255,255,255,0.95)",g.lineJoin="round",g.strokeText(t,0,0);g.fillStyle="#1d1d1f",g.fillText(t,0,0),g.restore()},raya=(a,b)=>{g.beginPath(),g.moveTo(a[0],a[1]),g.lineTo(b[0],b[1]),g.stroke()};g.strokeStyle="#1d1d1f",g.lineWidth=Math.max(1,px*.18);let cg=cajaDe(c.muros);if(!cg.isEmpty()){let y0=cg.min.y,esquinas=[aPantalla(cg.min.x,y0,cg.min.z),aPantalla(cg.max.x,y0,cg.min.z),aPantalla(cg.max.x,y0,cg.max.z),aPantalla(cg.min.x,y0,cg.max.z)],xs=esquinas.map(e=>e[0]),ys=esquinas.map(e=>e[1]),izq=Math.min(...xs),der=Math.max(...xs),arr=Math.min(...ys),aba=Math.max(...ys),horizontalEsX=Math.abs(esquinas[1][0]-esquinas[0][0])>Math.abs(esquinas[3][0]-esquinas[0][0]),largoH=horizontalEsX?cg.max.x-cg.min.x:cg.max.z-cg.min.z,largoV=horizontalEsX?cg.max.z-cg.min.z:cg.max.x-cg.min.x,sep=9*px,tick=1.6*px,ya=aba+sep,xd=der+sep;raya([izq,ya],[der,ya]),raya([izq,aba+2*px],[izq,ya+2*px]),raya([der,aba+2*px],[der,ya+2*px]),raya([izq-tick,ya+tick],[izq+tick,ya-tick]),raya([der-tick,ya+tick],[der+tick,ya-tick]),texto2(num2(largoH),(izq+der)/2,ya-letra*.8,0,Math.round(letra*1.05)),raya([xd,arr],[xd,aba]),raya([der+2*px,arr],[xd+2*px,arr]),raya([der+2*px,aba],[xd+2*px,aba]),raya([xd-tick,arr+tick],[xd+tick,arr-tick]),raya([xd-tick,aba+tick],[xd+tick,aba-tick]),texto2(num2(largoV),xd+letra*.8,(arr+aba)/2,-Math.PI/2,Math.round(letra*1.05))}let porId=new Map(medicion.elementos.map(e=>[e.express_id,e]));for(let id of c.muros){let e=porId.get(id),cj=medidor.caja(id);if(!e||!cj||e.longitud==null||e.longitud<.6)continue;let largoX=cj.max[0]-cj.min[0],largoZ=cj.max[2]-cj.min[2],enX=largoX>=largoZ,cy=cj.min[1],mx=(cj.min[0]+cj.max[0])/2,mz=(cj.min[2]+cj.max[2])/2,a=enX?aPantalla(cj.min[0],cy,mz):aPantalla(mx,cy,cj.min[2]),b=enX?aPantalla(cj.max[0],cy,mz):aPantalla(mx,cy,cj.max[2]),ang=Math.atan2(b[1]-a[1],b[0]-a[0]),off=(enX?largoZ:largoX)*(W2/Math.max(orto.right-orto.left,1e-6))/2+letra*.75;texto2(num2(e.longitud),(a[0]+b[0])/2-Math.sin(ang)*off,(a[1]+b[1])/2+Math.cos(ang)*off,ang,Math.round(letra*.82))}for(let id of c.huecos){let e=porId.get(id),cj=medidor.caja(id);if(!e||!cj||e.ancho==null)continue;let largoX=cj.max[0]-cj.min[0],largoZ=cj.max[2]-cj.min[2],cy=cj.min[1],mx=(cj.min[0]+cj.max[0])/2,mz=(cj.min[2]+cj.max[2])/2,a=largoX>=largoZ?aPantalla(cj.min[0],cy,mz):aPantalla(mx,cy,cj.min[2]),b=largoX>=largoZ?aPantalla(cj.max[0],cy,mz):aPantalla(mx,cy,cj.max[2]),[x,y]=aPantalla(mx,cy,mz);texto2(num2(e.ancho),x,y,Math.atan2(b[1]-a[1],b[0]-a[0]),Math.round(letra*.72),!0)}}function aTamano(ancho,alto,hacer){let antes={pr:renderer.getPixelRatio(),aspect:persp.aspect};renderer.setPixelRatio(1),renderer.setSize(ancho,alto,!1),sinDesplazar(),persp.aspect=ancho/alto,persp.updateProjectionMatrix();try{return hacer()}finally{renderer.setPixelRatio(antes.pr),ajustar()}}return{plantas,medicion,caja:id=>medidor.caja(id),esquema,programa,ver,setCorte(si){conCorte=si,aplicarVisibilidad()},setEstancias(si){conEstancias=si,aplicarVisibilidad()},setEstilo(e){estilo=e,aplicarMateriales()},setModo(m){modo=m,pendiente=null,avisos.alPedirMedida(!1),lienzo.style.cursor=m==="medir"?"crosshair":""},setAcabado(clave){if(clave&&!ACABADOS[clave])throw new Error(`No hay ning\xFAn acabado \xAB${clave}\xBB`);acabado=clave,aplicarMateriales()},setMargen(izquierda,derecha=0,abajo2=0){margen=Math.max(0,izquierda),margenDer=Math.max(0,derecha),margenAbajo=Math.max(0,abajo2),ajustar()},setGiro(si){si&&vista!=="3d"&&ver("3d"),mando.autoRotate=si,mando.autoRotateSpeed=.7,pintar()},setFiltroFases(nuevos){filtroNuevos=nuevos?new Set(nuevos):null,trozos(fases,nuevos??[],matNuevo,2),aplicarMateriales()},orientar,encuadrar:ids=>encuadrar(ids,!0),seleccionar,borrarMedidas(){medidas.length=0,pendiente=null;for(let l of[...lineasMedida.children])l.geometry.dispose(),lineasMedida.remove(l);avisos.alMedir([]),pintar()},propiedades,async grabarVuelta(segundos){if(typeof MediaRecorder>"u"||typeof lienzo.captureStream!="function")throw new Error("Este navegador no puede grabar v\xEDdeo del dibujo: prueba con Chrome, Edge o Safari al d\xEDa");let tipo=["video/mp4;codecs=avc1.640028","video/mp4;codecs=avc1","video/mp4","video/webm;codecs=vp9","video/webm"].find(t=>MediaRecorder.isTypeSupported(t));if(!tipo)throw new Error("Este navegador no sabe grabar v\xEDdeo en MP4 ni en WebM");vista!=="3d"&&ver("3d"),grabando=!0;let antes=persp.position.clone(),objetivo=mando.target.clone(),off=persp.position.clone().sub(objetivo),radio=Math.max(Math.hypot(off.x,off.z),.5),alto=off.y,ang0=Math.atan2(off.z,off.x),pr=renderer.getPixelRatio();try{renderer.setPixelRatio(1),renderer.setSize(1920,1080,!1),sinDesplazar(),persp.aspect=16/9,persp.updateProjectionMatrix();{let flujo=lienzo.captureStream(30),rec=new MediaRecorder(flujo,{mimeType:tipo,videoBitsPerSecond:12e6}),partes=[];rec.ondataavailable=e=>{e.data.size&&partes.push(e.data)};let parado=new Promise((ok,mal)=>{rec.onstop=()=>ok(),rec.onerror=e=>mal(new Error(`La grabaci\xF3n fall\xF3: ${e?.error?.message??"sin motivo"}`))});rec.start(250);let t0=performance.now();return await new Promise(ok=>{let paso=()=>{let t=Math.min(1,(performance.now()-t0)/(segundos*1e3)),suave=t<.5?2*t*t:1-Math.pow(-2*t+2,2)/2,ang=ang0+suave*Math.PI*2;persp.position.set(objetivo.x+radio*Math.cos(ang),objetivo.y+alto,objetivo.z+radio*Math.sin(ang)),persp.lookAt(objetivo),renderer.render(escena,persp),t<1?requestAnimationFrame(paso):ok()};requestAnimationFrame(paso)}),rec.stop(),await parado,flujo.getTracks().forEach(t=>t.stop()),{blob:new Blob(partes,{type:tipo.split(";")[0]}),extension:tipo.startsWith("video/mp4")?"mp4":"webm"}}}finally{renderer.setPixelRatio(pr),ajustar(),persp.position.copy(antes),persp.lookAt(objetivo),mando.update(),grabando=!1,pintar()}},async exportarGlb(clave,hasta,suelos){let{GLTFExporter}=await exportadorGltf(),fuera=new THREE.Scene,materiales=new Map,texturas=[],tope=hasta==null?null:ordenDe.get(hasta);if(hasta!=null&&tope==null)throw new Error(`No existe la planta ${hasta} en este modelo`);for(let l of lotes.values()){if(l.espacio||!l.mesh)continue;if(tope!=null){let orden=ordenDe.get(l.planta);if(orden==null||orden>tope||orden===tope&&(l.categoria==="Falso techo"||l.categoria==="Cubierta"))continue}let vidrio=l.color[3]<.99,hex=vidrio||!clave?null:ACABADOS[clave].colores[l.categoria]??ACABADOS[clave].resto??null,nombre=vidrio?"Vidrio":l.categoria,color=hex?new THREE.Color(hex):l.original.clone(),k=`${nombre}|${color.getHexString()}|${vidrio?l.color[3]:1}`,mat=materiales.get(k);mat||(mat=vidrio?new THREE.MeshStandardMaterial({name:nombre,color:new THREE.Color("#dbe7ee"),roughness:.05,metalness:0,transparent:!0,opacity:.32,side:THREE.DoubleSide}):new THREE.MeshStandardMaterial({name:nombre,color,roughness:.85,metalness:0,side:THREE.DoubleSide}),materiales.set(k,mat));let g=new THREE.BufferGeometry;g.setAttribute("position",l.mesh.geometry.getAttribute("position")),g.setAttribute("normal",l.mesh.geometry.getAttribute("normal")),g.setIndex(l.mesh.geometry.getIndex());let m=new THREE.Mesh(g,mat);m.name=l.categoria,fuera.add(m)}if(suelos&&suelos.size){let porEstancia=new Map;for(let l of lotes.values()){if(!l.espacio||!l.mesh)continue;if(tope!=null){let orden=ordenDe.get(l.planta);if(orden==null||orden>tope)continue}let g=l.mesh.geometry,P=g.getAttribute("position").array,N=g.getAttribute("normal").array,E=g.getAttribute("eid").array,I=g.getIndex().array;for(let t=0;t-.9)continue;let caras=porEstancia.get(id)??[];for(let v2 of[a,c,b])caras.push(P[v2*3],P[v2*3+1]+.012,P[v2*3+2]);porEstancia.set(id,caras)}}for(let[id,caras]of porEstancia){let g=new THREE.BufferGeometry;g.setAttribute("position",new THREE.Float32BufferAttribute(caras,3));let uv=[];for(let i=0;ix.planta===o.planta).map(x=>x.express_id):[],c=cajaDe(dePlanta.length?dePlanta:void 0),centro=c.getCenter(new THREE.Vector3),tam=c.getSize(new THREE.Vector3),radio=Math.max(tam.length()/2,1),dir=o.tipo==="planta"?new THREE.Vector3(0,1,1e-4):new THREE.Vector3(...ALZADOS2[o.lado??"sur"]);if(dir.normalize(),o.tipo==="seccion"){let n=dir.clone().negate();corte.normal.copy(n),corte.constant=-n.dot(centro)}let girada=o.tipo==="planta"&&tam.z>tam.x*1.05&&o.anchoMm>o.altoMm,ancho=o.tipo==="planta"?girada?tam.z:tam.x:Math.abs(dir.x)>.5?tam.z:tam.x,alto=o.tipo==="planta"?girada?tam.x:tam.z:tam.y,ESCALAS=[50,75,100,150,200,250,300,400,500,750,1e3],justa=Math.max(ancho/o.anchoMm,alto/o.altoMm)*1e3*1.06,escala=o.ajustada?justa:ESCALAS.find(e=>ancho*1.08<=o.anchoMm*e/1e3&&alto*1.08<=o.altoMm*e/1e3)??ESCALAS[ESCALAS.length-1],medioAncho=o.anchoMm*escala/2e3,medioAlto=o.altoMm*escala/2e3;orto.left=-medioAncho,orto.right=medioAncho,orto.top=medioAlto,orto.bottom=-medioAlto,orto.zoom=1,orto.near=.01,orto.far=radio*10,orto.position.copy(centro).addScaledVector(dir,radio*4),o.tipo==="planta"?orto.up.set(girada?1:0,0,girada?0:-1):orto.up.set(0,1,0),orto.lookAt(centro),orto.clearViewOffset(),orto.updateProjectionMatrix(),renderer.setPixelRatio(1),renderer.setSize(W2,H,!1),renderer.setClearColor(new THREE.Color("#ffffff"),1),renderer.render(escena,orto);let hoja=document.createElement("canvas");hoja.width=W2,hoja.height=H;let g2=hoja.getContext("2d");if(!g2)throw new Error("Este navegador no deja dibujar la l\xE1mina (canvas 2D)");g2.drawImage(lienzo,0,0);let letra=Math.round(2.4*o.px);if(o.tipo==="planta"&&!o.ajustada){let a=centro.clone().project(orto),b=centro.clone().add(new THREE.Vector3(0,0,-10)).project(orto),ang=Math.atan2(-(b.y-a.y)*H,(b.x-a.x)*W2),cx=W2-14*o.px,cy=14*o.px,r=6*o.px;g2.save(),g2.translate(cx,cy),g2.strokeStyle="#1d1d1f",g2.lineWidth=Math.max(1,o.px*.25),g2.beginPath(),g2.arc(0,0,r,0,Math.PI*2),g2.stroke(),g2.rotate(ang),g2.fillStyle="#1d1d1f",g2.beginPath(),g2.moveTo(r*.85,0),g2.lineTo(-r*.45,r*.38),g2.lineTo(-r*.2,0),g2.lineTo(-r*.45,-r*.38),g2.closePath(),g2.fill(),g2.restore(),g2.font=`700 ${Math.round(letra*1.1)}px -apple-system, Helvetica, Arial, sans-serif`,g2.textAlign="center",g2.textBaseline="middle",g2.fillStyle="#1d1d1f",g2.fillText("N",cx+Math.cos(ang)*r*1.55,cy+Math.sin(ang)*r*1.55)}g2.textAlign="center",g2.textBaseline="middle";for(let e of o.etiquetas??[]){let cj=medidor.caja(e.id);if(!cj)continue;let p=new THREE.Vector3((cj.min[0]+cj.max[0])/2,cj.min[1]+.05,(cj.min[2]+cj.max[2])/2).project(orto),x=(p.x+1)/2*W2,y=(1-p.y)/2*H;if(e.marca){g2.font=`600 ${Math.round(letra*.9)}px -apple-system, Helvetica, Arial, sans-serif`;let t=e.lineas[0],w=g2.measureText(t).width+letra*.9,h=letra*1.5;g2.fillStyle="#ffffff",g2.strokeStyle="#1d1d1f",g2.lineWidth=Math.max(1,o.px*.2),g2.beginPath(),g2.roundRect(x-w/2,y-h/2,w,h,h/2),g2.fill(),g2.stroke(),g2.fillStyle="#1d1d1f",g2.fillText(t,x,y+1);continue}e.lineas.forEach((t,i)=>{g2.font=`${i===0?600:400} ${i===0?letra:Math.round(letra*.9)}px -apple-system, Helvetica, Arial, sans-serif`;let yy=y+(i-(e.lineas.length-1)/2)*letra*1.25;g2.lineWidth=letra*.35,g2.strokeStyle="rgba(255,255,255,0.92)",g2.lineJoin="round",g2.strokeText(t,x,yy),g2.fillStyle="#1d1d1f",g2.fillText(t,x,yy)})}if(o.cotas&&o.tipo==="planta"&&acotar(g2,o.cotas,W2,H,o.px,letra),o.ajustada){let cw=Math.min(W2,Math.round(ancho*1.06/(2*medioAncho)*W2)),ch=Math.min(H,Math.round(alto*1.06/(2*medioAlto)*H)),recorte=document.createElement("canvas");recorte.width=cw,recorte.height=ch;let g3=recorte.getContext("2d");if(!g3)throw new Error("Este navegador no deja dibujar la l\xE1mina (canvas 2D)");return g3.drawImage(hoja,(W2-cw)/2,(H-ch)/2,cw,ch,0,0,cw,ch),{imagen:recorte.toDataURL("image/jpeg",.9),escala}}return{imagen:hoja.toDataURL("image/jpeg",.9),escala}}finally{for(let g of grupos){for(let h of g.children)h.geometry.dispose();escena.remove(g)}for(let m of materiales)m.dispose();fases.visible=antes.fases,resaltado.visible=antes.resaltado,corte.normal.copy(antes.normal),corte.constant=antes.constante,vista=antes.vista,plantaVista=antes.plantaVista,estilo=antes.estilo,acabado=antes.acabado,conCorte=antes.conCorte,conEstancias=antes.conEstancias,Object.assign(orto,{left:antes.orto.l,right:antes.orto.r,top:antes.orto.t,bottom:antes.orto.b,zoom:antes.orto.z,near:antes.orto.near,far:antes.orto.far}),orto.up.copy(antes.arriba),orto.position.copy(antes.orto.pos),orto.quaternion.copy(antes.orto.q),orto.updateProjectionMatrix(),renderer.setClearColor(FONDO,1),renderer.setPixelRatio(antes.pr),usar(antes.camara),aplicarVisibilidad(),aplicarMateriales(),ajustar()}},capturar(ancho,alto,cerca){let antes=persp.position.clone();cerca&&camara===persp&&persp.position.copy(mando.target).addScaledVector(antes.clone().sub(mando.target),.72);let dato=aTamano(ancho,alto,()=>(renderer.render(escena,camara),lienzo.toDataURL("image/jpeg",.86)));persp.position.copy(antes),pintar();let bytes2=Uint8Array.from(atob(dato.split(",")[1]),c=>c.charCodeAt(0));return new Blob([bytes2],{type:"image/jpeg"})},destruir(){vivo=!1,cancelAnimationFrame(raf),observador.disconnect(),lienzo.removeEventListener("pointerdown",alBajar),lienzo.removeEventListener("pointerup",alSubir),mando.dispose(),escena.traverse(o=>{o.geometry?.dispose?.(),o.material&&(Array.isArray(o.material)?o.material:[o.material]).forEach(m=>m.dispose())});for(let l of lotes.values())l.plano?.dispose();renderer.dispose(),renderer.forceContextLoss(),lienzo.remove(),etiquetas.remove(),api2.CloseModel(modelo)}}}var import_react11=__toESM(require("react")),import_lucide_react10=require("lucide-react");var LADO=52,CARAS=[{cara:"frontal",texto:"Frente",transform:`translateZ(${LADO/2}px)`},{cara:"trasera",texto:"Detr\xE1s",transform:`rotateY(180deg) translateZ(${LADO/2}px)`},{cara:"derecha",texto:"Derecha",transform:`rotateY(90deg) translateZ(${LADO/2}px)`},{cara:"izquierda",texto:"Izquierda",transform:`rotateY(-90deg) translateZ(${LADO/2}px)`},{cara:"superior",texto:"Arriba",transform:`rotateX(90deg) translateZ(${LADO/2}px)`},{cara:"inferior",texto:"Abajo",transform:`rotateX(-90deg) translateZ(${LADO/2}px)`}];function ViewCube({giro,cabeceo,onCara,derecha=22}){let[encima,setEncima]=import_react11.default.useState(null),[casa,setCasa]=import_react11.default.useState(!1);return __gh("div",{style:{position:"absolute",top:30,right:derecha,zIndex:3,display:"flex",alignItems:"center",gap:12,userSelect:"none"},"data-gufi-src":"sections/modelo/viewcube.tsx:24"},__gh("button",{type:"button",title:"Vista inicial","aria-label":"Vista inicial",onClick:()=>onCara("iso"),onPointerEnter:()=>setCasa(!0),onPointerLeave:()=>setCasa(!1),style:{width:32,height:32,borderRadius:99,border:"none",display:"grid",placeItems:"center",background:"rgba(255,255,255,0.92)",backdropFilter:"blur(12px)",WebkitBackdropFilter:"blur(12px)",boxShadow:"0 4px 14px rgba(0,0,0,0.10), 0 0 0 0.5px rgba(0,0,0,0.08)",color:casa?ACCENT:INK,cursor:"pointer",transform:casa?"scale(1.06) rotate(-30deg)":"none",transition:"transform 300ms cubic-bezier(0.22, 1, 0.36, 1), color 150ms ease"},"data-gufi-src":"sections/modelo/viewcube.tsx:25"},__gh(import_lucide_react10.RotateCcw,{size:15,strokeWidth:2})),__gh("div",{style:{width:LADO,height:LADO,perspective:420,filter:"drop-shadow(0 8px 16px rgba(0,0,0,0.12)) drop-shadow(0 1px 2px rgba(0,0,0,0.08))"},"data-gufi-src":"sections/modelo/viewcube.tsx:32"},__gh("div",{style:{position:"relative",width:LADO,height:LADO,transformStyle:"preserve-3d",transform:`rotateX(${-cabeceo}rad) rotateY(${-giro}rad)`},"data-gufi-src":"sections/modelo/viewcube.tsx:33"},CARAS.map(c=>{let es=encima===c.cara;return __gh("button",{key:c.cara,type:"button",onClick:()=>onCara(c.cara),onPointerEnter:()=>setEncima(c.cara),onPointerLeave:()=>setEncima(null),"aria-label":`Mirar desde ${c.texto.toLowerCase()}`,style:{position:"absolute",inset:0,display:"grid",placeItems:"center",transform:c.transform,backfaceVisibility:"hidden",border:`1px solid ${es?"rgba(99,91,255,0.45)":"rgba(0,0,0,0.09)"}`,borderRadius:9,background:es?"linear-gradient(180deg, #f3f2ff, #e9e7ff)":"linear-gradient(180deg, #ffffff, #f4f4f7)",color:es?ACCENT:MUTED,fontFamily:"inherit",fontSize:9.5,fontWeight:600,letterSpacing:"-0.1px",cursor:"pointer",padding:0,transition:"background 150ms ease, color 150ms ease, border-color 150ms ease"},"data-gufi-src":"sections/modelo/viewcube.tsx:37"},c.texto)}))))}var import_react12=__toESM(require("react")),import_lucide_react11=require("lucide-react");var m3=n=>medida(n,"m\xB3",3);function nombreLimpio(t){if(!t)return null;let sinId=t.replace(/:\d+$/,"").trim(),partes=sinId.split(":").map(x=>x.trim()).filter(Boolean);return partes.length?partes[partes.length-1]:sinId}function Baldosa2({valor:valor2,nombre,ancha}){let[n,unidad]=valor2.includes("\xA0")?valor2.split("\xA0"):[valor2,""];return __gh("div",{className:"arq-entra",style:{gridColumn:ancha?"1 / -1":void 0,background:"#fff",borderRadius:16,padding:"12px 14px 11px",boxShadow:"0 1px 2px rgba(0,0,0,0.04), 0 0 0 0.5px rgba(0,0,0,0.06)",minWidth:0},"data-gufi-src":"sections/modelo/inspector.tsx:27"},__gh("div",{style:{fontSize:21,fontWeight:700,letterSpacing:"-0.6px",color:INK,fontVariantNumeric:"tabular-nums",lineHeight:1.1,overflowWrap:"anywhere"},"data-gufi-src":"sections/modelo/inspector.tsx:28"},n,unidad&&__gh("span",{style:{fontSize:13,fontWeight:600,color:MUTED,marginLeft:3,letterSpacing:0},"data-gufi-src":"sections/modelo/inspector.tsx:29"},unidad)),__gh("div",{style:{fontSize:12,color:MUTED,marginTop:4},"data-gufi-src":"sections/modelo/inspector.tsx:31"},nombre))}function Copiar({texto:texto2}){let[hecho,setHecho]=import_react12.default.useState(!1);return __gh(Capsula,{pequeno:!0,icono:hecho?import_lucide_react11.Check:import_lucide_react11.Copy,titulo:"Copiar",onClick:()=>{navigator.clipboard.writeText(texto2).then(()=>{setHecho(!0),setTimeout(()=>setHecho(!1),1400)})}})}var ICONOS={Puerta:import_lucide_react11.DoorOpen,Ventana:import_lucide_react11.LayoutGrid,Estancia:import_lucide_react11.Layers};function Dato({etiqueta,valor:valor2}){return __gh("div",{style:{background:"#fff",padding:"11px 14px",minWidth:0},"data-gufi-src":"sections/modelo/inspector.tsx:50"},__gh("div",{style:{fontSize:11.5,color:MUTED},"data-gufi-src":"sections/modelo/inspector.tsx:51"},etiqueta),__gh("div",{style:{fontSize:19,fontWeight:600,letterSpacing:"-0.3px",color:INK,fontVariantNumeric:"tabular-nums",marginTop:2,overflowWrap:"anywhere"},"data-gufi-src":"sections/modelo/inspector.tsx:52"},valor2))}function Cabeza({icono:I,titulo,sub}){return __gh("div",{style:{display:"flex",alignItems:"center",gap:12,padding:"2px 4px"},"data-gufi-src":"sections/modelo/inspector.tsx:59"},__gh("span",{"aria-hidden":!0,style:{width:42,height:42,borderRadius:12,background:"linear-gradient(180deg, #ffffff, #f2f2f6)",boxShadow:"0 2px 8px rgba(0,0,0,0.06), 0 0 0 0.5px rgba(0,0,0,0.08)",display:"grid",placeItems:"center",color:INK,flexShrink:0},"data-gufi-src":"sections/modelo/inspector.tsx:60"},__gh(I,{size:19,strokeWidth:1.7})),__gh("span",{style:{minWidth:0},"data-gufi-src":"sections/modelo/inspector.tsx:63"},__gh("span",{style:{display:"block",fontSize:16.5,fontWeight:700,letterSpacing:"-0.35px",lineHeight:1.25,color:INK,overflowWrap:"anywhere"},"data-gufi-src":"sections/modelo/inspector.tsx:64"},titulo),sub&&__gh("span",{style:{display:"block",fontSize:12,color:MUTED,marginTop:1,overflowWrap:"anywhere"},"data-gufi-src":"sections/modelo/inspector.tsx:65"},sub)))}function DelIfc({filas,props,resumen}){let[abierto,setAbierto]=import_react12.default.useState(!1);return __gh("section",{style:{background:"#fff",borderRadius:16,overflow:"hidden",boxShadow:"0 1px 2px rgba(0,0,0,0.04), 0 0 0 0.5px rgba(0,0,0,0.06)"},"data-gufi-src":"sections/modelo/inspector.tsx:75"},__gh("button",{type:"button",onClick:()=>setAbierto(a=>!a),"aria-expanded":abierto,style:{width:"100%",display:"flex",alignItems:"center",gap:10,padding:"13px 14px",border:"none",background:"transparent",cursor:"pointer",fontFamily:"inherit",textAlign:"left"},"data-gufi-src":"sections/modelo/inspector.tsx:76"},__gh("span",{style:{flex:1,minWidth:0},"data-gufi-src":"sections/modelo/inspector.tsx:78"},__gh("span",{style:{display:"block",fontSize:14,fontWeight:600,color:INK},"data-gufi-src":"sections/modelo/inspector.tsx:79"},"Del IFC"),__gh("span",{style:{display:"block",fontSize:12,color:MUTED,marginTop:1},"data-gufi-src":"sections/modelo/inspector.tsx:80"},resumen??(props==null?"Leyendo sus propiedades":`Clase, GlobalId${props.length?` y ${plural(props.length,"conjunto","conjuntos")} de propiedades`:""}`))),__gh(import_lucide_react11.ChevronDown,{size:16,strokeWidth:2,color:MUTED,style:{transform:abierto?"rotate(180deg)":"none",transition:"transform 250ms cubic-bezier(0.22, 1, 0.36, 1)"},"aria-hidden":!0})),abierto&&__gh("div",{className:"arq-entra",style:{borderTop:`1px solid ${HAIRLINE}`},"data-gufi-src":"sections/modelo/inspector.tsx:85"},filas.map(([k,v],i)=>__gh("div",{key:k,style:{display:"flex",alignItems:"center",gap:10,padding:"10px 14px",borderTop:i?`1px solid ${HAIRLINE}`:"none"},"data-gufi-src":"sections/modelo/inspector.tsx:87"},__gh("span",{style:{flex:1,minWidth:0},"data-gufi-src":"sections/modelo/inspector.tsx:88"},__gh("span",{style:{display:"block",fontSize:12,color:MUTED},"data-gufi-src":"sections/modelo/inspector.tsx:89"},k),__gh("span",{style:{display:"block",fontSize:13.5,color:INK,overflowWrap:"anywhere",fontVariantNumeric:k==="GlobalId"?"tabular-nums":void 0},"data-gufi-src":"sections/modelo/inspector.tsx:90"},v)),k==="GlobalId"&&__gh(Copiar,{texto:v}))),props&&props.length>0&&__gh("div",{style:{borderTop:`1px solid ${HAIRLINE}`},"data-gufi-src":"sections/modelo/inspector.tsx:96"},props.map((g,i)=>__gh(Conjunto,{key:`${g.titulo}-${i}`,g,abierto:!1})))))}function Conjunto({g,abierto:inicial}){let[abierto,setAbierto]=import_react12.default.useState(inicial);return __gh("div",{style:{borderTop:`1px solid ${HAIRLINE}`},"data-gufi-src":"sections/modelo/inspector.tsx:110"},__gh("button",{type:"button",onClick:()=>setAbierto(!abierto),"aria-expanded":abierto,style:{display:"flex",alignItems:"center",gap:8,width:"100%",minHeight:44,padding:"8px 14px",border:"none",background:"transparent",fontFamily:"inherit",fontSize:13,fontWeight:600,color:INK,cursor:"pointer",textAlign:"left"},"data-gufi-src":"sections/modelo/inspector.tsx:111"},__gh("span",{style:{flex:1,minWidth:0,overflowWrap:"anywhere"},"data-gufi-src":"sections/modelo/inspector.tsx:113"},g.titulo),__gh("span",{style:{fontSize:12,color:FAINT,fontWeight:500,fontVariantNumeric:"tabular-nums"},"data-gufi-src":"sections/modelo/inspector.tsx:114"},numero(g.filas.length)),__gh(import_lucide_react11.ChevronDown,{size:14,strokeWidth:2,style:{color:MUTED,transform:abierto?"rotate(180deg)":"none",transition:"transform 200ms ease"},"aria-hidden":!0})),abierto&&__gh("div",{style:{padding:"0 14px 10px"},"data-gufi-src":"sections/modelo/inspector.tsx:118"},g.filas.map((f,j)=>__gh("div",{key:`${f.nombre}-${j}`,style:{display:"flex",gap:12,padding:"5px 0",fontSize:12.5},"data-gufi-src":"sections/modelo/inspector.tsx:120"},__gh("span",{style:{flex:"0 0 44%",minWidth:0,color:MUTED,overflowWrap:"anywhere"},"data-gufi-src":"sections/modelo/inspector.tsx:121"},f.nombre),__gh("span",{style:{flex:1,minWidth:0,color:INK,overflowWrap:"anywhere"},"data-gufi-src":"sections/modelo/inspector.tsx:122"},f.valor)))))}function SelectorMaterial({campo,actual,catalogo,onElegir}){let[q,setQ]=import_react12.default.useState(""),uso=campo==="suelo"?"Suelo":"Paredes",de=catalogo.filter(m=>(m.uso??"Suelo")===uso&&m.activo!==!1),t=q.trim().toLowerCase(),lista=t?de.filter(m=>[m.nombre,m.marca].some(x=>String(x??"").toLowerCase().includes(t))):de,elegido=catalogo.find(m=>m.id===actual);return __gh("div",{style:{display:"flex",alignItems:"center",gap:10},"data-gufi-src":"sections/modelo/inspector.tsx:148"},__gh("span",{style:{width:58,fontSize:13,color:MUTED,flexShrink:0},"data-gufi-src":"sections/modelo/inspector.tsx:149"},uso),__gh(Menu,{ancho:280,alinear:"derecha",boton:(abrir2,abierto)=>__gh(BotonMenu,{onClick:abrir2,abierto},__gh("span",{style:{display:"inline-flex",alignItems:"center",gap:8},"data-gufi-src":"sections/modelo/inspector.tsx:152"},elegido&&__gh(Muestra,{color:elegido.color}),elegido?elegido.nombre:"Sin elegir"))},cerrar=>__gh(__gf,null,de.length>6&&__gh("div",{style:{padding:"2px 2px 6px"},"data-gufi-src":"sections/modelo/inspector.tsx:160"},__gh(Buscador,{valor:q,onCambio:setQ,placeholder:"Buscar material",ancho:"100%"})),__gh(MenuItem,{elegido:actual==null,onClick:()=>{cerrar(),onElegir(null)}},"Sin elegir"),lista.map(m=>__gh(MenuItem,{key:m.id,elegido:m.id===actual,sub:[m.marca,m.precio!=null?`${euros(Number(m.precio))}/m\xB2`:null].filter(Boolean).join(" \xB7 "),onClick:()=>{cerrar(),onElegir(m.id)}},m.nombre)))))}function Detalle({escena,seleccion,porId,props,modelo,onFase,onPlanta,onElegir,onEncuadrar,materiales}){let plantaNombre=id=>id==null?"Sin planta":escena.plantas.find(p=>p.id===id)?.nombre??"Sin planta",pie=__gh("div",{style:{display:"flex",gap:8,flexWrap:"wrap",padding:"2px 4px"},"data-gufi-src":"sections/modelo/inspector.tsx:186"},__gh(Capsula,{pequeno:!0,icono:import_lucide_react11.Crosshair,onClick:()=>onEncuadrar(seleccion)},"Encuadrar"),__gh(Capsula,{pequeno:!0,icono:import_lucide_react11.X,onClick:()=>onElegir([])},"Quitar selecci\xF3n"));if(seleccion.length>1){let porCategoria=new Map;for(let id of seleccion){let x2=porId.get(id),c=x2?"categoria"in x2?x2.categoria:"Estancia":"Otro";porCategoria.set(c,[...porCategoria.get(c)??[],id])}return __gh(__gf,null,__gh(Cabeza,{icono:import_lucide_react11.Shapes,titulo:plural(seleccion.length,"pieza","piezas"),sub:"Elegidas en el modelo"}),pie,__gh(Grupo,null,[...porCategoria.entries()].sort((a,b)=>b[1].length-a[1].length).map(([c,ids],i)=>__gh(Fila,{key:c,primera:i===0,titulo:c==="Estancia"?"Estancias":PLURAL[c]??c,valor:numero(ids.length),onClick:()=>onElegir(ids)}))))}let x=seleccion.length===1?porId.get(seleccion[0]):void 0;if(x){let estancia=!("categoria"in x),e=x,s=x,mismoTipo=estancia||!e.tipo?[]:escena.medicion.elementos.filter(o=>o.categoria===e.categoria&&o.tipo===e.tipo).map(o=>o.express_id),filas=estancia?[["Superficie \xFAtil",medida(s.superficie,"m\xB2")],["Per\xEDmetro",medida(s.perimetro,"m")],["Altura",medida(s.altura,"m")],["Volumen",m3(s.volumen)]]:[e.longitud!=null&&["Longitud",medida(e.longitud,"m")],e.altura!=null&&["Altura",medida(e.altura,"m")],e.ancho!=null&&[["Puerta","Ventana"].includes(e.categoria)?"Anchura":"Grosor",medida(e.ancho,"m",3)],e.superficie!=null&&["Superficie",medida(e.superficie,"m\xB2")],e.volumen!=null&&["Volumen",m3(e.volumen)]].filter(Boolean),titulo=estancia?[s.numero,s.nombre].filter(Boolean).join(" \xB7 ")||"Estancia":nombreLimpio(e.tipo)??nombreLimpio(e.nombre)??e.categoria,IconoPieza=ICONOS[estancia?"Estancia":e.categoria]??import_lucide_react11.Box,conDato=filas.filter(([,v])=>v!=="sin dato");return __gh(__gf,null,__gh("div",{style:{background:"#fff",borderRadius:20,padding:"16px 16px 14px",boxShadow:"0 1px 2px rgba(0,0,0,0.04), 0 0 0 0.5px rgba(0,0,0,0.06)",display:"flex",flexDirection:"column",gap:14},"data-gufi-src":"sections/modelo/inspector.tsx:235"},__gh("div",{style:{display:"flex",gap:12,alignItems:"flex-start"},"data-gufi-src":"sections/modelo/inspector.tsx:236"},__gh("span",{"aria-hidden":!0,style:{width:44,height:44,borderRadius:13,flexShrink:0,display:"grid",placeItems:"center",color:ACCENT,background:"linear-gradient(180deg, #f4f3ff, #e9e7ff)",boxShadow:"inset 0 0 0 0.5px rgba(99,91,255,0.18)"},"data-gufi-src":"sections/modelo/inspector.tsx:237"},__gh(IconoPieza,{size:20,strokeWidth:1.8})),__gh("span",{style:{minWidth:0},"data-gufi-src":"sections/modelo/inspector.tsx:240"},__gh("span",{style:{display:"block",fontSize:17,fontWeight:700,letterSpacing:"-0.4px",lineHeight:1.22,color:INK,overflowWrap:"anywhere"},"data-gufi-src":"sections/modelo/inspector.tsx:241"},titulo),__gh("span",{style:{display:"block",fontSize:12.5,color:MUTED,marginTop:3},"data-gufi-src":"sections/modelo/inspector.tsx:242"},`${estancia?"Estancia":e.categoria} \xB7 ${plantaNombre(x.planta)}`))),__gh("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},"data-gufi-src":"sections/modelo/inspector.tsx:245"},__gh(Capsula,{pequeno:!0,icono:import_lucide_react11.Crosshair,onClick:()=>onEncuadrar(seleccion)},"Encuadrar"),mismoTipo.length>1&&__gh(Capsula,{pequeno:!0,icono:import_lucide_react11.Shapes,onClick:()=>onElegir(mismoTipo)},`Las ${numero(mismoTipo.length)} de este tipo`),__gh(Capsula,{pequeno:!0,icono:import_lucide_react11.X,titulo:"Quitar selecci\xF3n",onClick:()=>onElegir([])}))),conDato.length?__gh("section",{style:{display:"flex",flexDirection:"column",gap:8},"data-gufi-src":"sections/modelo/inspector.tsx:252"},__gh("div",{style:{display:"grid",gridTemplateColumns:conDato.length===1?"1fr":"1fr 1fr",gap:8},"data-gufi-src":"sections/modelo/inspector.tsx:253"},conDato.map(([k,v],i)=>__gh(Baldosa2,{key:k,valor:v,nombre:k,ancha:conDato.length%2===1&&i===conDato.length-1}))),!estancia&&__gh("span",{style:{fontSize:11.5,color:MUTED,padding:"0 4px"},"data-gufi-src":"sections/modelo/inspector.tsx:257"},e.medido_de==="Modelo"?"Medidas del propio IFC.":"Medidas sacadas de su forma: el IFC no las tra\xEDa.")):__gh("span",{style:{fontSize:12.5,color:MUTED,padding:"0 4px"},"data-gufi-src":"sections/modelo/inspector.tsx:260"},"Sin medidas: el IFC no las trae y su forma no deja medirla."),estancia&&s.global_id&&__gh("section",{style:{display:"flex",flexDirection:"column",gap:8,padding:"0 4px"},"data-gufi-src":"sections/modelo/inspector.tsx:263"},__gh("span",{style:{fontSize:15,fontWeight:600,letterSpacing:"-0.3px",color:INK},"data-gufi-src":"sections/modelo/inspector.tsx:264"},"Materiales"),materiales.catalogo.length===0?__gh("span",{style:{fontSize:12.5,color:MUTED},"data-gufi-src":"sections/modelo/inspector.tsx:266"},"A\xFAn no hay materiales: ponlos en Inicio \u203A Materiales y aqu\xED se elige el de cada estancia."):["suelo","paredes"].map(campo=>__gh(SelectorMaterial,{key:campo,campo,actual:materiales.de(s.global_id)?.[campo]??null,catalogo:materiales.catalogo,onElegir:id=>materiales.onElegir(s.global_id,[s.numero,s.nombre].filter(Boolean).join(" \xB7 ")||"Estancia",campo,id)}))),__gh(DelIfc,{filas:[!estancia&&e.material?["Material",e.material]:null,!estancia&&e.nombre?["Nombre en el modelo",e.nombre]:null,["Clase IFC",estancia?"IfcSpace":e.clase_ifc],x.global_id?["GlobalId",x.global_id]:null].filter(Boolean),props}))}let util=escena.medicion.estancias.reduce((t,s)=>t+(s.superficie??0),0),cuenta=c=>escena.medicion.elementos.filter(e=>e.categoria===c).length,muros=escena.medicion.elementos.filter(e=>e.categoria==="Muro").reduce((t,e)=>t+(e.superficie??0),0),porPlanta=new Map;for(let s of escena.medicion.estancias)s.planta!=null&&porPlanta.set(s.planta,(porPlanta.get(s.planta)??0)+(s.superficie??0));let plantas=[...escena.plantas].sort((a,b)=>b.orden-a.orden),fase=modelo.fase==="Estado actual"?"actual":modelo.fase==="Estado reformado"?"reformado":"ninguna";return __gh(__gf,null,__gh(Cabeza,{icono:import_lucide_react11.Box,titulo:`Versi\xF3n ${modelo.version??"s/n"}`,sub:[modelo.nombre,escena.programa??escena.esquema].filter(Boolean).join(" \xB7 ")}),__gh("section",{style:{display:"flex",flexDirection:"column",gap:8},"data-gufi-src":"sections/modelo/inspector.tsx:300"},__gh("span",{style:{fontSize:12,color:MUTED,padding:"0 4px"},"data-gufi-src":"sections/modelo/inspector.tsx:301"},"En la reforma, esta versi\xF3n es"),__gh(Menu,{ancho:260,boton:(abrir2,abierto)=>__gh(BotonMenu,{onClick:abrir2,abierto},FASES.find(f=>f.valor===fase)?.texto)},cerrar=>FASES.map(f=>__gh(MenuItem,{key:f.valor,elegido:f.valor===fase,sub:f.sub,onClick:()=>{cerrar(),f.valor!==fase&&onFase(f.fase)}},f.texto)))),__gh("div",{style:{borderRadius:14,overflow:"hidden",border:`1px solid ${HAIRLINE}`,display:"grid",gridTemplateColumns:"1fr 1fr",gap:1,background:HAIRLINE},"data-gufi-src":"sections/modelo/inspector.tsx:310"},__gh(Dato,{etiqueta:"Superficie \xFAtil",valor:util?medida(util,"m\xB2",1):"sin dato"}),__gh(Dato,{etiqueta:"Estancias",valor:numero(escena.medicion.estancias.length)}),__gh(Dato,{etiqueta:"Muros",valor:muros?medida(muros,"m\xB2",0):"sin dato"}),__gh(Dato,{etiqueta:"Puertas y ventanas",valor:numero(cuenta("Puerta")+cuenta("Ventana"))})),__gh(Grupo,{titulo:"Plantas",cuenta:plantas.length},plantas.map((p,i)=>__gh(Fila,{key:p.id,primera:i===0,titulo:p.nombre,valor:porPlanta.get(p.id)?medida(porPlanta.get(p.id),"m\xB2",1):void 0,valorSub:porPlanta.get(p.id)?"\xFAtiles":void 0,onClick:()=>onPlanta(p.id)}))),__gh(DelIfc,{resumen:[escena.esquema,escena.programa].filter(Boolean).join(" \xB7 "),filas:[["Formato",escena.esquema],escena.programa?["Exportado con",escena.programa]:null,["Piezas",numero(escena.medicion.elementos.length)],["Fichero",modelo.nombre]].filter(Boolean),props:null}))}var FASES=[{valor:"actual",texto:"Estado actual",sub:"Lo que hay, antes de reformar",fase:"Estado actual"},{valor:"reformado",texto:"Reformado",sub:"Lo que se va a hacer: se presupuesta frente al actual",fase:"Estado reformado"},{valor:"ninguna",texto:"Sin fase",sub:"Un proyecto que no es una reforma",fase:null}];function Muestra2({clave}){let c=clave?ACABADOS[clave].colores:null,colores=c?[c.Muro,c.Solado??c.Forjado,c.Ventana]:["#c9c9ce","#c9c9ce","#c9c9ce"];return __gh("span",{"aria-hidden":!0,style:{display:"inline-flex",gap:3,width:33},"data-gufi-src":"sections/modelo/inspector.tsx:343"},colores.map((x,i)=>__gh("span",{key:i,style:{width:9,height:9,borderRadius:99,background:x,boxShadow:"inset 0 0 0 0.5px rgba(0,0,0,0.18)"},"data-gufi-src":"sections/modelo/inspector.tsx:344"})))}var ESTILO_CORTO={sombreado:"Sombras",coherente:"Plano",oculta:"L\xEDneas",alambre:"Alambre"};function Vista({a,reformado}){let que=a.vista==="3d"?"3D":a.vista==="planta"?`Planta \xB7 ${a.plantaNombre}`:`Alzado ${ALZADOS.find(x=>x.lado===a.vista)?.nombre.toLowerCase()}`;return __gh(__gf,null,__gh(Grupo,{titulo:"Acabado",sub:"Encima del modelo: no cambia el IFC ni las mediciones"},[...Object.keys(ACABADOS),null].map((k,i)=>__gh(Fila,{key:k??"modelo",primera:i===0,onClick:()=>a.onAcabado(k),lead:__gh(Muestra2,{clave:k}),titulo:k?ACABADOS[k].nombre:"Colores del modelo",sub:k?ACABADOS[k].sub:"Los que trae el IFC",control:a.acabado===k?__gh("span",{"aria-hidden":!0,style:{color:ACCENT,fontSize:15,fontWeight:700},"data-gufi-src":"sections/modelo/inspector.tsx:382"},"\u2713"):__gh("span",{"data-gufi-src":"sections/modelo/inspector.tsx:382"})}))),__gh("section",{style:{display:"flex",flexDirection:"column",gap:8},"data-gufi-src":"sections/modelo/inspector.tsx:385"},__gh("span",{style:{fontSize:15,fontWeight:600,letterSpacing:"-0.3px",color:INK,padding:"0 4px"},"data-gufi-src":"sections/modelo/inspector.tsx:386"},"Estilo"),__gh(Segmentado,{id:"estilo",lleno:!0,pequeno:!0,valor:a.estilo,onCambio:a.onEstilo,opciones:Object.keys(ESTILOS).map(e=>({valor:e,texto:ESTILO_CORTO[e]}))})),__gh(Grupo,{titulo:"Mostrar",sub:que},a.hayEstancias&&__gh(Fila,{primera:!0,titulo:"Estancias",sub:"Su superficie \xFAtil, en violeta",control:__gh(Interruptor,{titulo:"Estancias",encendido:a.estancias,onCambio:a.onEstancias})}),a.vista==="planta"&&__gh(Fila,{primera:!a.hayEstancias,titulo:`Cortar a ${ALTURA_CORTE.toLocaleString("es-ES")} m`,sub:"La planta vista como un plano",control:__gh(Interruptor,{titulo:"Cortar la planta",encendido:a.corte,onCambio:a.onCorte})}),a.puedeFiltro&&__gh(Fila,{primera:!a.hayEstancias&&a.vista!=="planta",titulo:"Lo nuevo",sub:reformado?"Lo que se construye, frente al estado actual":"Lo que no estaba en la versi\xF3n anterior",control:__gh(Interruptor,{titulo:"Lo nuevo",encendido:a.filtro,onCambio:a.onFiltro})}),!a.hayEstancias&&a.vista!=="planta"&&!a.puedeFiltro&&__gh(Fila,{primera:!0,titulo:"Nada m\xE1s que ense\xF1ar",sub:"Este modelo no trae estancias ni otras versiones"})),__gh(Grupo,{titulo:"Medir",sub:a.medir?"Toca dos puntos del modelo":void 0},__gh(Fila,{primera:!0,titulo:"Entre dos puntos",control:__gh(Interruptor,{titulo:"Medir",encendido:a.medir,onCambio:a.onMedir})}),a.medidas>0&&__gh(Fila,{titulo:plural(a.medidas,"medida","medidas"),control:__gh(Accion,{pequeno:!0,icono:import_lucide_react11.X,onClick:a.onBorrarMedidas},"Borrar")})),__gh(Grupo,{titulo:"C\xE1mara"},__gh(FilaAccion,{primera:!0,icono:import_lucide_react11.Crosshair,onClick:a.onEncuadrar},"Encuadrar el edificio"),a.vista==="3d"&&__gh(FilaAccion,{icono:import_lucide_react11.RotateCcw,onClick:a.onInicial},"Vista inicial")))}function Inspector(p){let{pestana,onPestana,ajustes,...resto}=p;return __gh(__gf,null,__gh(Segmentado,{id:"inspector",lleno:!0,valor:pestana,onCambio:onPestana,opciones:[{valor:"pieza",texto:p.seleccion.length>1?`Piezas \xB7 ${numero(p.seleccion.length)}`:"Pieza"},{valor:"vista",texto:"Vista"},{valor:"version",texto:"Versi\xF3n"}]}),__gh("div",{key:`${pestana}|${pestana==="pieza"?p.seleccion.join(","):""}`,className:"arq-entra",style:{display:"flex",flexDirection:"column",gap:18},"data-gufi-src":"sections/modelo/inspector.tsx:417"},pestana==="vista"?__gh(Vista,{a:ajustes,reformado:p.modelo.fase==="Estado reformado"}):pestana==="version"?__gh(Detalle,{...resto,seleccion:[]}):p.seleccion.length?__gh(Detalle,{...resto}):__gh("div",{style:{background:"#fff",borderRadius:14,border:`1px solid ${HAIRLINE}`},"data-gufi-src":"sections/modelo/inspector.tsx:422"},__gh("div",{style:{display:"flex",justifyContent:"center",paddingTop:22,color:MUTED},"data-gufi-src":"sections/modelo/inspector.tsx:423"},__gh(import_lucide_react11.MousePointerClick,{size:22,strokeWidth:1.6,"aria-hidden":!0})),__gh(Vacio,{titulo:"Toca una pieza",texto:"Un muro, una ventana o una estancia: aqu\xED salen sus medidas y sus datos. Con Ctrl o \u2318 se eligen varias; en el navegador, un tipo entero."}))))}var import_react13=__toESM(require("react")),import_lucide_react12=require("lucide-react");var TANDA3=30,ICONO_CLASE={Muro:import_lucide_react12.SquareStack,Puerta:import_lucide_react12.DoorOpen,Ventana:import_lucide_react12.Grid2x2};function Seccion({titulo,cuenta,abierta,onAlternar,children}){return __gh("section",{style:{display:"flex",flexDirection:"column",gap:1},"data-gufi-src":"sections/modelo/navegador.tsx:16"},__gh("button",{type:"button",onClick:onAlternar,"aria-expanded":abierta,style:{display:"flex",alignItems:"center",gap:6,height:28,padding:"0 8px",border:"none",background:"transparent",fontFamily:"inherit",fontSize:12,fontWeight:600,color:MUTED,cursor:"pointer",textAlign:"left"},"data-gufi-src":"sections/modelo/navegador.tsx:17"},__gh("span",{style:{flex:1},"data-gufi-src":"sections/modelo/navegador.tsx:19"},titulo),cuenta!=null&&__gh("span",{style:{fontWeight:500,color:FAINT,fontVariantNumeric:"tabular-nums"},"data-gufi-src":"sections/modelo/navegador.tsx:20"},numero(cuenta)),__gh(import_lucide_react12.ChevronRight,{size:12,strokeWidth:2.2,style:{transform:abierta?"rotate(90deg)":"none",transition:"transform 180ms ease"},"aria-hidden":!0})),abierta&&children)}function Item({icono:I,texto:texto2,detalle,elegido,nivel=0,plegable,abierto,onClick,onPlegar}){let[encima,setEncima]=import_react13.default.useState(!1);return __gh("div",{role:"button",tabIndex:0,onClick,onKeyDown:e=>e.key==="Enter"&&onClick(),onPointerEnter:e=>e.pointerType==="mouse"&&setEncima(!0),onPointerLeave:()=>setEncima(!1),style:{display:"flex",alignItems:"center",gap:7,minHeight:30,padding:`4px 8px 4px ${8+nivel*16}px`,borderRadius:8,cursor:"pointer",fontSize:13,color:INK,background:elegido?"#fff":encima?"rgba(118,118,128,0.08)":"transparent",boxShadow:elegido?`0 0 0 1px ${HAIRLINE}, 0 1px 2px rgba(0,0,0,0.04)`:"none",fontWeight:elegido?600:400},"data-gufi-src":"sections/modelo/navegador.tsx:34"},plegable?__gh("button",{type:"button","aria-label":abierto?"Plegar":"Desplegar",onClick:e=>{e.stopPropagation(),onPlegar?.()},style:{width:16,height:16,display:"grid",placeItems:"center",border:"none",background:"transparent",padding:0,color:MUTED,cursor:"pointer",flexShrink:0},"data-gufi-src":"sections/modelo/navegador.tsx:39"},__gh(import_lucide_react12.ChevronRight,{size:12,strokeWidth:2.2,style:{transform:abierto?"rotate(90deg)":"none",transition:"transform 180ms ease"}})):nivel>0?__gh("span",{style:{width:16,flexShrink:0},"data-gufi-src":"sections/modelo/navegador.tsx:43"}):null,I&&__gh("span",{style:{display:"flex",color:INK_2,flexShrink:0},"data-gufi-src":"sections/modelo/navegador.tsx:44"},__gh(I,{size:15,strokeWidth:1.7,"aria-hidden":!0})),__gh("span",{style:{flex:1,minWidth:0,overflowWrap:"anywhere",lineHeight:1.3},"data-gufi-src":"sections/modelo/navegador.tsx:45"},texto2),detalle&&__gh("span",{style:{fontSize:12,color:MUTED,fontVariantNumeric:"tabular-nums",flexShrink:0},"data-gufi-src":"sections/modelo/navegador.tsx:46"},detalle))}function Navegador({escena,vista,planta,seleccion,versiones,modeloId,onVista,onElegir,onVersion}){let[abiertas,setAbiertas]=import_react13.default.useState({vistas:!0,piezas:!0,estancias:!1,versiones:!0}),[plegados,setPlegados]=import_react13.default.useState({}),[cuantos,setCuantos]=import_react13.default.useState({}),alternar=k=>setAbiertas(a=>({...a,[k]:!a[k]})),plegar=k=>setPlegados(a=>({...a,[k]:!a[k]})),elegidos=new Set(seleccion),todos=ids=>ids.length>0&&ids.length===seleccion.length&&ids.every(id=>elegidos.has(id)),plantas=[...escena.plantas].sort((a,b)=>b.orden-a.orden),util=new Map;for(let s of escena.medicion.estancias)s.planta!=null&&util.set(s.planta,(util.get(s.planta)??0)+(s.superficie??0));let porClase=new Map;for(let e of escena.medicion.elementos){let tipos=porClase.get(e.categoria)??new Map,t=e.tipo??"Sin tipo";tipos.set(t,[...tipos.get(t)??[],e]),porClase.set(e.categoria,tipos)}let clases=ORDEN_CATEGORIAS.filter(c=>porClase.has(c)),estanciasPorPlanta=new Map;for(let s of escena.medicion.estancias)estanciasPorPlanta.set(s.planta,[...estanciasPorPlanta.get(s.planta)??[],s]);return __gh("nav",{"aria-label":"Navegador del modelo",style:{display:"flex",flexDirection:"column",gap:14},"data-gufi-src":"sections/modelo/navegador.tsx:86"},__gh(Seccion,{titulo:"Vistas",abierta:abiertas.vistas,onAlternar:()=>alternar("vistas")},__gh(Item,{icono:import_lucide_react12.Box,texto:"3D",elegido:vista==="3d",onClick:()=>onVista("3d")}),__gh(Item,{icono:import_lucide_react12.Layers,texto:"Plantas",plegable:!0,abierto:!plegados.plantas,onPlegar:()=>plegar("plantas"),onClick:()=>plegar("plantas")}),!plegados.plantas&&plantas.map(p=>__gh(Item,{key:p.id,nivel:1,texto:p.nombre,detalle:util.get(p.id)?medida(util.get(p.id),"m\xB2",0):void 0,elegido:vista==="planta"&&planta===p.id,onClick:()=>onVista("planta",p.id)})),__gh(Item,{icono:import_lucide_react12.Building2,texto:"Alzados",plegable:!0,abierto:!plegados.alzados,onPlegar:()=>plegar("alzados"),onClick:()=>plegar("alzados")}),!plegados.alzados&&ALZADOS.map(a=>__gh(Item,{key:a.lado,nivel:1,texto:a.nombre,elegido:vista===a.lado,onClick:()=>onVista(a.lado)}))),__gh(Seccion,{titulo:"Piezas",cuenta:escena.medicion.elementos.length,abierta:abiertas.piezas,onAlternar:()=>alternar("piezas")},clases.map(c=>{let tipos=[...porClase.get(c).entries()].sort((a,b)=>b[1].length-a[1].length),ids=tipos.flatMap(([,l])=>l.map(x=>x.express_id)),abierto=!!plegados[`c-${c}`],n=cuantos[c]??TANDA3;return __gh(import_react13.default.Fragment,{key:c},__gh(Item,{icono:ICONO_CLASE[c]??import_lucide_react12.Shapes,texto:PLURAL[c]??c,detalle:numero(ids.length),plegable:!0,abierto,onPlegar:()=>plegar(`c-${c}`),elegido:todos(ids),onClick:()=>onElegir(ids)}),abierto&&tipos.slice(0,n).map(([t,l])=>{let tids=l.map(x=>x.express_id);return __gh(Item,{key:t,nivel:1,texto:t,detalle:numero(l.length),elegido:todos(tids),onClick:()=>onElegir(tids)})}),abierto&&tipos.length>n&&__gh(Item,{nivel:1,texto:`Ver ${numero(Math.min(TANDA3,tipos.length-n))} m\xE1s`,onClick:()=>setCuantos(x=>({...x,[c]:n+TANDA3}))}))})),escena.medicion.estancias.length>0&&__gh(Seccion,{titulo:"Estancias",cuenta:escena.medicion.estancias.length,abierta:abiertas.estancias,onAlternar:()=>alternar("estancias")},plantas.filter(p=>estanciasPorPlanta.get(p.id)?.length).map(p=>{let l=[...estanciasPorPlanta.get(p.id)].sort((a,b)=>String(a.numero??"").localeCompare(String(b.numero??""),"es",{numeric:!0})),ids=l.map(s=>s.express_id),abierto=!!plegados[`e-${p.id}`];return __gh(import_react13.default.Fragment,{key:p.id},__gh(Item,{icono:import_lucide_react12.LayoutGrid,texto:p.nombre,detalle:numero(l.length),plegable:!0,abierto,onPlegar:()=>plegar(`e-${p.id}`),elegido:todos(ids),onClick:()=>onElegir(ids)}),abierto&&l.map(s=>__gh(Item,{key:s.express_id,nivel:1,texto:[s.numero,s.nombre].filter(Boolean).join(" \xB7 ")||"Estancia",detalle:medida(s.superficie,"m\xB2",1),elegido:todos([s.express_id]),onClick:()=>onElegir([s.express_id])})))})),versiones.length>0&&__gh(Seccion,{titulo:"Versiones",cuenta:versiones.length,abierta:abiertas.versiones,onAlternar:()=>alternar("versiones")},versiones.map(v=>__gh(Item,{key:v.id,icono:import_lucide_react12.History,texto:[`Versi\xF3n ${v.version??"s/n"}`,faseCorta(v.fase)].filter(Boolean).join(" \xB7 "),detalle:v.estado==="Medido"?void 0:"sin medir",elegido:v.id===modeloId,onClick:()=>v.estado==="Medido"&&v.id!==modeloId&&onVersion(v.id)}))))}var import_react14=__toESM(require("react")),import_lucide_react13=require("lucide-react");var TANDA4=30,suma=(f,k)=>{let v=f.map(k).filter(x=>x!=null);return v.length?v.reduce((a,b)=>a+b,0):null};function comun(f,k,unidad,d){let v=[...new Set(f.map(k).filter(x=>x!=null).map(x=>(Number(x)||0).toFixed(d)))];return v.length===0?null:v.length===1?medida(Number(v[0]),unidad,d):"varias"}var sinAcentos=s=>s.normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase();function principal(categoria,l){let area=suma(l,x=>x.superficie),lon=suma(l,x=>x.longitud),vol=suma(l,x=>x.volumen);if(categoria==="Puerta"||categoria==="Ventana"){let ancho=comun(l,x=>x.ancho,"m",2),alto=comun(l,x=>x.altura,"m",2);return{valor:`${numero(l.length)}\xA0ud`,sub:ancho&&alto?`${ancho.replace(/ m$/,"")} \xD7 ${alto}`:void 0,orden:l.length}}return categoria==="Muro"?{valor:medida(area,"m\xB2",1),sub:lon!=null?medida(lon,"m",1):void 0,orden:area??0}:["Forjado","Cubierta","Solado","Falso techo","Revestimiento","Muro cortina"].includes(categoria)?{valor:medida(area,"m\xB2",1),sub:vol!=null?medida(vol,"m\xB3",2):void 0,orden:area??0}:["Pilar","Viga","Barandilla"].includes(categoria)&&lon!=null?{valor:medida(lon,"m",1),sub:`${numero(l.length)}\xA0ud`,orden:lon}:{valor:`${numero(l.length)}\xA0ud`,sub:vol!=null?medida(vol,"m\xB3",2):void 0,orden:l.length}}function medidasDe(e){return[e.longitud!=null&&`largo ${medida(e.longitud,"m")}`,e.ancho!=null&&`${["Puerta","Ventana"].includes(e.categoria)?"ancho":"grosor"} ${medida(e.ancho,"m",3)}`,e.altura!=null&&`alto ${medida(e.altura,"m")}`,e.superficie!=null&&medida(e.superficie,"m\xB2")].filter(Boolean).join(" \xB7 ")||"sin medidas"}var d2=(n,d=2)=>n==null?"":n.toLocaleString("es-ES",{minimumFractionDigits:d,maximumFractionDigits:d,useGrouping:"always"});function Th({c,orden,onOrden}){let es=orden.k===c.k,I=es?orden.asc?import_lucide_react13.ChevronUp:import_lucide_react13.ChevronDown:null;return __gh("th",{style:{padding:0,textAlign:c.num?"right":"left",borderBottom:`1px solid ${HAIRLINE}`,position:"sticky",top:0,background:"#fff",zIndex:1},"data-gufi-src":"sections/modelo/mediciones.tsx:57"},__gh("button",{type:"button",onClick:()=>onOrden(c.k),style:{display:"inline-flex",alignItems:"center",gap:3,width:"100%",justifyContent:c.num?"flex-end":"flex-start",padding:"10px 12px",border:"none",background:"transparent",fontFamily:"inherit",fontSize:12,fontWeight:es?650:500,color:es?INK:MUTED,cursor:"pointer",whiteSpace:"nowrap"},"data-gufi-src":"sections/modelo/mediciones.tsx:58"},c.titulo,I&&__gh(I,{size:12,strokeWidth:2.2,"aria-hidden":!0})))}function ordenar(filas,cols,orden){let c=cols.find(x=>x.k===orden.k);return c?[...filas].sort((a,b)=>{let x=c.valor(a),y=c.valor(b),r=x==null&&y==null?0:x==null?1:y==null?-1:typeof x=="number"&&typeof y=="number"?x-y:String(x).localeCompare(String(y),"es",{numeric:!0});return orden.asc?r:-r}):filas}var celda=(num,fuerte)=>({padding:"9px 12px",textAlign:num?"right":"left",fontWeight:fuerte?600:400,color:INK,borderTop:`1px solid ${HAIRLINE}`,whiteSpace:num?"nowrap":void 0,overflowWrap:"anywhere",fontVariantNumeric:"tabular-nums",verticalAlign:"top"});function TablaTipos({clase,tipos,elegidos,plantaNombre,onVer}){let[orden,setOrden]=import_react14.default.useState({k:"piezas",asc:!1}),[abiertos,setAbiertos]=import_react14.default.useState({}),hueco=clase==="Puerta"||clase==="Ventana",todas=tipos.flatMap(t=>t.l),hay=k=>todas.some(e=>k(e)!=null),comunN=(l,k)=>{let v=[...new Set(l.map(k).filter(x=>x!=null).map(x=>(Number(x)||0).toFixed(3)))];return v.length===1?Number(v[0]):null},cols=[{k:"tipo",titulo:"Tipo",valor:f=>f.tipo},{k:"plantas",titulo:"Plantas",valor:f=>[...new Set(f.l.map(x=>plantaNombre(x.planta)))].join(", ")},{k:"piezas",titulo:"Piezas",num:!0,valor:f=>f.l.length,ver:f=>numero(f.l.length),total:l=>numero(l.flatMap(f=>f.l).length)},...hay(e=>e.longitud)?[{k:"longitud",titulo:"Longitud (m)",num:!0,valor:f=>suma(f.l,x=>x.longitud),ver:f=>d2(suma(f.l,x=>x.longitud)),total:l=>d2(suma(l.flatMap(f=>f.l),x=>x.longitud))}]:[],...hay(e=>e.ancho)?[{k:"ancho",titulo:hueco?"Anchura (m)":"Grosor (m)",num:!0,valor:f=>comunN(f.l,x=>x.ancho),ver:f=>comunN(f.l,x=>x.ancho)==null?"varias":d2(comunN(f.l,x=>x.ancho),3)}]:[],...hay(e=>e.altura)?[{k:"altura",titulo:"Altura (m)",num:!0,valor:f=>comunN(f.l,x=>x.altura),ver:f=>comunN(f.l,x=>x.altura)==null?"varias":d2(comunN(f.l,x=>x.altura))}]:[],...hay(e=>e.superficie)?[{k:"superficie",titulo:"Superficie (m\xB2)",num:!0,valor:f=>suma(f.l,x=>x.superficie),ver:f=>d2(suma(f.l,x=>x.superficie)),total:l=>d2(suma(l.flatMap(f=>f.l),x=>x.superficie))}]:[],...hay(e=>e.volumen)?[{k:"volumen",titulo:"Volumen (m\xB3)",num:!0,valor:f=>suma(f.l,x=>x.volumen),ver:f=>d2(suma(f.l,x=>x.volumen),3),total:l=>d2(suma(l.flatMap(f=>f.l),x=>x.volumen),3)}]:[]],dePieza=(e,k)=>k==="tipo"?e.nombre??"":k==="plantas"?plantaNombre(e.planta):k==="piezas"?"":k==="longitud"?d2(e.longitud):k==="ancho"?d2(e.ancho,3):k==="altura"?d2(e.altura):k==="superficie"?d2(e.superficie):k==="volumen"?d2(e.volumen,3):"",filas=ordenar(tipos,cols,orden);return __gh(Tarjeta,null,__gh("div",{style:{overflowX:"auto"},"data-gufi-src":"sections/modelo/mediciones.tsx:115"},__gh("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:13},"data-gufi-src":"sections/modelo/mediciones.tsx:116"},__gh("thead",{"data-gufi-src":"sections/modelo/mediciones.tsx:117"},__gh("tr",{"data-gufi-src":"sections/modelo/mediciones.tsx:117"},cols.map(c=>__gh(Th,{key:c.k,c,orden,onOrden:k=>setOrden(o=>({k,asc:o.k===k?!o.asc:k==="tipo"||k==="plantas"}))})),__gh("th",{style:{width:44,borderBottom:`1px solid ${HAIRLINE}`,position:"sticky",top:0,background:"#fff"},"data-gufi-src":"sections/modelo/mediciones.tsx:117"}))),__gh("tbody",{"data-gufi-src":"sections/modelo/mediciones.tsx:118"},filas.map(f=>{let ids=f.l.map(x=>x.express_id),abierto=abiertos[f.tipo],elegida=ids.some(id=>elegidos.has(id));return __gh(import_react14.default.Fragment,{key:f.tipo},__gh("tr",{onClick:()=>setAbiertos(a=>({...a,[f.tipo]:!a[f.tipo]})),style:{cursor:"pointer",background:elegida?"rgba(99,91,255,0.05)":void 0},"data-gufi-src":"sections/modelo/mediciones.tsx:125"},cols.map((c,i)=>__gh("td",{key:c.k,style:celda(c.num,i===0),"data-gufi-src":"sections/modelo/mediciones.tsx:127"},i===0?__gh("span",{style:{display:"inline-flex",alignItems:"flex-start",gap:6},"data-gufi-src":"sections/modelo/mediciones.tsx:129"},__gh(import_lucide_react13.ChevronRight,{size:13,strokeWidth:2.2,style:{color:MUTED,marginTop:2,flexShrink:0,transform:abierto?"rotate(90deg)":"none",transition:"transform 180ms ease"},"aria-hidden":!0}),f.tipo):c.ver?c.ver(f):String(c.valor(f)??""))),__gh("td",{style:{...celda(),padding:"5px 8px"},onClick:e=>e.stopPropagation(),"data-gufi-src":"sections/modelo/mediciones.tsx:136"},__gh(Accion,{pequeno:!0,soloIcono:!0,icono:import_lucide_react13.Eye,titulo:`Ver ${f.tipo} en el modelo`,onClick:()=>onVer(ids)},"Ver"))),abierto&&f.l.map(e=>__gh("tr",{key:e.express_id,style:{background:elegidos.has(e.express_id)?"rgba(99,91,255,0.05)":"#fafafa"},"data-gufi-src":"sections/modelo/mediciones.tsx:141"},cols.map((c,i)=>__gh("td",{key:c.k,style:{...celda(c.num),color:i===0?INK:MUTED,paddingLeft:i===0?32:12,fontSize:12.5},"data-gufi-src":"sections/modelo/mediciones.tsx:142"},dePieza(e,c.k))),__gh("td",{style:{...celda(),padding:"4px 8px"},"data-gufi-src":"sections/modelo/mediciones.tsx:143"},__gh(Accion,{pequeno:!0,soloIcono:!0,icono:import_lucide_react13.Eye,titulo:"Ver la pieza en el modelo",onClick:()=>onVer([e.express_id])},"Ver")))))}),__gh("tr",{"data-gufi-src":"sections/modelo/mediciones.tsx:149"},cols.map((c,i)=>__gh("td",{key:c.k,style:{...celda(c.num,!0),borderTop:`1px solid ${INK}`},"data-gufi-src":"sections/modelo/mediciones.tsx:150"},i===0?"Total":c.total?c.total(tipos):"")),__gh("td",{style:{...celda(),borderTop:`1px solid ${INK}`},"data-gufi-src":"sections/modelo/mediciones.tsx:151"}))))))}function TablaEstancias({estancias,elegidos,plantaNombre,ordenPlanta,onVer}){let[orden,setOrden]=import_react14.default.useState({k:"planta",asc:!0}),cols=[{k:"numero",titulo:"N\xFAmero",valor:s=>s.numero},{k:"nombre",titulo:"Nombre",valor:s=>s.nombre},{k:"planta",titulo:"Planta",valor:s=>-ordenPlanta(s.planta)*1e5+Number(String(s.numero??"").replace(/\D/g,"")||0),ver:s=>plantaNombre(s.planta)},{k:"superficie",titulo:"Superficie (m\xB2)",num:!0,valor:s=>s.superficie,ver:s=>d2(s.superficie),total:l=>d2(suma(l,x=>x.superficie))},{k:"perimetro",titulo:"Per\xEDmetro (m)",num:!0,valor:s=>s.perimetro,ver:s=>d2(s.perimetro)},{k:"altura",titulo:"Altura (m)",num:!0,valor:s=>s.altura,ver:s=>d2(s.altura)},{k:"volumen",titulo:"Volumen (m\xB3)",num:!0,valor:s=>s.volumen,ver:s=>d2(s.volumen,3),total:l=>d2(suma(l,x=>x.volumen),3)}],filas=ordenar(estancias,cols,orden);return __gh(Tarjeta,null,__gh("div",{style:{overflowX:"auto"},"data-gufi-src":"sections/modelo/mediciones.tsx:175"},__gh("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:13},"data-gufi-src":"sections/modelo/mediciones.tsx:176"},__gh("thead",{"data-gufi-src":"sections/modelo/mediciones.tsx:177"},__gh("tr",{"data-gufi-src":"sections/modelo/mediciones.tsx:177"},cols.map(c=>__gh(Th,{key:c.k,c,orden,onOrden:k=>setOrden(o=>({k,asc:o.k===k?!o.asc:!["superficie","perimetro","altura","volumen"].includes(k)}))})),__gh("th",{style:{width:44,borderBottom:`1px solid ${HAIRLINE}`,position:"sticky",top:0,background:"#fff"},"data-gufi-src":"sections/modelo/mediciones.tsx:177"}))),__gh("tbody",{"data-gufi-src":"sections/modelo/mediciones.tsx:178"},filas.map(s=>__gh("tr",{key:s.express_id,style:{background:elegidos.has(s.express_id)?"rgba(99,91,255,0.05)":void 0},"data-gufi-src":"sections/modelo/mediciones.tsx:180"},cols.map((c,i)=>__gh("td",{key:c.k,style:celda(c.num,i===1),"data-gufi-src":"sections/modelo/mediciones.tsx:181"},c.ver?c.ver(s):String(c.valor(s)??""))),__gh("td",{style:{...celda(),padding:"5px 8px"},"data-gufi-src":"sections/modelo/mediciones.tsx:182"},__gh(Accion,{pequeno:!0,soloIcono:!0,icono:import_lucide_react13.Eye,titulo:"Ver la estancia en el modelo",onClick:()=>onVer([s.express_id])},"Ver")))),__gh("tr",{"data-gufi-src":"sections/modelo/mediciones.tsx:185"},cols.map((c,i)=>__gh("td",{key:c.k,style:{...celda(c.num,!0),borderTop:`1px solid ${INK}`},"data-gufi-src":"sections/modelo/mediciones.tsx:186"},i===0?"Total":i===1?plural(estancias.length,"estancia","estancias"):c.total?c.total(estancias):"")),__gh("td",{style:{...celda(),borderTop:`1px solid ${INK}`},"data-gufi-src":"sections/modelo/mediciones.tsx:187"}))))))}function Mediciones({escena,seleccion,compacto,onVer,onCsv}){let plantaNombre=id=>id==null?"Sin planta":escena.plantas.find(p=>p.id===id)?.nombre??"Sin planta",{elementos,estancias}=escena.medicion,categorias=import_react14.default.useMemo(()=>ORDEN_CATEGORIAS.filter(c=>elementos.some(e=>e.categoria===c)),[elementos]),[clase,setClase]=import_react14.default.useState(()=>estancias.length?"Estancias":categorias[0]??"Estancias"),[q,setQ]=import_react14.default.useState(""),[abierto,setAbierto]=import_react14.default.useState(null),[cuantos,setCuantos]=import_react14.default.useState({}),elegidos=new Set(seleccion),t=sinAcentos(q.trim()),util=suma(estancias,s=>s.superficie),muros=elementos.filter(e=>e.categoria==="Muro"),huecos=elementos.filter(e=>e.categoria==="Puerta"||e.categoria==="Ventana").length,opciones=[...estancias.length?[{valor:"Estancias",texto:"Estancias",cuenta:estancias.length}]:[],...categorias.map(c=>({valor:c,texto:PLURAL[c]??c,cuenta:elementos.filter(e=>e.categoria===c).length}))],cuerpo,ordenPlanta=id=>escena.plantas.find(p=>p.id===id)?.orden??-1;if(!compacto&&clase==="Estancias"){let lista=estancias.filter(s=>!t||sinAcentos(`${s.numero??""} ${s.nombre??""}`).includes(t));cuerpo=lista.length===0?__gh(Grupo,null,__gh(Vacio,{titulo:q?`Ninguna estancia con \xAB${q}\xBB`:"Este modelo no trae estancias",texto:q?void 0:"En Revit son las habitaciones: si no se exportan al IFC, no hay superficies \xFAtiles que medir."})):__gh(TablaEstancias,{estancias:lista,elegidos,plantaNombre,ordenPlanta,onVer})}else if(compacto)if(clase==="Estancias"){let porPlanta=new Map;for(let p of[...escena.plantas].sort((a,b)=>b.orden-a.orden))porPlanta.set(p.id,[]);for(let s of estancias)t&&!sinAcentos(`${s.numero??""} ${s.nombre??""}`).includes(t)||porPlanta.set(s.planta,[...porPlanta.get(s.planta)??[],s]);let grupos=[...porPlanta.entries()].filter(([,l])=>l.length);cuerpo=grupos.length===0?__gh(Grupo,null,__gh(Vacio,{titulo:q?`Ninguna estancia con \xAB${q}\xBB`:"Este modelo no trae estancias",texto:q?void 0:"En Revit son las habitaciones: si no se exportan al IFC, no hay superficies \xFAtiles que medir."})):grupos.map(([planta,l])=>{let lista=[...l].sort((a,b)=>String(a.numero??"").localeCompare(String(b.numero??""),"es",{numeric:!0})),clave=`p-${planta}`,n=cuantos[clave]??TANDA4;return __gh(Grupo,{key:clave,titulo:plantaNombre(planta),cuenta:l.length,derecha:__gh("span",{style:{fontSize:13,fontWeight:600,color:INK,fontVariantNumeric:"tabular-nums"},"data-gufi-src":"sections/modelo/mediciones.tsx:259"},medida(suma(l,x=>x.superficie),"m\xB2",1))},lista.slice(0,n).map((s,i)=>__gh(Fila,{key:s.express_id,primera:i===0,elegida:elegidos.has(s.express_id),titulo:[s.numero,s.nombre].filter(Boolean).join(" \xB7 ")||"Estancia sin nombre",sub:[s.perimetro!=null&&`per\xEDmetro ${medida(s.perimetro,"m")}`,s.altura!=null&&`alto ${medida(s.altura,"m")}`].filter(Boolean).join(" \xB7 ")||void 0,valor:medida(s.superficie,"m\xB2"),onClick:()=>onVer([s.express_id])})),lista.length>n&&__gh(FilaMas,{quedan:lista.length-n,onClick:()=>setCuantos(c=>({...c,[clave]:n+TANDA4}))}))})}else{let de=elementos.filter(e=>e.categoria===clase),porTipo=new Map;for(let e of de){let tipo=e.tipo??"Sin tipo";t&&!sinAcentos(`${tipo} ${e.nombre??""} ${e.material??""}`).includes(t)||porTipo.set(tipo,[...porTipo.get(tipo)??[],e])}let tipos=[...porTipo.entries()].map(([tipo,l])=>({tipo,l,p:principal(clase,l)})).sort((a,b)=>b.p.orden-a.p.orden),total=principal(clase,de),n=cuantos[clase]??TANDA4;cuerpo=__gh(Grupo,{titulo:PLURAL[clase]??clase,cuenta:tipos.length,sub:`${plural(de.length,"pieza","piezas")} en ${plural(tipos.length,"tipo","tipos")}`,derecha:__gh("span",{style:{fontSize:13,fontWeight:600,color:INK,fontVariantNumeric:"tabular-nums"},"data-gufi-src":"sections/modelo/mediciones.tsx:285"},total.valor)},tipos.length===0&&__gh(Vacio,{titulo:`Ning\xFAn tipo con \xAB${q}\xBB`}),tipos.slice(0,n).map(({tipo,l,p},i)=>{let ids=l.map(x=>x.express_id),esAbierto=abierto===`${clase}:${tipo}`,niveles=[...new Set(l.map(x=>plantaNombre(x.planta)))];return __gh(import_react14.default.Fragment,{key:tipo},__gh(Fila,{primera:i===0,elegida:esAbierto||ids.some(id=>elegidos.has(id)),titulo:tipo,sub:`${plural(l.length,"pieza","piezas")} \xB7 ${niveles.length>2?plural(niveles.length,"planta","plantas"):niveles.join(", ")}`,valor:p.valor,valorSub:p.sub,onClick:()=>setAbierto(esAbierto?null:`${clase}:${tipo}`)}),esAbierto&&__gh("div",{style:{background:"#fafafa",borderTop:`1px solid ${HAIRLINE}`},"data-gufi-src":"sections/modelo/mediciones.tsx:299"},__gh("div",{style:{padding:"10px 16px 10px 32px"},"data-gufi-src":"sections/modelo/mediciones.tsx:300"},__gh(Accion,{pequeno:!0,icono:import_lucide_react13.Eye,onClick:()=>onVer(ids)},`Ver ${l.length===1?"la pieza":`las ${numero(l.length)}`} en el modelo`)),l.map(e=>__gh("div",{key:e.express_id,role:"button",tabIndex:0,onClick:()=>onVer([e.express_id]),onKeyDown:ev=>ev.key==="Enter"&&onVer([e.express_id]),style:{display:"flex",alignItems:"center",gap:12,padding:"9px 16px 9px 32px",borderTop:`1px solid ${HAIRLINE}`,cursor:"pointer",background:elegidos.has(e.express_id)?"rgba(99,91,255,0.05)":void 0},"data-gufi-src":"sections/modelo/mediciones.tsx:304"},__gh("span",{style:{flex:1,minWidth:0},"data-gufi-src":"sections/modelo/mediciones.tsx:306"},__gh("span",{style:{display:"block",fontSize:13,color:INK,overflowWrap:"anywhere"},"data-gufi-src":"sections/modelo/mediciones.tsx:307"},e.nombre??tipo),__gh("span",{style:{display:"block",fontSize:12,color:MUTED,overflowWrap:"anywhere",fontVariantNumeric:"tabular-nums"},"data-gufi-src":"sections/modelo/mediciones.tsx:308"},`${plantaNombre(e.planta)} \xB7 ${medidasDe(e)}`)),__gh("span",{"aria-hidden":!0,style:{color:"#c7c7cc",fontSize:18,lineHeight:1},"data-gufi-src":"sections/modelo/mediciones.tsx:310"},"\u203A")))))}),tipos.length>n&&__gh(FilaMas,{quedan:tipos.length-n,onClick:()=>setCuantos(c=>({...c,[clase]:n+TANDA4}))}))}else{let porTipo=new Map;for(let e of elementos){if(e.categoria!==clase)continue;let tipo=e.tipo??"Sin tipo";t&&!sinAcentos(`${tipo} ${e.nombre??""} ${e.material??""}`).includes(t)||porTipo.set(tipo,[...porTipo.get(tipo)??[],e])}let tipos=[...porTipo.entries()].map(([tipo,l])=>({tipo,l}));cuerpo=tipos.length===0?__gh(Grupo,null,__gh(Vacio,{titulo:`Ning\xFAn tipo con \xAB${q}\xBB`})):__gh(TablaTipos,{key:clase,clase,tipos,elegidos,plantaNombre,onVer})}return __gh("div",{style:{display:"flex",flexDirection:"column",gap:22},"data-gufi-src":"sections/modelo/mediciones.tsx:324"},__gh(Cifras,{compacto,columnas:4},__gh(Cifra,{etiqueta:"Superficie \xFAtil",valor:util!=null?medida(util,"m\xB2",1):"sin dato",sub:plural(estancias.length,"estancia","estancias")}),__gh(Cifra,{etiqueta:"Muros",valor:medida(suma(muros,x=>x.superficie),"m\xB2",0),sub:suma(muros,x=>x.longitud)!=null?`${medida(suma(muros,x=>x.longitud),"m",0)} de largo`:void 0}),__gh(Cifra,{etiqueta:"Puertas y ventanas",valor:numero(huecos)}),__gh(Cifra,{etiqueta:"Piezas medidas",valor:numero(elementos.length),sub:plural(escena.plantas.length,"planta","plantas")})),__gh(Barra,{izquierda:__gh(Segmentado,{id:"clase",valor:clase,onCambio:v=>{setClase(v),setAbierto(null)},opciones}),derecha:__gh(__gf,null,__gh(Buscador,{valor:q,onCambio:setQ,placeholder:clase==="Estancias"?"Buscar estancia":"Buscar tipo o material",ancho:compacto?"100%":220}),__gh(Accion,{onClick:onCsv},"Exportar en CSV"))}),__gh("div",{key:clase,className:"arq-entra",style:{display:"flex",flexDirection:"column",gap:22},"data-gufi-src":"sections/modelo/mediciones.tsx:340"},cuerpo))}function csvDe(escena,titulo){let plantaNombre=id=>id==null?"":escena.plantas.find(p=>p.id===id)?.nombre??"",q=v=>v==null?"":typeof v=="number"?v.toLocaleString("es-ES",{maximumFractionDigits:3,useGrouping:!1}):`"${String(v).replace(/"/g,'""')}"`,filas=[[titulo],[],["Clase","Tipo","Planta","Nombre","Material","Longitud (m)","Altura (m)","Ancho o grosor (m)","Superficie (m\xB2)","Volumen (m\xB3)","Medido de","GlobalId"]];for(let e of escena.medicion.elementos)filas.push([e.categoria,e.tipo,plantaNombre(e.planta),e.nombre,e.material,e.longitud,e.altura,e.ancho,e.superficie,e.volumen,e.medido_de,e.global_id]);filas.push([],["Estancia","Nombre","Planta","Superficie \xFAtil (m\xB2)","Per\xEDmetro (m)","Altura (m)","Volumen (m\xB3)","Medido de","GlobalId"]);for(let s of escena.medicion.estancias)filas.push([s.numero,s.nombre,plantaNombre(s.planta),s.superficie,s.perimetro,s.altura,s.volumen,s.medido_de,s.global_id]);return"\uFEFF"+filas.map(f=>f.map(q).join(";")).join(`\r `)}var import_react15=__toESM(require("react")),import_lucide_react14=require("lucide-react");var IVAS=[21,10,0],cantidadDe=l=>l.unidad==="ud"?numero(l.cantidad):medida(l.cantidad,"",2).trim(),escapar=s=>String(s??"").replace(/[&<>"]/g,c=>({"&":"&","<":"<",">":">",'"':"""})[c]);async function comoDataUrl(url){let r=await fetch(url);if(!r.ok)throw new Error(`No se pudo leer el logo de la empresa (${r.status})`);let b=await r.blob();return new Promise((ok,mal)=>{let f=new FileReader;f.onload=()=>ok(String(f.result)),f.onerror=()=>mal(new Error("No se pudo leer el logo de la empresa")),f.readAsDataURL(b)})}function htmlPresupuesto(p){let filas=p.grupos.map(([titulo,l])=>` ${p.grupos.length>1?`${escapar(titulo)}`:""} ${l.map(x=>`${escapar(x.codigo??"")}${escapar(x.descripcion)}${escapar(cantidadDe(x))}${escapar(x.unidad??"")}${escapar(euros(x.precio))}${escapar(euros(x.importe))}`).join("")} ${p.grupos.length>1?`Total ${escapar(titulo.toLowerCase())}${escapar(euros(l.reduce((t,x)=>t+x.importe,0)))}`:""}`).join(""),hoy=new Date().toLocaleDateString("es-ES",{day:"numeric",month:"long",year:"numeric"});return`
${p.logo?``:""}${escapar(p.empresa)}

Presupuesto

${escapar(hoy)}

Proyecto${escapar(p.proyecto)}
Cliente${escapar(p.cliente??"Sin indicar")}
Modelo${escapar(p.modelo.nombre)} \xB7 versi\xF3n ${escapar(p.modelo.version??"s/n")}${p.fase?` \xB7 ${escapar(p.fase)}`:""}
Alcance${escapar(p.planta??"Todo el edificio")}
${filas}
C\xF3digoDescripci\xF3nMedici\xF3nUdPrecioImporte
Base imponible${escapar(euros(p.base))}
IVA (${p.pct} %)${escapar(euros(p.iva))}
Total${escapar(euros(p.base+p.iva))}
Mediciones sacadas del modelo IFC del proyecto. Las cantidades son las del modelo; los precios, los de la tarifa de ${escapar(p.empresa)}.
`}function Presupuesto({gufi,modelo,proyecto,url,compacto}){let{data:plantas}=gufi.useData("arquitectura__plantas",{filters:[{field:"modelo",operator:"eq",value:modelo.id}],sorters:[{field:"orden",order:"desc"}],pageSize:200}),[planta,setPlanta]=import_react15.default.useState(null),[iva,setIva]=import_react15.default.useState(21),[r,setR]=import_react15.default.useState(null),[error,setError]=import_react15.default.useState(null),[vuelta,setVuelta]=import_react15.default.useState(0),[ocupado,setOcupado]=import_react15.default.useState(null),[empresas,setEmpresas]=import_react15.default.useState(null);import_react15.default.useEffect(()=>{let vivo=!0;return setR(null),setError(null),gufi.automation("arquitectura_presupuesto",{modelo:modelo.id,planta}).then(x=>vivo&&setR(x)).catch(e=>{vivo&&(setError(textoError(e)),reportar(e))}),()=>{vivo=!1}},[modelo.id,planta,vuelta]);let plantaNombre=planta==null?null:(plantas??[]).find(p=>p.id===planta)?.nombre??null,con=r?r.lineas.filter(l=>l.cantidad>0&&!l.problema):[],sin=r?r.lineas.filter(l=>l.cantidad===0||l.problema):[],deMaterial=l=>l.capitulo==="Materiales",grupos=(r?.reforma?[["Derribos",con.filter(l=>l.obra==="Derribo"&&!deMaterial(l))],["Obra nueva",con.filter(l=>l.obra!=="Derribo"&&!deMaterial(l))]]:[["Partidas",con.filter(l=>!deMaterial(l))]]).concat([["Materiales",con.filter(deMaterial)]]).filter(([,l])=>l.length),base=r?r.total_sin_iva:0,cuotaIva=Math.round(base*iva)/100;async function pdf(){if(r){setOcupado("pdf");try{let empresa=gufi.context.activeCompany,logo=empresa.logo?await comoDataUrl(empresa.logo):null,html=htmlPresupuesto({empresa:empresa.name,logo,proyecto:proyecto?.nombre??r.modelo.proyecto??modelo.nombre,cliente:proyecto?.cliente??null,modelo:r.modelo,fase:modelo.fase,planta:plantaNombre,grupos,base,iva:cuotaIva,pct:iva}),{pdf:b64}=await gufi.documents.pdf({html,format:"A4",margin:{top:"16mm",right:"14mm",bottom:"16mm",left:"14mm"}}),bytes=Uint8Array.from(atob(b64),c=>c.charCodeAt(0)),a=document.createElement("a");a.href=URL.createObjectURL(new Blob([bytes],{type:"application/pdf"})),a.download=`Presupuesto ${String(proyecto?.nombre??modelo.nombre).replace(/[\\/:*?"<>|]+/g,"")}.pdf`,a.click(),setTimeout(()=>URL.revokeObjectURL(a.href),1e4),gufi.toastSuccess("Presupuesto descargado en PDF")}catch(e){gufi.toastError(textoError(e)),reportar(e)}finally{setOcupado(null)}}}async function aFacturacion(empresa){setOcupado("facturacion");try{let x=await gufi.automation("arquitectura_presupuesto",{modelo:modelo.id,planta,crear:!0,empresa});if(x.necesita_empresa){setEmpresas(x.necesita_empresa);return}setEmpresas(null),gufi.toastSuccess(`Presupuesto ${x.presupuesto?.numero} en Facturaci\xF3n`),x.enlace&&window.open(x.enlace,"_self")}catch(e){gufi.toastError(textoError(e)),reportar(e)}finally{setOcupado(null)}}async function ejemplo(){try{await gufi.automation("arquitectura_precios_de_ejemplo",{}),setVuelta(v=>v+1)}catch(e){gufi.toastError(textoError(e)),reportar(e)}}let barra=__gh(Barra,{izquierda:__gh(__gf,null,__gh(Menu,{boton:(abrir2,abierto)=>__gh(BotonMenu,{onClick:abrir2,abierto},plantaNombre??"Todo el edificio")},cerrar=>__gh(__gf,null,__gh(MenuItem,{elegido:planta==null,onClick:()=>{setPlanta(null),cerrar()}},"Todo el edificio"),(plantas??[]).map(p=>__gh(MenuItem,{key:p.id,elegido:planta===p.id,onClick:()=>{setPlanta(p.id),cerrar()}},p.nombre)))),__gh(Segmentado,{id:"iva",valor:String(iva),onCambio:v=>setIva(Number(v)),opciones:IVAS.map(v=>({valor:String(v),texto:v?`IVA ${v} %`:"Sin IVA"}))})),derecha:__gh(__gf,null,__gh(Accion,{icono:import_lucide_react14.Tag,href:url("/precios")},"Precios"),r?.facturacion&&con.length>0&&(empresas?__gh(Menu,{alinear:"derecha",boton:(abrir2,abierto)=>__gh(BotonMenu,{onClick:abrir2,abierto},"\xBFCon qu\xE9 empresa?")},cerrar=>empresas.map(e=>__gh(MenuItem,{key:e.id,onClick:()=>{cerrar(),aFacturacion(e.id)}},e.razon_social))):__gh(Accion,{icono:import_lucide_react14.FileText,onClick:()=>aFacturacion(),deshabilitado:!!ocupado},ocupado==="facturacion"?"Creando":"A Facturaci\xF3n")),con.length>0&&__gh(Principal,{icono:import_lucide_react14.FileDown,onClick:pdf,deshabilitado:!!ocupado},ocupado==="pdf"?"Preparando el PDF":"Descargar PDF"))});return __gh("div",{style:{display:"flex",flexDirection:"column",gap:22},"data-gufi-src":"sections/modelo/presupuesto.tsx:193"},__gh(Cifras,{compacto,columnas:3},__gh(Cifra,{compacta:compacto,etiqueta:"Base imponible",valor:r?euros(base):__gh(Cargando,{ancho:120}),sub:r?plural(con.length,"partida","partidas"):void 0}),__gh(Cifra,{compacta:compacto,etiqueta:iva?`IVA ${iva} %`:"Sin IVA",valor:r?euros(cuotaIva):__gh(Cargando,{ancho:90}),sub:iva===10?"Reforma de vivienda":iva===0?"Exento o inversi\xF3n del sujeto pasivo":"El general"}),__gh(Cifra,{etiqueta:"Total",valor:r?euros(base+cuotaIva):__gh(Cargando,{ancho:120}),sub:plantaNombre??"Todo el edificio"})),barra,error?__gh(Aviso,{titulo:"No se pudo hacer la cuenta",texto:error,accion:__gh(Accion,{onClick:()=>setVuelta(v=>v+1)},"Volver a probar")}):r?r.partidas===0?__gh(Grupo,null,__gh(Vacio,{titulo:"A\xFAn no hay precios",texto:"Cada partida dice en qu\xE9 se mide (muros, ventanas, estancias\u2026) y a cu\xE1nto. Pon tu tarifa en Precios o empieza con una de ejemplo y c\xE1mbiala.",accion:__gh("div",{style:{display:"flex",gap:16,flexWrap:"wrap",justifyContent:"center"},"data-gufi-src":"sections/modelo/presupuesto.tsx:206"},__gh(Accion,{icono:import_lucide_react14.Plus,onClick:ejemplo},"Cargar precios de ejemplo"),__gh(Accion,{href:url("/precios")},"Ir a Precios"))})):__gh(__gf,null,grupos.length===0&&__gh(Grupo,null,__gh(Vacio,{titulo:"Ninguna partida se mide en este modelo",texto:"Revisa en Precios en qu\xE9 se mide cada una."})),grupos.map(([titulo,l])=>__gh(Grupo,{key:titulo,titulo,cuenta:l.length,sub:titulo==="Derribos"?"Lo que hab\xEDa en el estado actual y ya no est\xE1":titulo==="Obra nueva"&&r.reforma?`Lo que no estaba en el estado actual (versi\xF3n ${r.reforma.actual.version??"s/n"})`:titulo==="Materiales"?"Los suelos y las paredes elegidos para cada estancia":void 0,derecha:__gh("span",{style:{fontSize:13,fontWeight:600,color:INK,fontVariantNumeric:"tabular-nums"},"data-gufi-src":"sections/modelo/presupuesto.tsx:214"},euros(l.reduce((t,x)=>t+x.importe,0)))},l.map((x,i)=>__gh(Fila,{key:`${x.partida??`m${x.material}`}-${x.obra??""}-${x.descripcion}`,primera:i===0,titulo:x.descripcion,sub:`${x.codigo?`${x.codigo} \xB7 `:""}${cantidadDe(x)} ${x.unidad??""} \xD7 ${euros(x.precio)}${x.sin_medida?` \xB7 ${numero(x.sin_medida)} sin medida`:""}`,valor:euros(x.importe)})))),r.reforma&&__gh("p",{style:{fontSize:12,color:MUTED,margin:"-12px 4px 0",lineHeight:1.45},"data-gufi-src":"sections/modelo/presupuesto.tsx:223"},"Las estancias cuentan enteras; lo que s\xF3lo cambia de medida est\xE1 en Cambios."),sin.length>0&&__gh(Grupo,{titulo:"Sin medici\xF3n en este modelo",cuenta:sin.length,sub:"Partidas de tu tarifa que este modelo no deja medir"},sin.map((x,i)=>__gh(Fila,{key:`${x.partida??`m${x.material}`}-${x.obra??""}-${x.descripcion}`,primera:i===0,titulo:x.descripcion,sub:[x.codigo,x.problema??`Se mide en ${String(x.aplica_a??"").toLowerCase()}`].filter(Boolean).join(" \xB7 ")})))):__gh(Grupo,null,__gh(FilasCargando,{n:5})))}var import_react16=__toESM(require("react")),import_lucide_react15=require("lucide-react");var PAPEL={anchoMm:316,altoMm:273},PX=8,COLORES2={demolicion:"#f2c200",nueva:"#e5484d",ventana:"#3b82f6",puerta:"#22a06b",mueble:"#8b5cf6",instalacion:"#0ea5e9",estancia:"#dbe7fb"},fmt2=(n,d=2)=>n==null?"sin dato":n.toLocaleString("es-ES",{minimumFractionDigits:d,maximumFractionDigits:d});function plantasDe(e){let con=id=>e.medicion.estancias.some(s=>s.planta===id),conMuros=id=>e.medicion.elementos.some(x=>x.planta===id&&x.categoria==="Muro"),l=[...e.plantas].sort((a,b)=>a.orden-b.orden),vivas=l.filter(p=>con(p.id));return vivas.length?vivas:l.filter(p=>conMuros(p.id))}function marcas(elems,letra){let porTipo=new Map;for(let e of elems)porTipo.set(e.tipo??"Sin tipo",[...porTipo.get(e.tipo??"Sin tipo")??[],e]);return[...porTipo.entries()].sort((a,b)=>b[1].length-a[1].length).map(([tipo,l],i)=>({marca:`${letra}${i+1}`,tipo,l}))}async function dibujarJuego({principal:principal2,actual,nuevos,quitados,acabados,alPaso,sigue}){let encargos=[],reforma=!!actual,nuevosSet=new Set(nuevos),quitadosSet=new Set(quitados);for(let p of plantasDe(principal2)){let de=cat=>principal2.medicion.elementos.filter(x=>x.planta===p.id&&x.categoria===cat),pa=actual?actual.plantas.find(x=>x.nombre===p.nombre):void 0;if(actual&&pa){encargos.push({titulo:"Estado actual",sub:pa.nombre,escena:actual,o:{tipo:"planta",planta:pa.id},leyenda:[]});let ids=actual.medicion.elementos.filter(x=>x.planta===pa.id&&quitadosSet.has(x.express_id)).map(x=>x.express_id);encargos.push({titulo:"Demoliciones",sub:pa.nombre,escena:actual,o:{tipo:"planta",planta:pa.id,resaltar:[{ids,color:COLORES2.demolicion}]},leyenda:[{color:COLORES2.demolicion,texto:`A demoler (${ids.length})`}]})}if(encargos.push({titulo:reforma?"Estado reformado":"Planta",sub:p.nombre,escena:principal2,o:{tipo:"planta",planta:p.id},leyenda:[]}),reforma){let ids=principal2.medicion.elementos.filter(x=>x.planta===p.id&&nuevosSet.has(x.express_id)).map(x=>x.express_id);encargos.push({titulo:"Obra nueva",sub:p.nombre,escena:principal2,o:{tipo:"planta",planta:p.id,resaltar:[{ids,color:COLORES2.nueva}]},leyenda:[{color:COLORES2.nueva,texto:`A construir (${ids.length})`}]})}let estancias=principal2.medicion.estancias.filter(s=>s.planta===p.id);if(estancias.length){let total=estancias.reduce((t,s)=>t+(s.superficie??0),0);encargos.push({titulo:"Superficies",sub:p.nombre,escena:principal2,o:{tipo:"planta",planta:p.id,resaltar:[{ids:estancias.map(s=>s.express_id),color:COLORES2.estancia,opacidad:.85}],etiquetas:estancias.map(s=>({id:s.express_id,lineas:[s.nombre??s.numero??"Estancia",`${fmt2(s.superficie)} m\xB2`]}))},leyenda:[{color:COLORES2.estancia,texto:`Superficie \xFAtil: ${fmt2(total)} m\xB2`}],tabla:{titulo:"Estancias",columnas:["N\xBA","Estancia","m\xB2"],filas:[...estancias].sort((a,b)=>String(a.numero??"").localeCompare(String(b.numero??""),"es",{numeric:!0})).map(s=>[s.numero??"",s.nombre??"",fmt2(s.superficie)])}})}let conMaterial=estancias.filter(s=>s.global_id&&acabados(s.global_id));if(conMaterial.length){let porColor=new Map,leyenda=new Map;for(let s of conMaterial){let suelo=acabados(s.global_id)?.suelo;if(!suelo)continue;let color=suelo.color||"#e5e5e7";porColor.set(color,[...porColor.get(color)??[],s.express_id]);let k=`${suelo.marca??""}|${suelo.nombre}`,l=leyenda.get(k)??{color,texto:`${suelo.marca?`${suelo.marca} \xB7 `:""}${suelo.nombre}`,m2:0};l.m2+=s.superficie??0,leyenda.set(k,l)}encargos.push({titulo:"Acabados",sub:p.nombre,escena:principal2,o:{tipo:"planta",planta:p.id,resaltar:[...porColor.entries()].map(([color,ids])=>({ids,color,opacidad:.9})),etiquetas:conMaterial.map(s=>({id:s.express_id,lineas:[s.nombre??s.numero??"Estancia",acabados(s.global_id)?.suelo?.nombre??"Suelo sin elegir"]}))},leyenda:[...leyenda.values()].map(l=>({color:l.color,texto:`${l.texto} \xB7 ${fmt2(l.m2)} m\xB2`})),tabla:{titulo:"Acabados por estancia",columnas:["N\xBA","Suelo","Paredes"],filas:conMaterial.map(s=>{let a=acabados(s.global_id);return[s.numero??s.nombre??"",a?.suelo?.nombre??"\u2014",a?.paredes?.nombre??"\u2014"]})}})}let muros=de("Muro");if(muros.length){let huecos=[...de("Puerta"),...de("Ventana")];encargos.push({titulo:"Cotas",sub:p.nombre,escena:principal2,o:{tipo:"planta",planta:p.id,cotas:{muros:muros.map(x=>x.express_id),huecos:huecos.map(x=>x.express_id)}},leyenda:[{color:"#ffffff",texto:"Cotas en metros; huecos, ancho de paso"}]})}let ventanas=marcas(de("Ventana"),"V"),puertas=marcas(de("Puerta"),"P");if(ventanas.length||puertas.length){let fila=m=>{let a=m.l[0];return[m.marca,`${fmt2(a.ancho)} \xD7 ${fmt2(a.altura)} m`,`${m.l.length} ud`]};encargos.push({titulo:"Carpinter\xEDas",sub:p.nombre,escena:principal2,o:{tipo:"planta",planta:p.id,resaltar:[{ids:ventanas.flatMap(m=>m.l.map(x=>x.express_id)),color:COLORES2.ventana},{ids:puertas.flatMap(m=>m.l.map(x=>x.express_id)),color:COLORES2.puerta}],etiquetas:[...ventanas,...puertas].flatMap(m=>m.l.map(x=>({id:x.express_id,lineas:[m.marca],marca:!0})))},leyenda:[{color:COLORES2.ventana,texto:"Ventanas"},{color:COLORES2.puerta,texto:"Puertas"}],tabla:{titulo:"Carpinter\xEDas",columnas:["Marca","Ancho \xD7 alto","Ud"],filas:[...ventanas,...puertas].map(fila)}})}let muebles=de("Mobiliario");muebles.length&&encargos.push({titulo:"Armarios y mobiliario",sub:p.nombre,escena:principal2,o:{tipo:"planta",planta:p.id,resaltar:[{ids:muebles.map(x=>x.express_id),color:COLORES2.mueble}]},leyenda:[{color:COLORES2.mueble,texto:`Armarios y muebles (${muebles.length})`}]});let instalaciones=de("Instalaciones");instalaciones.length&&encargos.push({titulo:"Instalaciones",sub:p.nombre,escena:principal2,o:{tipo:"planta",planta:p.id,resaltar:[{ids:instalaciones.map(x=>x.express_id),color:COLORES2.instalacion}]},leyenda:[{color:COLORES2.instalacion,texto:`Aparatos y puntos (${instalaciones.length})`}]})}for(let[lado,nombre]of[["norte","Norte"],["sur","Sur"],["este","Este"],["oeste","Oeste"]])encargos.push({titulo:"Alzado",sub:nombre,escena:principal2,o:{tipo:"alzado",lado},leyenda:[]});encargos.push({titulo:"Secci\xF3n",sub:"Longitudinal",escena:principal2,o:{tipo:"seccion",lado:"sur"},leyenda:[]}),encargos.push({titulo:"Secci\xF3n",sub:"Transversal",escena:principal2,o:{tipo:"seccion",lado:"este"},leyenda:[]});let laminas=[];for(let[i,e]of encargos.entries()){if(alPaso(i,encargos.length,`${e.titulo} \xB7 ${e.sub}`),await new Promise(ok=>requestAnimationFrame(()=>ok(null))),!sigue())return laminas;let{imagen,escala}=e.escena.lamina({...e.o,...PAPEL,px:PX});laminas.push({numero:`A-${String(i+1).padStart(2,"0")}`,titulo:e.titulo,sub:e.sub,imagen,escala,leyenda:e.leyenda,tabla:e.tabla})}return alPaso(encargos.length,encargos.length,"Listo"),laminas}var URL_JSPDF="https://cdn.jsdelivr.net/npm/jspdf@2.5.2/+esm",jspdf=null;function libreria(){return jspdf??=import(URL_JSPDF).catch(e=>{throw jspdf=null,new Error(`No se pudo cargar el generador de PDF (jsPDF desde jsDelivr): ${e instanceof Error?e.message:String(e)}`)}),jspdf}var X4=330,ANCHO=80;function rgb2(hex){let n=parseInt(hex.slice(1),16);return[n>>16&255,n>>8&255,n&255]}function pagina(doc,l,c,fecha2){doc.setDrawColor(29,29,31),doc.setLineWidth(.4),doc.rect(10,10,400,277),doc.addImage(l.imagen,"JPEG",12,12,316,273,void 0,"FAST"),doc.line(X4,10,X4,287);let y=18,izq=X4+5,ancho=ANCHO-10;if(c.logo){let alto=Math.min(14,ancho/c.logo.proporcion);doc.addImage(c.logo.dato,c.logo.dato.startsWith("data:image/png")?"PNG":"JPEG",izq,y,alto*c.logo.proporcion,alto),y+=alto+8}else doc.setFont("helvetica","bold"),doc.setFontSize(14),doc.setTextColor(29,29,31),doc.text(c.empresa,izq,y+5),y+=14;let dato=(titulo,valor2,tam=10.5,negrita=!0)=>{doc.setFont("helvetica","normal"),doc.setFontSize(7),doc.setTextColor(134,134,139),doc.text(titulo,izq,y),y+=2+tam*.3528*.72,doc.setFont("helvetica",negrita?"bold":"normal"),doc.setFontSize(tam),doc.setTextColor(29,29,31);let lineas=doc.splitTextToSize(valor2,ancho);doc.text(lineas,izq,y),y+=(lineas.length-1)*tam*.3528*1.25+6};dato("Proyecto",c.proyecto),c.cliente&&dato("Cliente",c.cliente,10,!1),dato("Modelo",c.version,9,!1),doc.setDrawColor(229,229,231),doc.line(X4,y,X4+ANCHO,y),y+=8,dato("Plano",l.titulo,17),y-=2,doc.setFont("helvetica","normal"),doc.setFontSize(11),doc.text(l.sub,izq,y),y+=9;for(let ley of l.leyenda)doc.setFillColor(...rgb2(ley.color)),doc.setDrawColor(29,29,31),doc.setLineWidth(.15),doc.rect(izq,y-3,5,3.6,"FD"),doc.setFontSize(8.5),doc.setTextColor(29,29,31),doc.text(ley.texto,izq+7,y),y+=6;if(l.tabla){y+=3,doc.setFont("helvetica","bold"),doc.setFontSize(8.5),doc.text(l.tabla.titulo,izq,y),y+=5;let numerica2=l.tabla.filas.every(f=>/^[\d.,\s]+(m²|ud|m)?$/.test(f[2])),cols=numerica2?[izq,izq+16,izq+ancho]:[izq,izq+12,izq+12+(ancho-12)/2];doc.setFontSize(7),doc.setTextColor(134,134,139),doc.setFont("helvetica","normal"),doc.text(l.tabla.columnas[0],cols[0],y),doc.text(l.tabla.columnas[1],cols[1],y),doc.text(l.tabla.columnas[2],cols[2],y,numerica2?{align:"right"}:void 0),y+=1.5,doc.setDrawColor(29,29,31),doc.line(izq,y,izq+ancho,y),y+=3.8,doc.setTextColor(29,29,31),doc.setFontSize(7.5);let tope=236;for(let[i,f]of l.tabla.filas.entries()){if(y>tope){doc.setTextColor(134,134,139),doc.text(`y ${l.tabla.filas.length-i} m\xE1s`,izq,y);break}doc.text(f[0],cols[0],y),doc.text(doc.splitTextToSize(f[1],numerica2?38:(ancho-12)/2-2)[0],cols[1],y),numerica2?doc.text(f[2],cols[2],y,{align:"right"}):doc.text(doc.splitTextToSize(f[2],(ancho-12)/2)[0],cols[2],y),y+=4.2}}doc.setDrawColor(229,229,231),doc.line(X4,244,X4+ANCHO,244),doc.line(X4+ANCHO/2,244,X4+ANCHO/2,262),doc.line(X4,262,X4+ANCHO,262);let pie=(titulo,valor2,x,yy,tam)=>{doc.setFont("helvetica","normal"),doc.setFontSize(7),doc.setTextColor(134,134,139),doc.text(titulo,x,yy),doc.setFont("helvetica","bold"),doc.setFontSize(tam),doc.setTextColor(29,29,31),doc.text(valor2,x,yy+6.5)};pie("Escala",`1:${l.escala}`,izq,250,13),pie("Fecha",fecha2,X4+ANCHO/2+5,250,10),pie("Plano",l.numero,izq,269,22)}async function pdfDeLaminas(laminas,cajetin){let{jsPDF}=await libreria(),doc=new jsPDF({orientation:"landscape",unit:"mm",format:"a3"}),fecha2=new Date().toLocaleDateString("es-ES",{day:"numeric",month:"short",year:"numeric"});return laminas.forEach((l,i)=>{i&&doc.addPage("a3","landscape"),pagina(doc,l,cajetin,fecha2)}),doc.output("blob")}async function logoComoDato(url){let r=await fetch(url);if(!r.ok)throw new Error(`No se pudo leer el logo de la empresa (${r.status})`);let bmp=await createImageBitmap(await r.blob()),escala=Math.min(1,1200/Math.max(bmp.width,1)),lienzo=document.createElement("canvas");lienzo.width=Math.max(1,Math.round(bmp.width*escala)),lienzo.height=Math.max(1,Math.round(bmp.height*escala));let g=lienzo.getContext("2d");if(!g)throw new Error("Este navegador no deja preparar el logo (canvas 2D)");g.fillStyle="#ffffff",g.fillRect(0,0,lienzo.width,lienzo.height),g.drawImage(bmp,0,0,lienzo.width,lienzo.height);let proporcion=bmp.width/Math.max(bmp.height,1);return bmp.close(),{dato:lienzo.toDataURL("image/jpeg",.92),proporcion}}var pct=(mm,de)=>`${mm/de*100}%`,numerica=l=>!!(l.tabla&&l.tabla.filas.every(f=>/^[\d.,\s]+(m²|ud|m)?$/.test(f[2])));function Papel({l,cab}){let x=mm=>pct(mm,420),y=mm=>pct(mm,297),etiqueta={fontSize:"0.78cqw",color:MUTED,display:"block"};return __gh("div",{style:{containerType:"inline-size",width:"100%"},"data-gufi-src":"sections/modelo/planos.tsx:28"},__gh("div",{style:{position:"relative",aspectRatio:"420 / 297",background:"#fff",borderRadius:3,boxShadow:"0 12px 36px rgba(0,0,0,0.10), 0 0 0 0.5px rgba(0,0,0,0.12)",overflow:"hidden",color:INK},"data-gufi-src":"sections/modelo/planos.tsx:29"},__gh("div",{style:{position:"absolute",left:x(10),top:y(10),width:x(400),height:y(277),border:"1px solid #1d1d1f",boxSizing:"border-box"},"data-gufi-src":"sections/modelo/planos.tsx:30"}),__gh("img",{src:l.imagen,alt:`${l.titulo} \xB7 ${l.sub}`,style:{position:"absolute",left:x(12),top:y(12),width:x(316),height:y(273),objectFit:"contain"},"data-gufi-src":"sections/modelo/planos.tsx:31"}),__gh("div",{style:{position:"absolute",left:x(330),top:y(10),width:x(80),height:y(277),borderLeft:"1px solid #1d1d1f",boxSizing:"border-box",padding:"1.4cqw 1.2cqw",display:"flex",flexDirection:"column",gap:"0.9cqw"},"data-gufi-src":"sections/modelo/planos.tsx:32"},cab.logo?__gh("img",{src:cab.logo,alt:cab.empresa,style:{height:"3cqw",maxWidth:"100%",objectFit:"contain",objectPosition:"left"},"data-gufi-src":"sections/modelo/planos.tsx:33"}):__gh("b",{style:{fontSize:"1.5cqw"},"data-gufi-src":"sections/modelo/planos.tsx:33"},cab.empresa),__gh("div",{style:{marginTop:"0.8cqw"},"data-gufi-src":"sections/modelo/planos.tsx:34"},__gh("span",{style:etiqueta,"data-gufi-src":"sections/modelo/planos.tsx:35"},"Proyecto"),__gh("b",{style:{fontSize:"1.05cqw",lineHeight:1.25,display:"block"},"data-gufi-src":"sections/modelo/planos.tsx:36"},cab.proyecto)),cab.cliente&&__gh("div",{"data-gufi-src":"sections/modelo/planos.tsx:39"},__gh("span",{style:etiqueta,"data-gufi-src":"sections/modelo/planos.tsx:40"},"Cliente"),__gh("span",{style:{fontSize:"0.95cqw"},"data-gufi-src":"sections/modelo/planos.tsx:41"},cab.cliente)),__gh("div",{"data-gufi-src":"sections/modelo/planos.tsx:44"},__gh("span",{style:etiqueta,"data-gufi-src":"sections/modelo/planos.tsx:45"},"Modelo"),__gh("span",{style:{fontSize:"0.85cqw"},"data-gufi-src":"sections/modelo/planos.tsx:46"},cab.version)),__gh("span",{style:{height:1,background:HAIRLINE,margin:"0.4cqw -1.2cqw"},"data-gufi-src":"sections/modelo/planos.tsx:48"}),__gh("div",{"data-gufi-src":"sections/modelo/planos.tsx:49"},__gh("span",{style:etiqueta,"data-gufi-src":"sections/modelo/planos.tsx:50"},"Plano"),__gh("b",{style:{fontSize:"1.75cqw",letterSpacing:"-0.02em",lineHeight:1.15,display:"block"},"data-gufi-src":"sections/modelo/planos.tsx:51"},l.titulo),__gh("span",{style:{fontSize:"1.1cqw"},"data-gufi-src":"sections/modelo/planos.tsx:52"},l.sub)),l.leyenda.map(ley=>__gh("span",{key:ley.texto,style:{display:"flex",alignItems:"center",gap:"0.6cqw",fontSize:"0.85cqw"},"data-gufi-src":"sections/modelo/planos.tsx:55"},__gh("span",{style:{width:"1.2cqw",height:"0.85cqw",background:ley.color,border:"1px solid #1d1d1f",flexShrink:0},"data-gufi-src":"sections/modelo/planos.tsx:56"}),ley.texto)),l.tabla&&__gh("div",{style:{fontSize:"0.75cqw",overflow:"hidden",minHeight:0},"data-gufi-src":"sections/modelo/planos.tsx:61"},__gh("b",{style:{fontSize:"0.85cqw"},"data-gufi-src":"sections/modelo/planos.tsx:62"},l.tabla.titulo),__gh("div",{style:{display:"grid",gridTemplateColumns:numerica(l)?"auto 1fr auto":"auto 1fr 1fr",columnGap:"0.8cqw",rowGap:"0.25cqw",marginTop:"0.4cqw",fontVariantNumeric:"tabular-nums"},"data-gufi-src":"sections/modelo/planos.tsx:63"},l.tabla.columnas.map((c,i)=>__gh("span",{key:c,style:{color:MUTED,textAlign:i===2&&numerica(l)?"right":"left",borderBottom:"1px solid #1d1d1f",paddingBottom:"0.2cqw"},"data-gufi-src":"sections/modelo/planos.tsx:64"},c)),l.tabla.filas.slice(0,14).map(f=>f.map((v,i)=>__gh("span",{key:`${f[0]}-${f[1]}-${i}`,style:{textAlign:i===2&&numerica(l)?"right":"left",overflowWrap:"anywhere"},"data-gufi-src":"sections/modelo/planos.tsx:65"},v)))),l.tabla.filas.length>14&&__gh("span",{style:{color:MUTED},"data-gufi-src":"sections/modelo/planos.tsx:67"},`y ${l.tabla.filas.length-14} m\xE1s`)),__gh("div",{style:{marginTop:"auto",marginLeft:"-1.2cqw",marginRight:"-1.2cqw",marginBottom:"-1.4cqw",borderTop:`1px solid ${HAIRLINE}`},"data-gufi-src":"sections/modelo/planos.tsx:70"},__gh("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",borderBottom:`1px solid ${HAIRLINE}`},"data-gufi-src":"sections/modelo/planos.tsx:71"},__gh("div",{style:{padding:"0.6cqw 1.2cqw",borderRight:`1px solid ${HAIRLINE}`},"data-gufi-src":"sections/modelo/planos.tsx:72"},__gh("span",{style:etiqueta,"data-gufi-src":"sections/modelo/planos.tsx:72"},"Escala"),__gh("b",{style:{fontSize:"1.3cqw"},"data-gufi-src":"sections/modelo/planos.tsx:72"},`1:${l.escala}`)),__gh("div",{style:{padding:"0.6cqw 1.2cqw"},"data-gufi-src":"sections/modelo/planos.tsx:73"},__gh("span",{style:etiqueta,"data-gufi-src":"sections/modelo/planos.tsx:73"},"Fecha"),__gh("b",{style:{fontSize:"0.95cqw"},"data-gufi-src":"sections/modelo/planos.tsx:73"},new Date().toLocaleDateString("es-ES",{day:"numeric",month:"short",year:"numeric"})))),__gh("div",{style:{padding:"0.6cqw 1.2cqw 1cqw"},"data-gufi-src":"sections/modelo/planos.tsx:75"},__gh("span",{style:etiqueta,"data-gufi-src":"sections/modelo/planos.tsx:75"},"Plano"),__gh("b",{style:{fontSize:"2.2cqw",letterSpacing:"-0.02em"},"data-gufi-src":"sections/modelo/planos.tsx:75"},l.numero))))))}function descargar(blob,nombre){let a=document.createElement("a");a.href=URL.createObjectURL(blob),a.download=nombre,a.click(),setTimeout(()=>URL.revokeObjectURL(a.href),1e4)}function Planos({gufi,escena,modelo,versiones,proyecto,compacto,materiales}){let[paso,setPaso]=import_react16.default.useState({hecho:0,total:0,que:"Preparando"}),[laminas,setLaminas]=import_react16.default.useState(null),[version,setVersion]=import_react16.default.useState(`Versi\xF3n ${modelo.version??"s/n"}`),[error,setError]=import_react16.default.useState(null),[elegida,setElegida]=import_react16.default.useState(0),[haciendo,setHaciendo]=import_react16.default.useState(null),[vuelta,setVuelta]=import_react16.default.useState(0),empresa=gufi.context.activeCompany,nombreProyecto=proyecto?.nombre??modelo.nombre,listas=versiones.some(v=>v.id===modelo.id),claveVersiones=versiones.map(v=>`${v.id}:${v.fase}:${v.estado}`).join("|"),vivos=import_react16.default.useRef(materiales);vivos.current=materiales;let claveMateriales=materiales.catalogo.map(m=>`${m.id}:${m.color}:${m.nombre}`).join("|")+"#"+escena.medicion.estancias.map(s=>{let a=s.global_id?materiales.de(s.global_id):void 0;return a?`${s.global_id}:${a.suelo}:${a.paredes}`:""}).join("");import_react16.default.useEffect(()=>{if(!listas)return;let vivo=!0,otra=null,caja=null;return(async()=>{setLaminas(null),setError(null),setPaso({hecho:0,total:0,que:"Preparando"});let medido=v=>v.estado==="Medido",reformado=modelo.fase==="Estado reformado"?modelo:versiones.find(v=>v.fase==="Estado reformado"&&medido(v))??null,actualFila=modelo.fase==="Estado actual"?modelo:versiones.find(v=>v.fase==="Estado actual"&&medido(v))??null,principal2=escena,actual=null,nuevos=[],quitados=[];if(reformado&&actualFila&&reformado.id!==actualFila.id&&(modelo.id===reformado.id||modelo.id===actualFila.id)){setPaso({hecho:0,total:0,que:"Comparando el estado actual con el reformado"});let r=await gufi.automation("arquitectura_comparar",{modelo:reformado.id,con:actualFila.id});nuevos=r.ids_nuevos,quitados=r.quitados.map(x=>x.express_id);let otraFila=modelo.id===reformado.id?actualFila:reformado,ruta=rutaDe(otraFila.archivo);if(!ruta)throw new Error(`La versi\xF3n ${otraFila.version} no tiene su fichero IFC guardado: s\xFAbela otra vez desde el proyecto`);setPaso({hecho:0,total:0,que:`Abriendo la versi\xF3n ${otraFila.version} (${faseCorta(otraFila.fase)})`});let libs2=await librerias(),bytes=await bytesDe(gufi,otraFila.id,ruta);if(!vivo)return;caja=document.createElement("div"),Object.assign(caja.style,{position:"fixed",left:"-20000px",top:"0",width:"1600px",height:"1000px"}),document.body.appendChild(caja),otra=await crearEscena(libs2,caja,bytes,{alElegir:()=>{},alMedir:()=>{},alPedirMedida:()=>{},alCamara:()=>{}}),modelo.id===reformado.id?actual=otra:(principal2=otra,actual=escena),setVersion(`Estado actual: versi\xF3n ${actualFila.version} \xB7 Reformado: versi\xF3n ${reformado.version}`)}if(!vivo)return;let l2=await dibujarJuego({principal:principal2,actual,nuevos,quitados,acabados:gid=>{let a=vivos.current.de(gid);if(!a||!a.suelo&&!a.paredes)return;let m=id=>{let x=id==null?null:vivos.current.catalogo.find(c=>c.id===id);return x?{nombre:x.nombre,marca:x.marca??null,color:x.color??null}:null};return{suelo:m(a.suelo),paredes:m(a.paredes)}},alPaso:(hecho,total,que)=>vivo&&setPaso({hecho,total,que}),sigue:()=>vivo});vivo&&(setLaminas(l2),setElegida(0),setPaso(null))})().catch(e=>{vivo&&(setError(textoError(e)),setPaso(null)),reportar(e)}).finally(()=>{otra?.destruir(),caja?.remove()}),()=>{vivo=!1}},[escena,modelo.id,modelo.fase,listas,claveVersiones,claveMateriales,vuelta]);async function pdf(cuales,nombre,clave){setHaciendo(clave);try{let logo=empresa.logo?await logoComoDato(empresa.logo):null,blob=await pdfDeLaminas(cuales,{empresa:empresa.name,logo,proyecto:nombreProyecto,cliente:proyecto?.cliente??null,version});descargar(blob,`${nombre}.pdf`),gufi.toastSuccess(cuales.length===1?"Plano descargado en PDF":`${numero(cuales.length)} planos en un PDF`)}catch(e){gufi.toastError(textoError(e)),reportar(e)}finally{setHaciendo(null)}}let limpio=s=>s.replace(/[\\/:*?"<>|]+/g,""),todo=()=>laminas&&pdf(laminas,`Planos ${limpio(nombreProyecto)}`,"todo"),una=l2=>pdf([l2],`${l2.numero} ${limpio(l2.titulo)} ${limpio(l2.sub)}`,l2.numero),cab={empresa:empresa.name,logo:empresa.logo,proyecto:nombreProyecto,cliente:proyecto?.cliente??null,version};if(error)return __gh(Aviso,{titulo:"No se pudieron dibujar los planos",texto:error,accion:__gh(Accion,{onClick:()=>setVuelta(v=>v+1)},"Volver a probar")});if(!laminas)return __gh(Tarjeta,null,__gh("div",{style:{padding:"22px 20px",display:"flex",flexDirection:"column",gap:12,maxWidth:560},"data-gufi-src":"sections/modelo/planos.tsx:208"},__gh("span",{style:{fontSize:17,fontWeight:650,letterSpacing:"-0.3px",color:INK},"data-gufi-src":"sections/modelo/planos.tsx:209"},"Dibujando los planos"),__gh("span",{style:{fontSize:13,color:MUTED},"data-gufi-src":"sections/modelo/planos.tsx:210"},paso?.total?`${paso.que} \xB7 ${numero(paso.hecho+1>paso.total?paso.total:paso.hecho+1)} de ${numero(paso.total)}`:paso?.que),__gh(Progreso,{valor:paso?.total?paso.hecho/paso.total:.04})));let boton=__gh(Principal,{icono:import_lucide_react15.FileDown,onClick:todo,deshabilitado:!!haciendo},haciendo==="todo"?"Preparando el PDF":`Descargar los ${numero(laminas.length)} planos`);if(compacto)return __gh("div",{style:{display:"flex",flexDirection:"column",gap:18},"data-gufi-src":"sections/modelo/planos.tsx:221"},__gh("div",{"data-gufi-src":"sections/modelo/planos.tsx:222"},__gh("h2",{style:{fontSize:24,fontWeight:700,letterSpacing:"-0.03em",color:INK,margin:0},"data-gufi-src":"sections/modelo/planos.tsx:223"},"Planos"),__gh("p",{style:{fontSize:13,color:MUTED,margin:"2px 0 12px"},"data-gufi-src":"sections/modelo/planos.tsx:224"},`${numero(laminas.length)} l\xE1minas en A3, sacadas del modelo`),boton),laminas.map(l2=>__gh("section",{key:l2.numero,style:{display:"flex",flexDirection:"column",gap:8},"data-gufi-src":"sections/modelo/planos.tsx:228"},__gh(Papel,{l:l2,cab}),__gh("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"0 2px"},"data-gufi-src":"sections/modelo/planos.tsx:230"},__gh("span",{style:{flex:1,minWidth:0},"data-gufi-src":"sections/modelo/planos.tsx:231"},__gh("span",{style:{display:"block",fontSize:14,fontWeight:600,color:INK},"data-gufi-src":"sections/modelo/planos.tsx:232"},`${l2.titulo} \xB7 ${l2.sub}`),__gh("span",{style:{display:"block",fontSize:12,color:MUTED},"data-gufi-src":"sections/modelo/planos.tsx:233"},`${l2.numero} \xB7 escala 1:${l2.escala}`)),__gh(Accion,{pequeno:!0,icono:import_lucide_react15.Download,onClick:()=>una(l2),deshabilitado:!!haciendo},"PDF")))));let l=laminas[Math.min(elegida,laminas.length-1)];return __gh("div",{style:{display:"grid",gridTemplateColumns:"228px minmax(0, 1fr)",gap:28,alignItems:"start"},"data-gufi-src":"sections/modelo/planos.tsx:245"},__gh("aside",{style:{position:"sticky",top:0,maxHeight:"calc(100dvh - 120px)",overflowY:"auto",display:"flex",flexDirection:"column",gap:6,paddingRight:6},"data-gufi-src":"sections/modelo/planos.tsx:246"},laminas.map((x,i)=>{let es=i===elegida;return __gh("button",{key:x.numero,type:"button",onClick:()=>setElegida(i),"aria-pressed":es,style:{display:"flex",flexDirection:"column",gap:6,padding:8,borderRadius:12,border:"none",textAlign:"left",fontFamily:"inherit",cursor:"pointer",background:es?"#fff":"transparent",boxShadow:es?`0 0 0 1px ${HAIRLINE}, 0 1px 2px rgba(0,0,0,0.04)`:"none"},"data-gufi-src":"sections/modelo/planos.tsx:250"},__gh("img",{src:x.imagen,alt:"",style:{width:"100%",aspectRatio:"316 / 273",objectFit:"contain",background:"#fff",borderRadius:4,boxShadow:"0 0 0 0.5px rgba(0,0,0,0.14)"},"data-gufi-src":"sections/modelo/planos.tsx:252"}),__gh("span",{style:{display:"flex",gap:6,alignItems:"baseline",fontSize:12.5,color:INK},"data-gufi-src":"sections/modelo/planos.tsx:253"},__gh("span",{style:{color:MUTED,fontVariantNumeric:"tabular-nums"},"data-gufi-src":"sections/modelo/planos.tsx:254"},x.numero),__gh("span",{style:{fontWeight:es?650:500,overflowWrap:"anywhere"},"data-gufi-src":"sections/modelo/planos.tsx:255"},`${x.titulo} \xB7 ${x.sub}`)))})),__gh("section",{style:{display:"flex",flexDirection:"column",gap:18,minWidth:0},"data-gufi-src":"sections/modelo/planos.tsx:261"},__gh(Barra,{izquierda:__gh("div",{"data-gufi-src":"sections/modelo/planos.tsx:264"},__gh("h2",{style:{fontSize:24,fontWeight:700,letterSpacing:"-0.03em",color:INK,margin:0},"data-gufi-src":"sections/modelo/planos.tsx:265"},`${l.titulo} \xB7 ${l.sub}`),__gh("p",{style:{fontSize:13,color:MUTED,margin:"2px 0 0"},"data-gufi-src":"sections/modelo/planos.tsx:266"},`Plano ${l.numero} de ${numero(laminas.length)} \xB7 A3 \xB7 escala 1:${l.escala}`)),derecha:__gh(__gf,null,__gh(Accion,{icono:import_lucide_react15.Download,onClick:()=>una(l),deshabilitado:!!haciendo},haciendo===l.numero?"Preparando":"Este plano"),boton)}),__gh("div",{key:l.numero,className:"arq-entra","data-gufi-src":"sections/modelo/planos.tsx:276"},__gh(Papel,{l,cab}))))}var import_react17=__toESM(require("react")),import_lucide_react16=require("lucide-react");var ALFABETO="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",codigoNuevo=()=>Array.from(crypto.getRandomValues(new Uint8Array(28)),b=>ALFABETO[b%64]).join(""),paletaParaWeb=()=>Object.fromEntries(Object.entries(ACABADOS).map(([k,a])=>[k,{nombre:a.nombre,colores:a.colores,resto:a.resto??null}])),m2=n=>`${(n??0).toLocaleString("es-ES",{maximumFractionDigits:1})} m\xB2`;function bytesDe2(dataUrl){let b=atob(dataUrl.slice(dataUrl.indexOf(",")+1)),u=new Uint8Array(b.length);for(let i=0;iescena.medicion.estancias.some(s=>s.planta===p.id)).sort((a,b)=>a.orden-b.orden),total=1+vivas.length*2,hechos=0,avanza=texto2=>setPaso({texto:texto2,avance:(hechos+++.5)/(total+1)}),suelos=new Map;for(let s of escena.medicion.estancias){let elegido=s.global_id?materiales.de(s.global_id):void 0,m=elegido?.suelo?materiales.catalogo.find(x=>x.id===elegido.suelo):null;m?.color&&suelos.set(s.express_id,{nombre:String(m.nombre??""),color:m.color})}avanza("La casa entera");let glb=await subir(await escena.exportarGlb(acabadoWeb,void 0,suelos),"glb"),plantas=[],cm=n=>Math.round(n*100)/100;for(let p of vivas){avanza(`${p.nombre}, por dentro`);let dentro=await subir(await escena.exportarGlb(acabadoWeb,p.id,suelos),"glb");avanza(`El plano de ${p.nombre}`);let estancias=escena.medicion.estancias.filter(s=>s.planta===p.id),porColor=new Map;for(let s of estancias){let elegido=s.global_id?materiales.de(s.global_id):void 0,color=(elegido?.suelo?materiales.catalogo.find(m=>m.id===elegido.suelo):null)?.color??COLORES2.estancia;porColor.set(color,[...porColor.get(color)??[],s.express_id])}let{imagen}=escena.lamina({tipo:"planta",planta:p.id,ajustada:!0,anchoMm:160,altoMm:120,px:10,resaltar:[...porColor.entries()].map(([color,ids])=>({ids,color,opacidad:.85})),etiquetas:estancias.map(s=>({id:s.express_id,lineas:[s.nombre??s.numero??"Estancia",m2(s.superficie)]}))}),plano=await subir(bytesDe2(imagen),"jpg"),puntos=estancias.flatMap(s=>{let c=escena.caja(s.express_id);return c?[{express_id:s.express_id,x:cm((c.min[0]+c.max[0])/2),y:cm(c.min[1]),z:cm((c.min[2]+c.max[2])/2),ancho:cm(c.max[0]-c.min[0]),fondo:cm(c.max[2]-c.min[2])}]:[]});plantas.push({express_id:p.id,nombre:p.nombre,glb:dentro,plano,puntos})}setPaso({texto:"Publicando",avance:total/(total+1)}),await gufi.automation("arquitectura_enlace",{op:"guardar",modelo:modelo.id,codigo:enlace?void 0:codigoNuevo(),glb,plantas,acabado:acabadoWeb,acabados:paletaParaWeb(),presupuesto:enlace?enlace.presupuesto!==!1:conPresupuesto}),reload(),gufi.toastSuccess(enlace?"Tu cliente ya ve lo \xFAltimo":"Publicado: copia el enlace y m\xE1ndaselo")}catch(e){gufi.toastError(textoError(e)),reportar(e)}finally{setPaso(null)}}async function op(datos,aviso2){try{await gufi.automation("arquitectura_enlace",{...datos,modelo:modelo.id}),reload(),gufi.toastSuccess(aviso2)}catch(e){gufi.toastError(textoError(e)),reportar(e)}}function cambiarPublicado(si){if(!si)return void op({op:"desactivar"},"Cerrado: el enlace ya no abre");if(enlace)return void op({op:"activar"},"Publicado otra vez, con el mismo enlace");publicar()}async function copiar(){if(url)try{await navigator.clipboard.writeText(url),gufi.toastSuccess("Enlace copiado")}catch(e){gufi.toastError(textoError(e)),reportar(e)}}let sinWeb=web===null;return __gh("div",{style:{background:CANVAS,padding:16,display:"flex",flexDirection:"column",gap:18,minWidth:0},"data-gufi-src":"sections/modelo/enlace.tsx:141"},__gh("p",{style:{fontSize:14,color:MUTED,margin:0,lineHeight:1.5},"data-gufi-src":"sections/modelo/enlace.tsx:142"},"Tu cliente ve su casa en vuestra web: la gira en 3D, la recorre planta a planta, cambia los acabados, la pone en su sal\xF3n con la realidad aumentada del m\xF3vil y ve los planos, los materiales y el presupuesto. Sin cuenta ni aplicaci\xF3n."),loading||web===void 0?null:sinWeb?__gh(Grupo,null,__gh(Fila,{primera:!0,titulo:"La web del estudio a\xFAn no est\xE1 publicada",sub:"Es la app \xABWeb para clientes\xBB: hay que publicarla en vuestro subdominio para poder mandar enlaces."})):__gh(__gf,null,__gh(Grupo,null,__gh(Fila,{primera:!0,titulo:"Publicado",sub:publicado?"Cualquiera con el enlace ve su casa":enlace?"Cerrado: el enlace no abre":"Se prepara la casa, sus plantas y sus planos",control:__gh(Interruptor,{titulo:"Publicado",encendido:publicado||!!paso,onCambio:cambiarPublicado})}),!enlace&&!paso&&__gh(Fila,{titulo:"Con el presupuesto",sub:"El total sin IVA y sus cap\xEDtulos",control:__gh(Interruptor,{titulo:"Con el presupuesto",encendido:conPresupuesto,onCambio:setConPresupuesto})})),paso&&__gh(Grupo,null,__gh("div",{style:{padding:16,display:"flex",flexDirection:"column",gap:10},"data-gufi-src":"sections/modelo/enlace.tsx:158"},__gh("span",{style:{fontSize:13.5,fontWeight:600,color:INK},"data-gufi-src":"sections/modelo/enlace.tsx:159"},paso.texto),__gh(Progreso,{valor:paso.avance}))),!paso&&publicado&&url&&__gh(__gf,null,__gh(Grupo,{titulo:"El enlace"},__gh(Fila,{primera:!0,titulo:__gh("span",{style:{fontSize:13,fontWeight:600,overflowWrap:"anywhere"},"data-gufi-src":"sections/modelo/enlace.tsx:167"},url.replace(/^https:\/\//,"")),control:__gh("span",{style:{display:"inline-flex",gap:6},"data-gufi-src":"sections/modelo/enlace.tsx:168"},__gh(Accion,{pequeno:!0,icono:import_lucide_react16.Copy,soloIcono:!0,titulo:"Copiar el enlace",onClick:copiar},"Copiar"),__gh(Accion,{pequeno:!0,icono:import_lucide_react16.ArrowUpRight,soloIcono:!0,titulo:"Abrirlo",href:url,fuera:!0},"Abrir"))}),__gh(Fila,{titulo:"Visitas",valor:numero(Number(enlace.visitas??0)),valorSub:enlace.ultima_visita?`la \xFAltima, ${fecha(enlace.ultima_visita)}`:"a\xFAn no lo ha abierto"}),__gh(Fila,{titulo:"Acabado al abrir",valor:ACABADOS[enlace.acabado]?.nombre??enlace.acabado??"sin dato"}),__gh(Fila,{titulo:"Con el presupuesto",sub:"El total sin IVA y sus cap\xEDtulos",control:__gh(Interruptor,{titulo:"Con el presupuesto",encendido:enlace.presupuesto!==!1,onCambio:si=>op({op:"presupuesto",presupuesto:si},si?"Tu cliente ver\xE1 el presupuesto":"El presupuesto ya no se ve")})})),__gh("div",{style:{display:"flex",gap:14,flexWrap:"wrap",alignItems:"center"},"data-gufi-src":"sections/modelo/enlace.tsx:173"},__gh(Accion,{icono:import_lucide_react16.RotateCw,onClick:publicar},"Actualizar con lo que ves ahora"),__gh("span",{style:{fontSize:12.5,color:MUTED},"data-gufi-src":"sections/modelo/enlace.tsx:175"},`Acabado ${ACABADOS[acabadoWeb]?.nombre.toLowerCase()??acabadoWeb}. Lo publicado es del ${fecha(enlace.__updated_at__)}.`)))))}var import_react18=__toESM(require("react"));var TANDA5=15,NOMBRE={tipo:"Tipo",longitud:"Longitud",altura:"Altura",ancho:"Ancho",superficie:"Superficie",volumen:"Volumen"},valorDe=(v,unidad)=>v==null?"sin dato":typeof v=="number"?medida(v,unidad??"",unidad==="m\xB3"?3:2).trim():String(v);function Cambios({gufi,modelo,compacto,ir}){let{data:versiones,loading}=gufi.useData("arquitectura__modelos",{filters:[{field:"proyecto",operator:"eq",value:modelo.proyecto},{field:"estado",operator:"eq",value:"Medido"}],sorters:[{field:"version",order:"desc"}],pageSize:200}),otras=(versiones??[]).filter(v=>v.id!==modelo.id),anterior=(modelo.fase==="Estado reformado"?otras.find(v=>v.fase==="Estado actual"):null)??otras.find(v=>Number(v.version){if(!conId)return;let vivo=!0;return setR(null),setError(null),gufi.automation("arquitectura_comparar",{modelo:modelo.id,con:conId}).then(x=>vivo&&setR(x)).catch(e=>{vivo&&(setError(textoError(e)),reportar(e))}),()=>{vivo=!1}},[modelo.id,conId]),loading)return __gh(Grupo,{titulo:"Cambios"},__gh(FilasCargando,{n:3}));if(!anterior)return __gh(Grupo,{titulo:"Cambios"},__gh(Vacio,{titulo:"Es la \xFAnica versi\xF3n medida del proyecto",texto:"Cuando subas otra versi\xF3n del modelo, aqu\xED ver\xE1s qu\xE9 piezas se han a\xF1adido, quitado o cambiado de medida."}));let elegida=otras.find(v=>v.id===conId),reforma=!!r?.reforma,lista=(k,titulo,total)=>{if(!r||r[k].length===0)return null;let filas=r[k],n=ver[k]??TANDA5,enOtro=k==="quitados";return __gh(Grupo,{titulo,cuenta:total,pie:total>filas.length?`Se ense\xF1an las ${numero(filas.length)} primeras.`:enOtro?`Se abren en la versi\xF3n ${r.con.version}, donde estaban.`:void 0},filas.slice(0,n).map((p,i)=>__gh(Fila,{key:p.global_id,primera:i===0,onClick:()=>ir("pieza",{modelo:enOtro?r.con.id:r.nuevo.id,pieza:p.express_id}),titulo:`${p.categoria} \xB7 ${p.tipo??p.nombre??"sin tipo"}`,sub:p.cambios?p.cambios.map(c=>`${NOMBRE[c.que]??c.que}: ${valorDe(c.antes,c.unidad)} \u2192 ${valorDe(c.ahora,c.unidad)}`).join(" \xB7 "):p.planta??"Sin planta"})),filas.length>n&&__gh(FilaMas,{quedan:filas.length-n,onClick:()=>setVer(v=>({...v,[k]:n+TANDA5}))}))};return __gh("div",{style:{display:"flex",flexDirection:"column",gap:22},"data-gufi-src":"sections/modelo/cambios.tsx:91"},__gh(Barra,{izquierda:__gh(Menu,{boton:(abrir2,abierto)=>__gh(BotonMenu,{onClick:abrir2,abierto},elegida?elegida.fase==="Estado actual"&&modelo.fase==="Estado reformado"?`Frente al estado actual (versi\xF3n ${elegida.version??"s/n"})`:`Frente a la versi\xF3n ${elegida.version??"s/n"}`:"Elegir versi\xF3n")},cerrar=>otras.map(v=>__gh(MenuItem,{key:v.id,elegido:v.id===conId,sub:[v.fase,v.nombre].filter(Boolean).join(" \xB7 "),onClick:()=>{setCon(v.id),cerrar()}},`Versi\xF3n ${v.version??"s/n"}`)))}),error?__gh(Aviso,{titulo:"No se pudo comparar",texto:error,accion:__gh(Accion,{onClick:()=>setCon(conId)},"Volver a probar")}):__gh(__gf,null,__gh(Cifras,{compacto},__gh(Cifra,{etiqueta:reforma?"Obra nueva":"A\xF1adidas",valor:r?numero(r.totales.anadidos):__gh(Cargando,null),sub:reforma?"Piezas que se hacen":"Piezas nuevas"}),__gh(Cifra,{etiqueta:reforma?"Derribos":"Quitadas",valor:r?numero(r.totales.quitados):__gh(Cargando,null),sub:reforma?"Piezas que se quitan":"Ya no est\xE1n"}),__gh(Cifra,{etiqueta:"Cambiadas",valor:r?numero(r.totales.cambiados):__gh(Cargando,null),sub:"Otra medida u otro tipo"}),__gh(Cifra,{etiqueta:"Superficie \xFAtil",valor:r?r.superficie_util.diferencia===0?"Igual":`${r.superficie_util.diferencia>0?"+":""}${medida(r.superficie_util.diferencia,"m\xB2")}`:__gh(Cargando,null),sub:r?`De ${medida(r.superficie_util.antes,"m\xB2")} a ${medida(r.superficie_util.ahora,"m\xB2")}`:void 0})),r?r.por_categoria.length===0?__gh(Grupo,{titulo:"Por categor\xEDa"},__gh(Vacio,{titulo:"Ninguna pieza ha cambiado",texto:`Las ${numero(r.totales.sin_cambios)} piezas de las dos versiones son iguales.`})):__gh(__gf,null,__gh(Grupo,{titulo:"Por categor\xEDa"},r.por_categoria.map((c,i)=>__gh(Fila,{key:c.categoria,primera:i===0,titulo:c.categoria,sub:[c.anadidos&&(reforma?`${numero(c.anadidos)} de obra nueva`:plural(c.anadidos,"a\xF1adida","a\xF1adidas")),c.quitados&&(reforma?`${numero(c.quitados)} a derribar`:plural(c.quitados,"quitada","quitadas")),c.cambiados&&plural(c.cambiados,"cambiada","cambiadas")].filter(Boolean).join(" \xB7 ")}))),lista("cambiados","Cambiadas",r.totales.cambiados),lista("anadidos",reforma?"Obra nueva":"A\xF1adidas",r.totales.anadidos),lista("quitados",reforma?"Derribos":"Quitadas",r.totales.quitados)):__gh(Grupo,{titulo:"Por categor\xEDa"},__gh(FilasCargando,{n:4}))))}var PANTALLA={modelo:"visor",planos:"planos",mediciones:"mediciones",presupuesto:"presupuesto",cambios:"cambios"},ICONO_MODO={modelo:import_lucide_react17.Box,planos:import_lucide_react17.Files,mediciones:import_lucide_react17.Table2,presupuesto:import_lucide_react17.Receipt,cambios:import_lucide_react17.GitCompare},ACABADO_INICIAL="maqueta",ANCHO_NAVEGADOR=264,CARRIL_ERP=80;function descargar2(blob,nombre){let a=document.createElement("a");a.href=URL.createObjectURL(blob),a.download=nombre,a.click(),setTimeout(()=>URL.revokeObjectURL(a.href),1e4)}var fichero=s=>String(s??"modelo").replace(/[^\w-]+/g,"_");function CuboVivo({oyentes,onCara,derecha}){let[o,setO]=import_react19.default.useState({giro:.7,cabeceo:.5});return import_react19.default.useEffect(()=>{let f=(giro,cabeceo)=>setO({giro,cabeceo});return oyentes.current.add(f),()=>{oyentes.current.delete(f)}},[]),__gh(ViewCube,{giro:o.giro,cabeceo:o.cabeceo,onCara,derecha})}function Desplegable({texto:texto2,onClick,abierto}){return __gh("button",{type:"button",onClick,"aria-expanded":abierto,style:{display:"inline-flex",alignItems:"center",gap:5,height:34,padding:"0 10px",borderRadius:10,border:"none",background:abierto?"rgba(118,118,128,0.16)":"transparent",color:INK,fontFamily:"inherit",fontSize:12.5,fontWeight:600,cursor:"pointer",whiteSpace:"nowrap",flexShrink:0},"data-gufi-src":"sections/modelo/espacio.tsx:70"},texto2,__gh(import_lucide_react17.ChevronDown,{size:13,strokeWidth:2,style:{color:MUTED},"aria-hidden":!0}))}var Separador=()=>__gh("span",{"aria-hidden":!0,style:{width:1,height:34,background:HAIRLINE,margin:"0 6px",flexShrink:0},"data-gufi-src":"sections/modelo/espacio.tsx:78"});function Herramienta({icono:I,texto:texto2,titulo,onClick,activo,deshabilitado}){let[encima,setEncima]=import_react19.default.useState(!1);return __gh("button",{type:"button",onClick,disabled:deshabilitado,title:titulo??texto2,"aria-pressed":activo,onPointerEnter:e=>e.pointerType==="mouse"&&setEncima(!0),onPointerLeave:()=>setEncima(!1),style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:3,minWidth:54,height:50,padding:"0 6px",borderRadius:11,border:"none",flexShrink:0,background:activo?"rgba(118,118,128,0.16)":encima&&!deshabilitado?"rgba(118,118,128,0.08)":"transparent",color:INK,fontFamily:"inherit",fontSize:11,fontWeight:activo?600:500,whiteSpace:"nowrap",cursor:deshabilitado?"default":"pointer",opacity:deshabilitado?.35:1},"data-gufi-src":"sections/modelo/espacio.tsx:84"},__gh(I,{size:18,strokeWidth:1.7,"aria-hidden":!0}),texto2)}function Espacio({gufi,modelo,proyecto,versiones,modo,pieza,url,ir,compacto,alCambiarFase,midiendo,conEnlace}){let raiz=import_react19.default.useRef(null),caja=import_react19.default.useRef(null),oyentes=import_react19.default.useRef(new Set),porEncuadrar=import_react19.default.useRef(null),yoPuseCompleta=import_react19.default.useRef(!1),[escena,setEscena]=import_react19.default.useState(null),[carga,setCarga]=import_react19.default.useState("Preparando el visor"),[error,setError]=import_react19.default.useState(null),[vista,setVista]=import_react19.default.useState("3d"),[planta,setPlanta]=import_react19.default.useState(null),[seleccion,setSeleccion]=import_react19.default.useState([]),[props,setProps]=import_react19.default.useState(null),[estilo,setEstilo]=import_react19.default.useState("sombreado"),[acabado,setAcabado]=import_react19.default.useState(ACABADO_INICIAL),[corte,setCorte]=import_react19.default.useState(!0),[estancias,setEstancias]=import_react19.default.useState(!1),[medir,setMedir]=import_react19.default.useState(!1),[medidas,setMedidas]=import_react19.default.useState([]),[pendiente,setPendiente]=import_react19.default.useState(!1),[filtro,setFiltro]=import_react19.default.useState(!1),[grabando,setGrabando]=import_react19.default.useState(!1),[presentando,setPresentando]=import_react19.default.useState(!1),[panel,setPanel]=import_react19.default.useState(!0),[navegador,setNavegador]=import_react19.default.useState(!0),[pestana,setPestana]=import_react19.default.useState("version"),[hoja,setHoja]=import_react19.default.useState(null),[altoHoja,setAltoHoja]=import_react19.default.useState("media"),[enlaceAbierto,setEnlaceAbierto]=import_react19.default.useState(conEnlace),ruta=rutaDe(modelo.archivo),rutaCartel=rutaDe(modelo.miniatura),cartel=useMiniaturas(gufi,rutaCartel?[rutaCartel]:[])[rutaCartel??""],{data:catalogo}=gufi.useData("arquitectura__materiales",{pageSize:2e3,sorters:[{field:"marca",order:"asc"}],realtime:!0}),{data:elegidos,reload:releerElegidos}=gufi.useData("arquitectura__materiales_estancia",{filters:[{field:"proyecto",operator:"eq",value:modelo.proyecto}],pageSize:5e3,realtime:!0}),materiales={catalogo:catalogo??[],de:gid=>{let f=(elegidos??[]).find(x=>x.global_id===gid);return f?{suelo:f.suelo??null,paredes:f.paredes??null}:void 0},onElegir:(gid,estancia,campo,material)=>{let f=(elegidos??[]).find(x=>x.global_id===gid);(f?gufi.dataProvider.update({resource:"arquitectura__materiales_estancia",id:f.id,variables:{[campo]:material}}):gufi.dataProvider.create({resource:"arquitectura__materiales_estancia",variables:{proyecto:modelo.proyecto,global_id:gid,estancia,[campo]:material}})).then(()=>releerElegidos()).catch(e=>{gufi.toastError(textoError(e)),reportar(e)})}},empresa=gufi.context.activeCompany,enModelo=modo==="modelo",anchoPanel=Math.round(Math.min(360,Math.max(300,window.innerWidth*.22))),margenAbajo=compacto&&hoja&&!presentando?Math.round(window.innerHeight*(altoHoja==="alta"?.86:.5)):0;import_react19.default.useEffect(()=>{if(!ruta){setError("Esta versi\xF3n no tiene el fichero IFC guardado: s\xFAbela otra vez desde el proyecto");return}let vivo=!0,hecha=null;return(async()=>{setCarga("Preparando el visor");let libs2=await librerias();if(!vivo)return;setCarga("Bajando el modelo");let bytes=await bytesDe(gufi,modelo.id,ruta);if(!vivo||!caja.current)return;if(setCarga("Dibujando"),hecha=await crearEscena(libs2,caja.current,bytes,{alElegir:setSeleccion,alMedir:setMedidas,alPedirMedida:setPendiente,alCamara:(giro,cabeceo)=>oyentes.current.forEach(f=>f(giro,cabeceo))}),!vivo){hecha.destruir();return}hecha.setAcabado(ACABADO_INICIAL);let miniatura=modelo.miniatura?null:hecha.capturar(1600,1e3);setEscena(hecha),setCarga(null),miniatura&&guardarMiniatura(miniatura).catch(reportar)})().catch(e=>{vivo&&(setError(textoError(e)),reportar(e))}),()=>{vivo=!1,hecha?.destruir()}},[modelo.id,ruta]);async function guardarMiniatura(blob){let meta=await gufi.dataProvider.uploadFile(new File([blob],`miniatura-${modelo.id}.jpg`,{type:"image/jpeg"})),m=Array.isArray(meta)?meta[0]:meta,rutaMini=typeof m=="string"?m:m?.url??m?.path;if(!rutaMini)throw new Error("La subida de la miniatura no devolvi\xF3 ninguna direcci\xF3n");await gufi.dataProvider.update({resource:"arquitectura__modelos",id:modelo.id,variables:{miniatura:{url:rutaMini,name:`miniatura-${modelo.id}.jpg`,mime:"image/jpeg"}}})}import_react19.default.useEffect(()=>{escena&&escena.ver(vista,vista==="planta"?planta:null)},[escena,vista,planta]),import_react19.default.useEffect(()=>{if(!escena||!enModelo||!porEncuadrar.current)return;let ids=porEncuadrar.current;porEncuadrar.current=null,requestAnimationFrame(()=>requestAnimationFrame(()=>escena.encuadrar(ids)))},[escena,enModelo]),import_react19.default.useEffect(()=>{!escena||!pieza||(escena.seleccionar([pieza]),escena.encuadrar([pieza]),setSeleccion([pieza]))},[escena,pieza]);let elegido=seleccion.length===1?seleccion[0]:null;import_react19.default.useEffect(()=>{if(setProps(null),!escena||elegido==null)return;let vivo=!0;return escena.propiedades(elegido).then(g=>vivo&&setProps(g)).catch(e=>{vivo&&setProps([]),reportar(e)}),()=>{vivo=!1}},[escena,elegido]),import_react19.default.useEffect(()=>{let f=()=>{!(document.fullscreenElement===raiz.current)&&yoPuseCompleta.current&&(yoPuseCompleta.current=!1,setPresentando(!1))};return document.addEventListener("fullscreenchange",f),()=>document.removeEventListener("fullscreenchange",f)},[]),import_react19.default.useEffect(()=>{escena?.setGiro(presentando)},[escena,presentando]),import_react19.default.useEffect(()=>{escena?.setMargen(0,0,margenAbajo)},[escena,margenAbajo]),import_react19.default.useEffect(()=>{seleccion.length&&(setPestana("pieza"),compacto&&enModelo&&(setHoja("inspector"),setAltoHoja("media")))},[seleccion]),import_react19.default.useEffect(()=>{let tecla=e=>{e.key!=="Escape"||!escena||(presentando?setPresentando(!1):medir?(setMedir(!1),escena.setModo("mirar")):(escena.seleccionar([]),setSeleccion([])))};return window.addEventListener("keydown",tecla),()=>window.removeEventListener("keydown",tecla)},[escena,medir,presentando]);let porId=import_react19.default.useMemo(()=>{let m=new Map;if(escena)for(let x of[...escena.medicion.elementos,...escena.medicion.estancias])m.set(x.express_id,x);return m},[escena]),plantas=import_react19.default.useMemo(()=>[...escena?.plantas??[]].sort((a,b)=>b.orden-a.orden),[escena]),cambiarModo=m=>{setHoja(null),m!==modo&&conTransicion(()=>ir(PANTALLA[m],{modelo:modelo.id}))};function elegir(ids){escena?.seleccionar(ids),setSeleccion(ids)}function verEnModelo(ids){elegir(ids),setHoja(null),enModelo?escena?.encuadrar(ids):(porEncuadrar.current=ids,cambiarModo("modelo"))}function plantaPrincipal(){if(!escena||!plantas.length)return null;let util=new Map;for(let s of escena.medicion.estancias)s.planta!=null&&util.set(s.planta,(util.get(s.planta)??0)+(s.superficie??0));let mejor=[...util.entries()].sort((a,b)=>b[1]-a[1])[0];return mejor?mejor[0]:plantas[plantas.length-1].id}function verPlanta(id){setPlanta(id),setVista("planta"),setHoja(null),enModelo||cambiarModo("modelo")}function elegirVista(v){v==="3d"?setVista("3d"):v==="planta"?verPlanta(planta??plantaPrincipal()):setVista(esAlzado(vista)?vista:"sur")}let cambiarEstilo=e=>{setEstilo(e),escena?.setEstilo(e)},cambiarAcabado=a=>{setAcabado(a),escena?.setAcabado(a)},alternarMedir=()=>{escena?.setModo(medir?"mirar":"medir"),setMedir(!medir)},alternarEstancias=()=>{escena?.setEstancias(!estancias),setEstancias(!estancias)},alternarCorte=()=>{escena?.setCorte(!corte),setCorte(!corte)};async function grabar(){if(!(!escena||grabando)){setGrabando(!0);try{enModelo||cambiarModo("modelo"),setVista("3d");let{blob,extension}=await escena.grabarVuelta(10);descargar2(blob,`${fichero(proyecto?.nombre??modelo.nombre)}${acabado?`-${acabado}`:""}.${extension}`),gufi.toastSuccess("V\xEDdeo de 10 segundos descargado")}catch(e){gufi.toastError(textoError(e)),reportar(e)}finally{setGrabando(!1)}}}function captura(){escena&&descargar2(escena.capturar(1920,1080),`${fichero(proyecto?.nombre??modelo.nombre)}.jpg`)}async function filtroFases(si){if(escena){if(!si){escena.setFiltroFases(null),setFiltro(!1);return}try{let r=await gufi.automation("arquitectura_comparar",{modelo:modelo.id});escena.setFiltroFases(r.ids_nuevos),setFiltro(!0),setHoja(null),gufi.toastSuccess(`${numero(r.ids_nuevos.length)} piezas nuevas frente a la versi\xF3n ${r.con.version}`)}catch(e){gufi.toastError(textoError(e)),reportar(e)}}}function presentar(){escena&&(medir&&alternarMedir(),elegir([]),setVista("3d"),setHoja(null),setPresentando(!0),!document.fullscreenElement&&raiz.current&&(yoPuseCompleta.current=!0,raiz.current.requestFullscreen().catch(e=>{yoPuseCompleta.current=!1,reportar(e)})),requestAnimationFrame(()=>requestAnimationFrame(()=>escena.orientar("iso"))))}function dejarDePresentar(){setPresentando(!1),yoPuseCompleta.current&&document.fullscreenElement&&(yoPuseCompleta.current=!1,document.exitFullscreen())}let exportarCsv=()=>{if(!escena)return;let titulo2=`${proyecto?.nombre??""} \xB7 ${modelo.nombre} \xB7 versi\xF3n ${modelo.version??""}`;descargar2(new Blob([csvDe(escena,titulo2)],{type:"text/csv;charset=utf-8"}),`mediciones-${fichero(proyecto?.nombre??modelo.nombre)}.csv`)},titulo=proyecto?.nombre??"Proyecto",subtitulo=midiendo?`Midiendo: ${midiendo}`:[`Versi\xF3n ${modelo.version??"s/n"}`,faseCorta(modelo.fase)].filter(Boolean).join(" \xB7 "),nombrePlanta=plantas.find(p=>p.id===planta)?.nombre??"Planta",menuVersiones=boton=>__gh(Menu,{boton,ancho:290},cerrar=>__gh(__gf,null,versiones.map(v=>__gh(MenuItem,{key:v.id,elegido:v.id===modelo.id,sub:v.estado==="Medido"?[v.nombre,fecha(v.medido_at??v.__created_at__)].join(" \xB7 "):"No se pudo medir: \xE1brela desde el proyecto",onClick:()=>{cerrar(),v.id!==modelo.id&&v.estado==="Medido"&&ir(PANTALLA[modo],{modelo:v.id})}},[`Versi\xF3n ${v.version??"s/n"}`,faseCorta(v.fase)].filter(Boolean).join(" \xB7 "))),__gh(MenuItem,{sub:"Se mide al subirla",onClick:()=>{cerrar(),ir("proyecto",{proyecto:modelo.proyecto})}},"Subir otra versi\xF3n"))),itemsVideo=cerrar=>__gh(__gf,null,__gh(MenuItem,{sub:"Una vuelta al edificio con el acabado elegido, en MP4",onClick:()=>{cerrar(),grabar()}},grabando?"Grabando el v\xEDdeo":"V\xEDdeo de 10 segundos"),__gh(MenuItem,{sub:"Lo que ves, a 1920 \xD7 1080",onClick:()=>{cerrar(),captura()}},"Imagen")),menuAcabado=(boton,arriba)=>__gh(Menu,{boton,arriba,ancho:280},cerrar=>__gh(__gf,null,Object.entries(ACABADOS).map(([k,a])=>__gh(MenuItem,{key:k,elegido:acabado===k,sub:a.sub,onClick:()=>{cerrar(),cambiarAcabado(k)}},a.nombre)),__gh(MenuItem,{elegido:acabado==null,sub:"Los que trae el IFC",onClick:()=>{cerrar(),cambiarAcabado(null)}},"Colores del modelo"))),menuEstilo=(boton,arriba)=>__gh(Menu,{boton,arriba,ancho:200},cerrar=>Object.keys(ESTILOS).map(e=>__gh(MenuItem,{key:e,elegido:estilo===e,onClick:()=>{cerrar(),cambiarEstilo(e)}},ESTILOS[e]))),menuPlanta=(boton,arriba)=>__gh(Menu,{boton,arriba,ancho:220},cerrar=>plantas.map(p=>__gh(MenuItem,{key:p.id,elegido:planta===p.id,onClick:()=>{cerrar(),verPlanta(p.id)}},p.nombre))),menuAlzado=(boton,arriba)=>__gh(Menu,{boton,arriba,ancho:180},cerrar=>ALZADOS.map(a=>__gh(MenuItem,{key:a.lado,elegido:vista===a.lado,onClick:()=>{cerrar(),setVista(a.lado)}},`Alzado ${a.nombre.toLowerCase()}`))),segVista=__gh(Segmentado,{id:"vista",pequeno:!0,valor:vista==="3d"?"3d":vista==="planta"?"planta":"alzado",onCambio:elegirVista,opciones:[{valor:"3d",texto:"3D"},{valor:"planta",texto:"Planta"},{valor:"alzado",texto:"Alzado"}]}),cualVista=arriba=>vista==="planta"?menuPlanta((a,ab)=>__gh(Desplegable,{texto:nombrePlanta,onClick:a,abierto:ab}),arriba):esAlzado(vista)?menuAlzado((a,ab)=>__gh(Desplegable,{texto:`Alzado ${ALZADOS.find(x=>x.lado===vista)?.nombre.toLowerCase()}`,onClick:a,abierto:ab}),arriba):null,ajustes={vista,plantaNombre:nombrePlanta,acabado,estilo,estancias,hayEstancias:!!escena?.medicion.estancias.length,corte,filtro,puedeFiltro:versiones.length>1,medir,medidas:medidas.length,onAcabado:cambiarAcabado,onEstilo:cambiarEstilo,onEstancias:alternarEstancias,onCorte:alternarCorte,onFiltro:si=>{filtroFases(si)},onMedir:()=>{alternarMedir(),setHoja(null)},onBorrarMedidas:()=>escena?.borrarMedidas(),onEncuadrar:()=>{setHoja(null),escena?.encuadrar()},onInicial:()=>{setHoja(null),escena?.orientar("iso")}},inspector=escena&&__gh(Inspector,{pestana,onPestana:setPestana,ajustes,materiales,escena,seleccion,porId,props,modelo,onFase:alCambiarFase,onPlanta:verPlanta,onElegir:elegir,onEncuadrar:ids=>{setHoja(null),escena.encuadrar(ids.length?ids:void 0)}}),navegadorUi=escena&&__gh(Navegador,{escena,vista,planta,seleccion,versiones,modeloId:modelo.id,onVista:(v,p)=>{setHoja(null),v==="planta"?verPlanta(p??null):setVista(v)},onElegir:ids=>{elegir(ids),setHoja(null),ids.length&&escena.encuadrar(ids)},onVersion:id=>ir(PANTALLA[modo],{modelo:id})}),estado=escena&&[vista==="3d"?"3D":vista==="planta"?`Planta ${nombrePlanta}${corte?`, cortada a ${ALTURA_CORTE.toLocaleString("es-ES")} m`:""}`:`Alzado ${ALZADOS.find(x=>x.lado===vista)?.nombre.toLowerCase()}`,`${numero(escena.medicion.elementos.length)} piezas`,seleccion.length?`${numero(seleccion.length)} ${seleccion.length===1?"elegida":"elegidas"}`:null].filter(Boolean).join(" \xB7 "),aviso2=(medir||pendiente||filtro)&&!presentando&&__gh("div",{style:{position:"absolute",top:compacto?134:16,left:"50%",transform:"translateX(-50%)",zIndex:4,...FLOTANTE,borderRadius:99,padding:"7px 14px",fontSize:12.5,fontWeight:500,color:INK,display:"flex",alignItems:"center",gap:8,whiteSpace:"nowrap"},"data-gufi-src":"sections/modelo/espacio.tsx:506"},medir||pendiente?pendiente?"Toca el segundo punto":"Toca dos puntos para medir":__gh(__gf,null,__gh(Punto,{tono:"aviso"})," Lo nuevo",__gh("span",{style:{width:8},"data-gufi-src":"sections/modelo/espacio.tsx:510"}),__gh(Punto,{tono:"mudo"})," Lo que ya estaba")),herramientasMovil=__gh(__gf,null,__gh(BotonIcono,{icono:import_lucide_react17.Ruler,titulo:medir?"Dejar de medir":"Medir entre dos puntos",activo:medir,onClick:alternarMedir}),medidas.length>0&&__gh(BotonIcono,{icono:import_lucide_react17.X,titulo:"Borrar las medidas",texto:numero(medidas.length),onClick:()=>escena?.borrarMedidas()}),__gh(BotonIcono,{icono:import_lucide_react17.List,titulo:"Navegador",onClick:()=>setHoja("navegador")}),__gh(BotonIcono,{icono:import_lucide_react17.Info,titulo:"Inspector",onClick:()=>setHoja("inspector")})),barra=__gh(__gf,null,__gh("span",{style:{padding:"0 4px",display:"flex"},"data-gufi-src":"sections/modelo/espacio.tsx:530"},segVista),cualVista(!0),__gh(Separador,null),menuAcabado((a,ab)=>__gh(Herramienta,{icono:import_lucide_react17.Palette,texto:acabado?ACABADOS[acabado].nombre:"Del modelo",titulo:"Acabado",onClick:a,activo:ab}),!0),menuEstilo((a,ab)=>__gh(Herramienta,{icono:import_lucide_react17.SlidersHorizontal,texto:"Estilo",titulo:`Estilo: ${ESTILOS[estilo]}`,onClick:a,activo:ab}),!0),escena&&escena.medicion.estancias.length>0&&__gh(Herramienta,{icono:import_lucide_react17.LayoutGrid,texto:"Estancias",activo:estancias,onClick:alternarEstancias}),vista==="planta"&&__gh(Herramienta,{icono:import_lucide_react17.Scissors,texto:"Corte",titulo:corte?`Cortada a ${ALTURA_CORTE.toLocaleString("es-ES")} m del suelo`:"Sin cortar",activo:corte,onClick:alternarCorte}),__gh(Herramienta,{icono:import_lucide_react17.Ruler,texto:medidas.length?`Medir \xB7 ${numero(medidas.length)}`:"Medir",titulo:medir?"Dejar de medir":"Medir entre dos puntos",activo:medir,onClick:alternarMedir}),medidas.length>0&&__gh(Herramienta,{icono:import_lucide_react17.X,texto:"Borrar",titulo:"Borrar las medidas",onClick:()=>escena?.borrarMedidas()}),__gh(Herramienta,{icono:import_lucide_react17.Crosshair,texto:"Encuadrar",titulo:seleccion.length?"Encuadrar lo elegido":"Encuadrar el edificio",onClick:()=>escena?.encuadrar(seleccion.length?seleccion:void 0)}),__gh(Separador,null),__gh(Herramienta,{icono:import_lucide_react17.Clapperboard,texto:grabando?"Grabando":"V\xEDdeo",titulo:"Una vuelta de 10 segundos al edificio, en MP4",deshabilitado:grabando,onClick:()=>{grabar()}}),__gh(Herramienta,{icono:import_lucide_react17.Camera,texto:"Imagen",titulo:"Lo que ves, a 1920 \xD7 1080",onClick:captura}),__gh(Separador,null),__gh(Herramienta,{icono:import_lucide_react17.PanelLeft,texto:"Navegador",activo:navegador,onClick:()=>conTransicion(()=>setNavegador(!navegador))}),__gh(Herramienta,{icono:import_lucide_react17.PanelRight,texto:"Inspector",activo:panel,onClick:()=>conTransicion(()=>setPanel(!panel))})),lienzo=__gh("div",{style:{...enModelo?vtModelo(modelo.id):{},position:"relative",flex:1,minHeight:0,display:enModelo?"block":"none",background:CANVAS},"data-gufi-src":"sections/modelo/espacio.tsx:550"},__gh("div",{ref:caja,style:{position:"absolute",inset:0},"data-gufi-src":"sections/modelo/espacio.tsx:551"}),carga&&__gh("div",{style:{position:"absolute",inset:0,display:"grid",placeItems:"center",zIndex:2,background:CANVAS},"data-gufi-src":"sections/modelo/espacio.tsx:553"},cartel&&__gh("img",{src:cartel,alt:"",style:{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"contain",opacity:.9},"data-gufi-src":"sections/modelo/espacio.tsx:555"}),__gh("div",{style:{position:"relative",display:"flex",flexDirection:"column",alignItems:"center",gap:12,marginTop:cartel?"38vh":0},"data-gufi-src":"sections/modelo/espacio.tsx:556"},__gh("span",{style:{width:160,height:4,borderRadius:99,background:FILL,overflow:"hidden",position:"relative"},"data-gufi-src":"sections/modelo/espacio.tsx:557"},__gh("span",{style:{position:"absolute",inset:0,width:"40%",background:INK,borderRadius:99,animation:"arq-barra 1.1s ease-in-out infinite"},"data-gufi-src":"sections/modelo/espacio.tsx:558"})),__gh("span",{style:{fontSize:13,color:MUTED},"data-gufi-src":"sections/modelo/espacio.tsx:560"},carga)),__gh("style",{"data-gufi-src":"sections/modelo/espacio.tsx:562"},"@keyframes arq-barra { 0% { transform: translateX(-100%) } 100% { transform: translateX(260%) } }")),error&&__gh("div",{style:{position:"absolute",inset:0,display:"grid",placeItems:"center",zIndex:2,padding:24,textAlign:"center"},"data-gufi-src":"sections/modelo/espacio.tsx:566"},__gh("div",{"data-gufi-src":"sections/modelo/espacio.tsx:567"},__gh("p",{style:{fontSize:15,fontWeight:600,color:INK,margin:0},"data-gufi-src":"sections/modelo/espacio.tsx:568"},"No se pudo abrir el modelo"),__gh("p",{style:{fontSize:13,color:MUTED,margin:"6px 0 0",maxWidth:420},"data-gufi-src":"sections/modelo/espacio.tsx:569"},error))),escena&&!presentando&&!compacto&&__gh(__gf,null,__gh("span",{style:{position:"absolute",top:16,left:18,zIndex:3,fontSize:12,color:MUTED,fontVariantNumeric:"tabular-nums",pointerEvents:"none"},"data-gufi-src":"sections/modelo/espacio.tsx:575"},estado),vista==="3d"&&__gh(CuboVivo,{oyentes,onCara:c=>escena.orientar(c),derecha:panel?22:CARRIL_ERP}),aviso2,__gh("div",{style:{position:"absolute",bottom:16,left:16,right:panel?16:CARRIL_ERP,zIndex:5,display:"flex",justifyContent:"center",pointerEvents:"none"},"data-gufi-src":"sections/modelo/espacio.tsx:578"},__gh("div",{style:{...FLOTANTE,borderRadius:18,pointerEvents:"auto",display:"flex",alignItems:"center",flexWrap:"wrap",justifyContent:"center",gap:1,padding:6,maxWidth:"100%",boxSizing:"border-box"},"data-gufi-src":"sections/modelo/espacio.tsx:579"},barra))),escena&&!presentando&&compacto&&!hoja&&__gh(__gf,null,__gh("div",{style:{position:"absolute",top:78,left:10,right:10,zIndex:5,display:"flex",alignItems:"flex-start",gap:8,pointerEvents:"none"},"data-gufi-src":"sections/modelo/espacio.tsx:585"},__gh("div",{style:{...FLOTANTE,borderRadius:12,padding:4,pointerEvents:"auto",display:"flex",flexDirection:"column",alignItems:"flex-start"},"data-gufi-src":"sections/modelo/espacio.tsx:586"},segVista,cualVista(!1)),__gh("span",{style:{flex:1},"data-gufi-src":"sections/modelo/espacio.tsx:590"}),__gh("div",{style:{...FLOTANTE,borderRadius:12,padding:4,pointerEvents:"auto",display:"flex",alignItems:"center",gap:2},"data-gufi-src":"sections/modelo/espacio.tsx:591"},herramientasMovil)),aviso2),presentando&&escena&&__gh(__gf,null,__gh("div",{style:{position:"absolute",top:compacto?14:26,left:compacto?14:28,zIndex:6,display:"flex",alignItems:"center",gap:14,maxWidth:"calc(100% - 90px)"},"data-gufi-src":"sections/modelo/espacio.tsx:598"},empresa.logo&&__gh("img",{src:empresa.logo,alt:empresa.name,style:{height:compacto?20:26,maxWidth:140,objectFit:"contain",flexShrink:0},"data-gufi-src":"sections/modelo/espacio.tsx:599"}),empresa.logo&&__gh("span",{"aria-hidden":!0,style:{width:1,height:28,background:"rgba(29,29,31,0.18)",flexShrink:0},"data-gufi-src":"sections/modelo/espacio.tsx:600"}),__gh("div",{style:{minWidth:0},"data-gufi-src":"sections/modelo/espacio.tsx:601"},__gh("div",{style:{fontSize:compacto?15:18,fontWeight:650,letterSpacing:"-0.3px",color:INK,overflowWrap:"anywhere"},"data-gufi-src":"sections/modelo/espacio.tsx:602"},titulo),__gh("div",{style:{fontSize:12.5,color:MUTED},"data-gufi-src":"sections/modelo/espacio.tsx:603"},[faseCorta(modelo.fase),acabado?`acabado ${ACABADOS[acabado].nombre.toLowerCase()}`:null].filter(Boolean).join(" \xB7 ")||`Versi\xF3n ${modelo.version??"s/n"}`))),__gh("div",{style:{position:"absolute",top:compacto?12:22,right:compacto?12:24,zIndex:6,...FLOTANTE,borderRadius:99,padding:"4px 12px 4px 6px"},"data-gufi-src":"sections/modelo/espacio.tsx:606"},__gh(Accion,{pequeno:!0,icono:import_lucide_react17.X,onClick:dejarDePresentar},"Salir")),__gh("div",{style:{position:"absolute",bottom:compacto?14:26,left:compacto?12:0,right:compacto?72:0,zIndex:6,display:"flex",justifyContent:"center",pointerEvents:"none"},"data-gufi-src":"sections/modelo/espacio.tsx:609"},__gh("div",{style:{...FLOTANTE,padding:6,pointerEvents:"auto",maxWidth:"100%",boxSizing:"border-box"},"data-gufi-src":"sections/modelo/espacio.tsx:610"},__gh(Segmentado,{id:"acabado-presentar",pequeno:!0,valor:acabado??"modelo",onCambio:v=>cambiarAcabado(v==="modelo"?null:v),opciones:[...Object.entries(ACABADOS).map(([k,a])=>({valor:k,texto:a.nombre})),{valor:"modelo",texto:"Del modelo"}]}))))),otroModo=!enModelo&&__gh("div",{style:{flex:1,minHeight:0,overflowY:"auto",background:CANVAS},"data-gufi-src":"sections/modelo/espacio.tsx:621"},__gh("div",{style:{boxSizing:"border-box",padding:compacto?"16px 16px 104px":"28px clamp(20px, 4vw, 64px) 64px",paddingRight:compacto?16:`max(clamp(20px, 4vw, 64px), ${CARRIL_ERP}px)`},"data-gufi-src":"sections/modelo/espacio.tsx:622"},modo==="mediciones"&&(escena?__gh(Mediciones,{escena,seleccion,compacto,onVer:verEnModelo,onCsv:exportarCsv}):__gh("p",{style:{fontSize:13,color:MUTED,textAlign:"center",padding:40},"data-gufi-src":"sections/modelo/espacio.tsx:625"},error??`${carga??"Leyendo el modelo"}: las mediciones salen de \xE9l`)),modo==="planos"&&(escena?__gh(Planos,{gufi,escena,modelo,versiones,proyecto,compacto,materiales}):__gh("p",{style:{fontSize:13,color:MUTED,textAlign:"center",padding:40},"data-gufi-src":"sections/modelo/espacio.tsx:628"},error??`${carga??"Leyendo el modelo"}: los planos salen de \xE9l`)),modo==="presupuesto"&&__gh(Presupuesto,{gufi,modelo,proyecto,url,compacto}),modo==="cambios"&&__gh(Cambios,{gufi,modelo,compacto,ir}))),dialogoEnlace=escena&&__gh(gufi.Dialog,{open:enlaceAbierto,onClose:()=>setEnlaceAbierto(!1),title:"Para el cliente"},__gh(EnlaceCliente,{gufi,escena,modelo,acabado,materiales})),volver=__gh("a",{...navega(url(`/proyecto/${modelo.proyecto}`),()=>ir("proyecto",{proyecto:modelo.proyecto})),title:"Volver al proyecto","aria-label":"Volver al proyecto",style:{display:"grid",placeItems:"center",width:32,height:32,borderRadius:99,background:FILL,color:INK,flexShrink:0},"data-gufi-src":"sections/modelo/espacio.tsx:643"},__gh(import_lucide_react17.ChevronLeft,{size:18,strokeWidth:2})),{data:notasSinVer}=gufi.useData("arquitectura__notas",{filters:[{field:"modelo",operator:"eq",value:modelo.id},{field:"estado",operator:"eq",value:"Nueva"}],pageSize:100,realtime:!0}),notasNuevas=(notasSinVer??[]).length,logoEmpresa=empresa.logo?__gh(__gf,null,__gh("img",{src:empresa.logo,alt:empresa.name,style:{height:22,maxWidth:120,objectFit:"contain",display:"block",flexShrink:0},"data-gufi-src":"sections/modelo/espacio.tsx:654"}),__gh("span",{"aria-hidden":!0,style:{width:1,height:24,background:HAIRLINE,flexShrink:0},"data-gufi-src":"sections/modelo/espacio.tsx:655"})):null,nombre=__gh("div",{style:{minWidth:0},"data-gufi-src":"sections/modelo/espacio.tsx:659"},__gh("div",{style:{fontSize:compacto?14:14.5,fontWeight:650,letterSpacing:"-0.2px",color:INK,overflowWrap:"anywhere",lineHeight:1.25},"data-gufi-src":"sections/modelo/espacio.tsx:660"},__gh("span",{style:{...vtProyecto(modelo.proyecto),display:"inline-block"},"data-gufi-src":"sections/modelo/espacio.tsx:660"},titulo)),menuVersiones((abrir2,abierto)=>__gh("button",{type:"button",onClick:abrir2,"aria-expanded":abierto,style:{display:"inline-flex",alignItems:"center",gap:3,border:"none",background:"transparent",padding:0,fontFamily:"inherit",fontSize:12,color:MUTED,cursor:"pointer",textAlign:"left"},"data-gufi-src":"sections/modelo/espacio.tsx:662"},subtitulo,__gh(import_lucide_react17.ChevronDown,{size:12,strokeWidth:2,"aria-hidden":!0}))));if(compacto){let mas=__gh(Menu,{alinear:"derecha",ancho:270,boton:(abrir2,abierto)=>__gh(BotonIcono,{icono:import_lucide_react17.MoreHorizontal,titulo:"M\xE1s",onClick:abrir2,activo:abierto})},cerrar=>__gh(__gf,null,__gh(MenuItem,{sub:"La vuelta al edificio, sin nada alrededor",onClick:()=>{cerrar(),presentar()}},"Presentar"),__gh(MenuItem,{sub:"Su casa en vuestra web: 3D, planos y realidad aumentada",onClick:()=>{cerrar(),setEnlaceAbierto(!0)}},"Para el cliente"),itemsVideo(cerrar)));return __gh("div",{ref:raiz,style:{position:"relative",height:"100dvh",display:"flex",flexDirection:"column",background:CANVAS,overflow:"hidden"},"data-gufi-src":"sections/modelo/espacio.tsx:683"},!presentando&&(enModelo?__gh("header",{style:{position:"absolute",top:10,left:10,right:10,zIndex:20,...FLOTANTE,borderRadius:18,display:"flex",alignItems:"center",gap:10,padding:8},"data-gufi-src":"sections/modelo/espacio.tsx:686"},volver,__gh("div",{style:{flex:1,minWidth:0},"data-gufi-src":"sections/modelo/espacio.tsx:688"},nombre),mas):__gh("header",{style:{display:"flex",alignItems:"center",gap:10,padding:"10px 12px",background:"#fff",borderBottom:`1px solid ${HAIRLINE}`,flexShrink:0,position:"relative",zIndex:20},"data-gufi-src":"sections/modelo/espacio.tsx:692"},volver,__gh("div",{style:{flex:1,minWidth:0},"data-gufi-src":"sections/modelo/espacio.tsx:694"},nombre),mas)),lienzo,otroModo,!presentando&&!hoja&&__gh("nav",{"aria-label":"Modos",style:{position:"absolute",left:10,right:70,bottom:10,zIndex:20,...FLOTANTE,borderRadius:22,padding:5,display:"flex",gap:2},"data-gufi-src":"sections/modelo/espacio.tsx:701"},MODOS.map(m=>{let I=ICONO_MODO[m.valor],es=m.valor===modo;return __gh("button",{key:m.valor,type:"button",onClick:()=>cambiarModo(m.valor),"aria-current":es?"page":void 0,style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",alignItems:"center",gap:2,padding:"6px 2px",border:"none",borderRadius:17,background:es?FILL:"transparent",color:INK,fontFamily:"inherit",fontSize:10.5,fontWeight:es?600:500,cursor:"pointer"},"data-gufi-src":"sections/modelo/espacio.tsx:706"},__gh(I,{size:18,strokeWidth:1.8,"aria-hidden":!0}),m.corto)})),hoja&&enModelo&&!presentando&&__gh(Hoja,{titulo:hoja==="navegador"?"Navegador":seleccion.length===1?"Pieza":seleccion.length>1?`${numero(seleccion.length)} piezas`:`Versi\xF3n ${modelo.version??"s/n"}`,alto:altoHoja,onAlto:setAltoHoja,onCerrar:()=>setHoja(null)},hoja==="navegador"?navegadorUi:inspector),dialogoEnlace)}return __gh("div",{ref:raiz,style:{height:"100dvh",minHeight:560,display:"flex",flexDirection:"column",background:CANVAS,overflow:"hidden",color:INK},"data-gufi-src":"sections/modelo/espacio.tsx:727"},!presentando&&__gh("header",{style:{display:"grid",gridTemplateColumns:"minmax(0, 1fr) auto minmax(0, 1fr)",alignItems:"center",gap:16,minHeight:60,padding:"8px 20px",background:"#fff",borderBottom:`1px solid ${HAIRLINE}`,flexShrink:0,position:"relative",zIndex:20,boxSizing:"border-box"},"data-gufi-src":"sections/modelo/espacio.tsx:729"},__gh("div",{style:{display:"flex",alignItems:"center",gap:12,minWidth:0},"data-gufi-src":"sections/modelo/espacio.tsx:730"},logoEmpresa,volver,nombre),__gh(Segmentado,{id:"modo",valor:modo,onCambio:cambiarModo,opciones:MODOS.map(m=>({valor:m.valor,texto:m.texto}))}),__gh("div",{style:{display:"flex",alignItems:"center",justifyContent:"flex-end",gap:10},"data-gufi-src":"sections/modelo/espacio.tsx:736"},__gh(Capsula,{icono:import_lucide_react17.Share,titulo:"Para el cliente",onClick:()=>setEnlaceAbierto(!0),deshabilitado:!escena,insignia:notasNuevas||void 0},"Para el cliente"),__gh(Principal,{capsula:!0,icono:import_lucide_react17.Play,onClick:presentar,deshabilitado:!escena},"Presentar"))),__gh("div",{style:{flex:1,minHeight:0,display:"flex"},"data-gufi-src":"sections/modelo/espacio.tsx:744"},enModelo&&navegador&&!presentando&&escena&&__gh("aside",{style:{width:ANCHO_NAVEGADOR,flexShrink:0,overflowY:"auto",background:CANVAS,borderRight:`1px solid ${HAIRLINE}`,padding:"14px 10px 24px",boxSizing:"border-box"},"data-gufi-src":"sections/modelo/espacio.tsx:746"},navegadorUi),__gh("div",{style:{flex:1,minWidth:0,display:"flex",flexDirection:"column"},"data-gufi-src":"sections/modelo/espacio.tsx:748"},lienzo,otroModo),dialogoEnlace,enModelo&&panel&&!presentando&&escena&&__gh("aside",{style:{width:anchoPanel,flexShrink:0,overflowY:"auto",background:CANVAS,borderLeft:`1px solid ${HAIRLINE}`,padding:"12px 12px 24px",boxSizing:"border-box"},"data-gufi-src":"sections/modelo/espacio.tsx:754"},__gh("div",{style:{display:"flex",flexDirection:"column",gap:18},"data-gufi-src":"sections/modelo/espacio.tsx:756"},inspector))))}function Hoja({titulo,alto,onAlto,onCerrar,children}){return __gh("div",{role:"dialog","aria-label":titulo,style:{position:"absolute",left:0,right:0,bottom:0,height:alto==="alta"?"86%":"50%",zIndex:40,display:"flex",flexDirection:"column",background:CANVAS,borderRadius:"20px 20px 0 0",boxShadow:"0 -10px 40px rgba(0,0,0,0.16), 0 0 0 0.5px rgba(0,0,0,0.08)",transition:"height 280ms cubic-bezier(0.22, 1, 0.36, 1)",animation:"arq-hoja 260ms cubic-bezier(0.22, 1, 0.36, 1)"},"data-gufi-src":"sections/modelo/espacio.tsx:768"},__gh("style",{"data-gufi-src":"sections/modelo/espacio.tsx:770"},"@keyframes arq-hoja { from { transform: translateY(8px); opacity: 0 } to { transform: none; opacity: 1 } }"),__gh("button",{type:"button",onClick:()=>onAlto(alto==="alta"?"media":"alta"),"aria-label":alto==="alta"?"Bajar la hoja":"Subir la hoja",style:{display:"flex",justifyContent:"center",padding:"8px 0 4px",border:"none",background:"transparent",cursor:"pointer",flexShrink:0},"data-gufi-src":"sections/modelo/espacio.tsx:771"},__gh("span",{style:{width:38,height:5,borderRadius:99,background:"rgba(60,60,67,0.3)"},"data-gufi-src":"sections/modelo/espacio.tsx:773"})),__gh("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"0 14px 10px 18px",flexShrink:0},"data-gufi-src":"sections/modelo/espacio.tsx:775"},__gh("span",{style:{flex:1,minWidth:0,fontSize:18,fontWeight:700,letterSpacing:"-0.4px",color:INK,overflowWrap:"anywhere"},"data-gufi-src":"sections/modelo/espacio.tsx:776"},titulo),__gh("button",{type:"button",onClick:onCerrar,"aria-label":"Cerrar",style:{width:30,height:30,borderRadius:99,border:"none",background:FILL,display:"grid",placeItems:"center",color:INK,cursor:"pointer",flexShrink:0},"data-gufi-src":"sections/modelo/espacio.tsx:777"},__gh(import_lucide_react17.X,{size:15,strokeWidth:2.2}))),__gh("div",{style:{flex:1,minHeight:0,overflowY:"auto",padding:"2px 14px 32px"},"data-gufi-src":"sections/modelo/espacio.tsx:781"},__gh("div",{style:{display:"flex",flexDirection:"column",gap:16},"data-gufi-src":"sections/modelo/espacio.tsx:782"},children)))}function modoDe(p){return p==="planos"||p==="mediciones"||p==="presupuesto"||p==="cambios"?p:"modelo"}function Modelo({gufi,id,vista,pieza,url,ir}){let{data:filas,loading,reload}=gufi.useData("arquitectura__modelos",{id,realtime:!0}),ultima=import_react20.default.useRef(null);(filas??[])[0]&&(ultima.current=(filas??[])[0]);let m=(filas??[])[0]??(loading?ultima.current:null),proyectoId=m?.proyecto??0,{data:proyectos}=gufi.useData("arquitectura__proyectos",{id:proyectoId}),{data:versiones}=gufi.useData("arquitectura__modelos",{filters:[{field:"proyecto",operator:"eq",value:proyectoId}],sorters:[{field:"version",order:"desc"}],pageSize:200}),compacto=useCompacto(900),[midiendo,setMidiendo]=import_react20.default.useState(null),porMedir=m?.estado==="Por medir";if(import_react20.default.useEffect(()=>{porMedir&&!midiendo&&remedir()},[porMedir]),loading&&!m)return __gh("div",{style:{height:"100dvh",background:"#f2f2f7"},"data-gufi-src":"sections/modelo/index.tsx:40"});if(!m)return __gh(Lienzo,null,__gh(Cabecera,{titulo:"Modelo",volver:{texto:"Proyectos",href:url("/")}}),__gh(Aviso,{titulo:"Esta versi\xF3n del modelo no existe",texto:"Puede que la hayan borrado. Vuelve al proyecto."}));if(porMedir||midiendo&&m.estado!=="Medido")return __gh(Lienzo,null,__gh(Cabecera,{titulo:m.nombre,volver:{texto:m.proyecto__display??"Proyecto",href:url(`/proyecto/${m.proyecto}`)}}),__gh(Grupo,{titulo:"Midiendo el modelo",sub:"Se mide en este navegador: no cierres la pesta\xF1a hasta que termine."},__gh("div",{style:{padding:"14px 16px",fontSize:13,color:MUTED},"data-gufi-src":"sections/modelo/index.tsx:54"},midiendo??"Empezando")));if(m.estado!=="Medido")return __gh(Lienzo,null,__gh(Cabecera,{titulo:m.nombre,volver:{texto:m.proyecto__display??"Proyecto",href:url(`/proyecto/${m.proyecto}`)}}),__gh(Aviso,{titulo:m.estado==="Error"?"Este modelo no se pudo medir":"La medici\xF3n se cort\xF3 a medias",texto:m.estado==="Error"?m.error:"Vuelve a medirlo desde el proyecto: no hace falta subirlo otra vez."}));async function remedir(){let ruta=rutaDe(m.archivo);if(ruta)try{await volverAMedir(gufi,m.id,ruta,p=>setMidiendo(p.texto)),gufi.toastSuccess("Medido otra vez")}catch(e){gufi.toastError(textoError(e)),reportar(e)}finally{setMidiendo(null),reload()}}async function cambiarFase(fase){try{await gufi.dataProvider.update({resource:"arquitectura__modelos",id:m.id,variables:{fase}}),reload(),gufi.toastSuccess(fase?`Marcado como ${fase.toLowerCase()}`:"Sin fases")}catch(e){gufi.toastError(textoError(e)),reportar(e)}}return __gh(Espacio,{gufi,modelo:m,proyecto:(proyectos??[])[0]??null,versiones:versiones??[],modo:modoDe(vista),conEnlace:vista==="cliente",pieza,url,ir,compacto,alCambiarFase:cambiarFase,midiendo})}var RUTAS={proyectos:"/",precios:"/precios",materiales:"/materiales",proyecto:"/proyecto/:proyecto",visor:"/modelo/:modelo",pieza:"/modelo/:modelo/pieza/:pieza",planos:"/modelo/:modelo/planos",cliente:"/modelo/:modelo/cliente",mediciones:"/modelo/:modelo/mediciones",presupuesto:"/modelo/:modelo/presupuesto",cambios:"/modelo/:modelo/cambios"};function Arquitectura({gufi}){let[vista,ir,params]=gufi.router.usePathView({initial:"proyectos",routes:RUTAS}),url=ruta=>gufi.router.url(ruta),estilo=__gh("style",{"data-gufi-src":"page.tsx:41"},CSS_TRANSICION);return vista==="proyecto"?__gh(__gf,null,estilo,__gh(Proyecto,{key:params.proyecto,gufi,id:Number(params.proyecto),url,ir})):vista==="visor"||vista==="pieza"||vista==="planos"||vista==="cliente"||vista==="mediciones"||vista==="presupuesto"||vista==="cambios"?__gh(__gf,null,estilo,__gh(Modelo,{key:params.modelo,gufi,id:Number(params.modelo),vista,pieza:params.pieza?Number(params.pieza):null,url,ir})):__gh(__gf,null,estilo,__gh(Proyectos,{gufi,url,seccion:vista==="precios"||vista==="materiales"?vista:"proyectos",ir}))}var featureConfig={dataSources,meta:{name:"Arquitectura",version:"1.0.0"}};var stdin_default=Arquitectura;