@miravo/cli-linux-arm64-musl 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/console-dist/assets/api-DEoRnScz.js +1 -0
  2. package/console-dist/assets/api-GfuYYI6q.js +1 -0
  3. package/console-dist/assets/{asset-detail-B2YDSfM1.js → asset-detail-CbRJwcZg.js} +1 -1
  4. package/console-dist/assets/{asset-detail-actions-BrttEn24.js → asset-detail-actions-Ceb1_r18.js} +1 -1
  5. package/console-dist/assets/{backup-power-Cm_Ij5yj.js → backup-power-qtHJlSI4.js} +1 -1
  6. package/console-dist/assets/{by-path-e6y8DTMV.js → by-path-CKZo157c.js} +1 -1
  7. package/console-dist/assets/catalog-CshTwzQu.js +1 -0
  8. package/console-dist/assets/{catalog-DOGCbTe4.js → catalog-Lt1tguKF.js} +1 -1
  9. package/console-dist/assets/{catalog-template-icons-7CBAYTtP.js → catalog-template-icons-DvKspieo.js} +1 -1
  10. package/console-dist/assets/{commercial-building-D95MTyEI.js → commercial-building-Bk4sBQtx.js} +1 -1
  11. package/console-dist/assets/{console-panel-iWo8EgKP.js → console-panel-DOt0r_Oz.js} +1 -1
  12. package/console-dist/assets/control-89sOxkPx.js +1 -0
  13. package/console-dist/assets/control-BBMXQRSU.js +1 -0
  14. package/console-dist/assets/{district-heating-B_YycTG-.js → district-heating-BofEIyfg.js} +1 -1
  15. package/console-dist/assets/events-DFkG5maw.js +1 -0
  16. package/console-dist/assets/{events-5RYkaW81.js → events-NZs3OoQw.js} +1 -1
  17. package/console-dist/assets/export-tab-R8Oac9J5.js +1 -0
  18. package/console-dist/assets/{factory-3x3_UmJZ.js → factory-BYX8AmsW.js} +1 -1
  19. package/console-dist/assets/factory-Cp52pnAL.js +1 -0
  20. package/console-dist/assets/{floor-page-D0qm0GgG.js → floor-page-CiS52QbQ.js} +1 -1
  21. package/console-dist/assets/{get-error-message-C9VW9IZB.js → get-error-message-DJGhcwLn.js} +1 -1
  22. package/console-dist/assets/{index-M2C34y3X.js → index-B8B-S-lq.js} +5 -5
  23. package/console-dist/assets/{integration-api-ChbzMP5N.js → integration-api-B5s7_LWo.js} +1 -1
  24. package/console-dist/assets/{integrations-Cop24rSE.js → integrations-Bg7xzjIj.js} +1 -1
  25. package/console-dist/assets/integrations-CG1fPcwM.js +1 -0
  26. package/console-dist/assets/{login-BZANmwgH.js → login-Dq1AJRqO.js} +1 -1
  27. package/console-dist/assets/{models-BgGuH6PQ.js → models-BYr_QK_5.js} +1 -1
  28. package/console-dist/assets/models-jmRXhSoh.js +1 -0
  29. package/console-dist/assets/{pharma-cleanroom-BbYfEQjP.js → pharma-cleanroom-oxgPn6h6.js} +1 -1
  30. package/console-dist/assets/{protocol-card-B8XGneNM.js → protocol-card-1DCkgN_l.js} +1 -1
  31. package/console-dist/assets/{registry-BXGfJ4np.js → registry-BqqyCPJz.js} +2 -2
  32. package/console-dist/assets/{status-kit-pFRjEjVU.js → status-kit-Darp7bPB.js} +1 -1
  33. package/console-dist/assets/tags-DlnWXo4p.js +1 -0
  34. package/console-dist/assets/{tags-Bw7b0x14.js → tags-r7Fx_0yG.js} +2 -2
  35. package/console-dist/assets/{transition-nav-link-CSrpkA7_.js → transition-nav-link-DIx78Lol.js} +1 -1
  36. package/console-dist/assets/use-engine-command-mutation-CTbPh58S.js +1 -0
  37. package/console-dist/assets/{use-transition-navigate-D2Y8kfw6.js → use-transition-navigate-aOjMH_eS.js} +2 -2
  38. package/console-dist/assets/{useQuery-Cl48zZ73.js → useQuery-BfWNkVkT.js} +1 -1
  39. package/console-dist/assets/validation-DSsZ8qyt.js +1 -0
  40. package/console-dist/assets/{water-treatment-jG0T2rhc.js → water-treatment-COXMW4qC.js} +1 -1
  41. package/console-dist/index.html +23 -23
  42. package/miravo +1 -1
  43. package/package.json +1 -1
  44. package/console-dist/assets/api-BG2sUkwk.js +0 -1
  45. package/console-dist/assets/api-CKfC8_zv.js +0 -1
  46. package/console-dist/assets/catalog-Bz24KMiz.js +0 -1
  47. package/console-dist/assets/control-BMhNX7vM.js +0 -1
  48. package/console-dist/assets/control-CML5aS8w.js +0 -1
  49. package/console-dist/assets/events-z582V8se.js +0 -1
  50. package/console-dist/assets/export-tab-BsV7px7m.js +0 -1
  51. package/console-dist/assets/factory-LkZOsGje.js +0 -1
  52. package/console-dist/assets/integrations-BpOu11IH.js +0 -1
  53. package/console-dist/assets/models-C09Ba-2G.js +0 -1
  54. package/console-dist/assets/tags-BjW65yls.js +0 -1
  55. package/console-dist/assets/use-engine-command-mutation-DrMOfYty.js +0 -1
  56. package/console-dist/assets/validation-Cxhiswz2.js +0 -1
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-COnpUsM8.js";import{c as t}from"./vendor-charts-95ykyDlI.js";import{ot as n}from"./vendor-ui-D8j69UH4.js";import{b as r,d as i,f as a,l as o,m as s}from"./dom-CQuChC3G.js";import{n as c,t as l}from"./by-path-e6y8DTMV.js";import{A as u,D as d,E as f,F as p,H as m,L as h,O as g,P as ee,V as _,X as te,a as v,b as ne,g as re,i as ie,j as ae,k as y,n as oe,o as se,r as ce,t as le}from"./status-DNfdEhTs.js";import{r as ue,t as de}from"./chiller-Jug0vRg-.js";import{n as fe,t as pe}from"./compressor-BkWNdwvy.js";import{a as me,i as b,n as he,o as ge,r as _e,s as ve,t as ye}from"./genset-DBpkUT9p.js";import{i as be,n as xe,r as Se,t as Ce}from"./tank-xgQfMS2d.js";import{t as we}from"./stages-C0cErwSQ.js";var Te=[[`genA`,`diesel-generator`,`power`,`gensets`,0],[`genB`,`diesel-generator`,`power`,`gensets`,1],[`genC`,`diesel-generator`,`power`,`gensets`,2],[`bulk`,`storage-tank`,`fuel`,`storage`,0],[`day`,`storage-tank`,`fuel`,`storage`,1],[`chillerA`,`industrial-chiller`,`cooling`,`chiller-plant`,0],[`chillerB`,`industrial-chiller`,`cooling`,`chiller-plant`,1],[`pumpA`,`centrifugal-pump`,`cooling`,`chilled-water`,0],[`pumpB`,`centrifugal-pump`,`cooling`,`chilled-water`,1],[`compressor`,`air-compressor`,`support`,`start-air`,0],[`fan`,`ac-induction-motor`,`support`,`ventilation`,0]],Ee=e=>l(Te,e);function De(e){let t=(e,t,n)=>({key:e,assetId:e,name:t,kind:`utility`,area:n});return[t(e.genA,`Genset A (primary)`,`Power`),t(e.genB,`Genset B`,`Power`),t(e.genC,`Genset C (reserve)`,`Power`),t(e.bulk,`Bulk fuel tank`,`Fuel`),t(e.day,`Day tank`,`Fuel`),t(e.chillerA,`Chiller A`,`Cooling`),t(e.chillerB,`Chiller B`,`Cooling`),t(e.pumpA,`Chilled-water pump 1`,`Cooling`),t(e.pumpB,`Chilled-water pump 2`,`Cooling`),t(e.compressor,`Start-air compressor`,`Support`),t(e.fan,`Hall ventilation fan`,`Support`)]}var Oe=e(t(),1),x=64,ke=2.2;function Ae(e,t,n){let{k:r,G:i,P:a,S:o,L:s,D:c,slab:l,cyl:u}=e,d=[],f=t.y+t.d,p=t.x+t.w,m=e=>s(e,{tone:`faint`}),h=[];for(let e=t.x+11;e<p-4;e+=11)h.push(r.segment([e,f,3],[e,f,x-9],a));for(let e=t.y+11;e<f-4;e+=11)h.push(r.segment([p,e,3],[p,e,x-9],a));let g=[];for(let e of[x-7,x-5,x-3])g.push(r.segment([t.x+4,f,e],[p-4,f,e],a)),g.push(r.segment([p,t.y+4,e],[p,f-4,e],a));d.push(l({x:t.x-1.6,y:t.y-1.6,w:t.w+3.2,d:t.d+3.2,r:2},0,3,{tone:`lo`},2,.3)),d.push(o(r.slabOf(t,0,x,a,2,.6),{tone:`lo`,inner:m(h.join(``))+s(g.join(``),{tone:`lo`})+m(r.sideSeam(t,3,a,2))})),d.push(s(r.planOutline(r.insetPlan(t,2),x,a,2),{tone:`lo`}));let ee=(e,t,n,i,o)=>{d.push(l({x:e-1,y:t-1,w:n+2,d:i+2,r:1},x,3,{tone:`lo`},2,.3)),d.push(l({x:e,y:t,w:n,d:i,r:1},x+3,o,{tone:`mid`},2,.3));let c=[];for(let s=x+5;s<x+3+o-1;s+=2.4)c.push(r.segment([e+2,t+i,s],[e+n-2,t+i,s],a));d.push(s(c.join(``),{tone:`faint`}));let u=x+3+o;for(let o of[e+n*.3,e+n*.7]){let e=t+i/2,n=[r.ring(o,e,i*.36,u,a,24),r.ring(o,e,i*.16,u,a,16)];for(let t=0;t<4;t++){let s=t/4*Math.PI*2+.4;n.push(r.segment([o+Math.cos(s)*i*.16,e+Math.sin(s)*i*.16,u],[o+Math.cos(s)*i*.36,e+Math.sin(s)*i*.36,u],a))}d.push(s(n.join(``),{tone:`mid`}))}};ee(t.x+12,t.y+t.d-52,34,18,10),ee(t.x+60,t.y+t.d-44,34,18,10),d.push(u(t.x+t.w-16,t.y+22,4,x,11,{tone:`mid`},20),u(t.x+t.w-16,t.y+22,5,x+10.4,1.6,{tone:`mid`},20),l({x:t.x+14,y:t.y+14,w:14,d:10,r:.8},x,5,{tone:`mid`},2,.3));let _=t.x+6;d.push(l({x:_-1.4,y:f,w:24.8,d:.8,r:.2},0,31.8,{tone:`lo`},2,0),`<g transform="${e.front(f+.9)}"><path class="sf-plate" d="M${_} -30H${_+22}V0H${_}Z"/>${Array.from({length:9},(e,t)=>`<path class="iso-line" data-tone="faint" d="M${_} ${-(3+t*3)}H${_+22}"/>`).join(``)}<path class="iso-line" data-tone="mid" d="M${_} -30H${_+22}V0H${_}Z"/></g>`,l({x:_,y:f+.8,w:22,d:1,r:.2},0,2.4,{tone:`mid`},2,0)),d.push(l({x:_-1,y:f,w:24,d:.9,r:.2},38,16,{tone:`lo`},2,0));let te=[];for(let e=40;e<53.5;e+=1.8)te.push(r.segment([_+.6,f+.9,e],[_+22-.6,f+.9,e],a));d.push(s(te.join(``),{tone:`mid`})),d.push(u(_+22+3.6,f+1.2,1.2,28,2.2,{tone:`mid`},10));let v=t.y+36;d.push(l({x:p,y:v-1.2,w:.9,d:12.4,r:.2},0,25,{tone:`lo`},2,0),l({x:p+.9,y:v,w:.5,d:10,r:.2},0,22.4,{tone:`mid`},2,0),l({x:p,y:v-3,w:4.4,d:16,r:.4},26,1.4,{tone:`mid`},2,.2),u(p+1.4,v+12.4,1.1,14,2,{tone:`mid`},10)),d.push(s(r.segment([p+1.4,v+1.2,13],[p+1.4,v+1.2,19],a)+r.segment([p+1.4,v+2,3],[p+1.4,v+9,3],a),{tone:`hi`}));let ne=t.y+72;d.push(l({x:p,y:ne,w:.9,d:30,r:.2},22,26,{tone:`lo`},2,0));let re=[];for(let e=24;e<47.5;e+=1.8)re.push(r.segment([p+.9,ne+1.4,e],[p+.9,ne+28.6,e],a));d.push(s(re.join(``),{tone:`mid`}));for(let{x:t,z:r,r:s}of n){let n=i.frameAlong([t,f,r],[0,1,0]);d.push(o(i.disc(0,1.2,s+2.8,n,a),{tone:`mid`}),o(i.disc(1.2,ke,s+1.4,n,a),{tone:`mid`}),c([0,1,2,3,4,5].map(n=>e.at([t+Math.cos(n*1.047)*(s+2),f+1.2,r+Math.sin(n*1.047)*(s+2)])),{size:.4}))}return d.join(``)}function je(e,t){let{k:n,P:r,L:i,slab:a}=e,o=[];for(let e of t){o.push(a(e,0,1.4,{tone:`lo`},2,.2));let t=[];if(e.w>=e.d)for(let i=e.x+9;i<e.x+e.w-2;i+=9)t.push(n.lineOnTop([i,e.y+.8],[i,e.y+e.d-.8],1.5,r));else for(let i=e.y+9;i<e.y+e.d-2;i+=9)t.push(n.lineOnTop([e.x+.8,i],[e.x+e.w-.8,i],1.5,r));o.push(i(t.join(``)+n.planOutline(n.insetPlan(e,.8),1.5,r,2),{tone:`faint`}))}return o.join(``)}function Me(e,t,n,r){let{k:i,P:a,S:o,L:s,slab:c}=e,l=[],u=t.y+t.d;for(let e=t.x+14;e<t.x+t.w-4;e+=14)l.push(i.segment([e,u,3],[e,u,n-5],a));let d=[o(i.slabOf(t,0,n,a,2,.4),{tone:`lo`,inner:s(l.join(``)+i.sideSeam(t,4,a,2),{tone:`faint`})}),c({x:t.x-1.5,y:t.y-1.5,w:t.w+3,d:t.d+3,r:.4},n,2.2,{tone:`mid`},2,.2)];for(let t of r){let r=[];for(let e=22;e<=n-12;e+=3)r.push(`<path class="iso-line" data-tone="lo" d="M${t-20} ${-e}H${t+20}"/>`);d.push(`<g transform="${e.front(u+.1)}"><path class="sf-plate" d="M${t-21} ${-(n-9)}H${t+21}V-18H${t-21}Z"/>${r.join(``)}</g>`)}return d.join(``)}function Ne(e,t,n){let{k:r,P:i,slab:a,L:o}=e,s=(n===`back`?[{x:t.x,y:t.y,w:t.w,d:3,r:.4},{x:t.x,y:t.y+3,w:3,d:t.d-6,r:.4}]:[{x:t.x,y:t.y+t.d-3,w:t.w,d:3,r:.4},{x:t.x+t.w-3,y:t.y+3,w:3,d:t.d-6,r:.4}]).map(e=>a(e,0,9,{tone:`mid`},2,.3));return n===`front`&&s.push(o(r.segment([t.x+3,t.y+t.d,4.4],[t.x+t.w,t.y+t.d,4.4],i)+r.segment([t.x+t.w,t.y+3,4.4],[t.x+t.w,t.y+t.d,4.4],i),{tone:`faint`})),s.join(``)}function Pe(e,[t,n,r]){let{G:i,P:a,S:o,cyl:s,slab:c,screws:l}=e,u=i.frameAlong([t,n,r],[0,1,0]);return[o(i.solidOf([[0,3.8],[1.6,5.2],[2.6,5.2],[3.6,4.2],[10.4,4.2],[11.4,5.2],[12.4,5.2],[14,3.8]],u,a),{tone:`mid`}),s(t,n+14/2,2.4,r+3.6,6,{tone:`mid`,crease:`none`},14),c({x:t-4.6,y:n+14/2-3.6,w:9.2,d:7.2,r:1},r+9.6,9,{tone:`mid`},2,.4),s(t,n+14/2,2.6,r+18.6,1.8,{tone:`lo`},14),l([[t-3.4,n+14/2+3.7],[t+3.4,n+14/2+3.7]],r+15)].join(``)}var S=16,C=56,Fe=3;function Ie(e,t,n,r){let{faceRule:i}=e,a=S-3,o=C-12,s=n+1.5,c=`<g transform="${e.front(t)}"><path class="iso-line" data-tone="lo" d="M${s} ${-o}H${s+a}V-5H${s}Z"/>`,l=``;if(r===0)l+=`<path class="sf-plate" d="M${s+2} ${-(o-3)}H${s+a-2}V${-(o-19)}H${s+2}Z"/>`,l+=`<path class="iso-line" data-tone="mid" d="M${s+4} ${-(o-6)}H${s+a/2}M${s+a-4} ${-(o-6)}H${s+a/2}M${s+a/2} ${-(o-6)}V${-(o-16)}"/>`;else if(r===1)for(let e=0;e<3;e++)l+=`<path class="sf-plate" d="M${s+2} ${-(o-4-e*9)}H${s+a-2}V${-(o-10-e*9)}H${s+2}Z"/><path class="iso-line" data-tone="mid" d="M${s+a/2-2} ${-(o-7-e*9)}H${s+a/2+2}"/>`;else for(let e=0;e<8;e++)l+=`<path class="iso-line" data-tone="faint" d="M${s+2} ${-(o-3-e*2.4)}H${s+a-2}"/>`;let u=`<path class="iso-line" data-tone="hi" d="M${s+a-2.6} -19V-27"/>`;return`${c}${l}${u}</g>${i(t,s+2,7,a-4,4)}`}function Le(e,t,n){let{k:r,P:i,L:a,slab:o,cyl:s,screws:c}=e,l=[],u=t.y+t.d;l.push(o({x:t.x-2,y:t.y-2,w:t.w+4,d:t.d+4,r:1},0,2,{tone:`lo`},2,.2));for(let n=0;n<Fe;n++){let d=t.x+n*S,f={x:d,y:t.y,w:S,d:t.d,r:.6};l.push(o(f,2,C-2,{tone:`mid`},2,.4)),l.push(o({x:d+1,y:t.y+1,w:S-2,d:t.d-2,r:.6},C,3,{tone:`mid`},2,.3)),l.push(a(r.segment([d+4,u-4,C+3.2],[d+S-4,u-4,C+3.2],i),{tone:`faint`}),s(d+3,t.y+4,1,C+3,2,{tone:`mid`},10),s(d+S-3,t.y+4,1,C+3,2,{tone:`mid`},10)),l.push(Ie(e,u,d,n)),l.push(c([[d+1.4,u-.2],[d+S-1.4,u-.2]],C-2))}let d=t.x+t.w-8,f=t.y+t.d/2-4,p=C+3.4,m=[];for(let e=d+2;e<n-1;e+=3)m.push(r.segment([e,f+.6,p+.6],[e,f+7.4,p+.6],i));return l.push(o({x:d,y:f,w:n-d,d:.9,r:.2},p,2,{tone:`mid`},2,.1),o({x:d,y:f+7.1,w:n-d,d:.9,r:.2},p,2,{tone:`mid`},2,.1),a(m.join(``),{tone:`mid`}),s(n-6,f+4,.9,0,p,{tone:`mid`,crease:`none`},10),o({x:n-8.6,y:f+1.4,w:5.2,d:5.2,r:.5},0,1.2,{tone:`lo`},2,.1),o({x:n-1.6,y:f-.6,w:1.6,d:9.2,r:.3},p-1,4,{tone:`mid`},2,.1)),l.join(``)}var Re={x:-15,y:0,w:30,d:14,r:1.5},w=30,T=12.5,ze=2.2,E=11;function Be(e,t){let{k:n,G:r,P:i,L:a,D:o,S:s,slab:c,cyl:l,screws:u,faceRule:d}=e,f=[],p=r.frameAlong([0,0,w],[0,1,0]);f.push(c({x:-15,y:0,w:30,d:9,r:1},0,1.4,{tone:`lo`},2,.3)),f.push(u(n.corners({x:-15,y:0,w:30,d:9},1.6),1.4));for(let e of[-11,8])f.push(c({x:e,y:0,w:3,d:7,r:.5},1.4,w-15-1.4+.4,{tone:`mid`},2,.2));f.push(c({x:-14.5,y:0,w:29,d:ze,r:1},w-15,30,{tone:`mid`},2,.3)),f.push(o([[-12.4,13.2],[12.4,13.2],[-12.4,-13.2],[12.4,-13.2]].map(([e=0,t=0])=>n.iso([e,ze+.1,w+t],i)),{size:.45})),f.push(s(r.disc(ze,E,T,p,i),{tone:`mid`}));for(let e of[5.4,8.2])f.push(a(n.sideRing([0,e,w],T,`y`,i,32),{tone:`faint`}));f.push(s(r.disc(E-1.8,E,T+1.2,p,i),{tone:`mid`})),f.push(s(r.disc(E-.4,E,T-1.6,p,i),{tone:`lo`})),f.push(`<path class="gs-blade" data-vfan="0,${E+.3},${w},${T-2.6}" data-top="0,${E},${w+T+4}" data-bearing="0,${E-3},${w+T}" d=""/>`),f.push(s(r.disc(E,E+2.4,3,p,i),{tone:`mid`}),s(r.disc(E+2.2,E+3,1.6,p,i),{tone:`lo`}));let m=[],h=E+1.6;for(let e of[5.5,T-2])m.push(n.sideRing([0,h,w],e,`y`,i,28));for(let e=0;e<8;e++){let t=e/8*Math.PI*2;m.push(n.segment([Math.cos(t)*3,h,w+Math.sin(t)*3],[Math.cos(t)*(T-2),h,w+Math.sin(t)*(T-2)],i))}return f.push(a(m.join(``),{tone:`mid`})),f.push(c({x:-4.5,y:3,w:9,d:6,r:.8},w+T-.6,6,{tone:`mid`},2,.3),l(0,6,1.1,w+T+5.4,2.2,{tone:`mid`},10),d(9.1,-3,w+T+1,6,2.4)),f.join(``)}var Ve=1e3,He={x:-500,y:-395,w:810,d:189,r:8},Ue={x:-380,y:-120,w:680,d:180,r:8},We={x:-520,y:-415,w:850,d:495,r:16},Ge=r([...s(We,-21,-14),...s(He,-14,140),...s(Ue,-14,100)],Ve,620,{pad:22,azimuth:60}),Ke=-300,D=[[-268,Ke],[-108,Ke],[52,Ke]],qe=(e,t)=>[e[0]+t[0],e[1]+t[1],t[2]],Je=e=>qe(D[e]??[0,0],me),Ye=e=>qe(D[e]??[0,0],_e),Xe={x:-340,y:-338,w:470,d:4,r:0},O=[-434,-340],Ze={r:32,h:104,nozzles:[{angle:90,z:14,r:2,role:`outlet`}]},k={x:-486,y:-392,w:104,d:104,r:0},A=[-434,-232],j={r:17,h:62,windowX:8,panelX:-26,nozzles:[{angle:270,z:14,r:2,role:`inlet`},{angle:0,z:7,r:2,role:`outlet`}]},M=A[0],Qe=-284,$e={x:132,y:-330,w:48,d:25,r:1},N={x:204,y:-395,w:104,d:145,r:2},et=[293,N.y+N.d],tt=[-202,-135,0],nt=[[-65,-62],[-169,-62]],rt=[-34,36.6,40],it=[-20,36.6,40],at=[94,-130,0],ot=.8,st=[[47,36],[157,36]],ct=e=>[(e[0]-at[0])*ot,(e[1]-at[1])*ot,e[2]*ot],lt=ct(ee),ut=ct(u),dt=[{x:-318,y:-262,w:462,d:8,r:0},...D.map(([e])=>({x:e-48,y:-290,w:6,d:32,r:0})),{x:137,y:-308,w:6,d:54,r:0}],ft=[-67,-132,0],pt=[-292,-62],mt=[-110,-114,24],ht=we([...D.map((e,t)=>({key:`gen${t}`,at:e,h:126})),{key:`bund-back`,at:[O[0],k.y+2],h:12},{key:`bulk`,at:O,h:Ze.h+12},{key:`bund-front`,at:[O[0],k.y+k.d-2],h:12},{key:`valve`,at:[M,Qe+7],h:30},{key:`day`,at:A,h:j.h+12},{key:`vent`,at:[et[0],et[1]+6],h:50},{key:`lineup`,at:[$e.x+$e.w/2,$e.y+$e.d/2],h:62},{key:`hall`,at:[N.x+N.w/2,N.y+N.d/2],h:76},...nt.map((e,t)=>({key:`chiller${t}`,at:e,h:56})),...st.map((e,t)=>({key:`pump${t}`,at:e,h:45*ot})),{key:`compressor`,at:pt,h:46}],Ge),gt=ht.order,_t=ht.slotDepths,vt=ht.depth,yt=(e,t)=>[e[0]+t[0],e[1]+t[1],t[2]],P=(e,t,n,r)=>[t??e[0],n??e[1],r??e[2]],bt=(e,t,n)=>{let r=e.nozzles[n];return r?yt(t,Se(e,r)):[0,0,0]},F=6,xt=bt(Ze,O,0),St=bt(j,A,0),Ct=bt(j,A,1),I=Ct[1],[wt,Tt,Et]=[0,1,2].map(Je),[L,Dt,Ot]=[0,1,2].map(Ye),kt=Qe+14,At=-366,R=-250,z=L[2],jt=16,Mt=[pt[0]+mt[0]-ft[0],pt[1]+mt[1]-ft[1],mt[2]],Nt=Mt[1]+jt,[B=[0,0],Pt=[0,0]]=nt,[V=[0,0],H=[0,0]]=st,U=e=>yt(e,ut),W=e=>yt(e,lt),G=e=>yt(e,rt),K=e=>yt(e,it),q=W(V)[2],J=B[1]+61,Y=72,X=B[1]+48,Ft=84,It=V[1]-34,Lt=W(H)[0]+13,Rt=W(V)[0]+8,zt=6,Bt=K(B)[0]+40,Vt=N.y+N.d+ke,Ht=[{id:`xfer:a`,medium:`fuel`,r:2,pts:[xt,[M,Qe,14]]},{id:`xfer:b`,medium:`fuel`,r:2,pts:[[M,kt,14],St]},{id:`fuel:all`,medium:`fuel`,r:2,pts:[Ct,[wt[0],I,F]]},{id:`fuel:bc`,medium:`fuel`,r:2,pts:[[wt[0],I,F],[Tt[0],I,F]]},{id:`fuel:c`,medium:`fuel`,r:2,pts:[[Tt[0],I,F],[Et[0],I,F],Et]},{id:`fuel:a`,medium:`fuel`,r:2,pts:[[wt[0],I,F],wt]},{id:`fuel:b`,medium:`fuel`,r:2,pts:[[Tt[0],I,F],Tt]},{id:`air:main`,medium:`air`,r:b,bend:8,pts:[Mt,P(Mt,null,Nt,null),[At,Nt,Mt[2]],[At,Nt,z],[At,R,z],[L[0],R,z]]},{id:`air:ab`,medium:`air`,r:b,pts:[[L[0],R,z],[Dt[0],R,z]]},{id:`air:c`,medium:`air`,r:b,pts:[[Dt[0],R,z],[Ot[0],R,z],Ot]},{id:`air:a`,medium:`air`,r:b,pts:[[L[0],R,z],L]},{id:`air:b`,medium:`air`,r:b,pts:[[Dt[0],R,z],Dt]},{id:`suction`,medium:`coolantret`,r:2.6,pts:[[265,Vt,q],[265,It,q],[Lt,It,q]]},{id:`suction:standby`,medium:`coolantret`,r:2.6,pts:[[Lt,It,q],P(W(H),Lt,null,null),W(H)]},{id:`suction:duty`,medium:`coolantret`,r:2.6,pts:[[Lt,It,q],[Rt,It,q],P(W(V),Rt,null,null),W(V)]},...[[`a`,B],[`b`,Pt]].map(([e,t])=>({id:`out:${e}`,medium:`coolant`,r:2.2,pts:[K(t),P(K(t),null,X,null),P(K(t),null,X,Ft)]})),{id:`chws:b`,medium:`coolant`,r:2.6,blind:[!0,!1],pts:[[K(Pt)[0]-zt,X,Ft],[K(B)[0],X,Ft]]},{id:`chws`,medium:`coolant`,r:2.6,pts:[[K(B)[0],X,Ft],[Bt,X,Ft],[Bt,X,40],[240,X,40],[240,Vt,40]]},...[[`duty`,V],[`standby`,H]].map(([e,t])=>({id:`discharge:${e}`,medium:`coolantret`,r:2.6,fromStub:!0,pts:[U(t),P(U(t),null,null,Y),P(U(t),null,J,Y)]})),{id:`header:standby`,medium:`coolantret`,r:2.6,blind:[!0,!1],pts:[[U(H)[0]+zt,J,Y],[U(V)[0],J,Y]]},{id:`header`,medium:`coolantret`,r:2.6,pts:[[U(V)[0],J,Y],[G(B)[0],J,Y]]},{id:`header:b`,medium:`coolantret`,r:2.6,blind:[!1,!0],pts:[[G(B)[0],J,Y],[G(Pt)[0]-zt,J,Y]]},...[[`a`,B],[`b`,Pt]].map(([e,t])=>({id:`in:${e}`,medium:`coolantret`,r:2.2,pts:[P(G(t),null,J,Y),P(G(t),null,J,null),G(t)]}))],Ut=(e,t)=>[He,Ue].some(n=>e>=n.x&&e<=n.x+n.w&&t>=n.y&&t<=n.y+n.d),Z=(e,t,n,r)=>[e,t,n,r,Ut(e,t)?0:-14],Wt={z:10,flanged:!0,routes:Ht,posts:[...[-395,-330,-215,-60].map(e=>Z(e,I,2,F)),Z(M,-294,2,14),...[-70,-140,-190,R].map(e=>Z(At,e,b,z)),...[-300,-155,10].map(e=>Z(e,R,b,z)),...[-225,-150,-90,-35].map(e=>Z(240,e,2.6,40)),...[-225,-150,-90,-35,20].map(e=>Z(265,e,2.6,q)),...[-20,100,215].map(e=>Z(e,X,2.6,40)),...[-150,-20,130].map(e=>Z(e,J,2.6,Y))]},Q=n(),Gt={x:-248,y:-164,w:92,d:58,r:3},Kt={x:-136,y:-152,w:138,d:40,r:3},qt=xe(Ze),Jt=xe(j),Yt=(e,t)=>p(e,t,`coolantret`,!0),Xt=(e,t)=>be(e,t,Ze),Zt=(e,t)=>be(e,t,j),Qt=(e,t)=>fe(e,t,{barFull:10,dialFull:12}),$t=e=>Ae(e,N,[{x:240,z:40,r:2.6},{x:265,z:lt[2],r:2.6}]),en=e=>Le(e,$e,N.x),tn=e=>Pe(e,[M,Qe,14]),nn=e=>Ne(e,k,`back`),rn=e=>Ne(e,k,`front`);function an({ids:e}){let t=a(),n=f(Wt,vt),r=(0,Oe.useMemo)(()=>h(t,We)+t.plinth(He)+t.plinth(Ue)+je(t,dt)+Me(t,Xe,62,D.map(([e])=>e)),[t]),s=e=>(0,Q.jsx)(i,{html:`${n.layers[e]??``}<g data-flows="${e}" data-depth="${e===0?-1e9:_t[e-1]??0}"></g>`,data:{pipes:``}},`pipes-${e}`),c=[e.genA,e.genB,e.genC],l={"bund-back":(0,Q.jsx)(g,{build:nn,intro:1}),bulk:(0,Q.jsx)(`g`,{className:`fuel-tank`,children:(0,Q.jsx)(d,{to:y(O),children:(0,Q.jsx)(o,{id:e.bulk,plan:qt,intro:2,draw:Xt})})}),"bund-front":(0,Q.jsx)(g,{build:rn,intro:2}),valve:(0,Q.jsx)(g,{build:tn,intro:3}),day:(0,Q.jsx)(`g`,{className:`fuel-tank`,children:(0,Q.jsx)(d,{to:y(A),children:(0,Q.jsx)(o,{id:e.day,plan:Jt,intro:3,draw:Zt})})}),vent:(0,Q.jsx)(d,{to:y(et),children:(0,Q.jsx)(o,{id:e.fan,plan:Re,intro:9,draw:Be})}),lineup:(0,Q.jsx)(g,{build:en,intro:8}),hall:(0,Q.jsx)(g,{build:$t,intro:8}),compressor:(0,Q.jsx)(d,{from:ft,to:y(pt),children:(0,Q.jsx)(o,{id:e.compressor,plan:Kt,intro:13,draw:Qt})})};for(let[e,t]of D.entries())l[`gen${e}`]=(0,Q.jsx)(`g`,{className:`gen-set`,children:(0,Q.jsx)(d,{to:y(t),children:(0,Q.jsx)(o,{id:c[e]??``,plan:ge,intro:4+e,draw:ve})})});for(let[t,n]of nt.entries())l[`chiller${t}`]=(0,Q.jsx)(d,{from:tt,to:y(n),children:(0,Q.jsx)(o,{id:t?e.chillerB:e.chillerA,plan:Gt,intro:10+t,draw:ue})});for(let[t,n]of st.entries())l[`pump${t}`]=(0,Q.jsx)(d,{from:at,to:y(n),scale:ot,children:(0,Q.jsx)(o,{id:t?e.pumpB:e.pumpA,plan:ae,intro:12+t,draw:Yt})});return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(i,{html:r,data:{plinth:``}}),s(0),gt.flatMap((e,t)=>[(0,Q.jsx)(`g`,{children:l[e.key]},e.key),s(t+1)])]})}var $=e=>e>.002?6+26*re(e*2):0,on=e=>{let{svg:t,feed:n,ids:r}=e,i=ne(t),a=ye(e,i),o=Ce(e),s=de(e,i),c=ce(e,i),l=pe(e,i),u=[a,o,s,c,l,he(e,i)],d=ie(e,e=>oe(n,e,`availability`)),f=se(e,{needle:e=>l.needle(e)??s.needle(e)??0,bar:e=>u.reduce((t,n)=>t??n.bar(e),void 0)??0,alertsHigh:()=>!0,ready:()=>!0}),p=()=>{let e=n.param(r.day,`max_inflow_lps`,0);return e>0?re(n.num(r.day,`inflow_rate`)/e):0},m=(...e)=>re(e.reduce((e,t)=>e+a.fuelPu(t),0)),h=()=>c.flowPu(r.pumpA)+c.flowPu(r.pumpB),g=e=>{let t=[r.chillerA,r.chillerB].filter(e=>n.num(e,`coolant_flow_rate`)>0);return t.includes(e)?h()/t.length:0},ee=v(e,({id:e})=>{switch(e){case`xfer:a`:case`xfer:b`:return $(p());case`fuel:all`:return $(m(r.genA,r.genB,r.genC));case`fuel:bc`:return $(m(r.genB,r.genC));case`fuel:c`:return $(m(r.genC));case`fuel:a`:return $(m(r.genA));case`fuel:b`:return $(m(r.genB));case`air:main`:case`air:ab`:case`air:c`:case`air:a`:case`air:b`:return $(l.deliveredPu(r.compressor));case`suction`:case`chws`:case`header`:return $(h());case`suction:duty`:case`discharge:duty`:return $(c.flowPu(r.pumpA));case`suction:standby`:case`discharge:standby`:case`header:standby`:return $(c.flowPu(r.pumpB));case`in:a`:case`out:a`:return $(g(r.chillerA));case`in:b`:case`out:b`:case`header:b`:case`chws:b`:return $(g(r.chillerB));default:return 0}});return{data(e){d.draw(e)},draw({sdt:e,t,introDone:n}){ee.draw(e),f.draw(e,t);for(let r of u)r.draw(e,t,n)},resync(){},status:e=>le(n,e,`availability`)}},sn=_(Ge),cn=m(sn,Wt,vt),ln=te({layout:{width:Ve,height:620,label:`Isometric model of the Backup Power facility: along the back, the fuel yard with its bulk tank in a bund and the day tank, three diesel gen sets side by side with their exhaust stacks and radiators, the electrical lineup and the data hall they back up; along the front, the start-air compressor, two chillers and two chilled-water pumps whose loop runs to the hall. Pipes carry fuel, start air and chilled water between them. Every moving part follows live values from the running engine.`,kit:sn,flows:cn.flows,joints:cn.joints,Scene:an,compose:on},resolve:Ee,things:De,caption:`generation · fuel · cooling`,mismatch:`This floor expects the Backup Power facility: three diesel gensets, the bulk and day fuel tanks, two chillers with two chilled-water pumps, the start-air compressor and the hall ventilation motor, by area and line.`,statusBasis:`availability`,Overview:c,tab:`Plant`});export{ln as backupFloor};
1
+ import{a as e}from"./rolldown-runtime-COnpUsM8.js";import{c as t}from"./vendor-charts-95ykyDlI.js";import{ot as n}from"./vendor-ui-D8j69UH4.js";import{b as r,d as i,f as a,l as o,m as s}from"./dom-CQuChC3G.js";import{n as c,t as l}from"./by-path-CKZo157c.js";import{A as u,D as d,E as f,F as p,H as m,L as h,O as g,P as ee,V as _,X as te,a as v,b as ne,g as re,i as ie,j as ae,k as y,n as oe,o as se,r as ce,t as le}from"./status-DNfdEhTs.js";import{r as ue,t as de}from"./chiller-Jug0vRg-.js";import{n as fe,t as pe}from"./compressor-BkWNdwvy.js";import{a as me,i as b,n as he,o as ge,r as _e,s as ve,t as ye}from"./genset-DBpkUT9p.js";import{i as be,n as xe,r as Se,t as Ce}from"./tank-xgQfMS2d.js";import{t as we}from"./stages-C0cErwSQ.js";var Te=[[`genA`,`diesel-generator`,`power`,`gensets`,0],[`genB`,`diesel-generator`,`power`,`gensets`,1],[`genC`,`diesel-generator`,`power`,`gensets`,2],[`bulk`,`storage-tank`,`fuel`,`storage`,0],[`day`,`storage-tank`,`fuel`,`storage`,1],[`chillerA`,`industrial-chiller`,`cooling`,`chiller-plant`,0],[`chillerB`,`industrial-chiller`,`cooling`,`chiller-plant`,1],[`pumpA`,`centrifugal-pump`,`cooling`,`chilled-water`,0],[`pumpB`,`centrifugal-pump`,`cooling`,`chilled-water`,1],[`compressor`,`air-compressor`,`support`,`start-air`,0],[`fan`,`ac-induction-motor`,`support`,`ventilation`,0]],Ee=e=>l(Te,e);function De(e){let t=(e,t,n)=>({key:e,assetId:e,name:t,kind:`utility`,area:n});return[t(e.genA,`Genset A (primary)`,`Power`),t(e.genB,`Genset B`,`Power`),t(e.genC,`Genset C (reserve)`,`Power`),t(e.bulk,`Bulk fuel tank`,`Fuel`),t(e.day,`Day tank`,`Fuel`),t(e.chillerA,`Chiller A`,`Cooling`),t(e.chillerB,`Chiller B`,`Cooling`),t(e.pumpA,`Chilled-water pump 1`,`Cooling`),t(e.pumpB,`Chilled-water pump 2`,`Cooling`),t(e.compressor,`Start-air compressor`,`Support`),t(e.fan,`Hall ventilation fan`,`Support`)]}var Oe=e(t(),1),x=64,ke=2.2;function Ae(e,t,n){let{k:r,G:i,P:a,S:o,L:s,D:c,slab:l,cyl:u}=e,d=[],f=t.y+t.d,p=t.x+t.w,m=e=>s(e,{tone:`faint`}),h=[];for(let e=t.x+11;e<p-4;e+=11)h.push(r.segment([e,f,3],[e,f,x-9],a));for(let e=t.y+11;e<f-4;e+=11)h.push(r.segment([p,e,3],[p,e,x-9],a));let g=[];for(let e of[x-7,x-5,x-3])g.push(r.segment([t.x+4,f,e],[p-4,f,e],a)),g.push(r.segment([p,t.y+4,e],[p,f-4,e],a));d.push(l({x:t.x-1.6,y:t.y-1.6,w:t.w+3.2,d:t.d+3.2,r:2},0,3,{tone:`lo`},2,.3)),d.push(o(r.slabOf(t,0,x,a,2,.6),{tone:`lo`,inner:m(h.join(``))+s(g.join(``),{tone:`lo`})+m(r.sideSeam(t,3,a,2))})),d.push(s(r.planOutline(r.insetPlan(t,2),x,a,2),{tone:`lo`}));let ee=(e,t,n,i,o)=>{d.push(l({x:e-1,y:t-1,w:n+2,d:i+2,r:1},x,3,{tone:`lo`},2,.3)),d.push(l({x:e,y:t,w:n,d:i,r:1},x+3,o,{tone:`mid`},2,.3));let c=[];for(let s=x+5;s<x+3+o-1;s+=2.4)c.push(r.segment([e+2,t+i,s],[e+n-2,t+i,s],a));d.push(s(c.join(``),{tone:`faint`}));let u=x+3+o;for(let o of[e+n*.3,e+n*.7]){let e=t+i/2,n=[r.ring(o,e,i*.36,u,a,24),r.ring(o,e,i*.16,u,a,16)];for(let t=0;t<4;t++){let s=t/4*Math.PI*2+.4;n.push(r.segment([o+Math.cos(s)*i*.16,e+Math.sin(s)*i*.16,u],[o+Math.cos(s)*i*.36,e+Math.sin(s)*i*.36,u],a))}d.push(s(n.join(``),{tone:`mid`}))}};ee(t.x+12,t.y+t.d-52,34,18,10),ee(t.x+60,t.y+t.d-44,34,18,10),d.push(u(t.x+t.w-16,t.y+22,4,x,11,{tone:`mid`},20),u(t.x+t.w-16,t.y+22,5,x+10.4,1.6,{tone:`mid`},20),l({x:t.x+14,y:t.y+14,w:14,d:10,r:.8},x,5,{tone:`mid`},2,.3));let _=t.x+6;d.push(l({x:_-1.4,y:f,w:24.8,d:.8,r:.2},0,31.8,{tone:`lo`},2,0),`<g transform="${e.front(f+.9)}"><path class="sf-plate" d="M${_} -30H${_+22}V0H${_}Z"/>${Array.from({length:9},(e,t)=>`<path class="iso-line" data-tone="faint" d="M${_} ${-(3+t*3)}H${_+22}"/>`).join(``)}<path class="iso-line" data-tone="mid" d="M${_} -30H${_+22}V0H${_}Z"/></g>`,l({x:_,y:f+.8,w:22,d:1,r:.2},0,2.4,{tone:`mid`},2,0)),d.push(l({x:_-1,y:f,w:24,d:.9,r:.2},38,16,{tone:`lo`},2,0));let te=[];for(let e=40;e<53.5;e+=1.8)te.push(r.segment([_+.6,f+.9,e],[_+22-.6,f+.9,e],a));d.push(s(te.join(``),{tone:`mid`})),d.push(u(_+22+3.6,f+1.2,1.2,28,2.2,{tone:`mid`},10));let v=t.y+36;d.push(l({x:p,y:v-1.2,w:.9,d:12.4,r:.2},0,25,{tone:`lo`},2,0),l({x:p+.9,y:v,w:.5,d:10,r:.2},0,22.4,{tone:`mid`},2,0),l({x:p,y:v-3,w:4.4,d:16,r:.4},26,1.4,{tone:`mid`},2,.2),u(p+1.4,v+12.4,1.1,14,2,{tone:`mid`},10)),d.push(s(r.segment([p+1.4,v+1.2,13],[p+1.4,v+1.2,19],a)+r.segment([p+1.4,v+2,3],[p+1.4,v+9,3],a),{tone:`hi`}));let ne=t.y+72;d.push(l({x:p,y:ne,w:.9,d:30,r:.2},22,26,{tone:`lo`},2,0));let re=[];for(let e=24;e<47.5;e+=1.8)re.push(r.segment([p+.9,ne+1.4,e],[p+.9,ne+28.6,e],a));d.push(s(re.join(``),{tone:`mid`}));for(let{x:t,z:r,r:s}of n){let n=i.frameAlong([t,f,r],[0,1,0]);d.push(o(i.disc(0,1.2,s+2.8,n,a),{tone:`mid`}),o(i.disc(1.2,ke,s+1.4,n,a),{tone:`mid`}),c([0,1,2,3,4,5].map(n=>e.at([t+Math.cos(n*1.047)*(s+2),f+1.2,r+Math.sin(n*1.047)*(s+2)])),{size:.4}))}return d.join(``)}function je(e,t){let{k:n,P:r,L:i,slab:a}=e,o=[];for(let e of t){o.push(a(e,0,1.4,{tone:`lo`},2,.2));let t=[];if(e.w>=e.d)for(let i=e.x+9;i<e.x+e.w-2;i+=9)t.push(n.lineOnTop([i,e.y+.8],[i,e.y+e.d-.8],1.5,r));else for(let i=e.y+9;i<e.y+e.d-2;i+=9)t.push(n.lineOnTop([e.x+.8,i],[e.x+e.w-.8,i],1.5,r));o.push(i(t.join(``)+n.planOutline(n.insetPlan(e,.8),1.5,r,2),{tone:`faint`}))}return o.join(``)}function Me(e,t,n,r){let{k:i,P:a,S:o,L:s,slab:c}=e,l=[],u=t.y+t.d;for(let e=t.x+14;e<t.x+t.w-4;e+=14)l.push(i.segment([e,u,3],[e,u,n-5],a));let d=[o(i.slabOf(t,0,n,a,2,.4),{tone:`lo`,inner:s(l.join(``)+i.sideSeam(t,4,a,2),{tone:`faint`})}),c({x:t.x-1.5,y:t.y-1.5,w:t.w+3,d:t.d+3,r:.4},n,2.2,{tone:`mid`},2,.2)];for(let t of r){let r=[];for(let e=22;e<=n-12;e+=3)r.push(`<path class="iso-line" data-tone="lo" d="M${t-20} ${-e}H${t+20}"/>`);d.push(`<g transform="${e.front(u+.1)}"><path class="sf-plate" d="M${t-21} ${-(n-9)}H${t+21}V-18H${t-21}Z"/>${r.join(``)}</g>`)}return d.join(``)}function Ne(e,t,n){let{k:r,P:i,slab:a,L:o}=e,s=(n===`back`?[{x:t.x,y:t.y,w:t.w,d:3,r:.4},{x:t.x,y:t.y+3,w:3,d:t.d-6,r:.4}]:[{x:t.x,y:t.y+t.d-3,w:t.w,d:3,r:.4},{x:t.x+t.w-3,y:t.y+3,w:3,d:t.d-6,r:.4}]).map(e=>a(e,0,9,{tone:`mid`},2,.3));return n===`front`&&s.push(o(r.segment([t.x+3,t.y+t.d,4.4],[t.x+t.w,t.y+t.d,4.4],i)+r.segment([t.x+t.w,t.y+3,4.4],[t.x+t.w,t.y+t.d,4.4],i),{tone:`faint`})),s.join(``)}function Pe(e,[t,n,r]){let{G:i,P:a,S:o,cyl:s,slab:c,screws:l}=e,u=i.frameAlong([t,n,r],[0,1,0]);return[o(i.solidOf([[0,3.8],[1.6,5.2],[2.6,5.2],[3.6,4.2],[10.4,4.2],[11.4,5.2],[12.4,5.2],[14,3.8]],u,a),{tone:`mid`}),s(t,n+14/2,2.4,r+3.6,6,{tone:`mid`,crease:`none`},14),c({x:t-4.6,y:n+14/2-3.6,w:9.2,d:7.2,r:1},r+9.6,9,{tone:`mid`},2,.4),s(t,n+14/2,2.6,r+18.6,1.8,{tone:`lo`},14),l([[t-3.4,n+14/2+3.7],[t+3.4,n+14/2+3.7]],r+15)].join(``)}var S=16,C=56,Fe=3;function Ie(e,t,n,r){let{faceRule:i}=e,a=S-3,o=C-12,s=n+1.5,c=`<g transform="${e.front(t)}"><path class="iso-line" data-tone="lo" d="M${s} ${-o}H${s+a}V-5H${s}Z"/>`,l=``;if(r===0)l+=`<path class="sf-plate" d="M${s+2} ${-(o-3)}H${s+a-2}V${-(o-19)}H${s+2}Z"/>`,l+=`<path class="iso-line" data-tone="mid" d="M${s+4} ${-(o-6)}H${s+a/2}M${s+a-4} ${-(o-6)}H${s+a/2}M${s+a/2} ${-(o-6)}V${-(o-16)}"/>`;else if(r===1)for(let e=0;e<3;e++)l+=`<path class="sf-plate" d="M${s+2} ${-(o-4-e*9)}H${s+a-2}V${-(o-10-e*9)}H${s+2}Z"/><path class="iso-line" data-tone="mid" d="M${s+a/2-2} ${-(o-7-e*9)}H${s+a/2+2}"/>`;else for(let e=0;e<8;e++)l+=`<path class="iso-line" data-tone="faint" d="M${s+2} ${-(o-3-e*2.4)}H${s+a-2}"/>`;let u=`<path class="iso-line" data-tone="hi" d="M${s+a-2.6} -19V-27"/>`;return`${c}${l}${u}</g>${i(t,s+2,7,a-4,4)}`}function Le(e,t,n){let{k:r,P:i,L:a,slab:o,cyl:s,screws:c}=e,l=[],u=t.y+t.d;l.push(o({x:t.x-2,y:t.y-2,w:t.w+4,d:t.d+4,r:1},0,2,{tone:`lo`},2,.2));for(let n=0;n<Fe;n++){let d=t.x+n*S,f={x:d,y:t.y,w:S,d:t.d,r:.6};l.push(o(f,2,C-2,{tone:`mid`},2,.4)),l.push(o({x:d+1,y:t.y+1,w:S-2,d:t.d-2,r:.6},C,3,{tone:`mid`},2,.3)),l.push(a(r.segment([d+4,u-4,C+3.2],[d+S-4,u-4,C+3.2],i),{tone:`faint`}),s(d+3,t.y+4,1,C+3,2,{tone:`mid`},10),s(d+S-3,t.y+4,1,C+3,2,{tone:`mid`},10)),l.push(Ie(e,u,d,n)),l.push(c([[d+1.4,u-.2],[d+S-1.4,u-.2]],C-2))}let d=t.x+t.w-8,f=t.y+t.d/2-4,p=C+3.4,m=[];for(let e=d+2;e<n-1;e+=3)m.push(r.segment([e,f+.6,p+.6],[e,f+7.4,p+.6],i));return l.push(o({x:d,y:f,w:n-d,d:.9,r:.2},p,2,{tone:`mid`},2,.1),o({x:d,y:f+7.1,w:n-d,d:.9,r:.2},p,2,{tone:`mid`},2,.1),a(m.join(``),{tone:`mid`}),s(n-6,f+4,.9,0,p,{tone:`mid`,crease:`none`},10),o({x:n-8.6,y:f+1.4,w:5.2,d:5.2,r:.5},0,1.2,{tone:`lo`},2,.1),o({x:n-1.6,y:f-.6,w:1.6,d:9.2,r:.3},p-1,4,{tone:`mid`},2,.1)),l.join(``)}var Re={x:-15,y:0,w:30,d:14,r:1.5},w=30,T=12.5,ze=2.2,E=11;function Be(e,t){let{k:n,G:r,P:i,L:a,D:o,S:s,slab:c,cyl:l,screws:u,faceRule:d}=e,f=[],p=r.frameAlong([0,0,w],[0,1,0]);f.push(c({x:-15,y:0,w:30,d:9,r:1},0,1.4,{tone:`lo`},2,.3)),f.push(u(n.corners({x:-15,y:0,w:30,d:9},1.6),1.4));for(let e of[-11,8])f.push(c({x:e,y:0,w:3,d:7,r:.5},1.4,w-15-1.4+.4,{tone:`mid`},2,.2));f.push(c({x:-14.5,y:0,w:29,d:ze,r:1},w-15,30,{tone:`mid`},2,.3)),f.push(o([[-12.4,13.2],[12.4,13.2],[-12.4,-13.2],[12.4,-13.2]].map(([e=0,t=0])=>n.iso([e,ze+.1,w+t],i)),{size:.45})),f.push(s(r.disc(ze,E,T,p,i),{tone:`mid`}));for(let e of[5.4,8.2])f.push(a(n.sideRing([0,e,w],T,`y`,i,32),{tone:`faint`}));f.push(s(r.disc(E-1.8,E,T+1.2,p,i),{tone:`mid`})),f.push(s(r.disc(E-.4,E,T-1.6,p,i),{tone:`lo`})),f.push(`<path class="gs-blade" data-vfan="0,${E+.3},${w},${T-2.6}" data-top="0,${E},${w+T+4}" data-bearing="0,${E-3},${w+T}" d=""/>`),f.push(s(r.disc(E,E+2.4,3,p,i),{tone:`mid`}),s(r.disc(E+2.2,E+3,1.6,p,i),{tone:`lo`}));let m=[],h=E+1.6;for(let e of[5.5,T-2])m.push(n.sideRing([0,h,w],e,`y`,i,28));for(let e=0;e<8;e++){let t=e/8*Math.PI*2;m.push(n.segment([Math.cos(t)*3,h,w+Math.sin(t)*3],[Math.cos(t)*(T-2),h,w+Math.sin(t)*(T-2)],i))}return f.push(a(m.join(``),{tone:`mid`})),f.push(c({x:-4.5,y:3,w:9,d:6,r:.8},w+T-.6,6,{tone:`mid`},2,.3),l(0,6,1.1,w+T+5.4,2.2,{tone:`mid`},10),d(9.1,-3,w+T+1,6,2.4)),f.join(``)}var Ve=1e3,He={x:-500,y:-395,w:810,d:189,r:8},Ue={x:-380,y:-120,w:680,d:180,r:8},We={x:-520,y:-415,w:850,d:495,r:16},Ge=r([...s(We,-21,-14),...s(He,-14,140),...s(Ue,-14,100)],Ve,620,{pad:22,azimuth:60}),Ke=-300,D=[[-268,Ke],[-108,Ke],[52,Ke]],qe=(e,t)=>[e[0]+t[0],e[1]+t[1],t[2]],Je=e=>qe(D[e]??[0,0],me),Ye=e=>qe(D[e]??[0,0],_e),Xe={x:-340,y:-338,w:470,d:4,r:0},O=[-434,-340],Ze={r:32,h:104,nozzles:[{angle:90,z:14,r:2,role:`outlet`}]},k={x:-486,y:-392,w:104,d:104,r:0},A=[-434,-232],j={r:17,h:62,windowX:8,panelX:-26,nozzles:[{angle:270,z:14,r:2,role:`inlet`},{angle:0,z:7,r:2,role:`outlet`}]},M=A[0],Qe=-284,$e={x:132,y:-330,w:48,d:25,r:1},N={x:204,y:-395,w:104,d:145,r:2},et=[293,N.y+N.d],tt=[-202,-135,0],nt=[[-65,-62],[-169,-62]],rt=[-34,36.6,40],it=[-20,36.6,40],at=[94,-130,0],ot=.8,st=[[47,36],[157,36]],ct=e=>[(e[0]-at[0])*ot,(e[1]-at[1])*ot,e[2]*ot],lt=ct(ee),ut=ct(u),dt=[{x:-318,y:-262,w:462,d:8,r:0},...D.map(([e])=>({x:e-48,y:-290,w:6,d:32,r:0})),{x:137,y:-308,w:6,d:54,r:0}],ft=[-67,-132,0],pt=[-292,-62],mt=[-110,-114,24],ht=we([...D.map((e,t)=>({key:`gen${t}`,at:e,h:126})),{key:`bund-back`,at:[O[0],k.y+2],h:12},{key:`bulk`,at:O,h:Ze.h+12},{key:`bund-front`,at:[O[0],k.y+k.d-2],h:12},{key:`valve`,at:[M,Qe+7],h:30},{key:`day`,at:A,h:j.h+12},{key:`vent`,at:[et[0],et[1]+6],h:50},{key:`lineup`,at:[$e.x+$e.w/2,$e.y+$e.d/2],h:62},{key:`hall`,at:[N.x+N.w/2,N.y+N.d/2],h:76},...nt.map((e,t)=>({key:`chiller${t}`,at:e,h:56})),...st.map((e,t)=>({key:`pump${t}`,at:e,h:45*ot})),{key:`compressor`,at:pt,h:46}],Ge),gt=ht.order,_t=ht.slotDepths,vt=ht.depth,yt=(e,t)=>[e[0]+t[0],e[1]+t[1],t[2]],P=(e,t,n,r)=>[t??e[0],n??e[1],r??e[2]],bt=(e,t,n)=>{let r=e.nozzles[n];return r?yt(t,Se(e,r)):[0,0,0]},F=6,xt=bt(Ze,O,0),St=bt(j,A,0),Ct=bt(j,A,1),I=Ct[1],[wt,Tt,Et]=[0,1,2].map(Je),[L,Dt,Ot]=[0,1,2].map(Ye),kt=Qe+14,At=-366,R=-250,z=L[2],jt=16,Mt=[pt[0]+mt[0]-ft[0],pt[1]+mt[1]-ft[1],mt[2]],Nt=Mt[1]+jt,[B=[0,0],Pt=[0,0]]=nt,[V=[0,0],H=[0,0]]=st,U=e=>yt(e,ut),W=e=>yt(e,lt),G=e=>yt(e,rt),K=e=>yt(e,it),q=W(V)[2],J=B[1]+61,Y=72,X=B[1]+48,Ft=84,It=V[1]-34,Lt=W(H)[0]+13,Rt=W(V)[0]+8,zt=6,Bt=K(B)[0]+40,Vt=N.y+N.d+ke,Ht=[{id:`xfer:a`,medium:`fuel`,r:2,pts:[xt,[M,Qe,14]]},{id:`xfer:b`,medium:`fuel`,r:2,pts:[[M,kt,14],St]},{id:`fuel:all`,medium:`fuel`,r:2,pts:[Ct,[wt[0],I,F]]},{id:`fuel:bc`,medium:`fuel`,r:2,pts:[[wt[0],I,F],[Tt[0],I,F]]},{id:`fuel:c`,medium:`fuel`,r:2,pts:[[Tt[0],I,F],[Et[0],I,F],Et]},{id:`fuel:a`,medium:`fuel`,r:2,pts:[[wt[0],I,F],wt]},{id:`fuel:b`,medium:`fuel`,r:2,pts:[[Tt[0],I,F],Tt]},{id:`air:main`,medium:`air`,r:b,bend:8,pts:[Mt,P(Mt,null,Nt,null),[At,Nt,Mt[2]],[At,Nt,z],[At,R,z],[L[0],R,z]]},{id:`air:ab`,medium:`air`,r:b,pts:[[L[0],R,z],[Dt[0],R,z]]},{id:`air:c`,medium:`air`,r:b,pts:[[Dt[0],R,z],[Ot[0],R,z],Ot]},{id:`air:a`,medium:`air`,r:b,pts:[[L[0],R,z],L]},{id:`air:b`,medium:`air`,r:b,pts:[[Dt[0],R,z],Dt]},{id:`suction`,medium:`coolantret`,r:2.6,pts:[[265,Vt,q],[265,It,q],[Lt,It,q]]},{id:`suction:standby`,medium:`coolantret`,r:2.6,pts:[[Lt,It,q],P(W(H),Lt,null,null),W(H)]},{id:`suction:duty`,medium:`coolantret`,r:2.6,pts:[[Lt,It,q],[Rt,It,q],P(W(V),Rt,null,null),W(V)]},...[[`a`,B],[`b`,Pt]].map(([e,t])=>({id:`out:${e}`,medium:`coolant`,r:2.2,pts:[K(t),P(K(t),null,X,null),P(K(t),null,X,Ft)]})),{id:`chws:b`,medium:`coolant`,r:2.6,blind:[!0,!1],pts:[[K(Pt)[0]-zt,X,Ft],[K(B)[0],X,Ft]]},{id:`chws`,medium:`coolant`,r:2.6,pts:[[K(B)[0],X,Ft],[Bt,X,Ft],[Bt,X,40],[240,X,40],[240,Vt,40]]},...[[`duty`,V],[`standby`,H]].map(([e,t])=>({id:`discharge:${e}`,medium:`coolantret`,r:2.6,fromStub:!0,pts:[U(t),P(U(t),null,null,Y),P(U(t),null,J,Y)]})),{id:`header:standby`,medium:`coolantret`,r:2.6,blind:[!0,!1],pts:[[U(H)[0]+zt,J,Y],[U(V)[0],J,Y]]},{id:`header`,medium:`coolantret`,r:2.6,pts:[[U(V)[0],J,Y],[G(B)[0],J,Y]]},{id:`header:b`,medium:`coolantret`,r:2.6,blind:[!1,!0],pts:[[G(B)[0],J,Y],[G(Pt)[0]-zt,J,Y]]},...[[`a`,B],[`b`,Pt]].map(([e,t])=>({id:`in:${e}`,medium:`coolantret`,r:2.2,pts:[P(G(t),null,J,Y),P(G(t),null,J,null),G(t)]}))],Ut=(e,t)=>[He,Ue].some(n=>e>=n.x&&e<=n.x+n.w&&t>=n.y&&t<=n.y+n.d),Z=(e,t,n,r)=>[e,t,n,r,Ut(e,t)?0:-14],Wt={z:10,flanged:!0,routes:Ht,posts:[...[-395,-330,-215,-60].map(e=>Z(e,I,2,F)),Z(M,-294,2,14),...[-70,-140,-190,R].map(e=>Z(At,e,b,z)),...[-300,-155,10].map(e=>Z(e,R,b,z)),...[-225,-150,-90,-35].map(e=>Z(240,e,2.6,40)),...[-225,-150,-90,-35,20].map(e=>Z(265,e,2.6,q)),...[-20,100,215].map(e=>Z(e,X,2.6,40)),...[-150,-20,130].map(e=>Z(e,J,2.6,Y))]},Q=n(),Gt={x:-248,y:-164,w:92,d:58,r:3},Kt={x:-136,y:-152,w:138,d:40,r:3},qt=xe(Ze),Jt=xe(j),Yt=(e,t)=>p(e,t,`coolantret`,!0),Xt=(e,t)=>be(e,t,Ze),Zt=(e,t)=>be(e,t,j),Qt=(e,t)=>fe(e,t,{barFull:10,dialFull:12}),$t=e=>Ae(e,N,[{x:240,z:40,r:2.6},{x:265,z:lt[2],r:2.6}]),en=e=>Le(e,$e,N.x),tn=e=>Pe(e,[M,Qe,14]),nn=e=>Ne(e,k,`back`),rn=e=>Ne(e,k,`front`);function an({ids:e}){let t=a(),n=f(Wt,vt),r=(0,Oe.useMemo)(()=>h(t,We)+t.plinth(He)+t.plinth(Ue)+je(t,dt)+Me(t,Xe,62,D.map(([e])=>e)),[t]),s=e=>(0,Q.jsx)(i,{html:`${n.layers[e]??``}<g data-flows="${e}" data-depth="${e===0?-1e9:_t[e-1]??0}"></g>`,data:{pipes:``}},`pipes-${e}`),c=[e.genA,e.genB,e.genC],l={"bund-back":(0,Q.jsx)(g,{build:nn,intro:1}),bulk:(0,Q.jsx)(`g`,{className:`fuel-tank`,children:(0,Q.jsx)(d,{to:y(O),children:(0,Q.jsx)(o,{id:e.bulk,plan:qt,intro:2,draw:Xt})})}),"bund-front":(0,Q.jsx)(g,{build:rn,intro:2}),valve:(0,Q.jsx)(g,{build:tn,intro:3}),day:(0,Q.jsx)(`g`,{className:`fuel-tank`,children:(0,Q.jsx)(d,{to:y(A),children:(0,Q.jsx)(o,{id:e.day,plan:Jt,intro:3,draw:Zt})})}),vent:(0,Q.jsx)(d,{to:y(et),children:(0,Q.jsx)(o,{id:e.fan,plan:Re,intro:9,draw:Be})}),lineup:(0,Q.jsx)(g,{build:en,intro:8}),hall:(0,Q.jsx)(g,{build:$t,intro:8}),compressor:(0,Q.jsx)(d,{from:ft,to:y(pt),children:(0,Q.jsx)(o,{id:e.compressor,plan:Kt,intro:13,draw:Qt})})};for(let[e,t]of D.entries())l[`gen${e}`]=(0,Q.jsx)(`g`,{className:`gen-set`,children:(0,Q.jsx)(d,{to:y(t),children:(0,Q.jsx)(o,{id:c[e]??``,plan:ge,intro:4+e,draw:ve})})});for(let[t,n]of nt.entries())l[`chiller${t}`]=(0,Q.jsx)(d,{from:tt,to:y(n),children:(0,Q.jsx)(o,{id:t?e.chillerB:e.chillerA,plan:Gt,intro:10+t,draw:ue})});for(let[t,n]of st.entries())l[`pump${t}`]=(0,Q.jsx)(d,{from:at,to:y(n),scale:ot,children:(0,Q.jsx)(o,{id:t?e.pumpB:e.pumpA,plan:ae,intro:12+t,draw:Yt})});return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(i,{html:r,data:{plinth:``}}),s(0),gt.flatMap((e,t)=>[(0,Q.jsx)(`g`,{children:l[e.key]},e.key),s(t+1)])]})}var $=e=>e>.002?6+26*re(e*2):0,on=e=>{let{svg:t,feed:n,ids:r}=e,i=ne(t),a=ye(e,i),o=Ce(e),s=de(e,i),c=ce(e,i),l=pe(e,i),u=[a,o,s,c,l,he(e,i)],d=ie(e,e=>oe(n,e,`availability`)),f=se(e,{needle:e=>l.needle(e)??s.needle(e)??0,bar:e=>u.reduce((t,n)=>t??n.bar(e),void 0)??0,alertsHigh:()=>!0,ready:()=>!0}),p=()=>{let e=n.param(r.day,`max_inflow_lps`,0);return e>0?re(n.num(r.day,`inflow_rate`)/e):0},m=(...e)=>re(e.reduce((e,t)=>e+a.fuelPu(t),0)),h=()=>c.flowPu(r.pumpA)+c.flowPu(r.pumpB),g=e=>{let t=[r.chillerA,r.chillerB].filter(e=>n.num(e,`coolant_flow_rate`)>0);return t.includes(e)?h()/t.length:0},ee=v(e,({id:e})=>{switch(e){case`xfer:a`:case`xfer:b`:return $(p());case`fuel:all`:return $(m(r.genA,r.genB,r.genC));case`fuel:bc`:return $(m(r.genB,r.genC));case`fuel:c`:return $(m(r.genC));case`fuel:a`:return $(m(r.genA));case`fuel:b`:return $(m(r.genB));case`air:main`:case`air:ab`:case`air:c`:case`air:a`:case`air:b`:return $(l.deliveredPu(r.compressor));case`suction`:case`chws`:case`header`:return $(h());case`suction:duty`:case`discharge:duty`:return $(c.flowPu(r.pumpA));case`suction:standby`:case`discharge:standby`:case`header:standby`:return $(c.flowPu(r.pumpB));case`in:a`:case`out:a`:return $(g(r.chillerA));case`in:b`:case`out:b`:case`header:b`:case`chws:b`:return $(g(r.chillerB));default:return 0}});return{data(e){d.draw(e)},draw({sdt:e,t,introDone:n}){ee.draw(e),f.draw(e,t);for(let r of u)r.draw(e,t,n)},resync(){},status:e=>le(n,e,`availability`)}},sn=_(Ge),cn=m(sn,Wt,vt),ln=te({layout:{width:Ve,height:620,label:`Isometric model of the Backup Power facility: along the back, the fuel yard with its bulk tank in a bund and the day tank, three diesel gen sets side by side with their exhaust stacks and radiators, the electrical lineup and the data hall they back up; along the front, the start-air compressor, two chillers and two chilled-water pumps whose loop runs to the hall. Pipes carry fuel, start air and chilled water between them. Every moving part follows live values from the running engine.`,kit:sn,flows:cn.flows,joints:cn.joints,Scene:an,compose:on},resolve:Ee,things:De,caption:`generation · fuel · cooling`,mismatch:`This floor expects the Backup Power facility: three diesel gensets, the bulk and day fuel tanks, two chillers with two chilled-water pumps, the start-air compressor and the hall ventilation motor, by area and line.`,statusBasis:`availability`,Overview:c,tab:`Plant`});export{ln as backupFloor};
@@ -1 +1 @@
1
- import{ot as e}from"./vendor-ui-D8j69UH4.js";import{ot as t}from"./api-BG2sUkwk.js";import{a as n,i as r,n as i,t as a}from"./status-kit-pFRjEjVU.js";var o=e(),s={g:`live`,a:`idle`,r:`fault`,"":`off`};function c({name:e,level:t}){return(0,o.jsxs)(`li`,{className:`flex items-center gap-3`,children:[(0,o.jsx)(`span`,{className:`w-28 shrink-0 truncate text-xs text-muted-foreground`,children:e}),(0,o.jsx)(`span`,{className:`h-1.5 min-w-0 flex-1 overflow-hidden rounded-full bg-muted`,children:(0,o.jsx)(`span`,{className:`block h-full rounded-full bg-info`,style:{width:`${Math.max(0,Math.min(100,t))}%`}})}),(0,o.jsxs)(`span`,{className:`w-10 shrink-0 text-right font-mono text-[11px] tabular-nums`,children:[t.toFixed(0),` %`]})]})}function l({things:e,status:l,onSelect:u}){let d=t(e=>e.memberValues),f=e.map(e=>({thing:e,status:l(e.key)})),p=f.filter(e=>e.status[1]===`r`).length,m=f.filter(e=>e.status[0]===`stopped`).length,h=f.length-p-m,g=e.flatMap(e=>{let t=d.get(e.assetId)?.get(`level_percent`)?.value;return typeof t==`number`?[{name:e.name,level:t}]:[]}),_=[...new Set(e.map(e=>e.area??``))];return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(`div`,{className:`grid grid-cols-3 gap-3 px-4 pt-4 pb-5`,children:[(0,o.jsx)(a,{label:`Online`,value:String(h)}),(0,o.jsx)(a,{label:`Stopped`,value:String(m)}),(0,o.jsx)(a,{label:`Faulted`,value:String(p)})]}),g.length>0?(0,o.jsx)(r,{title:`Levels`,note:`live`,children:(0,o.jsx)(`ul`,{className:`flex flex-col gap-2.5`,children:g.map(e=>(0,o.jsx)(c,{name:e.name,level:e.level},e.name))})}):null,_.map(e=>(0,o.jsx)(r,{title:e,note:`flow order`,children:(0,o.jsx)(`ul`,{className:`-mx-2 flex flex-col`,children:f.filter(t=>(t.thing.area??``)===e).map(({thing:e,status:[t,r]})=>(0,o.jsx)(i,{tone:s[r],name:e.name,note:n(t),onSelect:()=>u(e.key)},e.key))})},e))]})}function u(e,{template:t,assets:n}){let r=new Set(t.assetIds),i=n.filter(e=>r.has(e.id)),a=new Map;for(let[,t,n,r]of e){let e=`${t}|${n}|${r}`;a.set(e,(a.get(e)??0)+1)}let o={};for(let[t,n,r,s,c]of e){let e=i.filter(e=>e.model===n&&e.browsePath?.[2]===r&&e.browsePath?.[3]===s).map(e=>e.id).sort(),l=e[c];if(!l||e.length!==a.get(`${n}|${r}|${s}`))return{status:`mismatch`};o[t]=l}return{status:`ready`,ids:o}}export{l as n,u as t};
1
+ import{ot as e}from"./vendor-ui-D8j69UH4.js";import{vt as t}from"./api-GfuYYI6q.js";import{a as n,i as r,n as i,t as a}from"./status-kit-Darp7bPB.js";var o=e(),s={g:`live`,a:`idle`,r:`fault`,"":`off`};function c({name:e,level:t}){return(0,o.jsxs)(`li`,{className:`flex items-center gap-3`,children:[(0,o.jsx)(`span`,{className:`w-28 shrink-0 truncate text-xs text-muted-foreground`,children:e}),(0,o.jsx)(`span`,{className:`h-1.5 min-w-0 flex-1 overflow-hidden rounded-full bg-muted`,children:(0,o.jsx)(`span`,{className:`block h-full rounded-full bg-info`,style:{width:`${Math.max(0,Math.min(100,t))}%`}})}),(0,o.jsxs)(`span`,{className:`w-10 shrink-0 text-right font-mono text-[11px] tabular-nums`,children:[t.toFixed(0),` %`]})]})}function l({things:e,status:l,onSelect:u}){let d=t(e=>e.memberValues),f=e.map(e=>({thing:e,status:l(e.key)})),p=f.filter(e=>e.status[1]===`r`).length,m=f.filter(e=>e.status[0]===`stopped`).length,h=f.length-p-m,g=e.flatMap(e=>{let t=d.get(e.assetId)?.get(`level_percent`)?.value;return typeof t==`number`?[{name:e.name,level:t}]:[]}),_=[...new Set(e.map(e=>e.area??``))];return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(`div`,{className:`grid grid-cols-3 gap-3 px-4 pt-4 pb-5`,children:[(0,o.jsx)(a,{label:`Online`,value:String(h)}),(0,o.jsx)(a,{label:`Stopped`,value:String(m)}),(0,o.jsx)(a,{label:`Faulted`,value:String(p)})]}),g.length>0?(0,o.jsx)(r,{title:`Levels`,note:`live`,children:(0,o.jsx)(`ul`,{className:`flex flex-col gap-2.5`,children:g.map(e=>(0,o.jsx)(c,{name:e.name,level:e.level},e.name))})}):null,_.map(e=>(0,o.jsx)(r,{title:e,note:`flow order`,children:(0,o.jsx)(`ul`,{className:`-mx-2 flex flex-col`,children:f.filter(t=>(t.thing.area??``)===e).map(({thing:e,status:[t,r]})=>(0,o.jsx)(i,{tone:s[r],name:e.name,note:n(t),onSelect:()=>u(e.key)},e.key))})},e))]})}function u(e,{template:t,assets:n}){let r=new Set(t.assetIds),i=n.filter(e=>r.has(e.id)),a=new Map;for(let[,t,n,r]of e){let e=`${t}|${n}|${r}`;a.set(e,(a.get(e)??0)+1)}let o={};for(let[t,n,r,s,c]of e){let e=i.filter(e=>e.model===n&&e.browsePath?.[2]===r&&e.browsePath?.[3]===s).map(e=>e.id).sort(),l=e[c];if(!l||e.length!==a.get(`${n}|${r}|${s}`))return{status:`mismatch`};o[t]=l}return{status:`ready`,ids:o}}export{l as n,u as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./catalog-Lt1tguKF.js";export{e as CatalogPage};
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-COnpUsM8.js";import{c as t}from"./vendor-charts-95ykyDlI.js";import{ot as n}from"./vendor-ui-D8j69UH4.js";import{S as r,o as i,ot as a,v as o}from"./api-BG2sUkwk.js";import{t as s}from"./useQuery-Cl48zZ73.js";import{t as c}from"./proxy-CWZabK8f.js";import{t as l}from"./AnimatePresence-BSSlw02V.js";import{c as u,n as d}from"./chunk-OE4NN4TA-DBWZidbW.js";import{a as f,c as ee,i as p,n as m,o as h,r as g,t as _}from"./dialog-B5PqrKVw.js";import{C as v,S as te,u as y,w as b}from"./format-Bx7DF-TB.js";import{n as x,t as S}from"./utils-XFKvwlFT.js";import{n as C,t as w}from"./catalog-template-icons-7CBAYTtP.js";import{r as T}from"./source-host-miravo-B8eM2IHw.js";import{a as E,i as D,l as O,o as k,t as A}from"./use-engine-command-mutation-DrMOfYty.js";import{t as j}from"./query-fetch-error-CWLZA2L5.js";import{t as M}from"./rocket-KZ5oHK1G.js";import{i as ne,n as N,r as P,t as F}from"./catalog-source-B4L5N-a1.js";import{t as I}from"./badge-Bk1DaL6C.js";import{n as L}from"./get-error-message-C9VW9IZB.js";var R=x(`layout-dashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),z=e(t(),1),B=n(),V=[`builtin`,`personal`];function H(){let[e,t]=(0,z.useState)(``),[n,d]=(0,z.useState)(`all`),[b,x]=(0,z.useState)(null),[w,T]=(0,z.useState)(null),[D,O]=(0,z.useState)(null),k=(0,z.useRef)(null),N=A(),F=u(),R=a(e=>e.templates),H=(0,z.useMemo)(()=>new Set(R.map(e=>e.templateId)),[R]);(0,z.useEffect)(()=>{let e=e=>{if(e.key!==`/`||e.metaKey||e.ctrlKey||e.altKey)return;let t=e.target.tagName;t===`INPUT`||t===`TEXTAREA`||t===`SELECT`||(e.preventDefault(),k.current?.focus())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]);let W=s({queryKey:o.catalog.templates(),queryFn:()=>i(`/catalog/templates`,r.catalogTemplates)}),K=W.data??[],q=w===null?null:K.find(e=>e.id===w)??null,J=W.isPending&&!W.data,Y=W.isError&&!W.data,X=W.isError&&!!W.data,Z=L(W.error,`Failed to load templates.`),re=(0,z.useCallback)(e=>{O(e)},[]),ie=(0,z.useCallback)(e=>{T(e)},[]),ae=async e=>{x(e);try{return await N.mutateAsync({type:`loadTemplate`,templatePath:e}),ee(`Next: connect a client`),F(`/?highlight=${encodeURIComponent(e)}`),!0}catch{return!1}finally{x(null)}},oe=(0,z.useMemo)(()=>{let e={all:K.length};for(let t of V)e[t]=0;for(let t of K){let n=P(t.source);e[n]=(e[n]??0)+1}return e},[K]),Q=e.toLowerCase(),$=K.filter(e=>n===`all`||P(e.source)===n).filter(e=>Q?e.name.toLowerCase().includes(Q)||e.id.toLowerCase().includes(Q)||(e.description?.toLowerCase().includes(Q)??!1):!0);return(0,B.jsxs)(`div`,{className:`@container/templates mx-auto flex w-full max-w-screen-2xl flex-col gap-5 p-4 sm:gap-6 sm:p-6`,children:[(0,B.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,B.jsx)(`h1`,{className:`font-heading text-2xl font-semibold tracking-tight`,children:`Template Catalog`}),(0,B.jsx)(I,{variant:`outline`,className:`text-xs`,children:Y?(0,B.jsx)(`span`,{className:`text-destructive`,children:`Unavailable`}):J&&K.length===0?(0,B.jsx)(B.Fragment,{children:`Loading...`}):(0,B.jsxs)(B.Fragment,{children:[new Set(K.map(e=>e.id)).size,` templates`]})})]}),(0,B.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Choose a template to launch a realistic industrial system. Each template includes pre-configured asset models with realistic physics, lifecycle degradation, and fault modes.`})]}),Y&&(0,B.jsx)(j,{message:Z,onRetry:()=>void W.refetch(),isRetrying:W.isFetching}),X&&(0,B.jsx)(j,{message:`${Z} Showing cached templates.`,onRetry:()=>void W.refetch(),isRetrying:W.isFetching}),!Y&&(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,B.jsxs)(`div`,{className:`relative max-w-xs flex-1 min-w-[14rem]`,children:[(0,B.jsx)(ne,{className:`absolute left-2.5 top-2.5 size-4 text-muted-foreground`}),(0,B.jsx)(te,{ref:k,placeholder:`Filter templates...`,value:e,onChange:e=>t(e.target.value),className:`pl-9 pr-7`}),!e&&(0,B.jsx)(`kbd`,{className:`pointer-events-none absolute top-1/2 right-2 -translate-y-1/2 rounded-[var(--miravo-radius-tight)] border border-border bg-muted px-1 font-mono text-[10px] text-muted-foreground`,children:`/`})]}),(0,B.jsx)(G,{value:n,counts:oe,onChange:d})]}),(0,B.jsx)(`div`,{className:`grid grid-cols-1 gap-4 @[720px]/templates:grid-cols-2`,"aria-busy":J&&!Y,children:Y?null:(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(l,{children:$.map((e,t)=>(0,B.jsx)(c.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},exit:{opacity:0,scale:.96,transition:{duration:.15}},transition:{type:`spring`,stiffness:380,damping:30,delay:t*.04},className:`grid`,children:(0,B.jsx)(U,{template:e,launching:b===e.id,loaded:H.has(e.id),onInspect:re,onLaunch:ie})},`${e.source}:${e.id}`))}),$.length===0&&K.length>0&&(0,B.jsx)(`p`,{className:`col-span-full py-8 text-center text-sm text-muted-foreground`,children:`No templates match the current filters.`})]})}),K.length>0&&(0,B.jsx)(`div`,{className:S(E,`p-0`),children:(0,B.jsx)(`div`,{className:`community-teaser relative overflow-hidden rounded-[inherit]`,children:(0,B.jsx)(`div`,{className:`relative z-10 mx-auto max-w-3xl px-5 py-10 sm:px-10 sm:py-12`,children:(0,B.jsxs)(`div`,{className:`grid items-center gap-10 lg:grid-cols-[minmax(0,1fr)_minmax(0,17rem)]`,children:[(0,B.jsxs)(`div`,{className:`order-2 flex min-w-0 flex-col gap-4 lg:order-1`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-3 gap-y-1`,children:[(0,B.jsx)(`p`,{className:`blueprint-title text-primary`,children:`Future channel`}),(0,B.jsx)(`span`,{className:`blueprint-stat text-[10px] text-muted-foreground`,children:`MIRAVO_REGISTRY · NOT_CONNECTED`})]}),(0,B.jsx)(`h2`,{className:`font-heading text-xl font-semibold tracking-tight sm:text-2xl`,children:`Community Templates`}),(0,B.jsx)(`p`,{className:`max-w-xl text-sm leading-relaxed text-muted-foreground`,children:`Share your industrial templates with the Miravo community. Publish custom templates, discover configurations from other engineers, and fork them as your starting point.`}),(0,B.jsx)(`div`,{children:(0,B.jsx)(I,{variant:`outline`,className:`community-teaser-soon border-primary/35 bg-primary/5 text-[10px] text-primary`,children:`Coming Soon`})})]}),(0,B.jsx)(`div`,{className:`order-1 flex justify-center lg:order-2 lg:justify-end`,children:(0,B.jsxs)(`div`,{className:`community-teaser-module relative flex w-full max-w-[14rem] flex-col items-center justify-center gap-3 border border-primary/15 bg-muted/15 py-8 sm:max-w-[15.5rem] sm:py-10`,"aria-hidden":!0,children:[(0,B.jsx)(`div`,{className:`community-teaser-icon-ring relative z-[1] flex size-[4.25rem] items-center justify-center rounded-[var(--miravo-radius-tight)] border border-primary/35 bg-gradient-to-br from-primary/18 to-primary/5`,children:(0,B.jsx)(M,{className:`size-9 text-primary`,"aria-hidden":!0})}),(0,B.jsx)(`span`,{className:`blueprint-stat relative z-[1] text-[9px] tracking-[0.18em] text-muted-foreground`,children:`AWAITING SIGNAL`}),(0,B.jsx)(`span`,{className:`blueprint-stat relative z-[1] text-[9px] text-muted-foreground`,children:`Uplink idle`})]})})]})})})}),(0,B.jsx)(_,{open:w!==null,onOpenChange:e=>{e||T(null)},children:(0,B.jsxs)(m,{className:`min-w-0 sm:max-w-md`,children:[(0,B.jsxs)(f,{children:[(0,B.jsx)(h,{children:`Launch template?`}),(0,B.jsx)(g,{children:q!==null&&(0,B.jsxs)(B.Fragment,{children:[`This loads`,` `,(0,B.jsx)(`span`,{className:`font-medium text-foreground`,children:y(q.name)}),` `,`into the running factory.`]})})]}),(0,B.jsxs)(p,{children:[(0,B.jsx)(v,{variant:`outline`,disabled:b!==null,onClick:()=>T(null),children:`Cancel`}),(0,B.jsx)(v,{disabled:b!==null||q===null,onClick:async()=>{q!==null&&await ae(q.id)&&T(null)},children:b===q?.id?`Launching...`:`Launch`})]})]})}),(0,B.jsx)(C,{templateId:D?.id??null,onClose:()=>O(null)})]})}var U=(0,z.memo)(function({template:e,launching:t,loaded:n,onInspect:r,onLaunch:i}){return(0,B.jsxs)(`div`,{className:S(k,`flex flex-col gap-4 p-5`),children:[(0,B.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,B.jsx)(`div`,{className:`flex size-10 shrink-0 items-center justify-center rounded-[var(--miravo-radius-stadium-sm)] bg-primary/10 text-primary`,children:(0,B.jsx)(w,{id:e.id,className:`size-5`})}),(0,B.jsxs)(`div`,{className:`min-w-0 flex flex-col gap-1`,children:[(0,B.jsx)(`span`,{className:`font-heading text-sm font-semibold uppercase tracking-wide`,children:y(e.name)}),(0,B.jsx)(`p`,{className:`line-clamp-3 text-xs leading-relaxed text-foreground/75`,children:e.description??`Industrial template.`}),(0,B.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:e.id})]})]}),(0,B.jsx)(`div`,{className:`px-3 py-2`,children:(0,B.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:e.models.map(e=>(0,B.jsx)(I,{variant:`outline`,className:`h-auto min-h-5 rounded-[var(--miravo-radius-tight)] px-1.5 py-0 font-mono text-[10px] font-normal text-primary`,children:e},e))})}),(0,B.jsxs)(`div`,{className:`mt-auto flex flex-wrap items-center gap-4 font-mono text-[11px] text-muted-foreground`,children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`span`,{className:`text-foreground`,children:e.assetCount}),` assets`]}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`span`,{className:`text-foreground`,children:e.models.length}),` models`]}),e.memberCount>0&&(0,B.jsxs)(`span`,{children:[`~`,(0,B.jsx)(`span`,{className:`text-foreground`,children:W(e.memberCount)}),` tags/cycle`]}),n&&(0,B.jsx)(I,{variant:`outline`,className:`ml-auto shrink-0 border-success/40 bg-success/10 font-sans text-[10px] font-medium uppercase tracking-wide text-success`,children:`Loaded`}),(0,B.jsx)(I,{variant:`outline`,className:S(`shrink-0 font-sans text-[10px] font-medium uppercase tracking-wide`,!n&&`ml-auto`,F(e.source)),children:N(e.source)})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2 border-t border-border/30 pt-3`,children:[(0,B.jsxs)(v,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>r(e),className:D,children:[(0,B.jsx)(T,{className:`size-3.5`,"aria-hidden":!0}),`Inspect`]}),n?(0,B.jsxs)(d,{to:`/`,className:S(b({size:`sm`}),`ml-auto`),children:[(0,B.jsx)(R,{className:`mr-1 size-3`,"aria-hidden":!0}),`Open`]}):(0,B.jsxs)(v,{size:`sm`,className:`ml-auto`,disabled:t,onClick:()=>i(e.id),children:[(0,B.jsx)(O,{className:`mr-1 size-3`}),t?`...`:`Launch`]})]})]})});function W(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function G({value:e,counts:t,onChange:n}){return(0,B.jsx)(`div`,{className:`flex flex-wrap items-center gap-1.5`,role:`radiogroup`,"aria-label":`Filter by source`,children:[{id:`all`,label:`All`},...V.map(e=>({id:e,label:N(e)}))].map(r=>{let i=e===r.id,a=t[r.id]??0,o=r.id!==`all`&&a===0;return(0,B.jsxs)(`label`,{className:S(`inline-flex h-7 items-center gap-1.5 rounded-[var(--miravo-radius-pill)] border px-3 text-xs font-medium transition-colors`,i?`border-primary/60 bg-primary/15 text-primary`:`border-border/60 bg-card/30 text-muted-foreground hover:border-border hover:bg-muted/40 hover:text-foreground`,o?`cursor-not-allowed opacity-40 hover:border-border/60 hover:bg-card/30 hover:text-muted-foreground`:`cursor-pointer`),children:[(0,B.jsx)(`input`,{type:`radio`,name:`catalog-source-filter`,value:r.id,checked:i,disabled:o,onChange:()=>n(r.id),className:`sr-only`}),(0,B.jsx)(`span`,{children:r.label}),(0,B.jsx)(`span`,{className:`font-mono text-[10px] opacity-70`,children:a})]},r.id)})})}export{R as n,H as t};
1
+ import{a as e}from"./rolldown-runtime-COnpUsM8.js";import{c as t}from"./vendor-charts-95ykyDlI.js";import{ot as n}from"./vendor-ui-D8j69UH4.js";import{S as r,o as i,v as a,vt as o}from"./api-GfuYYI6q.js";import{t as s}from"./useQuery-BfWNkVkT.js";import{t as c}from"./proxy-CWZabK8f.js";import{t as l}from"./AnimatePresence-BSSlw02V.js";import{c as u,n as d}from"./chunk-OE4NN4TA-DBWZidbW.js";import{a as f,c as ee,i as p,n as m,o as h,r as g,t as _}from"./dialog-B5PqrKVw.js";import{C as v,S as te,u as y,w as b}from"./format-Bx7DF-TB.js";import{n as x,t as S}from"./utils-XFKvwlFT.js";import{n as C,t as w}from"./catalog-template-icons-DvKspieo.js";import{r as T}from"./source-host-miravo-B8eM2IHw.js";import{a as E,i as D,l as O,o as k,t as A}from"./use-engine-command-mutation-CTbPh58S.js";import{t as j}from"./query-fetch-error-CWLZA2L5.js";import{t as M}from"./rocket-KZ5oHK1G.js";import{i as ne,n as N,r as P,t as F}from"./catalog-source-B4L5N-a1.js";import{t as I}from"./badge-Bk1DaL6C.js";import{n as L}from"./get-error-message-DJGhcwLn.js";var R=x(`layout-dashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),z=e(t(),1),B=n(),V=[`builtin`,`personal`];function H(){let[e,t]=(0,z.useState)(``),[n,d]=(0,z.useState)(`all`),[b,x]=(0,z.useState)(null),[w,T]=(0,z.useState)(null),[D,O]=(0,z.useState)(null),k=(0,z.useRef)(null),N=A(),F=u(),R=o(e=>e.templates),H=(0,z.useMemo)(()=>new Set(R.map(e=>e.templateId)),[R]);(0,z.useEffect)(()=>{let e=e=>{if(e.key!==`/`||e.metaKey||e.ctrlKey||e.altKey)return;let t=e.target.tagName;t===`INPUT`||t===`TEXTAREA`||t===`SELECT`||(e.preventDefault(),k.current?.focus())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]);let W=s({queryKey:a.catalog.templates(),queryFn:()=>i(`/catalog/templates`,r.catalogTemplates)}),K=W.data??[],q=w===null?null:K.find(e=>e.id===w)??null,J=W.isPending&&!W.data,Y=W.isError&&!W.data,X=W.isError&&!!W.data,Z=L(W.error,`Failed to load templates.`),re=(0,z.useCallback)(e=>{O(e)},[]),ie=(0,z.useCallback)(e=>{T(e)},[]),ae=async e=>{x(e);try{return await N.mutateAsync({type:`loadTemplate`,templatePath:e}),ee(`Next: connect a client`),F(`/?highlight=${encodeURIComponent(e)}`),!0}catch{return!1}finally{x(null)}},oe=(0,z.useMemo)(()=>{let e={all:K.length};for(let t of V)e[t]=0;for(let t of K){let n=P(t.source);e[n]=(e[n]??0)+1}return e},[K]),Q=e.toLowerCase(),$=K.filter(e=>n===`all`||P(e.source)===n).filter(e=>Q?e.name.toLowerCase().includes(Q)||e.id.toLowerCase().includes(Q)||(e.description?.toLowerCase().includes(Q)??!1):!0);return(0,B.jsxs)(`div`,{className:`@container/templates mx-auto flex w-full max-w-screen-2xl flex-col gap-5 p-4 sm:gap-6 sm:p-6`,children:[(0,B.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,B.jsx)(`h1`,{className:`font-heading text-2xl font-semibold tracking-tight`,children:`Template Catalog`}),(0,B.jsx)(I,{variant:`outline`,className:`text-xs`,children:Y?(0,B.jsx)(`span`,{className:`text-destructive`,children:`Unavailable`}):J&&K.length===0?(0,B.jsx)(B.Fragment,{children:`Loading...`}):(0,B.jsxs)(B.Fragment,{children:[new Set(K.map(e=>e.id)).size,` templates`]})})]}),(0,B.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Choose a template to launch a realistic industrial system. Each template includes pre-configured asset models with realistic physics, lifecycle degradation, and fault modes.`})]}),Y&&(0,B.jsx)(j,{message:Z,onRetry:()=>void W.refetch(),isRetrying:W.isFetching}),X&&(0,B.jsx)(j,{message:`${Z} Showing cached templates.`,onRetry:()=>void W.refetch(),isRetrying:W.isFetching}),!Y&&(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,B.jsxs)(`div`,{className:`relative max-w-xs flex-1 min-w-[14rem]`,children:[(0,B.jsx)(ne,{className:`absolute left-2.5 top-2.5 size-4 text-muted-foreground`}),(0,B.jsx)(te,{ref:k,placeholder:`Filter templates...`,value:e,onChange:e=>t(e.target.value),className:`pl-9 pr-7`}),!e&&(0,B.jsx)(`kbd`,{className:`pointer-events-none absolute top-1/2 right-2 -translate-y-1/2 rounded-[var(--miravo-radius-tight)] border border-border bg-muted px-1 font-mono text-[10px] text-muted-foreground`,children:`/`})]}),(0,B.jsx)(G,{value:n,counts:oe,onChange:d})]}),(0,B.jsx)(`div`,{className:`grid grid-cols-1 gap-4 @[720px]/templates:grid-cols-2`,"aria-busy":J&&!Y,children:Y?null:(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(l,{children:$.map((e,t)=>(0,B.jsx)(c.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},exit:{opacity:0,scale:.96,transition:{duration:.15}},transition:{type:`spring`,stiffness:380,damping:30,delay:t*.04},className:`grid`,children:(0,B.jsx)(U,{template:e,launching:b===e.id,loaded:H.has(e.id),onInspect:re,onLaunch:ie})},`${e.source}:${e.id}`))}),$.length===0&&K.length>0&&(0,B.jsx)(`p`,{className:`col-span-full py-8 text-center text-sm text-muted-foreground`,children:`No templates match the current filters.`})]})}),K.length>0&&(0,B.jsx)(`div`,{className:S(E,`p-0`),children:(0,B.jsx)(`div`,{className:`community-teaser relative overflow-hidden rounded-[inherit]`,children:(0,B.jsx)(`div`,{className:`relative z-10 mx-auto max-w-3xl px-5 py-10 sm:px-10 sm:py-12`,children:(0,B.jsxs)(`div`,{className:`grid items-center gap-10 lg:grid-cols-[minmax(0,1fr)_minmax(0,17rem)]`,children:[(0,B.jsxs)(`div`,{className:`order-2 flex min-w-0 flex-col gap-4 lg:order-1`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-3 gap-y-1`,children:[(0,B.jsx)(`p`,{className:`blueprint-title text-primary`,children:`Future channel`}),(0,B.jsx)(`span`,{className:`blueprint-stat text-[10px] text-muted-foreground`,children:`MIRAVO_REGISTRY · NOT_CONNECTED`})]}),(0,B.jsx)(`h2`,{className:`font-heading text-xl font-semibold tracking-tight sm:text-2xl`,children:`Community Templates`}),(0,B.jsx)(`p`,{className:`max-w-xl text-sm leading-relaxed text-muted-foreground`,children:`Share your industrial templates with the Miravo community. Publish custom templates, discover configurations from other engineers, and fork them as your starting point.`}),(0,B.jsx)(`div`,{children:(0,B.jsx)(I,{variant:`outline`,className:`community-teaser-soon border-primary/35 bg-primary/5 text-[10px] text-primary`,children:`Coming Soon`})})]}),(0,B.jsx)(`div`,{className:`order-1 flex justify-center lg:order-2 lg:justify-end`,children:(0,B.jsxs)(`div`,{className:`community-teaser-module relative flex w-full max-w-[14rem] flex-col items-center justify-center gap-3 border border-primary/15 bg-muted/15 py-8 sm:max-w-[15.5rem] sm:py-10`,"aria-hidden":!0,children:[(0,B.jsx)(`div`,{className:`community-teaser-icon-ring relative z-[1] flex size-[4.25rem] items-center justify-center rounded-[var(--miravo-radius-tight)] border border-primary/35 bg-gradient-to-br from-primary/18 to-primary/5`,children:(0,B.jsx)(M,{className:`size-9 text-primary`,"aria-hidden":!0})}),(0,B.jsx)(`span`,{className:`blueprint-stat relative z-[1] text-[9px] tracking-[0.18em] text-muted-foreground`,children:`AWAITING SIGNAL`}),(0,B.jsx)(`span`,{className:`blueprint-stat relative z-[1] text-[9px] text-muted-foreground`,children:`Uplink idle`})]})})]})})})}),(0,B.jsx)(_,{open:w!==null,onOpenChange:e=>{e||T(null)},children:(0,B.jsxs)(m,{className:`min-w-0 sm:max-w-md`,children:[(0,B.jsxs)(f,{children:[(0,B.jsx)(h,{children:`Launch template?`}),(0,B.jsx)(g,{children:q!==null&&(0,B.jsxs)(B.Fragment,{children:[`This loads`,` `,(0,B.jsx)(`span`,{className:`font-medium text-foreground`,children:y(q.name)}),` `,`into the running factory.`]})})]}),(0,B.jsxs)(p,{children:[(0,B.jsx)(v,{variant:`outline`,disabled:b!==null,onClick:()=>T(null),children:`Cancel`}),(0,B.jsx)(v,{disabled:b!==null||q===null,onClick:async()=>{q!==null&&await ae(q.id)&&T(null)},children:b===q?.id?`Launching...`:`Launch`})]})]})}),(0,B.jsx)(C,{templateId:D?.id??null,onClose:()=>O(null)})]})}var U=(0,z.memo)(function({template:e,launching:t,loaded:n,onInspect:r,onLaunch:i}){return(0,B.jsxs)(`div`,{className:S(k,`flex flex-col gap-4 p-5`),children:[(0,B.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,B.jsx)(`div`,{className:`flex size-10 shrink-0 items-center justify-center rounded-[var(--miravo-radius-stadium-sm)] bg-primary/10 text-primary`,children:(0,B.jsx)(w,{id:e.id,className:`size-5`})}),(0,B.jsxs)(`div`,{className:`min-w-0 flex flex-col gap-1`,children:[(0,B.jsx)(`span`,{className:`font-heading text-sm font-semibold uppercase tracking-wide`,children:y(e.name)}),(0,B.jsx)(`p`,{className:`line-clamp-3 text-xs leading-relaxed text-foreground/75`,children:e.description??`Industrial template.`}),(0,B.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:e.id})]})]}),(0,B.jsx)(`div`,{className:`px-3 py-2`,children:(0,B.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:e.models.map(e=>(0,B.jsx)(I,{variant:`outline`,className:`h-auto min-h-5 rounded-[var(--miravo-radius-tight)] px-1.5 py-0 font-mono text-[10px] font-normal text-primary`,children:e},e))})}),(0,B.jsxs)(`div`,{className:`mt-auto flex flex-wrap items-center gap-4 font-mono text-[11px] text-muted-foreground`,children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`span`,{className:`text-foreground`,children:e.assetCount}),` assets`]}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`span`,{className:`text-foreground`,children:e.models.length}),` models`]}),e.memberCount>0&&(0,B.jsxs)(`span`,{children:[`~`,(0,B.jsx)(`span`,{className:`text-foreground`,children:W(e.memberCount)}),` tags/cycle`]}),n&&(0,B.jsx)(I,{variant:`outline`,className:`ml-auto shrink-0 border-success/40 bg-success/10 font-sans text-[10px] font-medium uppercase tracking-wide text-success`,children:`Loaded`}),(0,B.jsx)(I,{variant:`outline`,className:S(`shrink-0 font-sans text-[10px] font-medium uppercase tracking-wide`,!n&&`ml-auto`,F(e.source)),children:N(e.source)})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2 border-t border-border/30 pt-3`,children:[(0,B.jsxs)(v,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>r(e),className:D,children:[(0,B.jsx)(T,{className:`size-3.5`,"aria-hidden":!0}),`Inspect`]}),n?(0,B.jsxs)(d,{to:`/`,className:S(b({size:`sm`}),`ml-auto`),children:[(0,B.jsx)(R,{className:`mr-1 size-3`,"aria-hidden":!0}),`Open`]}):(0,B.jsxs)(v,{size:`sm`,className:`ml-auto`,disabled:t,onClick:()=>i(e.id),children:[(0,B.jsx)(O,{className:`mr-1 size-3`}),t?`...`:`Launch`]})]})]})});function W(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function G({value:e,counts:t,onChange:n}){return(0,B.jsx)(`div`,{className:`flex flex-wrap items-center gap-1.5`,role:`radiogroup`,"aria-label":`Filter by source`,children:[{id:`all`,label:`All`},...V.map(e=>({id:e,label:N(e)}))].map(r=>{let i=e===r.id,a=t[r.id]??0,o=r.id!==`all`&&a===0;return(0,B.jsxs)(`label`,{className:S(`inline-flex h-7 items-center gap-1.5 rounded-[var(--miravo-radius-pill)] border px-3 text-xs font-medium transition-colors`,i?`border-primary/60 bg-primary/15 text-primary`:`border-border/60 bg-card/30 text-muted-foreground hover:border-border hover:bg-muted/40 hover:text-foreground`,o?`cursor-not-allowed opacity-40 hover:border-border/60 hover:bg-card/30 hover:text-muted-foreground`:`cursor-pointer`),children:[(0,B.jsx)(`input`,{type:`radio`,name:`catalog-source-filter`,value:r.id,checked:i,disabled:o,onChange:()=>n(r.id),className:`sr-only`}),(0,B.jsx)(`span`,{children:r.label}),(0,B.jsx)(`span`,{className:`font-mono text-[10px] opacity-70`,children:a})]},r.id)})})}export{R as n,H as t};
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-COnpUsM8.js";import{c as t}from"./vendor-charts-95ykyDlI.js";import{ot as n}from"./vendor-ui-D8j69UH4.js";import{S as r,o as i,ot as a,v as o}from"./api-BG2sUkwk.js";import{t as s}from"./useQuery-Cl48zZ73.js";import{t as c}from"./proxy-CWZabK8f.js";import{t as l}from"./AnimatePresence-BSSlw02V.js";import{c as u}from"./chunk-OE4NN4TA-DBWZidbW.js";import{t as d}from"./shallow-Cin0mLuv.js";import{c as f,h as p,s as m}from"./format-Bx7DF-TB.js";import{n as h,t as g}from"./utils-XFKvwlFT.js";import{t as _}from"./chevron-down-x70Pto6j.js";import{t as v}from"./chevron-right-CrNKVFcI.js";import{t as y}from"./copy-button-CSUP1VjU.js";import{i as b,n as x,t as S}from"./registry-BXGfJ4np.js";import{a as ee}from"./use-engine-command-mutation-DrMOfYty.js";import{t as C}from"./query-fetch-error-CWLZA2L5.js";import{c as te,d as w,f as ne,l as T,s as E,t as D,u as O}from"./export-tab-BsV7px7m.js";import{t as k}from"./badge-Bk1DaL6C.js";import{n as A}from"./get-error-message-C9VW9IZB.js";import{a as re,c as ie,i as ae,n as oe,o as se,s as ce,t as le}from"./status-kit-pFRjEjVU.js";import{i as j,n as M,r as N,t as P}from"./tabs-Ch_VG8_S.js";var F=h(`building`,[[`path`,{d:`M12 10h.01`,key:`1nrarc`}],[`path`,{d:`M12 14h.01`,key:`1etili`}],[`path`,{d:`M12 6h.01`,key:`1vi96p`}],[`path`,{d:`M16 10h.01`,key:`1m94wz`}],[`path`,{d:`M16 14h.01`,key:`1gbofw`}],[`path`,{d:`M16 6h.01`,key:`1x0f13`}],[`path`,{d:`M8 10h.01`,key:`19clt8`}],[`path`,{d:`M8 14h.01`,key:`6423bh`}],[`path`,{d:`M8 6h.01`,key:`1dz90k`}],[`path`,{d:`M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3`,key:`cabbwy`}],[`rect`,{x:`4`,y:`2`,width:`16`,height:`20`,rx:`2`,key:`1uxh74`}]]),I=h(`droplet`,[[`path`,{d:`M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z`,key:`c7niix`}]]),L=h(`flask-conical`,[[`path`,{d:`M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2`,key:`18mbvz`}],[`path`,{d:`M6.453 15h11.094`,key:`3shlmq`}],[`path`,{d:`M8.5 2h7`,key:`csnxdl`}]]),R=h(`folder`,[[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]),z=h(`layout-grid`,[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`3`,rx:`1`,key:`6d4xhi`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`14`,rx:`1`,key:`nxv5o0`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}]]),B=h(`layout-template`,[[`rect`,{width:`18`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`f1a2em`}],[`rect`,{width:`9`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`jqznyg`}],[`rect`,{width:`5`,height:`7`,x:`16`,y:`14`,rx:`1`,key:`q5h2i8`}]]),V=h(`list`,[[`path`,{d:`M3 5h.01`,key:`18ugdj`}],[`path`,{d:`M3 12h.01`,key:`nlz23k`}],[`path`,{d:`M3 19h.01`,key:`noohij`}],[`path`,{d:`M8 5h13`,key:`1pao27`}],[`path`,{d:`M8 12h13`,key:`1za7za`}],[`path`,{d:`M8 19h13`,key:`m83p4d`}]]),H=h(`thermometer-sun`,[[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 8a4 4 0 0 0-1.645 7.647`,key:`wz5p04`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 14.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0z`,key:`yu0u2z`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}]]),U=h(`zap`,[[`path`,{d:`M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z`,key:`1xq2db`}]]),W=e(t(),1),G=n(),K=20,ue=14,q=`flex w-3.5 shrink-0 items-center justify-center`;function de({asset:e,depth:t,area:n,line:r,detail:i}){let[a,o]=(0,W.useState)(!1),[s,c]=(0,W.useState)(!1),l=a?e.tags:e.tags.slice(0,10),u=e.tags.length-10;return(0,G.jsxs)(G.Fragment,{children:[l.map(a=>(0,G.jsx)(J,{member:a,depth:t,area:n,line:r,assetId:e.id,detail:i},a.name)),!a&&u>0&&(0,G.jsxs)(`button`,{type:`button`,className:`flex min-h-11 w-full items-center gap-1.5 border-t border-border/30 py-2 text-left font-mono text-xs text-muted-foreground hover:bg-muted/40 touch-manipulation sm:min-h-0 sm:py-1.5`,style:{paddingLeft:`${t*14+K}px`},onClick:()=>o(!0),children:[(0,G.jsx)(`span`,{className:q,"aria-hidden":!0}),(0,G.jsxs)(`span`,{children:[`+`,u,` more tags`]})]}),e.properties.length>0&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`button`,{type:`button`,className:`flex min-h-11 w-full items-center gap-1.5 border-t border-border/30 py-2 text-left font-mono text-xs text-muted-foreground hover:bg-muted/40 touch-manipulation sm:min-h-0 sm:py-1.5`,style:{paddingLeft:`${t*14+K}px`},onClick:()=>c(e=>!e),children:[(0,G.jsx)(`span`,{className:q,"aria-hidden":!0,children:s?(0,G.jsx)(_,{className:`size-3.5 opacity-60`,"aria-hidden":!0}):(0,G.jsx)(v,{className:`size-3.5 opacity-60`,"aria-hidden":!0})}),(0,G.jsxs)(`span`,{children:[e.properties.length,` properties`]})]}),s&&e.properties.map(a=>(0,G.jsx)(J,{member:a,depth:t,area:n,line:r,assetId:e.id,detail:i},a.name))]})]})}function J({member:e,depth:t,area:n,line:r,assetId:i,detail:a}){let o=e.kind===`property`,s=t*14+K+(o?ue:0),c=a.namespace,l=[c?.enterprise?`${c.enterprise}/${c.site??``}`:c?.prefix??``,n,r,i,e.name].filter(Boolean).join(`/`);return(0,G.jsx)(y,{value:l,label:`Copy UNS path`,successMessage:`UNS path copied`,successDescription:l,tooltipSide:`top`,render:()=>(0,G.jsxs)(`button`,{type:`button`,className:g(`flex w-full cursor-pointer flex-col gap-1 border-t border-border/25 py-2 text-left font-mono text-xs hover:bg-muted/35 touch-manipulation sm:min-h-0 sm:flex-row sm:items-center sm:gap-1.5 sm:py-1.5`,o&&`opacity-65`),style:{paddingLeft:`${s}px`},children:[(0,G.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,G.jsx)(`span`,{className:q,"aria-hidden":!0,children:(0,G.jsx)(`span`,{className:g(`size-1 rounded-full ring-1 ring-border/50`,o?`bg-muted-foreground/25`:`bg-primary/50`)})}),(0,G.jsx)(`span`,{title:e.name,className:g(`min-w-0 truncate`,o?`text-muted-foreground`:`text-foreground`),children:f(e.name)}),o&&(0,G.jsx)(`span`,{className:`shrink-0 rounded-[var(--miravo-radius-tight)] bg-muted/60 px-1 py-px text-[10px] text-muted-foreground`,children:`PROP`})]}),(0,G.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-2 gap-y-0.5 pl-0 sm:ml-auto sm:flex-1 sm:justify-end sm:pl-0 sm:pr-1`,children:[(0,G.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:e.dataType}),e.unit&&(0,G.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:e.unit}),e.euRange&&(0,G.jsxs)(`span`,{className:`ml-auto shrink-0 tabular-nums text-muted-foreground`,children:[`[`,e.euRange[0],`–`,e.euRange[1],`]`]})]})]})})}function Y({depth:e,label:t,labelTitle:n,tag:r,tagKind:i,subtitle:a,subtitleTitle:o,count:s,expanded:c,onToggle:l,hasChildren:u}){let d=c?_:v,f=i===`area`?`text-primary`:`text-foreground`;return(0,G.jsxs)(`button`,{type:`button`,className:`flex min-h-11 w-full flex-col gap-1 border-t border-border/35 py-2 pr-2 text-left text-xs transition-colors touch-manipulation first:border-t-0 hover:bg-muted/40 sm:min-h-0 sm:flex-row sm:flex-wrap sm:items-center sm:gap-1.5 sm:gap-y-0 sm:py-1.5`,style:{paddingLeft:`${12+e*14}px`},onClick:l,children:[(0,G.jsxs)(`div`,{className:`flex min-w-0 w-full items-center gap-1.5 sm:w-auto sm:flex-1 sm:flex-wrap sm:items-center`,children:[u?(0,G.jsx)(d,{className:`size-3.5 shrink-0 text-muted-foreground`,"aria-hidden":!0}):(0,G.jsx)(`span`,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),(0,G.jsx)(`span`,{title:n??void 0,className:g(`min-w-0 flex-1 truncate font-medium`,f),children:t}),(0,G.jsx)(`span`,{className:`shrink-0 text-[10px] tracking-wide text-muted-foreground uppercase`,children:r}),a&&(0,G.jsx)(`span`,{title:o??void 0,className:`hidden min-w-0 max-w-[min(11rem,38vw)] shrink truncate font-mono text-xs text-muted-foreground sm:inline`,children:a}),s!==void 0&&(0,G.jsx)(`span`,{className:`ml-auto shrink-0 tabular-nums text-xs text-muted-foreground`,children:s})]}),a&&(0,G.jsx)(`span`,{title:o??void 0,className:`min-w-0 truncate pl-7 font-mono text-xs text-muted-foreground sm:hidden`,children:a})]})}function fe(e){let t=e.split(/[-_]/).filter(e=>e.length>0);return t[t.length-1]??e}function pe(e,t,n){let r=[];for(let i of e){let e=fe(i.model),a=t.get(i.model),o=[],s=[];if(a)for(let[e,t]of Object.entries(a.members)){let n={name:e,kind:t.kind,dataType:t.dataType,unit:t.unit,euRange:t.euRange};t.kind===`property`?s.push(n):o.push(n)}for(let t=0;t<i.count;t++){let t=(n.get(i.model)??0)+1;n.set(i.model,t),r.push({id:`${e}-${String(t).padStart(3,`0`)}`,model:i.model,tags:o,properties:s})}}return r}function me({detail:e}){let[t,n]=(0,W.useState)(new Set),a=(0,W.useRef)(null),c=(0,W.useMemo)(()=>[...new Set(e.models)],[e.models]),l=c.join(`,`),u=s({queryKey:o.catalog.modelSchemasBatch(l),queryFn:async()=>Promise.all(c.map(e=>i(`/catalog/models/${e}`,r.catalogModelDetail)))}),d=u.isPending&&!u.data,f=(0,W.useMemo)(()=>{let e=new Map;if(!u.data)return e;for(let[t,n]of u.data.entries())e.set(c[t],n);return e},[u.data,c]),h=(0,W.useMemo)(()=>{let t=new Map,n=new Map;for(let r of e.topology)for(let e of r.lines)n.set(`${r.name}/${e.name}`,pe(e.assets,f,t));return n},[e.topology,f]);(0,W.useEffect)(()=>{if(d)return;let t=e.name;if(a.current===t)return;let r=new Set;for(let t of e.topology){r.add(`area:${t.name}`);for(let e of t.lines)r.add(`line:${t.name}/${e.name}`)}outer:for(let t of e.topology)for(let e of t.lines){let n=(h.get(`${t.name}/${e.name}`)??[])[0];if(n){r.add(`inst:${t.name}/${e.name}/${n.id}`);break outer}}n(r),a.current=t},[d,e.name,e.topology,h]);let g=(0,W.useCallback)(e=>{n(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]);return d?null:u.isError&&!u.data?(0,G.jsx)(C,{message:A(u.error,`Failed to load model schemas.`),onRetry:()=>void u.refetch(),isRetrying:u.isFetching&&!u.isPending}):(0,G.jsx)(`div`,{className:`overflow-hidden rounded-[var(--miravo-radius-stadium-sm)] border border-border/50 py-2 pl-1 pr-2 touch-manipulation sm:py-2.5 sm:pl-1.5 sm:pr-2.5`,children:e.topology.map(n=>{let r=`area:${n.name}`,i=t.has(r);return(0,G.jsxs)(`div`,{children:[(0,G.jsx)(Y,{depth:0,label:p(n.name),labelTitle:n.name,tag:`AREA`,tagKind:`area`,expanded:i,onToggle:()=>g(r),hasChildren:!0}),i&&n.lines.map(r=>{let i=`line:${n.name}/${r.name}`,a=t.has(i),o=h.get(`${n.name}/${r.name}`)??[];return(0,G.jsxs)(`div`,{children:[(0,G.jsx)(Y,{depth:1,label:p(r.name),labelTitle:r.name,tag:`LINE`,tagKind:`line`,count:o.length,expanded:a,onToggle:()=>g(i),hasChildren:!0}),a&&o.map(i=>{let a=`inst:${n.name}/${r.name}/${i.id}`,o=t.has(a);return(0,G.jsxs)(`div`,{children:[(0,G.jsx)(Y,{depth:2,label:m(i.id),labelTitle:i.id,tag:`INST`,tagKind:`inst`,subtitle:p(i.model),subtitleTitle:i.model,count:i.tags.length+i.properties.length,expanded:o,onToggle:()=>g(a),hasChildren:i.tags.length+i.properties.length>0}),o&&(0,G.jsx)(de,{asset:i,depth:3,area:n.name,line:r.name,detail:e})]},i.id)})]},r.name)})]},n.name)})})}var X=`Other assets`;function he(e,t){let n=Math.abs(e)>=100?0:Math.abs(e)>=10?1:2;return`${e.toFixed(n)} ${t}`}function Z(e){return e.length>=3?e.at(-3)??X:X}function ge(e){let t=new Set(e.assetIds),n=new Map(e.lines.flatMap(e=>e.stations.filter(e=>t.has(e.id)).map(e=>[e.id,e]))),r=e.assets.filter(e=>t.has(e.id)),i=new Map;for(let t of r){let r=e.memberValues.get(t.id),a=t.activeFaults.length>0,o=n.get(t.id),s=r?.get(`availability_state`)?.value,c=r?.get(`run_command`)?.value,l=o?.state??`running`;a?l=`fault`:!o&&typeof s==`string`?l=s:!o&&c!==void 0&&Number(c)===0&&(l=`stopped`);let u=ie(e.schemas.get(t.model),1)[0],d=u?r?.get(u.member)?.value:void 0,f={id:t.id,tone:se(l,a||l===`faulted`),state:re(l),reading:u&&typeof d==`number`?he(d,u.unit):null},p=Z(t.browsePath);i.set(p,[...i.get(p)??[],f])}let a=[...i.values()].flat(),o=a.filter(e=>e.tone===`fault`).length,s=e.lines.filter(e=>e.stations.some(e=>n.has(e.id))),c;if(s.length>0){let e=s.reduce((e,t)=>e+(t.stations.at(-1)?.good??0),0),t=s.reduce((e,t)=>e+t.stations.reduce((e,t)=>e+t.scrap,0),0);c=[{label:`Shipped`,value:String(e)},{label:`Yield`,value:e+t>0?`${(e/(e+t)*100).toFixed(1)}%`:`–`},{label:`Faulted`,value:String(o)}]}else{let e=a.filter(e=>e.state===`stopped`).length;c=[{label:`Online`,value:String(a.length-o-e)},{label:`Stopped`,value:String(e)},{label:`Faulted`,value:String(o)}]}return{kpis:c,areas:[...i].map(([e,t])=>({name:e,rows:t}))}}function Q({templateId:e,assetIds:t,schemas:n}){let r=u(),{assets:i,lines:o,memberValues:s}=a(d(e=>({assets:e.assets,lines:e.lines,memberValues:e.memberValues}))),c=ge({assetIds:t,assets:i,lines:o,memberValues:s,schemas:n}),l=x(e);return(0,G.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[(0,G.jsx)(`div`,{className:`grid grid-cols-3 gap-3 px-4 pt-4 pb-5`,children:c.kpis.map(e=>(0,G.jsx)(le,{label:e.label,value:e.value},e.label))}),c.areas.map(t=>(0,G.jsx)(ae,{title:t.name,note:`${t.rows.length} assets`,children:(0,G.jsx)(`ul`,{className:`-mx-2 flex flex-col`,children:t.rows.map(t=>(0,G.jsx)(oe,{tone:t.tone,name:t.id,note:t.reading?`${t.state} · ${t.reading}`:t.state,onSelect:l?()=>void r(`${S(e)}?asset=${encodeURIComponent(t.id)}`):void 0},t.id))})},t.name))]})}function _e(e){return e.lines.reduce((e,t)=>e+t.assets.reduce((e,t)=>e+t.count,0),0)}function ve(e){return Object.values(e.members).filter(e=>e.kind!==`property`).length}function ye(e,t){let n=0;for(let r of e.topology)for(let e of r.lines)for(let r of e.assets){let e=t.get(r.model),i=e?ve(e):0;n+=r.count*i}return n}var $=`min-h-10 px-2 py-1 text-xs text-foreground/82 after:bottom-[-3px] data-active:text-foreground sm:min-h-0 sm:px-2.5 sm:py-1`;function be({templateId:e,onClose:t,actions:n,live:a,fallbackTitle:l}){let[u,d]=(0,W.useState)(new Set),f=s({queryKey:o.catalog.templateDetail(e??``),queryFn:()=>i(`/catalog/templates/${e}`,r.catalogTemplateDetail),enabled:e!==null}),p=f.data,m=f.isPending&&!p,h=f.isError,g=A(f.error,`Failed to load template.`),_=p?.models??a?.models??[],v=ce(_),y=(0,W.useMemo)(()=>{let e=new Map;for(let[t,n]of(v.data??[]).entries())e.set(_[t]??``,n);return e},[_,v.data]),b=(0,W.useMemo)(()=>p&&v.data?ye(p,y):null,[p,v.data,y]);(0,W.useEffect)(()=>{e&&p&&d(new Set(p.topology.map(e=>e.name)))},[e,p]);let x=(0,W.useCallback)(e=>{d(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]);return(0,G.jsx)(E,{open:e!==null,onOpenChange:e=>{e||t()},children:(0,G.jsx)(te,{side:`right`,className:`flex w-full flex-col gap-4 touch-manipulation`,children:m?null:h&&!p&&n?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(O,{className:`gap-2 pb-0 pe-12`,children:[(0,G.jsx)(w,{className:`font-heading text-base uppercase tracking-wide`,children:l}),(0,G.jsx)(`div`,{className:`flex flex-wrap items-center gap-1`,children:n})]}),a&&e?(0,G.jsx)(Q,{templateId:e,assetIds:a.assetIds,schemas:y}):null]}):h&&!p?(0,G.jsx)(`div`,{className:`flex flex-1 flex-col justify-center px-2`,children:(0,G.jsx)(C,{message:g,onRetry:()=>void f.refetch(),isRetrying:f.isFetching})}):p?(0,G.jsxs)(c.div,{initial:{opacity:0},animate:{opacity:1},transition:{duration:.18},className:`flex min-h-0 flex-1 flex-col gap-4`,children:[(0,G.jsxs)(O,{className:`gap-1 pb-0 pe-12`,children:[(0,G.jsx)(w,{className:`font-heading text-base uppercase tracking-wide`,children:p.name}),p.description&&(0,G.jsx)(T,{className:`text-xs leading-relaxed text-foreground/88`,children:p.description}),n?(0,G.jsx)(`div`,{className:`flex flex-wrap items-center gap-1 pt-1`,children:n}):null]}),(0,G.jsxs)(P,{defaultValue:a?`live`:`overview`,className:`flex min-h-0 flex-1 flex-col gap-1 pt-0`,children:[(0,G.jsxs)(N,{variant:`line`,className:`h-8! shrink-0 gap-0.5 border-b-border/60 px-2 py-0.5`,children:[a?(0,G.jsx)(j,{value:`live`,className:$,children:`Live`}):null,(0,G.jsx)(j,{value:`overview`,className:$,children:`Overview`}),(0,G.jsx)(j,{value:`uns`,className:$,children:`UNS`}),(0,G.jsx)(j,{value:`export`,className:$,children:`Export`})]}),a?(0,G.jsx)(M,{value:`live`,className:`flex min-h-0 flex-1 flex-col`,children:(0,G.jsx)(Q,{templateId:p.id,assetIds:a.assetIds,schemas:y})}):null,(0,G.jsx)(M,{value:`overview`,keepMounted:!0,className:`flex min-h-0 flex-1 flex-col`,children:(0,G.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col px-3 pt-0`,children:(0,G.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto pr-2`,children:(0,G.jsxs)(`div`,{className:`flex flex-col gap-2 pb-1 pt-0.5`,children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,G.jsxs)(k,{variant:`outline`,className:`font-mono text-xs`,children:[p.topology.length,` areas`]}),(0,G.jsxs)(k,{variant:`outline`,className:`font-mono text-xs`,children:[p.assetCount,` assets`]}),(0,G.jsxs)(k,{variant:`outline`,className:`font-mono text-xs`,children:[p.models.length,` models`]}),b!==null&&(0,G.jsxs)(k,{variant:`outline`,className:`font-mono text-xs`,children:[b,` tags`]}),p.settings?.tickIntervalMs&&(0,G.jsxs)(k,{variant:`outline`,className:`font-mono text-xs`,children:[`tick `,p.settings.tickIntervalMs,`ms`]}),p.settings?.timeMultiplier&&p.settings.timeMultiplier!==1&&(0,G.jsxs)(k,{variant:`outline`,className:`font-mono text-xs`,children:[p.settings.timeMultiplier,`× speed`]})]}),p.namespace&&(p.namespace.enterprise||p.namespace.site||p.namespace.prefix)&&(0,G.jsxs)(`div`,{className:`min-w-0 overflow-hidden rounded-[var(--miravo-radius-tight)] border border-border/60 px-2.5 py-2`,children:[(0,G.jsx)(`h3`,{className:`font-heading text-xs font-semibold uppercase tracking-[0.12em] text-primary`,children:`Namespace`}),(0,G.jsxs)(`dl`,{className:`mt-1 grid grid-cols-1 gap-x-4 gap-y-1.5 sm:grid-cols-2`,children:[p.namespace.enterprise&&(0,G.jsxs)(`div`,{className:`min-w-0 sm:max-w-[min(100%,16rem)]`,children:[(0,G.jsx)(`dt`,{className:`font-heading text-xs font-medium uppercase tracking-[0.12em] text-muted-foreground`,children:`Enterprise`}),(0,G.jsx)(`dd`,{className:`mt-1 font-mono text-xs leading-snug text-foreground [overflow-wrap:anywhere] break-words`,children:p.namespace.enterprise})]}),p.namespace.site&&(0,G.jsxs)(`div`,{className:`min-w-0 sm:max-w-[min(100%,16rem)]`,children:[(0,G.jsx)(`dt`,{className:`font-heading text-xs font-medium uppercase tracking-[0.12em] text-muted-foreground`,children:`Site`}),(0,G.jsx)(`dd`,{className:`mt-1 font-mono text-xs leading-snug text-foreground [overflow-wrap:anywhere] break-words`,children:p.namespace.site})]}),p.namespace.prefix&&(0,G.jsxs)(`div`,{className:`min-w-0 sm:col-span-2`,children:[(0,G.jsx)(`dt`,{className:`font-heading text-xs font-medium uppercase tracking-[0.12em] text-muted-foreground`,children:`Prefix`}),(0,G.jsx)(`dd`,{className:`mt-1 font-mono text-xs leading-snug text-foreground [overflow-wrap:anywhere] break-words`,children:p.namespace.prefix})]})]})]}),p.topology.map(e=>(0,G.jsx)(xe,{area:e,expanded:u.has(e.name),onToggle:()=>x(e.name)},e.name)),p.settings&&(0,G.jsxs)(`div`,{className:`rounded-[var(--miravo-radius-tight)] border border-border/50 p-2`,children:[(0,G.jsxs)(`div`,{className:`mb-1.5 flex items-center gap-1.5 font-heading text-xs font-semibold uppercase tracking-[0.12em] text-warning`,children:[(0,G.jsx)(ne,{className:`size-3.5`,"aria-hidden":!0}),(0,G.jsx)(`span`,{children:`Settings`})]}),(0,G.jsxs)(`div`,{className:`grid grid-cols-1 gap-1.5 font-mono text-xs sm:grid-cols-2`,children:[(0,G.jsxs)(`div`,{className:`flex flex-col`,children:[(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:`tick interval`}),(0,G.jsxs)(`span`,{className:`text-foreground`,children:[p.settings.tickIntervalMs??1e3,`ms`]})]}),(0,G.jsxs)(`div`,{className:`flex flex-col`,children:[(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:`time multiplier`}),(0,G.jsxs)(`span`,{className:`text-foreground`,children:[p.settings.timeMultiplier??1,`×`]})]})]})]})]})})})}),(0,G.jsx)(M,{value:`uns`,keepMounted:!0,className:`flex min-h-0 flex-1 flex-col`,children:(0,G.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col px-3 pt-0`,children:(0,G.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto pr-2`,children:(0,G.jsx)(`div`,{className:`pb-1 pt-0.5`,children:(0,G.jsx)(me,{detail:p})})})})}),(0,G.jsx)(M,{value:`export`,keepMounted:!0,className:`flex min-h-0 flex-1 flex-col`,children:(0,G.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col px-3 pt-0`,children:(0,G.jsx)(D,{kind:`template`,id:p.id,yamlPath:`/catalog/templates/${p.id}/yaml`,yamlFilename:`${p.id}.miravo.yaml`})})})]})]},p.id):(0,G.jsx)(`div`,{className:`flex flex-1 items-center justify-center text-sm text-muted-foreground`,children:`Template not found`})})})}function xe({area:e,expanded:t,onToggle:n}){let r=_e(e);return(0,G.jsxs)(`div`,{className:ee,children:[(0,G.jsxs)(`button`,{type:`button`,className:`flex min-h-11 w-full items-center gap-1.5 px-2.5 py-2 text-left text-xs font-medium transition-colors hover:bg-muted/30 touch-manipulation sm:min-h-0 sm:py-1.5`,onClick:n,children:[(0,G.jsx)(R,{className:`size-3.5 text-primary`}),(0,G.jsx)(`span`,{className:`uppercase tracking-wider text-primary`,children:p(e.name)}),(0,G.jsxs)(`div`,{className:`ml-auto flex items-center gap-1.5`,children:[(0,G.jsxs)(k,{variant:`secondary`,className:`text-xs`,children:[r,` assets`]}),(0,G.jsxs)(k,{variant:`secondary`,className:`text-xs`,children:[e.lines.length,` lines`]}),(0,G.jsx)(_,{className:`size-3 text-muted-foreground transition-transform ${t?`rotate-180`:``}`})]})]}),(0,G.jsx)(l,{initial:!1,children:t&&(0,G.jsx)(c.div,{initial:{height:0,opacity:0},animate:{height:`auto`,opacity:1},exit:{height:0,opacity:0},transition:{duration:.2,ease:`easeOut`},className:`overflow-hidden`,children:(0,G.jsx)(`div`,{className:`flex flex-col gap-1.5 border-t border-border p-2`,children:e.lines.map(e=>(0,G.jsx)(Se,{line:e},e.name))})},`content`)})]})}function Se({line:e}){return(0,G.jsxs)(`div`,{className:`rounded-[var(--miravo-radius-tight)] border border-border/60 bg-muted/10 p-2`,children:[(0,G.jsxs)(`div`,{className:`mb-1.5 flex items-center gap-1.5 text-xs font-medium text-muted-foreground`,children:[(0,G.jsx)(V,{className:`size-3.5`}),(0,G.jsx)(`span`,{title:e.name,children:p(e.name)}),(0,G.jsx)(z,{className:`ml-auto size-3.5 text-muted-foreground`}),(0,G.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.assets.reduce((e,t)=>e+t.count,0),` assets`]})]}),(0,G.jsx)(`div`,{className:`flex flex-col gap-1.5`,children:e.assets.map(e=>(0,G.jsx)(Ce,{assignment:e},`${e.model}-${e.count}`))})]})}function Ce({assignment:e}){let t=e.parameters&&Object.keys(e.parameters).length>0;return(0,G.jsxs)(`div`,{className:`rounded-[var(--miravo-radius-tight)] border border-border/30 bg-background/50 px-2.5 py-1.5`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs`,children:[(0,G.jsx)(`span`,{className:`font-mono font-medium text-primary`,title:e.model,children:p(e.model)}),(0,G.jsxs)(k,{variant:`secondary`,className:`shrink-0 px-1 py-0 text-xs`,children:[`×`,e.count]}),e.variation>0&&(0,G.jsxs)(`span`,{className:`text-muted-foreground`,children:[`±`,(e.variation*100).toFixed(0),`% variation`]})]}),t&&e.parameters&&(0,G.jsx)(`div`,{className:`mt-1.5 flex flex-wrap gap-x-4 gap-y-1 border-t border-border/20 pt-1.5 font-mono text-xs`,children:Object.entries(e.parameters).map(([e,t])=>(0,G.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:e}),(0,G.jsx)(`span`,{className:`text-foreground`,children:t})]},e))})]})}function we({id:e,className:t}){let n=g(`shrink-0 text-primary`,t);switch(e){case`smart-factory`:return(0,G.jsx)(b,{className:n,"aria-hidden":!0});case`water-treatment`:return(0,G.jsx)(I,{className:n,"aria-hidden":!0});case`commercial-building`:return(0,G.jsx)(F,{className:n,"aria-hidden":!0});case`backup-power`:return(0,G.jsx)(U,{className:n,"aria-hidden":!0});case`district-heating`:return(0,G.jsx)(H,{className:n,"aria-hidden":!0});case`pharma-cleanroom`:return(0,G.jsx)(L,{className:n,"aria-hidden":!0});default:return(0,G.jsx)(B,{className:n,"aria-hidden":!0})}}export{z as i,be as n,U as r,we as t};
1
+ import{a as e}from"./rolldown-runtime-COnpUsM8.js";import{c as t}from"./vendor-charts-95ykyDlI.js";import{ot as n}from"./vendor-ui-D8j69UH4.js";import{S as r,o as i,v as a,vt as o}from"./api-GfuYYI6q.js";import{t as s}from"./useQuery-BfWNkVkT.js";import{t as c}from"./proxy-CWZabK8f.js";import{t as l}from"./AnimatePresence-BSSlw02V.js";import{c as u}from"./chunk-OE4NN4TA-DBWZidbW.js";import{t as d}from"./shallow-Cin0mLuv.js";import{c as f,h as p,s as m}from"./format-Bx7DF-TB.js";import{n as h,t as g}from"./utils-XFKvwlFT.js";import{t as _}from"./chevron-down-x70Pto6j.js";import{t as v}from"./chevron-right-CrNKVFcI.js";import{t as y}from"./copy-button-CSUP1VjU.js";import{i as b,n as x,t as S}from"./registry-BqqyCPJz.js";import{a as ee}from"./use-engine-command-mutation-CTbPh58S.js";import{t as C}from"./query-fetch-error-CWLZA2L5.js";import{c as te,d as w,f as ne,l as T,s as E,t as D,u as O}from"./export-tab-R8Oac9J5.js";import{t as k}from"./badge-Bk1DaL6C.js";import{n as A}from"./get-error-message-DJGhcwLn.js";import{a as re,c as ie,i as ae,n as oe,o as se,s as ce,t as le}from"./status-kit-Darp7bPB.js";import{i as j,n as M,r as N,t as P}from"./tabs-Ch_VG8_S.js";var F=h(`building`,[[`path`,{d:`M12 10h.01`,key:`1nrarc`}],[`path`,{d:`M12 14h.01`,key:`1etili`}],[`path`,{d:`M12 6h.01`,key:`1vi96p`}],[`path`,{d:`M16 10h.01`,key:`1m94wz`}],[`path`,{d:`M16 14h.01`,key:`1gbofw`}],[`path`,{d:`M16 6h.01`,key:`1x0f13`}],[`path`,{d:`M8 10h.01`,key:`19clt8`}],[`path`,{d:`M8 14h.01`,key:`6423bh`}],[`path`,{d:`M8 6h.01`,key:`1dz90k`}],[`path`,{d:`M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3`,key:`cabbwy`}],[`rect`,{x:`4`,y:`2`,width:`16`,height:`20`,rx:`2`,key:`1uxh74`}]]),I=h(`droplet`,[[`path`,{d:`M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z`,key:`c7niix`}]]),L=h(`flask-conical`,[[`path`,{d:`M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2`,key:`18mbvz`}],[`path`,{d:`M6.453 15h11.094`,key:`3shlmq`}],[`path`,{d:`M8.5 2h7`,key:`csnxdl`}]]),R=h(`folder`,[[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]),z=h(`layout-grid`,[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`3`,rx:`1`,key:`6d4xhi`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`14`,rx:`1`,key:`nxv5o0`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}]]),B=h(`layout-template`,[[`rect`,{width:`18`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`f1a2em`}],[`rect`,{width:`9`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`jqznyg`}],[`rect`,{width:`5`,height:`7`,x:`16`,y:`14`,rx:`1`,key:`q5h2i8`}]]),V=h(`list`,[[`path`,{d:`M3 5h.01`,key:`18ugdj`}],[`path`,{d:`M3 12h.01`,key:`nlz23k`}],[`path`,{d:`M3 19h.01`,key:`noohij`}],[`path`,{d:`M8 5h13`,key:`1pao27`}],[`path`,{d:`M8 12h13`,key:`1za7za`}],[`path`,{d:`M8 19h13`,key:`m83p4d`}]]),H=h(`thermometer-sun`,[[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 8a4 4 0 0 0-1.645 7.647`,key:`wz5p04`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 14.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0z`,key:`yu0u2z`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}]]),U=h(`zap`,[[`path`,{d:`M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z`,key:`1xq2db`}]]),W=e(t(),1),G=n(),K=20,ue=14,q=`flex w-3.5 shrink-0 items-center justify-center`;function de({asset:e,depth:t,area:n,line:r,detail:i}){let[a,o]=(0,W.useState)(!1),[s,c]=(0,W.useState)(!1),l=a?e.tags:e.tags.slice(0,10),u=e.tags.length-10;return(0,G.jsxs)(G.Fragment,{children:[l.map(a=>(0,G.jsx)(J,{member:a,depth:t,area:n,line:r,assetId:e.id,detail:i},a.name)),!a&&u>0&&(0,G.jsxs)(`button`,{type:`button`,className:`flex min-h-11 w-full items-center gap-1.5 border-t border-border/30 py-2 text-left font-mono text-xs text-muted-foreground hover:bg-muted/40 touch-manipulation sm:min-h-0 sm:py-1.5`,style:{paddingLeft:`${t*14+K}px`},onClick:()=>o(!0),children:[(0,G.jsx)(`span`,{className:q,"aria-hidden":!0}),(0,G.jsxs)(`span`,{children:[`+`,u,` more tags`]})]}),e.properties.length>0&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`button`,{type:`button`,className:`flex min-h-11 w-full items-center gap-1.5 border-t border-border/30 py-2 text-left font-mono text-xs text-muted-foreground hover:bg-muted/40 touch-manipulation sm:min-h-0 sm:py-1.5`,style:{paddingLeft:`${t*14+K}px`},onClick:()=>c(e=>!e),children:[(0,G.jsx)(`span`,{className:q,"aria-hidden":!0,children:s?(0,G.jsx)(_,{className:`size-3.5 opacity-60`,"aria-hidden":!0}):(0,G.jsx)(v,{className:`size-3.5 opacity-60`,"aria-hidden":!0})}),(0,G.jsxs)(`span`,{children:[e.properties.length,` properties`]})]}),s&&e.properties.map(a=>(0,G.jsx)(J,{member:a,depth:t,area:n,line:r,assetId:e.id,detail:i},a.name))]})]})}function J({member:e,depth:t,area:n,line:r,assetId:i,detail:a}){let o=e.kind===`property`,s=t*14+K+(o?ue:0),c=a.namespace,l=[c?.enterprise?`${c.enterprise}/${c.site??``}`:c?.prefix??``,n,r,i,e.name].filter(Boolean).join(`/`);return(0,G.jsx)(y,{value:l,label:`Copy UNS path`,successMessage:`UNS path copied`,successDescription:l,tooltipSide:`top`,render:()=>(0,G.jsxs)(`button`,{type:`button`,className:g(`flex w-full cursor-pointer flex-col gap-1 border-t border-border/25 py-2 text-left font-mono text-xs hover:bg-muted/35 touch-manipulation sm:min-h-0 sm:flex-row sm:items-center sm:gap-1.5 sm:py-1.5`,o&&`opacity-65`),style:{paddingLeft:`${s}px`},children:[(0,G.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,G.jsx)(`span`,{className:q,"aria-hidden":!0,children:(0,G.jsx)(`span`,{className:g(`size-1 rounded-full ring-1 ring-border/50`,o?`bg-muted-foreground/25`:`bg-primary/50`)})}),(0,G.jsx)(`span`,{title:e.name,className:g(`min-w-0 truncate`,o?`text-muted-foreground`:`text-foreground`),children:f(e.name)}),o&&(0,G.jsx)(`span`,{className:`shrink-0 rounded-[var(--miravo-radius-tight)] bg-muted/60 px-1 py-px text-[10px] text-muted-foreground`,children:`PROP`})]}),(0,G.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-2 gap-y-0.5 pl-0 sm:ml-auto sm:flex-1 sm:justify-end sm:pl-0 sm:pr-1`,children:[(0,G.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:e.dataType}),e.unit&&(0,G.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:e.unit}),e.euRange&&(0,G.jsxs)(`span`,{className:`ml-auto shrink-0 tabular-nums text-muted-foreground`,children:[`[`,e.euRange[0],`–`,e.euRange[1],`]`]})]})]})})}function Y({depth:e,label:t,labelTitle:n,tag:r,tagKind:i,subtitle:a,subtitleTitle:o,count:s,expanded:c,onToggle:l,hasChildren:u}){let d=c?_:v,f=i===`area`?`text-primary`:`text-foreground`;return(0,G.jsxs)(`button`,{type:`button`,className:`flex min-h-11 w-full flex-col gap-1 border-t border-border/35 py-2 pr-2 text-left text-xs transition-colors touch-manipulation first:border-t-0 hover:bg-muted/40 sm:min-h-0 sm:flex-row sm:flex-wrap sm:items-center sm:gap-1.5 sm:gap-y-0 sm:py-1.5`,style:{paddingLeft:`${12+e*14}px`},onClick:l,children:[(0,G.jsxs)(`div`,{className:`flex min-w-0 w-full items-center gap-1.5 sm:w-auto sm:flex-1 sm:flex-wrap sm:items-center`,children:[u?(0,G.jsx)(d,{className:`size-3.5 shrink-0 text-muted-foreground`,"aria-hidden":!0}):(0,G.jsx)(`span`,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),(0,G.jsx)(`span`,{title:n??void 0,className:g(`min-w-0 flex-1 truncate font-medium`,f),children:t}),(0,G.jsx)(`span`,{className:`shrink-0 text-[10px] tracking-wide text-muted-foreground uppercase`,children:r}),a&&(0,G.jsx)(`span`,{title:o??void 0,className:`hidden min-w-0 max-w-[min(11rem,38vw)] shrink truncate font-mono text-xs text-muted-foreground sm:inline`,children:a}),s!==void 0&&(0,G.jsx)(`span`,{className:`ml-auto shrink-0 tabular-nums text-xs text-muted-foreground`,children:s})]}),a&&(0,G.jsx)(`span`,{title:o??void 0,className:`min-w-0 truncate pl-7 font-mono text-xs text-muted-foreground sm:hidden`,children:a})]})}function fe(e){let t=e.split(/[-_]/).filter(e=>e.length>0);return t[t.length-1]??e}function pe(e,t,n){let r=[];for(let i of e){let e=fe(i.model),a=t.get(i.model),o=[],s=[];if(a)for(let[e,t]of Object.entries(a.members)){let n={name:e,kind:t.kind,dataType:t.dataType,unit:t.unit,euRange:t.euRange};t.kind===`property`?s.push(n):o.push(n)}for(let t=0;t<i.count;t++){let t=(n.get(i.model)??0)+1;n.set(i.model,t),r.push({id:`${e}-${String(t).padStart(3,`0`)}`,model:i.model,tags:o,properties:s})}}return r}function me({detail:e}){let[t,n]=(0,W.useState)(new Set),o=(0,W.useRef)(null),c=(0,W.useMemo)(()=>[...new Set(e.models)],[e.models]),l=c.join(`,`),u=s({queryKey:a.catalog.modelSchemasBatch(l),queryFn:async()=>Promise.all(c.map(e=>i(`/catalog/models/${e}`,r.catalogModelDetail)))}),d=u.isPending&&!u.data,f=(0,W.useMemo)(()=>{let e=new Map;if(!u.data)return e;for(let[t,n]of u.data.entries())e.set(c[t],n);return e},[u.data,c]),h=(0,W.useMemo)(()=>{let t=new Map,n=new Map;for(let r of e.topology)for(let e of r.lines)n.set(`${r.name}/${e.name}`,pe(e.assets,f,t));return n},[e.topology,f]);(0,W.useEffect)(()=>{if(d)return;let t=e.name;if(o.current===t)return;let r=new Set;for(let t of e.topology){r.add(`area:${t.name}`);for(let e of t.lines)r.add(`line:${t.name}/${e.name}`)}outer:for(let t of e.topology)for(let e of t.lines){let n=(h.get(`${t.name}/${e.name}`)??[])[0];if(n){r.add(`inst:${t.name}/${e.name}/${n.id}`);break outer}}n(r),o.current=t},[d,e.name,e.topology,h]);let g=(0,W.useCallback)(e=>{n(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]);return d?null:u.isError&&!u.data?(0,G.jsx)(C,{message:A(u.error,`Failed to load model schemas.`),onRetry:()=>void u.refetch(),isRetrying:u.isFetching&&!u.isPending}):(0,G.jsx)(`div`,{className:`overflow-hidden rounded-[var(--miravo-radius-stadium-sm)] border border-border/50 py-2 pl-1 pr-2 touch-manipulation sm:py-2.5 sm:pl-1.5 sm:pr-2.5`,children:e.topology.map(n=>{let r=`area:${n.name}`,i=t.has(r);return(0,G.jsxs)(`div`,{children:[(0,G.jsx)(Y,{depth:0,label:p(n.name),labelTitle:n.name,tag:`AREA`,tagKind:`area`,expanded:i,onToggle:()=>g(r),hasChildren:!0}),i&&n.lines.map(r=>{let i=`line:${n.name}/${r.name}`,a=t.has(i),o=h.get(`${n.name}/${r.name}`)??[];return(0,G.jsxs)(`div`,{children:[(0,G.jsx)(Y,{depth:1,label:p(r.name),labelTitle:r.name,tag:`LINE`,tagKind:`line`,count:o.length,expanded:a,onToggle:()=>g(i),hasChildren:!0}),a&&o.map(i=>{let a=`inst:${n.name}/${r.name}/${i.id}`,o=t.has(a);return(0,G.jsxs)(`div`,{children:[(0,G.jsx)(Y,{depth:2,label:m(i.id),labelTitle:i.id,tag:`INST`,tagKind:`inst`,subtitle:p(i.model),subtitleTitle:i.model,count:i.tags.length+i.properties.length,expanded:o,onToggle:()=>g(a),hasChildren:i.tags.length+i.properties.length>0}),o&&(0,G.jsx)(de,{asset:i,depth:3,area:n.name,line:r.name,detail:e})]},i.id)})]},r.name)})]},n.name)})})}var X=`Other assets`;function he(e,t){let n=Math.abs(e)>=100?0:Math.abs(e)>=10?1:2;return`${e.toFixed(n)} ${t}`}function Z(e){return e.length>=3?e.at(-3)??X:X}function ge(e){let t=new Set(e.assetIds),n=new Map(e.lines.flatMap(e=>e.stations.filter(e=>t.has(e.id)).map(e=>[e.id,e]))),r=e.assets.filter(e=>t.has(e.id)),i=new Map;for(let t of r){let r=e.memberValues.get(t.id),a=t.activeFaults.length>0,o=n.get(t.id),s=r?.get(`availability_state`)?.value,c=r?.get(`run_command`)?.value,l=o?.state??`running`;a?l=`fault`:!o&&typeof s==`string`?l=s:!o&&c!==void 0&&Number(c)===0&&(l=`stopped`);let u=ie(e.schemas.get(t.model),1)[0],d=u?r?.get(u.member)?.value:void 0,f={id:t.id,tone:se(l,a||l===`faulted`),state:re(l),reading:u&&typeof d==`number`?he(d,u.unit):null},p=Z(t.browsePath);i.set(p,[...i.get(p)??[],f])}let a=[...i.values()].flat(),o=a.filter(e=>e.tone===`fault`).length,s=e.lines.filter(e=>e.stations.some(e=>n.has(e.id))),c;if(s.length>0){let e=s.reduce((e,t)=>e+(t.stations.at(-1)?.good??0),0),t=s.reduce((e,t)=>e+t.stations.reduce((e,t)=>e+t.scrap,0),0);c=[{label:`Shipped`,value:String(e)},{label:`Yield`,value:e+t>0?`${(e/(e+t)*100).toFixed(1)}%`:`–`},{label:`Faulted`,value:String(o)}]}else{let e=a.filter(e=>e.state===`stopped`).length;c=[{label:`Online`,value:String(a.length-o-e)},{label:`Stopped`,value:String(e)},{label:`Faulted`,value:String(o)}]}return{kpis:c,areas:[...i].map(([e,t])=>({name:e,rows:t}))}}function Q({templateId:e,assetIds:t,schemas:n}){let r=u(),{assets:i,lines:a,memberValues:s}=o(d(e=>({assets:e.assets,lines:e.lines,memberValues:e.memberValues}))),c=ge({assetIds:t,assets:i,lines:a,memberValues:s,schemas:n}),l=x(e);return(0,G.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[(0,G.jsx)(`div`,{className:`grid grid-cols-3 gap-3 px-4 pt-4 pb-5`,children:c.kpis.map(e=>(0,G.jsx)(le,{label:e.label,value:e.value},e.label))}),c.areas.map(t=>(0,G.jsx)(ae,{title:t.name,note:`${t.rows.length} assets`,children:(0,G.jsx)(`ul`,{className:`-mx-2 flex flex-col`,children:t.rows.map(t=>(0,G.jsx)(oe,{tone:t.tone,name:t.id,note:t.reading?`${t.state} · ${t.reading}`:t.state,onSelect:l?()=>void r(`${S(e)}?asset=${encodeURIComponent(t.id)}`):void 0},t.id))})},t.name))]})}function _e(e){return e.lines.reduce((e,t)=>e+t.assets.reduce((e,t)=>e+t.count,0),0)}function ve(e){return Object.values(e.members).filter(e=>e.kind!==`property`).length}function ye(e,t){let n=0;for(let r of e.topology)for(let e of r.lines)for(let r of e.assets){let e=t.get(r.model),i=e?ve(e):0;n+=r.count*i}return n}var $=`min-h-10 px-2 py-1 text-xs text-foreground/82 after:bottom-[-3px] data-active:text-foreground sm:min-h-0 sm:px-2.5 sm:py-1`;function be({templateId:e,onClose:t,actions:n,live:o,fallbackTitle:l}){let[u,d]=(0,W.useState)(new Set),f=s({queryKey:a.catalog.templateDetail(e??``),queryFn:()=>i(`/catalog/templates/${e}`,r.catalogTemplateDetail),enabled:e!==null}),p=f.data,m=f.isPending&&!p,h=f.isError,g=A(f.error,`Failed to load template.`),_=p?.models??o?.models??[],v=ce(_),y=(0,W.useMemo)(()=>{let e=new Map;for(let[t,n]of(v.data??[]).entries())e.set(_[t]??``,n);return e},[_,v.data]),b=(0,W.useMemo)(()=>p&&v.data?ye(p,y):null,[p,v.data,y]);(0,W.useEffect)(()=>{e&&p&&d(new Set(p.topology.map(e=>e.name)))},[e,p]);let x=(0,W.useCallback)(e=>{d(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]);return(0,G.jsx)(E,{open:e!==null,onOpenChange:e=>{e||t()},children:(0,G.jsx)(te,{side:`right`,className:`flex w-full flex-col gap-4 touch-manipulation`,children:m?null:h&&!p&&n?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(O,{className:`gap-2 pb-0 pe-12`,children:[(0,G.jsx)(w,{className:`font-heading text-base uppercase tracking-wide`,children:l}),(0,G.jsx)(`div`,{className:`flex flex-wrap items-center gap-1`,children:n})]}),o&&e?(0,G.jsx)(Q,{templateId:e,assetIds:o.assetIds,schemas:y}):null]}):h&&!p?(0,G.jsx)(`div`,{className:`flex flex-1 flex-col justify-center px-2`,children:(0,G.jsx)(C,{message:g,onRetry:()=>void f.refetch(),isRetrying:f.isFetching})}):p?(0,G.jsxs)(c.div,{initial:{opacity:0},animate:{opacity:1},transition:{duration:.18},className:`flex min-h-0 flex-1 flex-col gap-4`,children:[(0,G.jsxs)(O,{className:`gap-1 pb-0 pe-12`,children:[(0,G.jsx)(w,{className:`font-heading text-base uppercase tracking-wide`,children:p.name}),p.description&&(0,G.jsx)(T,{className:`text-xs leading-relaxed text-foreground/88`,children:p.description}),n?(0,G.jsx)(`div`,{className:`flex flex-wrap items-center gap-1 pt-1`,children:n}):null]}),(0,G.jsxs)(P,{defaultValue:o?`live`:`overview`,className:`flex min-h-0 flex-1 flex-col gap-1 pt-0`,children:[(0,G.jsxs)(N,{variant:`line`,className:`h-8! shrink-0 gap-0.5 border-b-border/60 px-2 py-0.5`,children:[o?(0,G.jsx)(j,{value:`live`,className:$,children:`Live`}):null,(0,G.jsx)(j,{value:`overview`,className:$,children:`Overview`}),(0,G.jsx)(j,{value:`uns`,className:$,children:`UNS`}),(0,G.jsx)(j,{value:`export`,className:$,children:`Export`})]}),o?(0,G.jsx)(M,{value:`live`,className:`flex min-h-0 flex-1 flex-col`,children:(0,G.jsx)(Q,{templateId:p.id,assetIds:o.assetIds,schemas:y})}):null,(0,G.jsx)(M,{value:`overview`,keepMounted:!0,className:`flex min-h-0 flex-1 flex-col`,children:(0,G.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col px-3 pt-0`,children:(0,G.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto pr-2`,children:(0,G.jsxs)(`div`,{className:`flex flex-col gap-2 pb-1 pt-0.5`,children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,G.jsxs)(k,{variant:`outline`,className:`font-mono text-xs`,children:[p.topology.length,` areas`]}),(0,G.jsxs)(k,{variant:`outline`,className:`font-mono text-xs`,children:[p.assetCount,` assets`]}),(0,G.jsxs)(k,{variant:`outline`,className:`font-mono text-xs`,children:[p.models.length,` models`]}),b!==null&&(0,G.jsxs)(k,{variant:`outline`,className:`font-mono text-xs`,children:[b,` tags`]}),p.settings?.tickIntervalMs&&(0,G.jsxs)(k,{variant:`outline`,className:`font-mono text-xs`,children:[`tick `,p.settings.tickIntervalMs,`ms`]}),p.settings?.timeMultiplier&&p.settings.timeMultiplier!==1&&(0,G.jsxs)(k,{variant:`outline`,className:`font-mono text-xs`,children:[p.settings.timeMultiplier,`× speed`]})]}),p.namespace&&(p.namespace.enterprise||p.namespace.site||p.namespace.prefix)&&(0,G.jsxs)(`div`,{className:`min-w-0 overflow-hidden rounded-[var(--miravo-radius-tight)] border border-border/60 px-2.5 py-2`,children:[(0,G.jsx)(`h3`,{className:`font-heading text-xs font-semibold uppercase tracking-[0.12em] text-primary`,children:`Namespace`}),(0,G.jsxs)(`dl`,{className:`mt-1 grid grid-cols-1 gap-x-4 gap-y-1.5 sm:grid-cols-2`,children:[p.namespace.enterprise&&(0,G.jsxs)(`div`,{className:`min-w-0 sm:max-w-[min(100%,16rem)]`,children:[(0,G.jsx)(`dt`,{className:`font-heading text-xs font-medium uppercase tracking-[0.12em] text-muted-foreground`,children:`Enterprise`}),(0,G.jsx)(`dd`,{className:`mt-1 font-mono text-xs leading-snug text-foreground [overflow-wrap:anywhere] break-words`,children:p.namespace.enterprise})]}),p.namespace.site&&(0,G.jsxs)(`div`,{className:`min-w-0 sm:max-w-[min(100%,16rem)]`,children:[(0,G.jsx)(`dt`,{className:`font-heading text-xs font-medium uppercase tracking-[0.12em] text-muted-foreground`,children:`Site`}),(0,G.jsx)(`dd`,{className:`mt-1 font-mono text-xs leading-snug text-foreground [overflow-wrap:anywhere] break-words`,children:p.namespace.site})]}),p.namespace.prefix&&(0,G.jsxs)(`div`,{className:`min-w-0 sm:col-span-2`,children:[(0,G.jsx)(`dt`,{className:`font-heading text-xs font-medium uppercase tracking-[0.12em] text-muted-foreground`,children:`Prefix`}),(0,G.jsx)(`dd`,{className:`mt-1 font-mono text-xs leading-snug text-foreground [overflow-wrap:anywhere] break-words`,children:p.namespace.prefix})]})]})]}),p.topology.map(e=>(0,G.jsx)(xe,{area:e,expanded:u.has(e.name),onToggle:()=>x(e.name)},e.name)),p.settings&&(0,G.jsxs)(`div`,{className:`rounded-[var(--miravo-radius-tight)] border border-border/50 p-2`,children:[(0,G.jsxs)(`div`,{className:`mb-1.5 flex items-center gap-1.5 font-heading text-xs font-semibold uppercase tracking-[0.12em] text-warning`,children:[(0,G.jsx)(ne,{className:`size-3.5`,"aria-hidden":!0}),(0,G.jsx)(`span`,{children:`Settings`})]}),(0,G.jsxs)(`div`,{className:`grid grid-cols-1 gap-1.5 font-mono text-xs sm:grid-cols-2`,children:[(0,G.jsxs)(`div`,{className:`flex flex-col`,children:[(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:`tick interval`}),(0,G.jsxs)(`span`,{className:`text-foreground`,children:[p.settings.tickIntervalMs??1e3,`ms`]})]}),(0,G.jsxs)(`div`,{className:`flex flex-col`,children:[(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:`time multiplier`}),(0,G.jsxs)(`span`,{className:`text-foreground`,children:[p.settings.timeMultiplier??1,`×`]})]})]})]})]})})})}),(0,G.jsx)(M,{value:`uns`,keepMounted:!0,className:`flex min-h-0 flex-1 flex-col`,children:(0,G.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col px-3 pt-0`,children:(0,G.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto pr-2`,children:(0,G.jsx)(`div`,{className:`pb-1 pt-0.5`,children:(0,G.jsx)(me,{detail:p})})})})}),(0,G.jsx)(M,{value:`export`,keepMounted:!0,className:`flex min-h-0 flex-1 flex-col`,children:(0,G.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col px-3 pt-0`,children:(0,G.jsx)(D,{kind:`template`,id:p.id,yamlPath:`/catalog/templates/${p.id}/yaml`,yamlFilename:`${p.id}.miravo.yaml`})})})]})]},p.id):(0,G.jsx)(`div`,{className:`flex flex-1 items-center justify-center text-sm text-muted-foreground`,children:`Template not found`})})})}function xe({area:e,expanded:t,onToggle:n}){let r=_e(e);return(0,G.jsxs)(`div`,{className:ee,children:[(0,G.jsxs)(`button`,{type:`button`,className:`flex min-h-11 w-full items-center gap-1.5 px-2.5 py-2 text-left text-xs font-medium transition-colors hover:bg-muted/30 touch-manipulation sm:min-h-0 sm:py-1.5`,onClick:n,children:[(0,G.jsx)(R,{className:`size-3.5 text-primary`}),(0,G.jsx)(`span`,{className:`uppercase tracking-wider text-primary`,children:p(e.name)}),(0,G.jsxs)(`div`,{className:`ml-auto flex items-center gap-1.5`,children:[(0,G.jsxs)(k,{variant:`secondary`,className:`text-xs`,children:[r,` assets`]}),(0,G.jsxs)(k,{variant:`secondary`,className:`text-xs`,children:[e.lines.length,` lines`]}),(0,G.jsx)(_,{className:`size-3 text-muted-foreground transition-transform ${t?`rotate-180`:``}`})]})]}),(0,G.jsx)(l,{initial:!1,children:t&&(0,G.jsx)(c.div,{initial:{height:0,opacity:0},animate:{height:`auto`,opacity:1},exit:{height:0,opacity:0},transition:{duration:.2,ease:`easeOut`},className:`overflow-hidden`,children:(0,G.jsx)(`div`,{className:`flex flex-col gap-1.5 border-t border-border p-2`,children:e.lines.map(e=>(0,G.jsx)(Se,{line:e},e.name))})},`content`)})]})}function Se({line:e}){return(0,G.jsxs)(`div`,{className:`rounded-[var(--miravo-radius-tight)] border border-border/60 bg-muted/10 p-2`,children:[(0,G.jsxs)(`div`,{className:`mb-1.5 flex items-center gap-1.5 text-xs font-medium text-muted-foreground`,children:[(0,G.jsx)(V,{className:`size-3.5`}),(0,G.jsx)(`span`,{title:e.name,children:p(e.name)}),(0,G.jsx)(z,{className:`ml-auto size-3.5 text-muted-foreground`}),(0,G.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.assets.reduce((e,t)=>e+t.count,0),` assets`]})]}),(0,G.jsx)(`div`,{className:`flex flex-col gap-1.5`,children:e.assets.map(e=>(0,G.jsx)(Ce,{assignment:e},`${e.model}-${e.count}`))})]})}function Ce({assignment:e}){let t=e.parameters&&Object.keys(e.parameters).length>0;return(0,G.jsxs)(`div`,{className:`rounded-[var(--miravo-radius-tight)] border border-border/30 bg-background/50 px-2.5 py-1.5`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs`,children:[(0,G.jsx)(`span`,{className:`font-mono font-medium text-primary`,title:e.model,children:p(e.model)}),(0,G.jsxs)(k,{variant:`secondary`,className:`shrink-0 px-1 py-0 text-xs`,children:[`×`,e.count]}),e.variation>0&&(0,G.jsxs)(`span`,{className:`text-muted-foreground`,children:[`±`,(e.variation*100).toFixed(0),`% variation`]})]}),t&&e.parameters&&(0,G.jsx)(`div`,{className:`mt-1.5 flex flex-wrap gap-x-4 gap-y-1 border-t border-border/20 pt-1.5 font-mono text-xs`,children:Object.entries(e.parameters).map(([e,t])=>(0,G.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:e}),(0,G.jsx)(`span`,{className:`text-foreground`,children:t})]},e))})]})}function we({id:e,className:t}){let n=g(`shrink-0 text-primary`,t);switch(e){case`smart-factory`:return(0,G.jsx)(b,{className:n,"aria-hidden":!0});case`water-treatment`:return(0,G.jsx)(I,{className:n,"aria-hidden":!0});case`commercial-building`:return(0,G.jsx)(F,{className:n,"aria-hidden":!0});case`backup-power`:return(0,G.jsx)(U,{className:n,"aria-hidden":!0});case`district-heating`:return(0,G.jsx)(H,{className:n,"aria-hidden":!0});case`pharma-cleanroom`:return(0,G.jsx)(L,{className:n,"aria-hidden":!0});default:return(0,G.jsx)(B,{className:n,"aria-hidden":!0})}}export{z as i,be as n,U as r,we as t};
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-COnpUsM8.js";import{c as t}from"./vendor-charts-95ykyDlI.js";import{ot as n}from"./vendor-ui-D8j69UH4.js";import{C as r,a as i,b as a,c as o,d as s,f as c,l,m as u,n as d,s as f}from"./dom-CQuChC3G.js";import{n as p,t as m}from"./by-path-e6y8DTMV.js";import{A as h,D as g,E as _,F as v,H as ee,L as te,N as ne,P as re,T as ie,V as ae,X as oe,a as se,b as ce,g as le,i as ue,j as de,k as fe,n as pe,o as me,r as he,s as ge,t as _e}from"./status-DNfdEhTs.js";import{r as ve,t as ye}from"./chiller-Jug0vRg-.js";import{n as be,o as xe,s as Se,t as Ce}from"./genset-DBpkUT9p.js";import{t as we}from"./stages-C0cErwSQ.js";import{a as Te,i as Ee,n as De,o as Oe,s as ke,t as Ae}from"./rtu-BR4DhLbE.js";import{a as je,i as Me,n as Ne,o as Pe,r as Fe,t as Ie}from"./boiler-BQwqgoVY.js";var Le=[[`rtu1`,`hvac-rtu`,`hvac`,`floor-1`,0],[`rtu2`,`hvac-rtu`,`hvac`,`floor-2`,0],[`rtu3`,`hvac-rtu`,`hvac`,`floor-3`,0],[`chiller`,`industrial-chiller`,`chilled-water`,`plant`,0],[`chwPump`,`centrifugal-pump`,`chilled-water`,`plant`,0],[`boiler`,`hot-water-boiler`,`heating`,`boiler-room`,0],[`hwPump`,`centrifugal-pump`,`heating`,`boiler-room`,0],[`fanA`,`ac-induction-motor`,`electrical`,`ahu-fans`,0],[`fanB`,`ac-induction-motor`,`electrical`,`ahu-fans`,1],[`genset`,`diesel-generator`,`electrical`,`emergency-power`,0]],Re=e=>m(Le,e);function ze(e){let t=(e,t,n)=>({key:e,assetId:e,name:t,kind:`utility`,area:n});return[t(e.rtu1,`Rooftop unit · floor 1`,`HVAC`),t(e.rtu2,`Rooftop unit · floor 2`,`HVAC`),t(e.rtu3,`Rooftop unit · floor 3`,`HVAC`),t(e.chiller,`Chiller`,`Chilled water`),t(e.chwPump,`Chilled-water pump`,`Chilled water`),t(e.boiler,`Hot-water boiler`,`Heating`),t(e.hwPump,`Heating circulation pump`,`Heating`),t(e.fanA,`AHU supply fan 1`,`Electrical`),t(e.fanB,`AHU supply fan 2`,`Electrical`),t(e.genset,`Emergency generator`,`Electrical`)]}var y=e(t(),1),b={x:-332,y:-228,w:232,d:74,r:2},Be=29,x=1,Ve={x:-86,y:-192,w:44,d:36,r:1.5},S={x:-79,y:-184,w:30,d:20,r:1.5},C=26,He=-150;function Ue(e){let{k:t,P:n,L:r,slab:i,cyl:a}=e,o=[];for(let e=b.x+Be;e<b.x+b.w-1;e+=Be)o.push(t.segment([e,b.y,x],[e,b.y+b.d,x],n));for(let e=b.y+Be;e<b.y+b.d-1;e+=Be)o.push(t.segment([b.x,e,x],[b.x+b.w,e,x],n));let s=[i(b,0,x,{tone:`mid`,inner:r(o.join(``),{tone:`faint`})},3,.3)];for(let e of[-322,-124])s.push(i({x:e,y:-216,w:22,d:10,r:1},x,5,{tone:`mid`},2,.3),i({x:e+1.6,y:-214.4,w:18.8,d:6.8,r:.6},x+5,.6,{tone:`lo`},2,0));for(let e=-316;e<b.x+b.w-8;e+=46)s.push(a(e,b.y+b.d-4,1.3,x,7,{tone:`mid`},12));return s.join(``)}function We(e,t){let{k:n,P:r,L:i,slab:a}=e,o=Ve.x+Ve.w,s=[];for(let e=o+12;e<t-4;e+=12)s.push(n.segment([e,He-3,.6],[e,He+3,.6],r));return a({x:o,y:He-3.5,w:t-o,d:7,r:.4},0,.6,{tone:`mid`,inner:i(s.join(``),{tone:`faint`})},2,.1)}function Ge(e){let{k:t,P:n,L:r,slab:i,cyl:a}=e,{x:o,y:s,w:c,d:l}=S,u=1.5,d=[];for(let e=1;e<12;e++)d.push(t.segment([o+3+e*2,s+l+5,u+4],[o+3+e*2,s+l+5,C-4],n));let f=[i(Ve,0,u,{tone:`mid`},3,.3),i(S,u,C,{tone:`mid`},2,.5),i({x:o+3,y:s+l,w:c-6,d:5,r:.6},u+3,C-7,{tone:`mid`,inner:r(d.join(``),{tone:`faint`})},2,.2),i({x:o-.8,y:s-.8,w:c+1.6,d:l+1.6,r:1.5},u+C,1.4,{tone:`mid`},2,.2)];for(let e of[o+7,o+15,o+23])f.push(a(e,s+5,1.4,u+C+1.4,7,{tone:`mid`},12),a(e,s+5,2.2,u+C+1.4,1.4,{tone:`mid`},12));for(let e of[s+5,s+10,s+15])f.push(a(o+c-3,e,1,u+C+1.4,3,{tone:`lo`},10));return f.join(``)}function Ke(e,t,n=1.6){let{k:r,P:i,L:a,slab:o,screws:s}=e;return o(t,0,n,{tone:`mid`},3,.4)+a(r.planOutline(r.insetPlan(t,3),n,i,3),{tone:`faint`})+s(r.corners(t,4),n)}function w(e,t,n,r,{louvres:i=[],doors:a=[]}={}){let{k:o,P:s,L:c,slab:l}=e,u=[l(t,0,n,{tone:`mid`},2,.3),l({x:t.x-.6,y:t.y-.6,w:t.w+1.2,d:t.d+1.2,r:.3},n,1.4,{tone:`mid`},2,.2)],d=r===`south`?e.front(t.y+t.d):o.sideMatrix([t.x+t.w,t.y+t.d],0,s,`right`),f=[];for(let[e,t]of i){let[r,i]=[e,t];f.push(`<path class="cr-grille" d="M${r} ${-(n-9)}H${i}V-13H${r}Z"/>`);let a=[];for(let e=16;e<n-9;e+=3)a.push(`M${r+1} ${-e}H${i-1}`);f.push(c(a.join(``),{tone:`lo`}))}for(let[e,t]of a){let[r,i]=[e,t];f.push(`<path class="cr-door" d="M${r} -1H${i}V${-(n-16)}H${r}Z"/>`),f.push(c(`M${r-1.2} 0V${-(n-14.8)}H${i+1.2}V0M${r-1.2} -1H${i+1.2}`,{tone:`lo`})),f.push(`<circle class="sf-screw" cx="${i-2.4}" cy="${-(n/2-4)}" r="0.7"/>`)}return f.length&&u.push(`<g transform="${d}">${f.join(``)}</g>`),u.join(``)}function qe(e,t,n,r){let{k:i,P:a,L:o,slab:s,screws:c}=e,l=t.x+t.w,u=[w(e,t,n,`south`,{doors:[[t.x+8,t.x+22]],louvres:[[t.x+30,t.x+46]]})];u.push(s({x:t.x+t.w-18,y:t.y+8,w:10,d:8,r:.8},n+1.4,4,{tone:`mid`},2,.3));let d=i.sideMatrix([l,t.y+t.d],0,a,`right`),f=t.y+t.d-r.y;return u.push(`<g transform="${d}"><path class="sf-plate" d="M${f-7} ${-(r.z+7)}H${f+7}V${-(r.z-7)}H${f-7}Z"/>${o(`M${f-7} ${-(r.z+7)}H${f+7}V${-(r.z-7)}H${f-7}Z`,{tone:`lo`})}</g>`,c([[l+.05,r.y-5.6],[l+.05,r.y+5.6]],r.z+5.6),c([[l+.05,r.y-5.6],[l+.05,r.y+5.6]],r.z-5.6)),u.join(``)}function Je(e,[t,n],r,i,a,o){let{k:s,P:c,L:l,slab:u,cyl:d}=e,f=[],p=[];for(let e=i+48;e<a-12;e+=48)p.push(e);let m=p.map(e=>s.sideArc(t,n,r,e,c,24)).join(``);f.push(d(t,n,r,i,a-i,{tone:`mid`,inner:l(m,{tone:`faint`})},28));for(let e of p)f.push(d(t,n,r+1.2,e-.8,1.6,{tone:`mid`},28));for(let e of o)f.push(u({x:e.toX,y:n-.9,w:t-r-e.toX,d:1.8,r:.3},e.z-.9,1.8,{tone:`mid`},2,.1),u({x:e.toX-1.2,y:n-3.5,w:1.2,d:7,r:.3},e.z-3.5,7,{tone:`mid`},2,.1),d(t,n,r+.9,e.z-1.1,2.2,{tone:`mid`},28));for(let e of[0,2.1,4.2])f.push(d(t+Math.cos(e)*(r-1.4),n+Math.sin(e)*(r-1.4),.5,a,3,{tone:`lo`,crease:`none`},8));return f.push(d(t,n,r+2.2,a+3,1.2,{tone:`mid`},28)),f.join(``)}var T={x:-300,y:-268,w:290,d:32,r:.6},E=[4,64,124],D=3,Ye=6,O={x:-334,y:-268,w:34,d:32,r:.6},k=e=>(E[e+1]??184)-4,Xe={x:O.x-3,y:T.y-3,w:T.w+O.w+3+7,d:T.d+3+8,r:1.5},A={x:T.x+D,y:T.y+D,w:T.w-D,d:T.d-D,r:0},Ze=A.x+A.w,Qe=A.y+A.d,$e=[-247,-185,-123,-61,-13],et=2.2,j=2.6,M=E[0],N=-247,tt=-255,nt=11,rt=e=>k(e)-nt,it=[-246,-162,-78],at=-251,ot=.8,st=[46*ot,20*ot],ct=e=>[(it[e]??0)-9,(it[e]??0)+9],lt=e=>{let[t,n]=ct(e);return{x:t-5,y:tt-4.5,w:n-t+10,d:9,r:.3}},ut=e=>it.map((e,t)=>t).filter(t=>t<e),dt=4,P=1.6,ft=.6;function pt(e){let{k:t,P:n,L:r,slab:i}=e;return i(Xe,0,M,{tone:`mid`,inner:r(t.planOutline({x:T.x-.5,y:T.y-.5,w:T.w+1,d:T.d+1,r:0},M,n,2),{tone:`faint`})},4,.5)}function mt(e){let{k:t,P:n,L:r,S:i}=e,a=184+Ye-M,o=(e,r,i)=>t.segment([r[0],r[1],E[e]??0],[i[0],i[1],E[e]??0],n),s={x:T.x,y:T.y,w:T.w,d:D,r:.3},c={x:T.x,y:T.y+D,w:D,d:T.d-D,r:.3};return[i(t.slabOf(s,M,a,n,2,.3),{tone:`mid`,inner:r([1,2].map(e=>o(e,[s.x,s.y+s.d],[s.x+s.w,s.y+s.d])).join(``),{tone:`faint`})}),i(t.slabOf(c,M,a,n,2,.3),{tone:`mid`}),ht(e)].join(``)}function ht(e){let{k:t,P:n,L:r,S:i,front:a}=e,o=O.y+O.d,s=O.x+O.w/2,c=[],l=[];for(let[e,t]of E.entries()){for(let e of[s-8,s+.4])c.push(`<path class="cr-door" d="M${e} ${-(t+1)}h7.6v-23h-7.6Z"/>`);l.push(`M${s-9} ${-t}V${-(t+25)}H${s+9}V${-t}`),c.push(`<path class="cr-grille" d="M${s-2.4} ${-(t+28)}h4.8v-2.4h-4.8Z"/>`),e<E.length-1&&l.push(`M${O.x} ${-(k(e)+4)}H${O.x+O.w}`)}return i(t.slabOf(O,M,184-M,n,2,.4),{tone:`mid`})+`<g transform="${a(o)}">${c.join(``)}${r(l.join(``),{tone:`lo`})}</g>`}var gt=Array.from({length:6},(e,t)=>[-284+t*36,-284+t*36+32]),_t=21,vt=8;function yt(e,t){let{k:n,P:r,L:i,front:a}=e,o=(E[t]??0)+_t,s=k(t)-vt,c=(e,n)=>`<path class="bd-win bt-pane" data-occ="${t}" d="M${e} ${-s}H${n}V${-o}H${e}Z"/>`,l=(e,t)=>`M${e-1} ${-(o-1.6)}H${t+1}M${(e+t)/2} ${-s}V${-o}`,u=gt.map(([e,t])=>c(e,t)).join(``),d=gt.map(([e,t])=>l(e,t)).join(``),f=n.sideMatrix([T.x+D,T.y+T.d],0,r,`right`);return`<g transform="${a(T.y+D)}">${u}${i(d,{tone:`lo`})}</g><g transform="${f}">${c(4,20)}${i(l(4,20),{tone:`lo`})}</g>`}function bt(e,t){let{k:n,P:r,L:i,slab:a}=e,o=(E[t]??0)-4,s=[a(A,o,4,{tone:`mid`,inner:i(n.segment([A.x,A.y+A.d,o+1.4],[A.x+A.w,A.y+A.d,o+1.4],r),{tone:`faint`})},2,.4)],c=E[t]??0;for(let e of ut(t)){let t=lt(e);s.push(a({...t,d:P},c,dt,{tone:`mid`},2,.2),a({...t,w:P},c,dt,{tone:`mid`},2,.2))}return s.join(``)}function xt(e,t,n,r){let{cyl:i}=e,a=lt(t),o=(E[n]??0)+dt,s=r===`back`?a.y+ft+.4:a.y+a.d-ft-.4;return[a.x+.8,a.x+a.w-.8].map(e=>i(e,s,ft,o,k(n)-o,{tone:`mid`,crease:`none`},8))}function St(e,t){return ut(t).flatMap(n=>xt(e,n,t,`back`)).join(``)}function Ct(e,t){let{cyl:n,slab:r}=e,i=E[t]??0,a=k(t)-i,o=Qe-j,s=$e.map(e=>n(e,o,et,i,a,{tone:`mid`},14));s.push(n(Ze-j,-251,et,i,a,{tone:`mid`},14));for(let n of ut(t)){let a=lt(n);s.push(r({...a,y:a.y+a.d-P,d:P},i,dt,{tone:`mid`},2,.2),r({...a,x:a.x+a.w-P,w:P},i,dt,{tone:`mid`},2,.2),...xt(e,n,t,`front`))}return s.join(``)}function wt(e){let{k:t,P:n,L:r,S:i,slab:a}=e,o=[.25,.5,.75].map(e=>t.segment([A.x+A.w*e,A.y,184],[A.x+A.w*e,A.y+A.d,184],n)).join(``),s=A.y+A.d,c=A.x+A.w;return[i(t.slabOf(A,180,4,n,2,.4),{tone:`mid`,inner:r(o,{tone:`faint`})}),a({x:A.x,y:s-j,w:A.w,d:j,r:.3},184,Ye-1,{tone:`mid`},2,.3),a({x:c-j,y:A.y,w:j,d:A.d-j,r:.3},184,Ye-1,{tone:`mid`},2,.3),...it.map(e=>a({x:e-st[0]-1.5,y:at-st[1]-1.5,w:st[0]*2+3,d:st[1]*2+3,r:.6},184,3,{tone:`mid`},2,.2)),a({x:O.x+4,y:O.y+8,w:O.w-8,d:O.d-16,r:.6},184,14,{tone:`mid`},2,.3)].join(``)}var Tt={w:16,d:10,h:4},Et=18,Dt=1.8,Ot=[[-190,-100],[-120,-65],[-120,-204]],F={x:-24,y:N,w:16,d:14,h:12,top:32},kt={w:10,d:8,h:4},At=-262,I=-264.4,jt=5.5,Mt=1.5,Nt=1.1,Pt=[-282,-246,-210,-174,-138,-102],Ft=8.5,It=-292,Lt=(e,t)=>[e,N,k(t)-Et+Dt],Rt=[F.x,F.y,F.top+Dt],zt=e=>[ct(e)[1],tt,k(e)-Et+Dt];function Bt(e,t,n,r,i,a,o,s,c){let{k:l,P:u,L:d,D:f,slab:p,cyl:m,at:h}=e,g=o-a,_=[[t-r/2+1.5,n-i/2+1.5],[t+r/2-1.5,n-i/2+1.5],[t-r/2+1.5,n+i/2-1.5],[t+r/2-1.5,n+i/2-1.5]].map(([e=0,t=0])=>m(e,t,.5,o,s-o,{tone:`lo`,crease:`none`},8)),v=[.3,.55,.8].map(e=>l.segment([t-r/2+1.5,n+i/2,g+a*e],[t+r/2-1.5,n+i/2,g+a*e],u)).join(``),ee=[];for(let e=0;e<6;e++)ee.push([t-r/2+2+e*(r-4)/5,n+i/2,g+1.2]);return[..._,p({x:t-r/2,y:n-i/2,w:r,d:i,r:.8},g,a,{tone:`mid`,inner:d(v,{tone:`faint`})},2,.3),m(t,n,Math.min(5.2,i/2-1.2),o,Dt,{tone:`mid`},24),f(ee.map(e=>h(e)),{size:.3}),c?`<g data-diffuser="${t},${n},${g},${r/2}"></g>`:``].join(``)}var Vt=(e,t,n)=>Bt(e,t,N,Tt.w,Tt.d,Tt.h,k(n)-Et,k(n),!0),Ht=e=>Bt(e,F.x,F.y,F.w,F.d,F.h,F.top,k(0),!0),Ut=(e,t)=>Bt(e,ct(t)[1],tt,kt.w,kt.d,kt.h,k(t)-Et,k(t),!1);function Wt(e,t,n){let{k:r,P:i,L:a,slab:o}=e,s=n+11,c=s+Ft,l=-265,u=Array.from({length:7},(e,n)=>r.segment([t+3.5+n*3.5,l+3.6,s+1],[t+3.5+n*3.5,l+3.6,c-1],i)).join(``);return[...[t+5,t+28-5].map(e=>o({x:e-1,y:-265,w:2,d:.9,r:.2},s+2,4,{tone:`lo`},2,0)),o({x:t,y:l,w:28,d:3.6,r:.5},s,Ft,{tone:`mid`,inner:a(u,{tone:`faint`})},2,.3)].join(``)}function Gt(e,t,n){let{G:r,P:i,S:a}=e,o=r.frameAlong([It,t,n],[-1,0,0]);return a(r.disc(0,1.4,Nt+.7,o,i),{tone:`mid`})}function Kt(e,t,n,r,i){let{slab:a,cyl:o,front:s}=e,c=r+8,l=[a({x:t+.8,y:n+.6,w:1.2,d:6.8,r:.2},r,8,{tone:`lo`},2,0),a({x:t+22-2,y:n+.6,w:1.2,d:6.8,r:.2},r,8,{tone:`lo`},2,0),a({x:t,y:n,w:22,d:8,r:.6},c,1.4,{tone:`mid`},2,.3),o(t+22/2,n+8*.4,1.1,c+1.4,2.4,{tone:`lo`,crease:`none`},10),a({x:t+22/2-4.2,y:n+8*.4-.5,w:8.4,d:1,r:.3},c+3.8,5.4,{tone:`lo`},2,0)],u=n+8*.4+.5;return l.push(`<g transform="${s(u)}"><path class="bd-win" data-occ="${i}" d="M${t+22/2-3.6} ${-(c+4.2)}h7.2v-4.4h-7.2Z"/></g>`),l.join(``)}function qt(e,t,n,r){let{slab:i,cyl:a}=e;return[a(t,n,3,r,.8,{tone:`lo`},14),a(t,n,.6,r+.8,3.6,{tone:`lo`,crease:`none`},8),a(t,n,3.2,r+4.4,1.4,{tone:`mid`},16),i({x:t-3,y:n+2.6,w:6,d:.9,r:.3},r+5.6,5.4,{tone:`mid`},2,.2)].join(``)}function Jt(e,t,n,r){let{slab:i}=e;return[Kt(e,t,-249,n,r),Kt(e,t+25,-249,n,r),i({x:t+22.6,y:-249.5,w:1,d:7,r:.2},n+1.2,12,{tone:`mid`},2,.2),qt(e,t+11,-239.6,n),qt(e,t+36,-239.6,n)].join(``)}function Yt(e,t){let{slab:n,cyl:r}=e,i=[],a=-250;i.push(n({x:a,y:-251,w:46,d:8,r:1},t,10,{tone:`mid`},3,.4),n({x:a+36,y:-243,w:10,d:7,r:1},t,10,{tone:`mid`},3,.4),n({x:a-.8,y:-251.8,w:47.6,d:9.6,r:1},t+10,1.4,{tone:`mid`},3,.2),n({x:a+35.2,y:-243.8,w:11.6,d:8.6,r:1},t+10,1.4,{tone:`mid`},3,.2));for(let e of[-170,-144])i.push(n({x:e,y:-250,w:20,d:6,r:.8},t+3.2,3,{tone:`mid`},2,.3),n({x:e,y:-252,w:20,d:2,r:.4},t+6.2,6,{tone:`mid`},2,.2),r(e+2.4,-245.4,.9,t,3.2,{tone:`lo`,crease:`none`},8),r(e+17.6,-245.4,.9,t,3.2,{tone:`lo`,crease:`none`},8));return i.join(``)}function Xt(e,t){let n=E[t]??0,r=Pt.map(t=>Wt(e,t,n));r.push(Gt(e,At,n+jt),Gt(e,I,n+Mt));let i=Ot[t]??[];r.push(St(e,t));for(let n of i)r.push(Vt(e,n,t));if(r.push(Ut(e,t)),t===0)r.push(Yt(e,n));else for(let a of i)r.push(Jt(e,a-23.5,n,t));return r.join(``)}var Zt=1e3,Qt={x:-352,y:-286,w:652,d:170,r:8},$t={x:-14,y:-516,w:314,d:220,r:8},en={x:-374,y:-538,w:690,d:444,r:16},tn=[34,-242],nn=a([...u(en,-21,-14),...u(Qt,-14,20),...u($t,-14,20),...u(Xe,0,214),...u({x:26,y:-250,w:16,d:16,r:0},0,244)],Zt,620,{pad:22,azimuth:60}),rn=-325,an=[70,205],on=Te(100,!0),sn=[-202,-135,0],cn=[-34,36.6,40],ln=[-20,36.6,40],un=[94,-130,0],L=[.55,.5],dn=-385,fn=-462,pn=(e,t)=>[(e[0]-un[0])*t,(e[1]-un[1])*t,e[2]*t],mn=e=>{let t=an[e],n=Oe(100,7),r=e=>[t+e[0],rn+e[1],e[2]];return{supply:r(n.chwSupply),ret:r(n.chwReturn),discharge:r(n.discharge)}},hn=[mn(0),mn(1)],R=[hn[0].supply[0]-ln[0],fn],z=[tn[0]-Me[0],tn[1]],gn=[z[0]+je[0],z[1]+je[1],je[2]],_n=[z[0]+Fe[0],z[1]+Fe[1],Fe[2]],vn=(e,t,n)=>[e-pn(h,L[n])[0],t],yn=[vn(R[0]+cn[0],dn,0),vn(_n[0],-204,1)],bn=(e,t)=>{let[n,r]=yn[e]??[0,0],[i,a,o]=pn(t,L[e]);return[n+i,r+a,o]},xn=[{suction:bn(0,re),riser:bn(0,h)},{suction:bn(1,re),riser:bn(1,h)}],Sn=[190,-150],B={x:24,y:-160,w:56,d:44,r:1},Cn={x:108,y:-192,w:164,d:72,r:2},wn={x:108,y:-194,w:164,d:3,r:.3},Tn={x:108,y:-194,w:3,d:76,r:.3},En=[-49,0,60.8],Dn={x:0,y:-272,w:252,d:76,r:2},On={x:2,y:-270,w:250,d:3,r:.3},kn={x:-10,y:-512,w:306,d:4,r:.3},An={x:-12,y:-512,w:4,d:214,r:.3},jn=we([...yn.map((e,t)=>({key:`pump${t}`,at:e,h:45*L[t]})),{key:`chiller`,at:R,h:56},{key:`boiler`,at:z,h:je[2]-8},{key:`flue`,at:tn,h:236},...an.map((e,t)=>({key:`ahu${t}`,at:[e,rn],h:36})),{key:`xfmr`,at:[S.x+S.w/2,S.y+S.d/2],h:36},{key:`genset`,at:Sn,h:126},{key:`elec`,at:[B.x+B.w/2,B.y+B.d/2],h:46},{key:`gen-back`,at:[wn.x+wn.w/2,wn.y],h:36},{key:`gen-west`,at:[Tn.x,Tn.y+Tn.d/2],h:36}],nn),Mn=jn.order,Nn=E.length,Pn=([e,t])=>e<14&&t>-269&&t<-232,Fn=([e,t])=>e<-8&&t<-269,In=([e,t])=>e<-8&&t<-256.5,Ln=e=>E.filter((t,n)=>n>0&&e>=t).length,Rn={layer:e=>Fn(e)?0:Pn(e)&&e[2]>=184?Nn+1:Pn(e)&&In(e)?zn+Ln(e[2]):Pn(e)?1+Ln(e[2]):Nn+1+jn.depth.layer(e),glide:()=>!0},zn=Nn+1+Mn.length+1,Bn={y:Sn[1],z:26};function Vn(e,t){return[e,...[...E].filter(n=>n>0&&n<e&&n>t).sort((e,t)=>t-e),t]}var Hn=3.2,Un=2.2,Wn=180;function Gn(e,t,n,r){let i=Vn(Wn,n);return i.slice(0,-1).map((n,a)=>{let o=[[t,tt,n],[t,tt,i[a+1]??0]];return a===i.length-2&&o.push(...r),{id:`${e}${a}`,medium:`duct`,r:Hn,bend:2,bare:[a===0,!1],pts:o}})}var Kn=[0,1,2].flatMap(e=>{let t=rt(e),[n,r]=ct(e),i=[...Ot[e]??[]].sort((e,t)=>Math.abs(e-n)-Math.abs(t-n)),a=i[i.length-1]??n,o=i.slice(0,-1).map((n,r)=>({id:`sup${e}-n${r}`,medium:`duct`,r:Un,pts:[[n,N,t],Lt(n,e)]}));return[...Gn(`sup${e}-`,n,t,[[n,N,t],[a,N,t],Lt(a,e)]),...o,...Gn(`ret${e}-`,r,zt(e)[2],[])]}),[V,H]=hn,U=-279,qn=Rt[0],W=40,Jn=[{id:`ahu-a`,medium:`duct`,r:3.5,pts:[V.discharge,[V.discharge[0],U,V.discharge[2]],[V.discharge[0],U,W]]},{id:`ahu-b`,medium:`duct`,r:3.5,pts:[H.discharge,[H.discharge[0],U,H.discharge[2]],[H.discharge[0],U,W],[qn,U,W],[qn,-266.5,W]]},{id:`ahu-in`,medium:`duct`,r:3.5,pts:[[qn,-265,W],[qn,Rt[1],W],Rt]}],G=[R[0]+ln[0],R[1]+ln[1],ln[2]],Yn=[R[0]+cn[0],R[1]+cn[1],cn[2]],[K,q]=xn,Xn=46,Zn=-360,Qn=K.suction[2],$n=K.suction[1],er=V.supply[1],tr=e=>[[e,er,Xn],[e,$n,Xn],[e,$n,Qn]],nr=[{id:`chw-dis`,medium:`coolantret`,r:ne*L[0],fromStub:!0,pts:[K.riser,[K.riser[0],K.riser[1],Yn[2]],Yn]},{id:`chw-sup`,medium:`coolant`,r:2.6,pts:[G,[G[0],er,G[2]],V.supply]},{id:`chw-sup-b`,medium:`coolant`,r:2.6,pts:[[G[0],Zn,G[2]],[H.supply[0],Zn,G[2]],[H.supply[0],er,G[2]],H.supply]},{id:`chw-ret-b`,medium:`coolantret`,r:2.6,pts:[H.ret,...tr(H.ret[0]),K.suction]},{id:`chw-ret`,medium:`coolantret`,r:2.6,pts:[V.ret,...tr(V.ret[0])]}],J=-6,Y=At,rr=-258,ir=-18,ar=-180,or=q.suction[0]+40,sr=70,cr=_n[2]+20,lr=(e,t,n,r,i,a)=>Vn(a,i).slice(0,-1).map((o,s,c)=>{let l=s===c.length-1?i:Vn(a,i)[s+1]??i;return{id:`${e}${s}`,medium:n,r,blind:[s===c.length-1,s===0],pts:[[J,t,l],[J,t,o]]}}),ur=E.flatMap((e,t)=>{let n=e+jt,r=e+Mt;return[{id:`hw-s${t}`,medium:`heat`,r:Nt,blind:[!1,!0],pts:[[J,Y,n],[It,Y,n]]},{id:`hw-r${t}`,medium:`hotret`,r:Nt,blind:[!0,!1],pts:[[It,I,r],[ir,I,r],[ir,rr,r],[J,rr,r]]},...Pt.flatMap((i,a)=>[{id:`hw-st${t}-${a}`,medium:`heat`,r:1,bare:[!1,!0],pts:[[i+28-3,Y,n],[i+28-3,Y,e+11]]},{id:`hw-rt${t}-${a}`,medium:`hotret`,r:1,bare:[!0,!1],pts:[[i+3,I,e+11],[i+3,I,r]]}])]}),dr=[...lr(`hw-sr`,Y,`heat`,2.2,5,E[2]+jt+6),...lr(`hw-rr`,rr,`hotret`,2.2,3,E[2]+Mt+6),{id:`hw-feed-s`,medium:`heat`,r:2.2,pts:[gn,[gn[0],gn[1],sr],[gn[0],Y,sr],[J,Y,sr]]},{id:`hw-feed-r`,medium:`hotret`,r:2.2,pts:[[J,rr,q.suction[2]],[J,ar,q.suction[2]],[or,ar,q.suction[2]],[or,q.suction[1],q.suction[2]],q.suction]},{id:`hw-dis`,medium:`hotret`,r:ne*L[1],fromStub:!0,pts:[q.riser,[q.riser[0],q.riser[1],cr],[_n[0],_n[1],cr],_n]}],X=[Sn[0]+En[0],Sn[1]+En[1],En[2]],fr=B.x+B.w,pr=[{id:`gen-cable`,medium:`cable`,r:1.6,pts:[X,[X[0],X[1],72],[fr+12,X[1],72],[fr+12,X[1],Bn.z],[fr,X[1],Bn.z]]}],mr=[...ur,...Kn,...nr,...Jn,...dr,...pr],Z=(e,t,n,r,i=0)=>[e,t,n,r,i],hr={z:10,flanged:!0,routes:mr,posts:[Z(180,U,3.5,W),Z(60,U,3.5,W),Z(20,U,3.5,W),Z(40,Y,2.2,sr,4),Z(G[0],-416,2.6,G[2]),Z(Yn[0],-405,2.6,G[2]),...[110,150,190].flatMap(e=>[Z(e,Zn,2.6,G[2]),Z(e,$n,2.6,Qn)]),Z(X[0]-20,X[1],1.6,72,1.6)]},Q=n(),gr={x:-248,y:-164,w:92,d:58,r:3},_r=0,vr=(e,t)=>Ee(e,t,`downshot`),yr=(e,t)=>Pe(e,t,7,236-_r),br=(e,t)=>v(e,t,`coolantret`,!0),xr=(e,t)=>v(e,t,`hotret`,!0),Sr=(e,t)=>ke(e,t,100,{humidifier:!1,filterGauge:!1,fanHook:`data-vfan`,stubHalf:7,motor:!0}),Cr=[E[1]-4/2,E[2]-4/2,184-4/2];function wr(e){return te(e,en)+e.plinth(Qt)+e.plinth($t)+Ue(e)+We(e,B.x)+Ke(e,Dn)+Ke(e,Cn)+w(e,On,34,`south`,{louvres:[[30,50],[100,120],[170,190]]})+w(e,kn,64,`south`,{louvres:[[60,90],[130,160],[200,230],[260,290]]})+w(e,An,64,`east`,{doors:[[60,80]]})}var Tr=e=>Je(e,tn,6,112,236,Cr.map(e=>({z:e,toX:Ze}))),Er=e=>qe(e,B,40,Bn),Dr=e=>w(e,wn,36,`south`,{louvres:[[128,158],[200,230]]}),Or=e=>w(e,Tn,36,`east`,{louvres:[[20,50]],doors:[[56,74]]});function kr({ids:e}){let t=c(),n=_(hr,Rn),r=(0,y.useMemo)(()=>wr(t),[t]),i=(0,y.useMemo)(()=>pt(t)+mt(t),[t]),a=e=>(0,Q.jsx)(s,{html:`${n.layers[e]??``}<g data-flows="${e}" data-depth="${e}"></g>`,data:{pipes:``}},`pipes-${e}`),o=[e.rtu1,e.rtu2,e.rtu3],u=[];for(let[n,r]of o.entries())u.push(n>0?(0,Q.jsx)(s,{html:bt(t,n)},`slab${n}`):null,(0,Q.jsx)(s,{html:yt(t,n)},`win${n}`),a(zn+n),(0,Q.jsx)(s,{asset:r,intro:2+n,html:Xt(t,n)},`in${n}`),n===0?(0,Q.jsx)(s,{asset:e.fanA,intro:5,html:Ht(t)},`ahu-box`):null,a(1+n),(0,Q.jsx)(s,{html:Ct(t,n)},`col${n}`));let d={chiller:(0,Q.jsx)(g,{from:sn,to:fe(R),children:(0,Q.jsx)(l,{id:e.chiller,plan:gr,intro:12,draw:ve})}),boiler:(0,Q.jsx)(g,{to:fe(z),children:(0,Q.jsx)(l,{id:e.boiler,plan:Ne,intro:13,draw:yr})}),flue:(0,Q.jsx)(s,{html:(0,y.useMemo)(()=>Tr(t),[t]),intro:13}),xfmr:(0,Q.jsx)(s,{html:(0,y.useMemo)(()=>Ge(t),[t]),intro:16}),elec:(0,Q.jsx)(s,{html:(0,y.useMemo)(()=>Er(t),[t]),intro:16}),"gen-back":(0,Q.jsx)(s,{html:(0,y.useMemo)(()=>Dr(t),[t]),intro:15}),"gen-west":(0,Q.jsx)(s,{html:(0,y.useMemo)(()=>Or(t),[t]),intro:15}),genset:(0,Q.jsx)(`g`,{className:`gen-set`,children:(0,Q.jsx)(g,{to:fe(Sn),children:(0,Q.jsx)(l,{id:e.genset,plan:xe,intro:16,draw:Se})})})};for(let[t,[n,r]]of yn.entries())d[`pump${t}`]=(0,Q.jsx)(g,{from:un,to:fe([n,r]),scale:L[t],children:(0,Q.jsx)(l,{id:t?e.hwPump:e.chwPump,plan:de,intro:14+t,draw:t?xr:br})});for(let[t,n]of an.entries())d[`ahu${t}`]=(0,Q.jsx)(g,{to:fe([n,rn]),children:(0,Q.jsx)(l,{id:t?e.fanB:e.fanA,plan:on,intro:10+t,draw:Sr})});return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(s,{html:r,data:{plinth:``}}),a(0),(0,Q.jsx)(s,{html:i}),u,(0,Q.jsx)(s,{html:wt(t)}),it.map((e,t)=>(0,Q.jsx)(g,{to:[e,at,187],scale:ot,children:(0,Q.jsx)(l,{id:o[t]??``,plan:De,intro:6+t,draw:vr})},e)),a(4),Mn.flatMap((e,t)=>[(0,Q.jsx)(`g`,{children:d[e.key]},e.key),a(5+t)])]})}var Ar=10,jr=17,Mr=.55;function Nr(e,t,n){let{svg:a,P:s,feed:c}=e,l=d(a,`[data-occ]`).map(e=>({el:e,id:t[Number(e.dataset.occ)]??ge(e)})),u=d(a,`[data-diffuser]`).map(e=>({id:ge(e),at:f(e.dataset.diffuser),streaks:ie(e,Ar,`path`,`cr-stream`),phase:0}));return{draw(t,a,d){for(let e of l)o(e.el,`data-on`,c.num(e.id,`occupied`)>0?``:null);let f=e.reducedMotion();for(let e of u){let a=le(n(e.id));e.phase=(e.phase+a*Mr*t)%1;let[c=0,l=0,u=0,p=0]=e.at;for(let[t,n]of e.streaks.entries()){if(!d||f||a<.02||n.seed>.25+a){i(n.el,`0`);continue}let m=(e.phase+n.seed*3.1)%1,h=((t+.5)/Ar-.5)*2*(p-1.5),g=(n.seed-.5)*8,_=u-.5-m*jr,v=[c+h,l+g,_],ee=[c+h,l+g,_-3],[te,ne]=r(v,s),[re,ie]=r(ee,s);o(n.el,`d`,`M${te.toFixed(1)} ${ne.toFixed(1)}L${re.toFixed(1)} ${ie.toFixed(1)}`),i(n.el,(Math.sin(Math.PI*m)*.5).toFixed(2))}}},bar(){}}}var $=e=>e>.002?6+26*le(e*2):0,Pr=e=>{let{svg:t,feed:n,ids:r}=e,i=ce(t),a=Ae(e,i),o=ye(e,i),s=he(e,i),c=Ie(e,i),l=be(e,i),u=Ce(e,i),d=e=>le(n.num(e,`speed_feedback`)/n.param(e,`rated_rpm`,1450)),f=e=>e===r.fanA?(d(r.fanA)+d(r.fanB))/2:a.airPu(e),p=[a,o,s,c,l,u,Nr(e,[r.rtu1,r.rtu2,r.rtu3],f)],m=ue(e,e=>pe(n,e,`availability`)),h=me(e,{needle:e=>o.needle(e)??c.needle(e)??0,bar:e=>p.reduce((t,n)=>t??n.bar(e),void 0)??0,alertsHigh:()=>!0,ready:()=>!0}),g=[r.rtu1,r.rtu2,r.rtu3],_=()=>s.flowPu(r.chwPump),v=()=>s.flowPu(r.hwPump),ee=()=>{let e=n.param(r.genset,`rated_power_kva`,500)*.8;return e>0?le(n.num(r.genset,`load_actual`)/e):0},te=se(e,({id:e})=>{let t=/^(?:sup|ret)(\d)-/.exec(e);if(t)return $(a.airPu(g[Number(t[1])]??``));if(e.startsWith(`hw-s`)||e.startsWith(`hw-r`))return $(/^hw-[sr]\d$/.test(e)?v()/3:v());switch(e){case`ahu-a`:return $(d(r.fanA));case`ahu-b`:return $(d(r.fanB));case`ahu-in`:return $(f(r.fanA));case`chw-dis`:case`chw-sup`:case`chw-ret`:return $(_());case`chw-sup-b`:case`chw-ret-b`:return $(_()/2);case`hw-feed-s`:case`hw-feed-r`:case`hw-dis`:return $(v());case`gen-cable`:return $(ee());default:return 0}});return{data(e){m.draw(e)},draw({sdt:e,t,introDone:n}){te.draw(e),h.draw(e,t);for(let r of p)r.draw(e,t,n)},resync(){},status:e=>_e(n,e,`availability`)}},Fr=ae(nn),Ir=ee(Fr,hr,Rn),Lr=oe({layout:{width:Zt,height:620,label:`Isometric model of the Commercial Building: a three-storey office tower with a rooftop unit on each roof curb whose supply and return ducts drop through a chase to that storey's ceiling diffusers, and a loop of radiators along the back wall; behind it the mechanical room with the chiller, the chilled-water pump and two air handlers with their fan motors; beside it the boiler with its flue stack and heating pump, the transformer, and the standby diesel generator with its feeder to the electrical room. Pipes and ducts carry chilled water, hot water and air between them. Every moving part follows live values from the running engine.`,kit:Fr,flows:Ir.flows,joints:Ir.joints,Scene:kr,compose:Pr},resolve:Re,things:ze,caption:`rooftop units · plant · standby power`,mismatch:`This floor expects the Commercial Building: three rooftop units, the chiller with its chilled-water pump, the hot-water boiler with its heating pump, two air handler fan motors and the standby diesel generator, by area and line.`,statusBasis:`availability`,Overview:p,tab:`Building`});export{Lr as buildingFloor};
1
+ import{a as e}from"./rolldown-runtime-COnpUsM8.js";import{c as t}from"./vendor-charts-95ykyDlI.js";import{ot as n}from"./vendor-ui-D8j69UH4.js";import{C as r,a as i,b as a,c as o,d as s,f as c,l,m as u,n as d,s as f}from"./dom-CQuChC3G.js";import{n as p,t as m}from"./by-path-CKZo157c.js";import{A as h,D as g,E as _,F as v,H as ee,L as te,N as ne,P as re,T as ie,V as ae,X as oe,a as se,b as ce,g as le,i as ue,j as de,k as fe,n as pe,o as me,r as he,s as ge,t as _e}from"./status-DNfdEhTs.js";import{r as ve,t as ye}from"./chiller-Jug0vRg-.js";import{n as be,o as xe,s as Se,t as Ce}from"./genset-DBpkUT9p.js";import{t as we}from"./stages-C0cErwSQ.js";import{a as Te,i as Ee,n as De,o as Oe,s as ke,t as Ae}from"./rtu-BR4DhLbE.js";import{a as je,i as Me,n as Ne,o as Pe,r as Fe,t as Ie}from"./boiler-BQwqgoVY.js";var Le=[[`rtu1`,`hvac-rtu`,`hvac`,`floor-1`,0],[`rtu2`,`hvac-rtu`,`hvac`,`floor-2`,0],[`rtu3`,`hvac-rtu`,`hvac`,`floor-3`,0],[`chiller`,`industrial-chiller`,`chilled-water`,`plant`,0],[`chwPump`,`centrifugal-pump`,`chilled-water`,`plant`,0],[`boiler`,`hot-water-boiler`,`heating`,`boiler-room`,0],[`hwPump`,`centrifugal-pump`,`heating`,`boiler-room`,0],[`fanA`,`ac-induction-motor`,`electrical`,`ahu-fans`,0],[`fanB`,`ac-induction-motor`,`electrical`,`ahu-fans`,1],[`genset`,`diesel-generator`,`electrical`,`emergency-power`,0]],Re=e=>m(Le,e);function ze(e){let t=(e,t,n)=>({key:e,assetId:e,name:t,kind:`utility`,area:n});return[t(e.rtu1,`Rooftop unit · floor 1`,`HVAC`),t(e.rtu2,`Rooftop unit · floor 2`,`HVAC`),t(e.rtu3,`Rooftop unit · floor 3`,`HVAC`),t(e.chiller,`Chiller`,`Chilled water`),t(e.chwPump,`Chilled-water pump`,`Chilled water`),t(e.boiler,`Hot-water boiler`,`Heating`),t(e.hwPump,`Heating circulation pump`,`Heating`),t(e.fanA,`AHU supply fan 1`,`Electrical`),t(e.fanB,`AHU supply fan 2`,`Electrical`),t(e.genset,`Emergency generator`,`Electrical`)]}var y=e(t(),1),b={x:-332,y:-228,w:232,d:74,r:2},Be=29,x=1,Ve={x:-86,y:-192,w:44,d:36,r:1.5},S={x:-79,y:-184,w:30,d:20,r:1.5},C=26,He=-150;function Ue(e){let{k:t,P:n,L:r,slab:i,cyl:a}=e,o=[];for(let e=b.x+Be;e<b.x+b.w-1;e+=Be)o.push(t.segment([e,b.y,x],[e,b.y+b.d,x],n));for(let e=b.y+Be;e<b.y+b.d-1;e+=Be)o.push(t.segment([b.x,e,x],[b.x+b.w,e,x],n));let s=[i(b,0,x,{tone:`mid`,inner:r(o.join(``),{tone:`faint`})},3,.3)];for(let e of[-322,-124])s.push(i({x:e,y:-216,w:22,d:10,r:1},x,5,{tone:`mid`},2,.3),i({x:e+1.6,y:-214.4,w:18.8,d:6.8,r:.6},x+5,.6,{tone:`lo`},2,0));for(let e=-316;e<b.x+b.w-8;e+=46)s.push(a(e,b.y+b.d-4,1.3,x,7,{tone:`mid`},12));return s.join(``)}function We(e,t){let{k:n,P:r,L:i,slab:a}=e,o=Ve.x+Ve.w,s=[];for(let e=o+12;e<t-4;e+=12)s.push(n.segment([e,He-3,.6],[e,He+3,.6],r));return a({x:o,y:He-3.5,w:t-o,d:7,r:.4},0,.6,{tone:`mid`,inner:i(s.join(``),{tone:`faint`})},2,.1)}function Ge(e){let{k:t,P:n,L:r,slab:i,cyl:a}=e,{x:o,y:s,w:c,d:l}=S,u=1.5,d=[];for(let e=1;e<12;e++)d.push(t.segment([o+3+e*2,s+l+5,u+4],[o+3+e*2,s+l+5,C-4],n));let f=[i(Ve,0,u,{tone:`mid`},3,.3),i(S,u,C,{tone:`mid`},2,.5),i({x:o+3,y:s+l,w:c-6,d:5,r:.6},u+3,C-7,{tone:`mid`,inner:r(d.join(``),{tone:`faint`})},2,.2),i({x:o-.8,y:s-.8,w:c+1.6,d:l+1.6,r:1.5},u+C,1.4,{tone:`mid`},2,.2)];for(let e of[o+7,o+15,o+23])f.push(a(e,s+5,1.4,u+C+1.4,7,{tone:`mid`},12),a(e,s+5,2.2,u+C+1.4,1.4,{tone:`mid`},12));for(let e of[s+5,s+10,s+15])f.push(a(o+c-3,e,1,u+C+1.4,3,{tone:`lo`},10));return f.join(``)}function Ke(e,t,n=1.6){let{k:r,P:i,L:a,slab:o,screws:s}=e;return o(t,0,n,{tone:`mid`},3,.4)+a(r.planOutline(r.insetPlan(t,3),n,i,3),{tone:`faint`})+s(r.corners(t,4),n)}function w(e,t,n,r,{louvres:i=[],doors:a=[]}={}){let{k:o,P:s,L:c,slab:l}=e,u=[l(t,0,n,{tone:`mid`},2,.3),l({x:t.x-.6,y:t.y-.6,w:t.w+1.2,d:t.d+1.2,r:.3},n,1.4,{tone:`mid`},2,.2)],d=r===`south`?e.front(t.y+t.d):o.sideMatrix([t.x+t.w,t.y+t.d],0,s,`right`),f=[];for(let[e,t]of i){let[r,i]=[e,t];f.push(`<path class="cr-grille" d="M${r} ${-(n-9)}H${i}V-13H${r}Z"/>`);let a=[];for(let e=16;e<n-9;e+=3)a.push(`M${r+1} ${-e}H${i-1}`);f.push(c(a.join(``),{tone:`lo`}))}for(let[e,t]of a){let[r,i]=[e,t];f.push(`<path class="cr-door" d="M${r} -1H${i}V${-(n-16)}H${r}Z"/>`),f.push(c(`M${r-1.2} 0V${-(n-14.8)}H${i+1.2}V0M${r-1.2} -1H${i+1.2}`,{tone:`lo`})),f.push(`<circle class="sf-screw" cx="${i-2.4}" cy="${-(n/2-4)}" r="0.7"/>`)}return f.length&&u.push(`<g transform="${d}">${f.join(``)}</g>`),u.join(``)}function qe(e,t,n,r){let{k:i,P:a,L:o,slab:s,screws:c}=e,l=t.x+t.w,u=[w(e,t,n,`south`,{doors:[[t.x+8,t.x+22]],louvres:[[t.x+30,t.x+46]]})];u.push(s({x:t.x+t.w-18,y:t.y+8,w:10,d:8,r:.8},n+1.4,4,{tone:`mid`},2,.3));let d=i.sideMatrix([l,t.y+t.d],0,a,`right`),f=t.y+t.d-r.y;return u.push(`<g transform="${d}"><path class="sf-plate" d="M${f-7} ${-(r.z+7)}H${f+7}V${-(r.z-7)}H${f-7}Z"/>${o(`M${f-7} ${-(r.z+7)}H${f+7}V${-(r.z-7)}H${f-7}Z`,{tone:`lo`})}</g>`,c([[l+.05,r.y-5.6],[l+.05,r.y+5.6]],r.z+5.6),c([[l+.05,r.y-5.6],[l+.05,r.y+5.6]],r.z-5.6)),u.join(``)}function Je(e,[t,n],r,i,a,o){let{k:s,P:c,L:l,slab:u,cyl:d}=e,f=[],p=[];for(let e=i+48;e<a-12;e+=48)p.push(e);let m=p.map(e=>s.sideArc(t,n,r,e,c,24)).join(``);f.push(d(t,n,r,i,a-i,{tone:`mid`,inner:l(m,{tone:`faint`})},28));for(let e of p)f.push(d(t,n,r+1.2,e-.8,1.6,{tone:`mid`},28));for(let e of o)f.push(u({x:e.toX,y:n-.9,w:t-r-e.toX,d:1.8,r:.3},e.z-.9,1.8,{tone:`mid`},2,.1),u({x:e.toX-1.2,y:n-3.5,w:1.2,d:7,r:.3},e.z-3.5,7,{tone:`mid`},2,.1),d(t,n,r+.9,e.z-1.1,2.2,{tone:`mid`},28));for(let e of[0,2.1,4.2])f.push(d(t+Math.cos(e)*(r-1.4),n+Math.sin(e)*(r-1.4),.5,a,3,{tone:`lo`,crease:`none`},8));return f.push(d(t,n,r+2.2,a+3,1.2,{tone:`mid`},28)),f.join(``)}var T={x:-300,y:-268,w:290,d:32,r:.6},E=[4,64,124],D=3,Ye=6,O={x:-334,y:-268,w:34,d:32,r:.6},k=e=>(E[e+1]??184)-4,Xe={x:O.x-3,y:T.y-3,w:T.w+O.w+3+7,d:T.d+3+8,r:1.5},A={x:T.x+D,y:T.y+D,w:T.w-D,d:T.d-D,r:0},Ze=A.x+A.w,Qe=A.y+A.d,$e=[-247,-185,-123,-61,-13],et=2.2,j=2.6,M=E[0],N=-247,tt=-255,nt=11,rt=e=>k(e)-nt,it=[-246,-162,-78],at=-251,ot=.8,st=[46*ot,20*ot],ct=e=>[(it[e]??0)-9,(it[e]??0)+9],lt=e=>{let[t,n]=ct(e);return{x:t-5,y:tt-4.5,w:n-t+10,d:9,r:.3}},ut=e=>it.map((e,t)=>t).filter(t=>t<e),dt=4,P=1.6,ft=.6;function pt(e){let{k:t,P:n,L:r,slab:i}=e;return i(Xe,0,M,{tone:`mid`,inner:r(t.planOutline({x:T.x-.5,y:T.y-.5,w:T.w+1,d:T.d+1,r:0},M,n,2),{tone:`faint`})},4,.5)}function mt(e){let{k:t,P:n,L:r,S:i}=e,a=184+Ye-M,o=(e,r,i)=>t.segment([r[0],r[1],E[e]??0],[i[0],i[1],E[e]??0],n),s={x:T.x,y:T.y,w:T.w,d:D,r:.3},c={x:T.x,y:T.y+D,w:D,d:T.d-D,r:.3};return[i(t.slabOf(s,M,a,n,2,.3),{tone:`mid`,inner:r([1,2].map(e=>o(e,[s.x,s.y+s.d],[s.x+s.w,s.y+s.d])).join(``),{tone:`faint`})}),i(t.slabOf(c,M,a,n,2,.3),{tone:`mid`}),ht(e)].join(``)}function ht(e){let{k:t,P:n,L:r,S:i,front:a}=e,o=O.y+O.d,s=O.x+O.w/2,c=[],l=[];for(let[e,t]of E.entries()){for(let e of[s-8,s+.4])c.push(`<path class="cr-door" d="M${e} ${-(t+1)}h7.6v-23h-7.6Z"/>`);l.push(`M${s-9} ${-t}V${-(t+25)}H${s+9}V${-t}`),c.push(`<path class="cr-grille" d="M${s-2.4} ${-(t+28)}h4.8v-2.4h-4.8Z"/>`),e<E.length-1&&l.push(`M${O.x} ${-(k(e)+4)}H${O.x+O.w}`)}return i(t.slabOf(O,M,184-M,n,2,.4),{tone:`mid`})+`<g transform="${a(o)}">${c.join(``)}${r(l.join(``),{tone:`lo`})}</g>`}var gt=Array.from({length:6},(e,t)=>[-284+t*36,-284+t*36+32]),_t=21,vt=8;function yt(e,t){let{k:n,P:r,L:i,front:a}=e,o=(E[t]??0)+_t,s=k(t)-vt,c=(e,n)=>`<path class="bd-win bt-pane" data-occ="${t}" d="M${e} ${-s}H${n}V${-o}H${e}Z"/>`,l=(e,t)=>`M${e-1} ${-(o-1.6)}H${t+1}M${(e+t)/2} ${-s}V${-o}`,u=gt.map(([e,t])=>c(e,t)).join(``),d=gt.map(([e,t])=>l(e,t)).join(``),f=n.sideMatrix([T.x+D,T.y+T.d],0,r,`right`);return`<g transform="${a(T.y+D)}">${u}${i(d,{tone:`lo`})}</g><g transform="${f}">${c(4,20)}${i(l(4,20),{tone:`lo`})}</g>`}function bt(e,t){let{k:n,P:r,L:i,slab:a}=e,o=(E[t]??0)-4,s=[a(A,o,4,{tone:`mid`,inner:i(n.segment([A.x,A.y+A.d,o+1.4],[A.x+A.w,A.y+A.d,o+1.4],r),{tone:`faint`})},2,.4)],c=E[t]??0;for(let e of ut(t)){let t=lt(e);s.push(a({...t,d:P},c,dt,{tone:`mid`},2,.2),a({...t,w:P},c,dt,{tone:`mid`},2,.2))}return s.join(``)}function xt(e,t,n,r){let{cyl:i}=e,a=lt(t),o=(E[n]??0)+dt,s=r===`back`?a.y+ft+.4:a.y+a.d-ft-.4;return[a.x+.8,a.x+a.w-.8].map(e=>i(e,s,ft,o,k(n)-o,{tone:`mid`,crease:`none`},8))}function St(e,t){return ut(t).flatMap(n=>xt(e,n,t,`back`)).join(``)}function Ct(e,t){let{cyl:n,slab:r}=e,i=E[t]??0,a=k(t)-i,o=Qe-j,s=$e.map(e=>n(e,o,et,i,a,{tone:`mid`},14));s.push(n(Ze-j,-251,et,i,a,{tone:`mid`},14));for(let n of ut(t)){let a=lt(n);s.push(r({...a,y:a.y+a.d-P,d:P},i,dt,{tone:`mid`},2,.2),r({...a,x:a.x+a.w-P,w:P},i,dt,{tone:`mid`},2,.2),...xt(e,n,t,`front`))}return s.join(``)}function wt(e){let{k:t,P:n,L:r,S:i,slab:a}=e,o=[.25,.5,.75].map(e=>t.segment([A.x+A.w*e,A.y,184],[A.x+A.w*e,A.y+A.d,184],n)).join(``),s=A.y+A.d,c=A.x+A.w;return[i(t.slabOf(A,180,4,n,2,.4),{tone:`mid`,inner:r(o,{tone:`faint`})}),a({x:A.x,y:s-j,w:A.w,d:j,r:.3},184,Ye-1,{tone:`mid`},2,.3),a({x:c-j,y:A.y,w:j,d:A.d-j,r:.3},184,Ye-1,{tone:`mid`},2,.3),...it.map(e=>a({x:e-st[0]-1.5,y:at-st[1]-1.5,w:st[0]*2+3,d:st[1]*2+3,r:.6},184,3,{tone:`mid`},2,.2)),a({x:O.x+4,y:O.y+8,w:O.w-8,d:O.d-16,r:.6},184,14,{tone:`mid`},2,.3)].join(``)}var Tt={w:16,d:10,h:4},Et=18,Dt=1.8,Ot=[[-190,-100],[-120,-65],[-120,-204]],F={x:-24,y:N,w:16,d:14,h:12,top:32},kt={w:10,d:8,h:4},At=-262,I=-264.4,jt=5.5,Mt=1.5,Nt=1.1,Pt=[-282,-246,-210,-174,-138,-102],Ft=8.5,It=-292,Lt=(e,t)=>[e,N,k(t)-Et+Dt],Rt=[F.x,F.y,F.top+Dt],zt=e=>[ct(e)[1],tt,k(e)-Et+Dt];function Bt(e,t,n,r,i,a,o,s,c){let{k:l,P:u,L:d,D:f,slab:p,cyl:m,at:h}=e,g=o-a,_=[[t-r/2+1.5,n-i/2+1.5],[t+r/2-1.5,n-i/2+1.5],[t-r/2+1.5,n+i/2-1.5],[t+r/2-1.5,n+i/2-1.5]].map(([e=0,t=0])=>m(e,t,.5,o,s-o,{tone:`lo`,crease:`none`},8)),v=[.3,.55,.8].map(e=>l.segment([t-r/2+1.5,n+i/2,g+a*e],[t+r/2-1.5,n+i/2,g+a*e],u)).join(``),ee=[];for(let e=0;e<6;e++)ee.push([t-r/2+2+e*(r-4)/5,n+i/2,g+1.2]);return[..._,p({x:t-r/2,y:n-i/2,w:r,d:i,r:.8},g,a,{tone:`mid`,inner:d(v,{tone:`faint`})},2,.3),m(t,n,Math.min(5.2,i/2-1.2),o,Dt,{tone:`mid`},24),f(ee.map(e=>h(e)),{size:.3}),c?`<g data-diffuser="${t},${n},${g},${r/2}"></g>`:``].join(``)}var Vt=(e,t,n)=>Bt(e,t,N,Tt.w,Tt.d,Tt.h,k(n)-Et,k(n),!0),Ht=e=>Bt(e,F.x,F.y,F.w,F.d,F.h,F.top,k(0),!0),Ut=(e,t)=>Bt(e,ct(t)[1],tt,kt.w,kt.d,kt.h,k(t)-Et,k(t),!1);function Wt(e,t,n){let{k:r,P:i,L:a,slab:o}=e,s=n+11,c=s+Ft,l=-265,u=Array.from({length:7},(e,n)=>r.segment([t+3.5+n*3.5,l+3.6,s+1],[t+3.5+n*3.5,l+3.6,c-1],i)).join(``);return[...[t+5,t+28-5].map(e=>o({x:e-1,y:-265,w:2,d:.9,r:.2},s+2,4,{tone:`lo`},2,0)),o({x:t,y:l,w:28,d:3.6,r:.5},s,Ft,{tone:`mid`,inner:a(u,{tone:`faint`})},2,.3)].join(``)}function Gt(e,t,n){let{G:r,P:i,S:a}=e,o=r.frameAlong([It,t,n],[-1,0,0]);return a(r.disc(0,1.4,Nt+.7,o,i),{tone:`mid`})}function Kt(e,t,n,r,i){let{slab:a,cyl:o,front:s}=e,c=r+8,l=[a({x:t+.8,y:n+.6,w:1.2,d:6.8,r:.2},r,8,{tone:`lo`},2,0),a({x:t+22-2,y:n+.6,w:1.2,d:6.8,r:.2},r,8,{tone:`lo`},2,0),a({x:t,y:n,w:22,d:8,r:.6},c,1.4,{tone:`mid`},2,.3),o(t+22/2,n+8*.4,1.1,c+1.4,2.4,{tone:`lo`,crease:`none`},10),a({x:t+22/2-4.2,y:n+8*.4-.5,w:8.4,d:1,r:.3},c+3.8,5.4,{tone:`lo`},2,0)],u=n+8*.4+.5;return l.push(`<g transform="${s(u)}"><path class="bd-win" data-occ="${i}" d="M${t+22/2-3.6} ${-(c+4.2)}h7.2v-4.4h-7.2Z"/></g>`),l.join(``)}function qt(e,t,n,r){let{slab:i,cyl:a}=e;return[a(t,n,3,r,.8,{tone:`lo`},14),a(t,n,.6,r+.8,3.6,{tone:`lo`,crease:`none`},8),a(t,n,3.2,r+4.4,1.4,{tone:`mid`},16),i({x:t-3,y:n+2.6,w:6,d:.9,r:.3},r+5.6,5.4,{tone:`mid`},2,.2)].join(``)}function Jt(e,t,n,r){let{slab:i}=e;return[Kt(e,t,-249,n,r),Kt(e,t+25,-249,n,r),i({x:t+22.6,y:-249.5,w:1,d:7,r:.2},n+1.2,12,{tone:`mid`},2,.2),qt(e,t+11,-239.6,n),qt(e,t+36,-239.6,n)].join(``)}function Yt(e,t){let{slab:n,cyl:r}=e,i=[],a=-250;i.push(n({x:a,y:-251,w:46,d:8,r:1},t,10,{tone:`mid`},3,.4),n({x:a+36,y:-243,w:10,d:7,r:1},t,10,{tone:`mid`},3,.4),n({x:a-.8,y:-251.8,w:47.6,d:9.6,r:1},t+10,1.4,{tone:`mid`},3,.2),n({x:a+35.2,y:-243.8,w:11.6,d:8.6,r:1},t+10,1.4,{tone:`mid`},3,.2));for(let e of[-170,-144])i.push(n({x:e,y:-250,w:20,d:6,r:.8},t+3.2,3,{tone:`mid`},2,.3),n({x:e,y:-252,w:20,d:2,r:.4},t+6.2,6,{tone:`mid`},2,.2),r(e+2.4,-245.4,.9,t,3.2,{tone:`lo`,crease:`none`},8),r(e+17.6,-245.4,.9,t,3.2,{tone:`lo`,crease:`none`},8));return i.join(``)}function Xt(e,t){let n=E[t]??0,r=Pt.map(t=>Wt(e,t,n));r.push(Gt(e,At,n+jt),Gt(e,I,n+Mt));let i=Ot[t]??[];r.push(St(e,t));for(let n of i)r.push(Vt(e,n,t));if(r.push(Ut(e,t)),t===0)r.push(Yt(e,n));else for(let a of i)r.push(Jt(e,a-23.5,n,t));return r.join(``)}var Zt=1e3,Qt={x:-352,y:-286,w:652,d:170,r:8},$t={x:-14,y:-516,w:314,d:220,r:8},en={x:-374,y:-538,w:690,d:444,r:16},tn=[34,-242],nn=a([...u(en,-21,-14),...u(Qt,-14,20),...u($t,-14,20),...u(Xe,0,214),...u({x:26,y:-250,w:16,d:16,r:0},0,244)],Zt,620,{pad:22,azimuth:60}),rn=-325,an=[70,205],on=Te(100,!0),sn=[-202,-135,0],cn=[-34,36.6,40],ln=[-20,36.6,40],un=[94,-130,0],L=[.55,.5],dn=-385,fn=-462,pn=(e,t)=>[(e[0]-un[0])*t,(e[1]-un[1])*t,e[2]*t],mn=e=>{let t=an[e],n=Oe(100,7),r=e=>[t+e[0],rn+e[1],e[2]];return{supply:r(n.chwSupply),ret:r(n.chwReturn),discharge:r(n.discharge)}},hn=[mn(0),mn(1)],R=[hn[0].supply[0]-ln[0],fn],z=[tn[0]-Me[0],tn[1]],gn=[z[0]+je[0],z[1]+je[1],je[2]],_n=[z[0]+Fe[0],z[1]+Fe[1],Fe[2]],vn=(e,t,n)=>[e-pn(h,L[n])[0],t],yn=[vn(R[0]+cn[0],dn,0),vn(_n[0],-204,1)],bn=(e,t)=>{let[n,r]=yn[e]??[0,0],[i,a,o]=pn(t,L[e]);return[n+i,r+a,o]},xn=[{suction:bn(0,re),riser:bn(0,h)},{suction:bn(1,re),riser:bn(1,h)}],Sn=[190,-150],B={x:24,y:-160,w:56,d:44,r:1},Cn={x:108,y:-192,w:164,d:72,r:2},wn={x:108,y:-194,w:164,d:3,r:.3},Tn={x:108,y:-194,w:3,d:76,r:.3},En=[-49,0,60.8],Dn={x:0,y:-272,w:252,d:76,r:2},On={x:2,y:-270,w:250,d:3,r:.3},kn={x:-10,y:-512,w:306,d:4,r:.3},An={x:-12,y:-512,w:4,d:214,r:.3},jn=we([...yn.map((e,t)=>({key:`pump${t}`,at:e,h:45*L[t]})),{key:`chiller`,at:R,h:56},{key:`boiler`,at:z,h:je[2]-8},{key:`flue`,at:tn,h:236},...an.map((e,t)=>({key:`ahu${t}`,at:[e,rn],h:36})),{key:`xfmr`,at:[S.x+S.w/2,S.y+S.d/2],h:36},{key:`genset`,at:Sn,h:126},{key:`elec`,at:[B.x+B.w/2,B.y+B.d/2],h:46},{key:`gen-back`,at:[wn.x+wn.w/2,wn.y],h:36},{key:`gen-west`,at:[Tn.x,Tn.y+Tn.d/2],h:36}],nn),Mn=jn.order,Nn=E.length,Pn=([e,t])=>e<14&&t>-269&&t<-232,Fn=([e,t])=>e<-8&&t<-269,In=([e,t])=>e<-8&&t<-256.5,Ln=e=>E.filter((t,n)=>n>0&&e>=t).length,Rn={layer:e=>Fn(e)?0:Pn(e)&&e[2]>=184?Nn+1:Pn(e)&&In(e)?zn+Ln(e[2]):Pn(e)?1+Ln(e[2]):Nn+1+jn.depth.layer(e),glide:()=>!0},zn=Nn+1+Mn.length+1,Bn={y:Sn[1],z:26};function Vn(e,t){return[e,...[...E].filter(n=>n>0&&n<e&&n>t).sort((e,t)=>t-e),t]}var Hn=3.2,Un=2.2,Wn=180;function Gn(e,t,n,r){let i=Vn(Wn,n);return i.slice(0,-1).map((n,a)=>{let o=[[t,tt,n],[t,tt,i[a+1]??0]];return a===i.length-2&&o.push(...r),{id:`${e}${a}`,medium:`duct`,r:Hn,bend:2,bare:[a===0,!1],pts:o}})}var Kn=[0,1,2].flatMap(e=>{let t=rt(e),[n,r]=ct(e),i=[...Ot[e]??[]].sort((e,t)=>Math.abs(e-n)-Math.abs(t-n)),a=i[i.length-1]??n,o=i.slice(0,-1).map((n,r)=>({id:`sup${e}-n${r}`,medium:`duct`,r:Un,pts:[[n,N,t],Lt(n,e)]}));return[...Gn(`sup${e}-`,n,t,[[n,N,t],[a,N,t],Lt(a,e)]),...o,...Gn(`ret${e}-`,r,zt(e)[2],[])]}),[V,H]=hn,U=-279,qn=Rt[0],W=40,Jn=[{id:`ahu-a`,medium:`duct`,r:3.5,pts:[V.discharge,[V.discharge[0],U,V.discharge[2]],[V.discharge[0],U,W]]},{id:`ahu-b`,medium:`duct`,r:3.5,pts:[H.discharge,[H.discharge[0],U,H.discharge[2]],[H.discharge[0],U,W],[qn,U,W],[qn,-266.5,W]]},{id:`ahu-in`,medium:`duct`,r:3.5,pts:[[qn,-265,W],[qn,Rt[1],W],Rt]}],G=[R[0]+ln[0],R[1]+ln[1],ln[2]],Yn=[R[0]+cn[0],R[1]+cn[1],cn[2]],[K,q]=xn,Xn=46,Zn=-360,Qn=K.suction[2],$n=K.suction[1],er=V.supply[1],tr=e=>[[e,er,Xn],[e,$n,Xn],[e,$n,Qn]],nr=[{id:`chw-dis`,medium:`coolantret`,r:ne*L[0],fromStub:!0,pts:[K.riser,[K.riser[0],K.riser[1],Yn[2]],Yn]},{id:`chw-sup`,medium:`coolant`,r:2.6,pts:[G,[G[0],er,G[2]],V.supply]},{id:`chw-sup-b`,medium:`coolant`,r:2.6,pts:[[G[0],Zn,G[2]],[H.supply[0],Zn,G[2]],[H.supply[0],er,G[2]],H.supply]},{id:`chw-ret-b`,medium:`coolantret`,r:2.6,pts:[H.ret,...tr(H.ret[0]),K.suction]},{id:`chw-ret`,medium:`coolantret`,r:2.6,pts:[V.ret,...tr(V.ret[0])]}],J=-6,Y=At,rr=-258,ir=-18,ar=-180,or=q.suction[0]+40,sr=70,cr=_n[2]+20,lr=(e,t,n,r,i,a)=>Vn(a,i).slice(0,-1).map((o,s,c)=>{let l=s===c.length-1?i:Vn(a,i)[s+1]??i;return{id:`${e}${s}`,medium:n,r,blind:[s===c.length-1,s===0],pts:[[J,t,l],[J,t,o]]}}),ur=E.flatMap((e,t)=>{let n=e+jt,r=e+Mt;return[{id:`hw-s${t}`,medium:`heat`,r:Nt,blind:[!1,!0],pts:[[J,Y,n],[It,Y,n]]},{id:`hw-r${t}`,medium:`hotret`,r:Nt,blind:[!0,!1],pts:[[It,I,r],[ir,I,r],[ir,rr,r],[J,rr,r]]},...Pt.flatMap((i,a)=>[{id:`hw-st${t}-${a}`,medium:`heat`,r:1,bare:[!1,!0],pts:[[i+28-3,Y,n],[i+28-3,Y,e+11]]},{id:`hw-rt${t}-${a}`,medium:`hotret`,r:1,bare:[!0,!1],pts:[[i+3,I,e+11],[i+3,I,r]]}])]}),dr=[...lr(`hw-sr`,Y,`heat`,2.2,5,E[2]+jt+6),...lr(`hw-rr`,rr,`hotret`,2.2,3,E[2]+Mt+6),{id:`hw-feed-s`,medium:`heat`,r:2.2,pts:[gn,[gn[0],gn[1],sr],[gn[0],Y,sr],[J,Y,sr]]},{id:`hw-feed-r`,medium:`hotret`,r:2.2,pts:[[J,rr,q.suction[2]],[J,ar,q.suction[2]],[or,ar,q.suction[2]],[or,q.suction[1],q.suction[2]],q.suction]},{id:`hw-dis`,medium:`hotret`,r:ne*L[1],fromStub:!0,pts:[q.riser,[q.riser[0],q.riser[1],cr],[_n[0],_n[1],cr],_n]}],X=[Sn[0]+En[0],Sn[1]+En[1],En[2]],fr=B.x+B.w,pr=[{id:`gen-cable`,medium:`cable`,r:1.6,pts:[X,[X[0],X[1],72],[fr+12,X[1],72],[fr+12,X[1],Bn.z],[fr,X[1],Bn.z]]}],mr=[...ur,...Kn,...nr,...Jn,...dr,...pr],Z=(e,t,n,r,i=0)=>[e,t,n,r,i],hr={z:10,flanged:!0,routes:mr,posts:[Z(180,U,3.5,W),Z(60,U,3.5,W),Z(20,U,3.5,W),Z(40,Y,2.2,sr,4),Z(G[0],-416,2.6,G[2]),Z(Yn[0],-405,2.6,G[2]),...[110,150,190].flatMap(e=>[Z(e,Zn,2.6,G[2]),Z(e,$n,2.6,Qn)]),Z(X[0]-20,X[1],1.6,72,1.6)]},Q=n(),gr={x:-248,y:-164,w:92,d:58,r:3},_r=0,vr=(e,t)=>Ee(e,t,`downshot`),yr=(e,t)=>Pe(e,t,7,236-_r),br=(e,t)=>v(e,t,`coolantret`,!0),xr=(e,t)=>v(e,t,`hotret`,!0),Sr=(e,t)=>ke(e,t,100,{humidifier:!1,filterGauge:!1,fanHook:`data-vfan`,stubHalf:7,motor:!0}),Cr=[E[1]-4/2,E[2]-4/2,184-4/2];function wr(e){return te(e,en)+e.plinth(Qt)+e.plinth($t)+Ue(e)+We(e,B.x)+Ke(e,Dn)+Ke(e,Cn)+w(e,On,34,`south`,{louvres:[[30,50],[100,120],[170,190]]})+w(e,kn,64,`south`,{louvres:[[60,90],[130,160],[200,230],[260,290]]})+w(e,An,64,`east`,{doors:[[60,80]]})}var Tr=e=>Je(e,tn,6,112,236,Cr.map(e=>({z:e,toX:Ze}))),Er=e=>qe(e,B,40,Bn),Dr=e=>w(e,wn,36,`south`,{louvres:[[128,158],[200,230]]}),Or=e=>w(e,Tn,36,`east`,{louvres:[[20,50]],doors:[[56,74]]});function kr({ids:e}){let t=c(),n=_(hr,Rn),r=(0,y.useMemo)(()=>wr(t),[t]),i=(0,y.useMemo)(()=>pt(t)+mt(t),[t]),a=e=>(0,Q.jsx)(s,{html:`${n.layers[e]??``}<g data-flows="${e}" data-depth="${e}"></g>`,data:{pipes:``}},`pipes-${e}`),o=[e.rtu1,e.rtu2,e.rtu3],u=[];for(let[n,r]of o.entries())u.push(n>0?(0,Q.jsx)(s,{html:bt(t,n)},`slab${n}`):null,(0,Q.jsx)(s,{html:yt(t,n)},`win${n}`),a(zn+n),(0,Q.jsx)(s,{asset:r,intro:2+n,html:Xt(t,n)},`in${n}`),n===0?(0,Q.jsx)(s,{asset:e.fanA,intro:5,html:Ht(t)},`ahu-box`):null,a(1+n),(0,Q.jsx)(s,{html:Ct(t,n)},`col${n}`));let d={chiller:(0,Q.jsx)(g,{from:sn,to:fe(R),children:(0,Q.jsx)(l,{id:e.chiller,plan:gr,intro:12,draw:ve})}),boiler:(0,Q.jsx)(g,{to:fe(z),children:(0,Q.jsx)(l,{id:e.boiler,plan:Ne,intro:13,draw:yr})}),flue:(0,Q.jsx)(s,{html:(0,y.useMemo)(()=>Tr(t),[t]),intro:13}),xfmr:(0,Q.jsx)(s,{html:(0,y.useMemo)(()=>Ge(t),[t]),intro:16}),elec:(0,Q.jsx)(s,{html:(0,y.useMemo)(()=>Er(t),[t]),intro:16}),"gen-back":(0,Q.jsx)(s,{html:(0,y.useMemo)(()=>Dr(t),[t]),intro:15}),"gen-west":(0,Q.jsx)(s,{html:(0,y.useMemo)(()=>Or(t),[t]),intro:15}),genset:(0,Q.jsx)(`g`,{className:`gen-set`,children:(0,Q.jsx)(g,{to:fe(Sn),children:(0,Q.jsx)(l,{id:e.genset,plan:xe,intro:16,draw:Se})})})};for(let[t,[n,r]]of yn.entries())d[`pump${t}`]=(0,Q.jsx)(g,{from:un,to:fe([n,r]),scale:L[t],children:(0,Q.jsx)(l,{id:t?e.hwPump:e.chwPump,plan:de,intro:14+t,draw:t?xr:br})});for(let[t,n]of an.entries())d[`ahu${t}`]=(0,Q.jsx)(g,{to:fe([n,rn]),children:(0,Q.jsx)(l,{id:t?e.fanB:e.fanA,plan:on,intro:10+t,draw:Sr})});return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(s,{html:r,data:{plinth:``}}),a(0),(0,Q.jsx)(s,{html:i}),u,(0,Q.jsx)(s,{html:wt(t)}),it.map((e,t)=>(0,Q.jsx)(g,{to:[e,at,187],scale:ot,children:(0,Q.jsx)(l,{id:o[t]??``,plan:De,intro:6+t,draw:vr})},e)),a(4),Mn.flatMap((e,t)=>[(0,Q.jsx)(`g`,{children:d[e.key]},e.key),a(5+t)])]})}var Ar=10,jr=17,Mr=.55;function Nr(e,t,n){let{svg:a,P:s,feed:c}=e,l=d(a,`[data-occ]`).map(e=>({el:e,id:t[Number(e.dataset.occ)]??ge(e)})),u=d(a,`[data-diffuser]`).map(e=>({id:ge(e),at:f(e.dataset.diffuser),streaks:ie(e,Ar,`path`,`cr-stream`),phase:0}));return{draw(t,a,d){for(let e of l)o(e.el,`data-on`,c.num(e.id,`occupied`)>0?``:null);let f=e.reducedMotion();for(let e of u){let a=le(n(e.id));e.phase=(e.phase+a*Mr*t)%1;let[c=0,l=0,u=0,p=0]=e.at;for(let[t,n]of e.streaks.entries()){if(!d||f||a<.02||n.seed>.25+a){i(n.el,`0`);continue}let m=(e.phase+n.seed*3.1)%1,h=((t+.5)/Ar-.5)*2*(p-1.5),g=(n.seed-.5)*8,_=u-.5-m*jr,v=[c+h,l+g,_],ee=[c+h,l+g,_-3],[te,ne]=r(v,s),[re,ie]=r(ee,s);o(n.el,`d`,`M${te.toFixed(1)} ${ne.toFixed(1)}L${re.toFixed(1)} ${ie.toFixed(1)}`),i(n.el,(Math.sin(Math.PI*m)*.5).toFixed(2))}}},bar(){}}}var $=e=>e>.002?6+26*le(e*2):0,Pr=e=>{let{svg:t,feed:n,ids:r}=e,i=ce(t),a=Ae(e,i),o=ye(e,i),s=he(e,i),c=Ie(e,i),l=be(e,i),u=Ce(e,i),d=e=>le(n.num(e,`speed_feedback`)/n.param(e,`rated_rpm`,1450)),f=e=>e===r.fanA?(d(r.fanA)+d(r.fanB))/2:a.airPu(e),p=[a,o,s,c,l,u,Nr(e,[r.rtu1,r.rtu2,r.rtu3],f)],m=ue(e,e=>pe(n,e,`availability`)),h=me(e,{needle:e=>o.needle(e)??c.needle(e)??0,bar:e=>p.reduce((t,n)=>t??n.bar(e),void 0)??0,alertsHigh:()=>!0,ready:()=>!0}),g=[r.rtu1,r.rtu2,r.rtu3],_=()=>s.flowPu(r.chwPump),v=()=>s.flowPu(r.hwPump),ee=()=>{let e=n.param(r.genset,`rated_power_kva`,500)*.8;return e>0?le(n.num(r.genset,`load_actual`)/e):0},te=se(e,({id:e})=>{let t=/^(?:sup|ret)(\d)-/.exec(e);if(t)return $(a.airPu(g[Number(t[1])]??``));if(e.startsWith(`hw-s`)||e.startsWith(`hw-r`))return $(/^hw-[sr]\d$/.test(e)?v()/3:v());switch(e){case`ahu-a`:return $(d(r.fanA));case`ahu-b`:return $(d(r.fanB));case`ahu-in`:return $(f(r.fanA));case`chw-dis`:case`chw-sup`:case`chw-ret`:return $(_());case`chw-sup-b`:case`chw-ret-b`:return $(_()/2);case`hw-feed-s`:case`hw-feed-r`:case`hw-dis`:return $(v());case`gen-cable`:return $(ee());default:return 0}});return{data(e){m.draw(e)},draw({sdt:e,t,introDone:n}){te.draw(e),h.draw(e,t);for(let r of p)r.draw(e,t,n)},resync(){},status:e=>_e(n,e,`availability`)}},Fr=ae(nn),Ir=ee(Fr,hr,Rn),Lr=oe({layout:{width:Zt,height:620,label:`Isometric model of the Commercial Building: a three-storey office tower with a rooftop unit on each roof curb whose supply and return ducts drop through a chase to that storey's ceiling diffusers, and a loop of radiators along the back wall; behind it the mechanical room with the chiller, the chilled-water pump and two air handlers with their fan motors; beside it the boiler with its flue stack and heating pump, the transformer, and the standby diesel generator with its feeder to the electrical room. Pipes and ducts carry chilled water, hot water and air between them. Every moving part follows live values from the running engine.`,kit:Fr,flows:Ir.flows,joints:Ir.joints,Scene:kr,compose:Pr},resolve:Re,things:ze,caption:`rooftop units · plant · standby power`,mismatch:`This floor expects the Commercial Building: three rooftop units, the chiller with its chilled-water pump, the hot-water boiler with its heating pump, two air handler fan motors and the standby diesel generator, by area and line.`,statusBasis:`availability`,Overview:p,tab:`Building`});export{Lr as buildingFloor};
@@ -1 +1 @@
1
- import{ot as e}from"./vendor-ui-D8j69UH4.js";import{t}from"./utils-XFKvwlFT.js";import{a as n}from"./use-engine-command-mutation-DrMOfYty.js";var r=e(),i=`inline-flex items-center gap-1 rounded-[var(--miravo-radius-tight)] outline-none transition-colors hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring`,a={live:`bg-success shadow-[0_0_0_1px_color-mix(in_srgb,var(--success)_50%,transparent),0_0_12px_color-mix(in_srgb,var(--success)_42%,transparent)]`,idle:`bg-warning/85 shadow-[0_0_0_1px_color-mix(in_srgb,var(--warning)_50%,transparent),0_0_12px_color-mix(in_srgb,var(--warning)_38%,transparent)]`,fault:`bg-destructive shadow-[0_0_0_1px_color-mix(in_srgb,var(--destructive)_50%,transparent),0_0_12px_color-mix(in_srgb,var(--destructive)_38%,transparent)]`,off:`bg-muted-foreground/55`};function o({tone:e,children:n,className:i}){return(0,r.jsxs)(`div`,{className:t(`flex shrink-0 items-center gap-2 rounded-[var(--miravo-radius-pill)] border border-border/60 bg-background/60 px-2.5 py-1 backdrop-blur-sm`,i),children:[(0,r.jsxs)(`span`,{className:`relative flex size-1.5 items-center justify-center`,children:[(0,r.jsx)(`span`,{className:t(`size-1.5 rounded-full`,a[e])}),e===`live`&&(0,r.jsx)(`span`,{className:`absolute inset-0 animate-ping rounded-full bg-success/60`})]}),(0,r.jsx)(`span`,{className:`text-[11px] leading-none text-muted-foreground`,children:n})]})}function s({children:e}){return(0,r.jsx)(`span`,{className:`text-[10px] uppercase tracking-[0.14em]`,children:e})}function c({icon:e,title:i,description:a,aside:o,footer:s,children:c,id:l,className:u,bodyClassName:d}){return(0,r.jsxs)(`section`,{id:l,tabIndex:l?-1:void 0,"aria-label":typeof i==`string`?i:void 0,className:t(n,`flex min-w-0 scroll-mt-4 flex-col outline-none hover:border-border`,u),children:[(0,r.jsxs)(`header`,{className:`flex items-start justify-between gap-3 border-b border-border/60 px-4 py-3`,children:[(0,r.jsxs)(`div`,{className:`flex min-w-0 items-start gap-3`,children:[(0,r.jsx)(`div`,{className:`mt-0.5 flex size-7 shrink-0 items-center justify-center rounded-[var(--miravo-radius-tight)] border border-border/60 bg-background/70 text-muted-foreground`,"aria-hidden":!0,children:(0,r.jsx)(e,{className:`size-3.5`})}),(0,r.jsxs)(`div`,{className:`min-w-0`,children:[(0,r.jsx)(`h2`,{className:`font-heading text-sm font-semibold tracking-tight text-foreground`,children:i}),a?(0,r.jsx)(`p`,{className:`mt-0.5 text-pretty text-xs text-muted-foreground`,children:a}):null]})]}),o?(0,r.jsx)(`div`,{className:`flex shrink-0 items-center gap-2`,children:o}):null]}),c===void 0?null:(0,r.jsx)(`div`,{className:t(`flex min-w-0 flex-col px-4 py-4`,d),children:c}),s?(0,r.jsx)(`div`,{className:`mt-auto flex min-w-0 flex-wrap items-center gap-x-4 gap-y-2 border-t border-border/60 bg-background/40 px-4 py-2.5 text-xs text-muted-foreground`,children:s}):null]})}export{o as i,i as n,s as r,c as t};
1
+ import{ot as e}from"./vendor-ui-D8j69UH4.js";import{t}from"./utils-XFKvwlFT.js";import{a as n}from"./use-engine-command-mutation-CTbPh58S.js";var r=e(),i=`inline-flex items-center gap-1 rounded-[var(--miravo-radius-tight)] outline-none transition-colors hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring`,a={live:`bg-success shadow-[0_0_0_1px_color-mix(in_srgb,var(--success)_50%,transparent),0_0_12px_color-mix(in_srgb,var(--success)_42%,transparent)]`,idle:`bg-warning/85 shadow-[0_0_0_1px_color-mix(in_srgb,var(--warning)_50%,transparent),0_0_12px_color-mix(in_srgb,var(--warning)_38%,transparent)]`,fault:`bg-destructive shadow-[0_0_0_1px_color-mix(in_srgb,var(--destructive)_50%,transparent),0_0_12px_color-mix(in_srgb,var(--destructive)_38%,transparent)]`,off:`bg-muted-foreground/55`};function o({tone:e,children:n,className:i}){return(0,r.jsxs)(`div`,{className:t(`flex shrink-0 items-center gap-2 rounded-[var(--miravo-radius-pill)] border border-border/60 bg-background/60 px-2.5 py-1 backdrop-blur-sm`,i),children:[(0,r.jsxs)(`span`,{className:`relative flex size-1.5 items-center justify-center`,children:[(0,r.jsx)(`span`,{className:t(`size-1.5 rounded-full`,a[e])}),e===`live`&&(0,r.jsx)(`span`,{className:`absolute inset-0 animate-ping rounded-full bg-success/60`})]}),(0,r.jsx)(`span`,{className:`text-[11px] leading-none text-muted-foreground`,children:n})]})}function s({children:e}){return(0,r.jsx)(`span`,{className:`text-[10px] uppercase tracking-[0.14em]`,children:e})}function c({icon:e,title:i,description:a,aside:o,footer:s,children:c,id:l,className:u,bodyClassName:d}){return(0,r.jsxs)(`section`,{id:l,tabIndex:l?-1:void 0,"aria-label":typeof i==`string`?i:void 0,className:t(n,`flex min-w-0 scroll-mt-4 flex-col outline-none hover:border-border`,u),children:[(0,r.jsxs)(`header`,{className:`flex items-start justify-between gap-3 border-b border-border/60 px-4 py-3`,children:[(0,r.jsxs)(`div`,{className:`flex min-w-0 items-start gap-3`,children:[(0,r.jsx)(`div`,{className:`mt-0.5 flex size-7 shrink-0 items-center justify-center rounded-[var(--miravo-radius-tight)] border border-border/60 bg-background/70 text-muted-foreground`,"aria-hidden":!0,children:(0,r.jsx)(e,{className:`size-3.5`})}),(0,r.jsxs)(`div`,{className:`min-w-0`,children:[(0,r.jsx)(`h2`,{className:`font-heading text-sm font-semibold tracking-tight text-foreground`,children:i}),a?(0,r.jsx)(`p`,{className:`mt-0.5 text-pretty text-xs text-muted-foreground`,children:a}):null]})]}),o?(0,r.jsx)(`div`,{className:`flex shrink-0 items-center gap-2`,children:o}):null]}),c===void 0?null:(0,r.jsx)(`div`,{className:t(`flex min-w-0 flex-col px-4 py-4`,d),children:c}),s?(0,r.jsx)(`div`,{className:`mt-auto flex min-w-0 flex-wrap items-center gap-x-4 gap-y-2 border-t border-border/60 bg-background/40 px-4 py-2.5 text-xs text-muted-foreground`,children:s}):null]})}export{o as i,i as n,s as r,c as t};
@@ -0,0 +1 @@
1
+ import{a as e}from"./rolldown-runtime-COnpUsM8.js";import{c as t}from"./vendor-charts-95ykyDlI.js";import{ot as n}from"./vendor-ui-D8j69UH4.js";import{et as r,vt as i}from"./api-GfuYYI6q.js";import{t as a}from"./proxy-CWZabK8f.js";import{t as o}from"./AnimatePresence-BSSlw02V.js";import{i as s,r as c}from"./dist-xY0pK9Wy.js";import{a as l,i as u,n as d,o as f,r as p,t as m}from"./dialog-B5PqrKVw.js";import{t as h}from"./shallow-Cin0mLuv.js";import{C as g,S as _,d as ee,l as te}from"./format-Bx7DF-TB.js";import{n as v,t as y}from"./utils-XFKvwlFT.js";import{n as b}from"./server-BVem_egD.js";import{n as x}from"./circle-x-6JtFdy1_.js";import{n as S}from"./protocol-card-1DCkgN_l.js";import{n as C,t as w}from"./sliders-horizontal-BNKmYQgd.js";import{t as T}from"./pause-CqW7v5Dc.js";import{a as E,l as ne,t as D}from"./use-engine-command-mutation-CTbPh58S.js";import{t as re}from"./rocket-KZ5oHK1G.js";import{t as ie}from"./triangle-alert-DoAwrRgk.js";import{a as ae,n as oe,r as O,t as k}from"./validation-DSsZ8qyt.js";import{i as A,n as j,t as M}from"./tooltip-B3vOB1Vu.js";import{t as N}from"./badge-Bk1DaL6C.js";import{t as P}from"./label-2sIXTEUK.js";import{i as F,r as I,t as L}from"./console-panel-DOt0r_Oz.js";import{i as R,n as z,r as B,t as V}from"./tabs-Ch_VG8_S.js";import{a as H,c as U,i as W,l as G,n as K,o as q,r as se,s as J,t as ce}from"./combobox-B8h0-NHs.js";import{c as le,i as ue,n as de,s as fe,t as pe}from"./select-BWlrSYlA.js";var me=v(`octagon-alert`,[[`path`,{d:`M12 16h.01`,key:`1drbdi`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M15.312 2a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586l-4.688-4.688A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2z`,key:`1fd625`}]]),Y=v(`radio-tower`,[[`path`,{d:`M4.9 16.1C1 12.2 1 5.8 4.9 1.9`,key:`s0qx1y`}],[`path`,{d:`M7.8 4.7a6.14 6.14 0 0 0-.8 7.5`,key:`1idnkw`}],[`circle`,{cx:`12`,cy:`9`,r:`2`,key:`1092wv`}],[`path`,{d:`M16.2 4.8c2 2 2.26 5.11.8 7.47`,key:`ojru2q`}],[`path`,{d:`M19.1 1.9a9.96 9.96 0 0 1 0 14.1`,key:`rhi7fg`}],[`path`,{d:`M9.5 18h5`,key:`mfy3pd`}],[`path`,{d:`m8 22 4-11 4 11`,key:`25yftu`}]]),X=e(t(),1),Z=n();function he(){let{assets:e,models:t}=i(h(e=>({assets:e.assets,models:e.models}))),n=D(),[r,s]=(0,X.useState)(``),[c,l]=(0,X.useState)(``),[u,d]=(0,X.useState)(``),f=(0,X.useMemo)(()=>u?e.filter(e=>e.id.toLowerCase().includes(u.toLowerCase())):e,[e,u]),p=(0,X.useMemo)(()=>{let n=e.find(e=>e.id===r);return n?t.find(e=>e.name===n.model)?.faultNames??[]:[]},[r,e,t]),m=(0,X.useMemo)(()=>e.filter(e=>e.activeFaults.length>0),[e]),_=m.reduce((e,t)=>e+t.activeFaults.length,0);return(0,Z.jsxs)(q,{className:`h-full min-w-0`,children:[(0,Z.jsx)(U,{className:`pb-3`,children:(0,Z.jsxs)(G,{className:`flex items-center gap-2 text-xs font-medium uppercase tracking-wider`,children:[(0,Z.jsx)(ie,{className:`size-3.5 ${_>0?`text-destructive`:`text-muted-foreground`}`}),`Fault Lab`,(0,Z.jsx)(o,{children:_>0&&(0,Z.jsx)(a.div,{initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},transition:{type:`spring`,stiffness:500,damping:30},children:(0,Z.jsxs)(N,{variant:`destructive`,className:`text-[10px]`,children:[_,` active`]})},`fault-count`)})]})}),(0,Z.jsxs)(J,{className:`flex flex-1 flex-col gap-3`,children:[(0,Z.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-2`,children:[(0,Z.jsxs)(ce,{value:r||null,onValueChange:e=>{s(e??``),l(``)},onInputValueChange:d,children:[(0,Z.jsx)(se,{placeholder:`Select asset`,"aria-label":`Fault asset`,className:`h-8 min-h-11 w-full min-w-0 touch-manipulation sm:min-h-8`,showClear:!!r}),(0,Z.jsx)(K,{children:(0,Z.jsxs)(H,{children:[f.map(e=>(0,Z.jsxs)(W,{value:e.id,children:[(0,Z.jsx)(`span`,{className:`font-mono`,children:e.id}),e.activeFaults.length>0&&(0,Z.jsx)(N,{variant:`destructive`,className:`ml-auto text-[10px]`,children:e.activeFaults.length})]},e.id)),f.length===0&&(0,Z.jsx)(`p`,{className:`py-2 text-center text-xs text-muted-foreground`,children:`No assets found`})]})})]}),(0,Z.jsxs)(pe,{value:c,onValueChange:e=>l(e??``),children:[(0,Z.jsx)(fe,{className:`h-8 min-h-11 w-full touch-manipulation sm:min-h-8`,"aria-label":`Fault type`,children:(0,Z.jsx)(le,{placeholder:r?`Select fault`:`Pick asset first`})}),(0,Z.jsx)(de,{alignItemWithTrigger:!1,align:`start`,children:p.map(e=>(0,Z.jsx)(ue,{value:e,children:e},e))})]})]}),(0,Z.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,Z.jsx)(g,{variant:`destructive`,size:`sm`,className:`h-7 min-h-11 touch-manipulation text-xs sm:min-h-7`,disabled:!r||!c,onClick:()=>{let e=O(k,{assetId:r,fault:c});e&&n.mutate({type:`triggerFault`,...e})},children:`Trigger`}),(0,Z.jsx)(g,{variant:`secondary`,size:`sm`,className:`h-7 min-h-11 touch-manipulation text-xs sm:min-h-7`,disabled:!r||!c,onClick:()=>{let e=O(k,{assetId:r,fault:c});e&&n.mutate({type:`clearFault`,...e})},children:`Clear`})]}),(0,Z.jsx)(ae,{}),(0,Z.jsx)(o,{mode:`wait`,initial:!1,children:m.length>0?(0,Z.jsxs)(a.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.15},className:`flex flex-col gap-2`,children:[(0,Z.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Faulted Assets`}),(0,Z.jsx)(o,{initial:!1,children:m.map(e=>(0,Z.jsx)(a.div,{initial:{opacity:0,x:-6},animate:{opacity:1,x:0},exit:{opacity:0,x:6,transition:{duration:.1}},transition:{type:`spring`,stiffness:400,damping:35},children:(0,Z.jsxs)(`button`,{type:`button`,className:`flex min-h-11 w-full touch-manipulation items-center justify-between rounded-[var(--miravo-radius-tight)] border border-destructive/20 bg-destructive/5 px-2.5 py-1.5 text-left transition-colors hover:bg-destructive/10 sm:min-h-0`,onClick:()=>{s(e.id),l(``)},children:[(0,Z.jsx)(`span`,{className:`truncate font-mono text-xs`,children:e.id}),(0,Z.jsx)(`span`,{className:`shrink-0 font-mono text-[10px] text-destructive`,children:e.activeFaults.join(`, `)})]})},e.id))})]},`faulted`):(0,Z.jsxs)(a.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.15},className:`flex items-center gap-2 py-1 text-xs text-muted-foreground`,children:[(0,Z.jsx)(x,{className:`size-3.5 text-success`}),`All clear — no active faults`]},`all-clear`)})]})]})}function ge(e){let t=Math.floor(e/1e3),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60;return n>0?`${n}h ${r}m`:r>0?`${r}m ${i}s`:`${i}s`}function _e(e){if(!Number.isFinite(e)||e<=0)return`0s`;if(e<60)return`${e.toFixed(1)}s`;let t=Math.floor(e),n=Math.floor(t/86400),r=Math.floor(t%86400/3600),i=Math.floor(t%3600/60),a=t%60;return n>0?r>0?`${n}d ${r}h`:i>0?`${n}d ${i}m`:`${n}d`:r>0?`${r}h ${i}m`:i>0?`${i}m ${a}s`:`${a}s`}function ve({data:e}){let t=(0,X.useMemo)(()=>{if(e.length<2)return null;let t=e.map(e=>e.tps),n=Math.max(...t,.1),r=Math.min(...t,0),i=n-r||1;return{points:t.map((e,n)=>{let a=n/(t.length-1)*200,o=2+(1-(e-r)/i)*28;return`${n===0?`M`:`L`}${a.toFixed(1)},${o.toFixed(1)}`}).join(` `),min:r,max:n}},[e]);return t?(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,Z.jsxs)(`svg`,{viewBox:`0 0 200 32`,className:`h-8 w-full`,preserveAspectRatio:`none`,role:`img`,"aria-label":`TPS trend sparkline`,children:[(0,Z.jsx)(`line`,{x1:`0`,y1:`10.7`,x2:`200`,y2:`10.7`,stroke:`currentColor`,strokeWidth:`0.5`,strokeDasharray:`3,2`,className:`text-border`}),(0,Z.jsx)(`line`,{x1:`0`,y1:`21.3`,x2:`200`,y2:`21.3`,stroke:`currentColor`,strokeWidth:`0.5`,strokeDasharray:`3,2`,className:`text-border`}),(0,Z.jsx)(`path`,{d:t.points,fill:`none`,stroke:`var(--primary)`,strokeWidth:`1.5`})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between text-[9px] text-muted-foreground`,children:[(0,Z.jsxs)(`span`,{children:[`60s ago · `,t.min.toFixed(1)]}),(0,Z.jsxs)(`span`,{children:[t.max.toFixed(1),` · now`]})]})]}):(0,Z.jsx)(`div`,{className:`flex h-8 items-center text-[10px] text-muted-foreground`,children:`Collecting...`})}var ye={running:`bg-success`,paused:`bg-warning`,idle:`bg-muted-foreground`,stopped:`bg-destructive`};function be({state:e}){let t=ye[e]??`bg-muted-foreground`,n=e===`running`;return(0,Z.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,Z.jsxs)(`div`,{className:`relative flex items-center justify-center`,children:[(0,Z.jsx)(`span`,{className:`size-2.5 rounded-full ${t}`}),n&&(0,Z.jsx)(`span`,{className:`absolute size-2.5 animate-ping rounded-full ${t} opacity-40`})]}),(0,Z.jsx)(o,{mode:`wait`,initial:!1,children:(0,Z.jsx)(a.span,{initial:{opacity:0,y:-5},animate:{opacity:1,y:0},exit:{opacity:0,y:5},transition:{type:`spring`,stiffness:500,damping:30},className:`font-mono text-lg font-bold uppercase tracking-wider`,children:e},e)})]})}function Q({label:e,tooltip:t,tooltipClassName:n}){return(0,Z.jsxs)(`div`,{className:`inline-flex w-fit min-w-0 max-w-full items-center gap-1`,children:[(0,Z.jsx)(`span`,{className:`blueprint-title min-w-0 shrink text-[11px] leading-tight text-muted-foreground`,children:e}),(0,Z.jsxs)(M,{children:[(0,Z.jsx)(A,{className:`inline-flex size-4 shrink-0 items-center justify-center rounded-[var(--miravo-radius-tight)] border-0 bg-transparent p-0 text-muted-foreground shadow-none outline-none hover:text-foreground focus-visible:ring-1 focus-visible:ring-ring`,render:(0,Z.jsx)(`button`,{type:`button`}),"aria-label":`About ${e}`,children:(0,Z.jsx)(b,{className:`size-3`,"aria-hidden":!0})}),(0,Z.jsx)(j,{side:`top`,className:y(`max-w-xs`,n),children:t})]})]})}function $(){let{engineState:e,connectionState:t}=i(h(e=>({engineState:e.engineState,connectionState:e.connectionState}))),n=D();return(0,Z.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Z.jsx)(Q,{label:`Run state`,tooltip:(0,Z.jsx)(`p`,{className:`text-[11px] leading-snug`,children:`Whether the scheduler is running, paused, idle, or stopped. Pause freezes simulated time; resume continues from the same tick.`})}),(0,Z.jsx)(be,{state:e}),t===`live`&&(e===`running`||e===`paused`)&&(0,Z.jsx)(`div`,{className:`mt-1 flex items-center gap-2`,children:(0,Z.jsxs)(g,{type:`button`,size:`sm`,variant:e===`paused`?`default`:`outline`,className:y(`h-8 min-h-11 w-fit touch-manipulation gap-1.5 px-3 text-xs sm:min-h-8`,e===`running`&&`border-warning/40 bg-warning/10 text-warning hover:bg-warning/20 hover:text-warning focus-visible:border-warning/50 focus-visible:ring-warning/25 border-warning/35`),onClick:()=>n.mutate({type:e===`paused`?`resume`:`pause`}),children:[e===`paused`?(0,Z.jsx)(ne,{className:`size-3`}):(0,Z.jsx)(T,{className:`size-3`}),e===`paused`?`Resume`:`Pause`]})})]})}function xe(){let{speedMultiplier:e,connectionState:t}=i(h(e=>({speedMultiplier:e.speedMultiplier,connectionState:e.connectionState}))),n=D(),[r,a]=(0,X.useState)(String(e)),o=t===`live`;return(0,X.useEffect)(()=>{a(String(e))},[e]),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Z.jsx)(Q,{label:`Speed`,tooltip:(0,Z.jsx)(`p`,{className:`text-[11px] leading-snug`,children:`Runs the factory at this multiple of real time. 1× is real time; higher values speed up the model. Change it with the field and Set.`})}),(0,Z.jsxs)(`span`,{className:`w-fit font-mono text-lg font-bold tabular-nums`,children:[e,`x`]}),(0,Z.jsxs)(`div`,{className:`mt-1 flex min-w-0 flex-wrap items-center gap-2`,children:[(0,Z.jsx)(P,{htmlFor:`speed-multiplier`,className:`sr-only`,children:`Speed multiplier`}),(0,Z.jsx)(_,{id:`speed-multiplier`,type:`number`,value:r,onChange:e=>a(e.target.value),className:`h-8 min-h-11 w-[4.75rem] touch-manipulation font-mono text-xs tabular-nums sm:min-h-8`,min:`1`,max:`1000`,disabled:!o}),(0,Z.jsx)(g,{type:`button`,size:`sm`,variant:`outline`,className:`h-8 min-h-11 touch-manipulation px-3 text-xs sm:min-h-8`,disabled:!o,onClick:()=>{let e=O(oe,{multiplier:Number(r)});e&&n.mutate({type:`setSpeed`,multiplier:e.multiplier})},children:`Set`})]})]})}function Se(){let{tick:e,simulationTime:t,tps:n,tpsHistory:r,uptimeMs:a,assetCount:o,memberValueCount:s}=i(h(e=>({tick:e.tick,simulationTime:e.simulationTime,tps:e.tps,tpsHistory:e.tpsHistory,uptimeMs:e.uptimeMs,assetCount:e.assetCount,memberValueCount:e.memberValueCount})));return(0,Z.jsxs)(`div`,{className:y(E,`px-4 py-3`),children:[(0,Z.jsxs)(`header`,{className:`mb-3 border-b border-border/60 pb-2`,children:[(0,Z.jsx)(`h2`,{className:`font-heading text-sm font-semibold tracking-tight text-foreground`,children:`Engine vitals`}),(0,Z.jsx)(`p`,{className:`mt-0.5 text-xs text-muted-foreground`,children:`Scheduler, speed, cycle count, and throughput for this session.`})]}),(0,Z.jsxs)(`div`,{className:`grid min-w-0 grid-cols-2 gap-3 @2xl/main:gap-4 @3xl/main:grid-cols-3 @5xl/main:grid-cols-6`,children:[(0,Z.jsx)($,{}),(0,Z.jsx)(xe,{}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Z.jsx)(Q,{label:`Cycle`,tooltipClassName:`flex flex-col items-start gap-2 text-left`,tooltip:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`p`,{className:`text-[11px] leading-snug`,children:[(0,Z.jsx)(`span`,{className:`font-medium`,children:`Cycle`}),` compares simulated progress with wall time: how many steps ran, how much model time advanced, and how long this session has been open.`]}),(0,Z.jsxs)(`p`,{className:`text-[11px] leading-snug`,children:[`The number is `,(0,Z.jsx)(`span`,{className:`font-medium`,children:`tick`}),` count — completed scheduler steps since this run. Each tick refreshes the plant model and live tags.`]}),(0,Z.jsxs)(`p`,{className:`text-[11px] leading-snug`,children:[(0,Z.jsx)(`span`,{className:`font-medium`,children:`Sim`}),` is simulated elapsed time. Each tick adds (tick interval × speed) to this clock. Generators, lifecycle, and in-model timestamps use Sim, not your system clock. It stops advancing while paused.`]}),(0,Z.jsxs)(`p`,{className:`text-[11px] leading-snug`,children:[(0,Z.jsx)(`span`,{className:`font-medium`,children:`Real`}),` is wall-clock uptime since the run started (real time).`]})]})}),(0,Z.jsx)(`span`,{className:`w-fit font-mono text-lg font-bold tabular-nums`,children:te(e)}),(0,Z.jsxs)(`div`,{className:`mt-1 flex w-full min-w-0 flex-col gap-0.5 leading-tight`,children:[(0,Z.jsxs)(`div`,{className:`flex min-w-0 items-baseline gap-2`,children:[(0,Z.jsx)(`span`,{className:`w-10 shrink-0 text-[9px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Sim`}),(0,Z.jsx)(`span`,{className:`min-w-0 font-mono text-[10px] tabular-nums text-muted-foreground`,children:_e(t)})]}),(0,Z.jsxs)(`div`,{className:`flex min-w-0 items-baseline gap-2`,children:[(0,Z.jsx)(`span`,{className:`w-10 shrink-0 text-[9px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Real`}),(0,Z.jsx)(`span`,{className:`min-w-0 font-mono text-[10px] tabular-nums text-muted-foreground`,children:ge(a)})]})]})]}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Z.jsx)(Q,{label:`Throughput`,tooltip:(0,Z.jsx)(`p`,{className:`text-[11px] leading-snug`,children:`Ticks per second: how fast the engine is stepping. Rises and falls with workload, speed setting, and CPU headroom.`})}),(0,Z.jsxs)(`span`,{className:`w-fit font-mono text-lg font-bold tabular-nums`,children:[n.toFixed(1),` tps`]}),(0,Z.jsxs)(`span`,{className:`mt-1 text-[10px] text-muted-foreground`,children:[o,` inst · `,ee(s),` tags`]})]}),(0,Z.jsxs)(`div`,{className:`col-span-2 flex flex-col gap-2`,children:[(0,Z.jsx)(Q,{label:`TPS Trend`,tooltip:(0,Z.jsx)(`p`,{className:`text-[11px] leading-snug`,children:`Recent ticks-per-second samples over about the last minute. Flat or noisy lines usually mean load or speed changes.`})}),(0,Z.jsx)(ve,{data:r})]})]})]})}function Ce({enabled:e,total:t}){return(0,Z.jsxs)(F,{tone:t===0?`off`:e===0?`idle`:`live`,children:[(0,Z.jsx)(`span`,{className:`font-mono font-semibold tabular-nums text-foreground`,children:e}),(0,Z.jsx)(`span`,{className:`mx-1 text-muted-foreground/60`,children:`/`}),(0,Z.jsx)(`span`,{className:`font-mono tabular-nums`,children:t}),(0,Z.jsx)(`span`,{className:`ml-1.5`}),(0,Z.jsx)(I,{children:`active`})]})}function we(){let{availableAdapters:e,adapterMetrics:t}=i(h(e=>({availableAdapters:e.availableAdapters,adapterMetrics:e.adapterMetrics}))),n=e.filter(e=>e.enabled).length;return(0,Z.jsxs)(L,{icon:Y,title:`Protocol Gateway`,description:`Northbound adapters publishing engine telemetry to external systems.`,aside:(0,Z.jsx)(Ce,{enabled:n,total:e.length}),bodyClassName:`p-0`,children:[e.length>0&&(0,Z.jsx)(`div`,{className:`flex flex-col gap-2 px-4 py-4`,children:(0,Z.jsx)(o,{children:e.map((e,n)=>{let r=t.find(t=>t.name===e.name)?.metrics;return(0,Z.jsx)(a.div,{initial:{opacity:0,y:8},animate:{opacity:1,y:0},exit:{opacity:0},transition:{type:`spring`,stiffness:380,damping:30,delay:n*.05},children:(0,Z.jsx)(S,{adapter:e,metrics:r})},e.name)})})}),(0,Z.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-3 gap-y-2 border-t border-border/60 bg-background/40 px-4 py-2.5`,role:`status`,"aria-label":`Upcoming protocol adapters`,children:[(0,Z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5`,children:[(0,Z.jsx)(re,{className:`size-3 text-muted-foreground/70`,"aria-hidden":!0}),(0,Z.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-[0.14em] text-muted-foreground`,children:`Roadmap`})]}),(0,Z.jsx)(`span`,{className:`font-mono text-[10px] leading-[15px] tracking-tight text-muted-foreground`,children:`More protocols to come`})]})]})}function Te(){let{assets:e,templates:t}=i(h(e=>({assets:e.assets,templates:e.templates}))),n=D(),[r,a]=(0,X.useState)(!1),[o,s]=(0,X.useState)(!1);return(0,Z.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,Z.jsxs)(q,{className:`min-w-0`,children:[(0,Z.jsx)(U,{className:`pb-3`,children:(0,Z.jsxs)(G,{className:`flex items-center gap-2 text-xs font-medium uppercase tracking-wider`,children:[(0,Z.jsx)(me,{className:`size-3.5 text-muted-foreground`,"aria-hidden":!0}),`Danger Zone`]})}),(0,Z.jsx)(J,{className:`flex flex-1 flex-col`,children:(0,Z.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-3 rounded-[var(--miravo-radius-stadium-sm)] border border-dashed border-border p-3 @2xl/main:flex-row @2xl/main:items-center @2xl/main:justify-between`,children:[(0,Z.jsxs)(`div`,{className:`min-w-0 space-y-0.5`,children:[(0,Z.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:`Reset factory`}),(0,Z.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Unloads `,t.length,` template`,t.length===1?``:`s`,` and removes`,` `,e.length,` asset`,e.length===1?``:`s`,`, including standalone ones.`]})]}),(0,Z.jsx)(g,{className:`min-h-11 w-full shrink-0 touch-manipulation @2xl/main:w-auto sm:min-h-7`,variant:`destructive`,size:`sm`,onClick:()=>a(!0),children:`Reset`})]})})]}),(0,Z.jsx)(m,{open:r,onOpenChange:a,children:(0,Z.jsxs)(d,{children:[(0,Z.jsxs)(l,{children:[(0,Z.jsx)(f,{children:`Reset Factory`}),(0,Z.jsx)(p,{children:`Unloads every template and removes every asset, including standalone ones. With persistence on, the empty factory is saved and stays empty after a restart.`})]}),(0,Z.jsxs)(u,{children:[(0,Z.jsx)(g,{variant:`outline`,className:`min-h-11 w-full touch-manipulation sm:min-h-8 sm:w-auto`,onClick:()=>a(!1),disabled:o,children:`Cancel`}),(0,Z.jsx)(g,{variant:`destructive`,className:`min-h-11 w-full touch-manipulation sm:min-h-8 sm:w-auto`,disabled:o,onClick:async()=>{s(!0);try{await n.mutateAsync({type:`resetFactory`}),a(!1)}catch{}finally{s(!1)}},children:o?`Resetting...`:`Confirm Reset`})]})]})})]})}function Ee(){let[e,t]=s(`tab`,c([`monitor`,`operate`]).withDefault(`monitor`));return(0,Z.jsxs)(`div`,{className:`mx-auto flex w-full min-w-0 max-w-screen-2xl flex-col gap-5 p-4 sm:gap-6 sm:p-6`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,Z.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,Z.jsx)(`h1`,{className:`font-heading text-2xl font-semibold tracking-tight`,children:`Mission Control`}),(0,Z.jsxs)(N,{variant:`outline`,title:`Miravo version ${r}`,className:`font-mono text-[10px] leading-none text-muted-foreground`,children:[`v`,r]})]}),(0,Z.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Engine telemetry, protocol management, and fault operations.`})]}),(0,Z.jsxs)(V,{value:e,onValueChange:e=>{t(e)},className:`min-h-0 flex-1`,children:[(0,Z.jsx)(`div`,{className:`shrink-0 overflow-x-auto`,children:(0,Z.jsxs)(B,{variant:`line`,className:`h-10! min-w-max gap-0.5`,children:[(0,Z.jsxs)(R,{value:`monitor`,className:`gap-1.5 px-3 text-sm`,children:[(0,Z.jsx)(C,{className:`size-3.5 shrink-0`}),`Monitor`]}),(0,Z.jsxs)(R,{value:`operate`,className:`gap-1.5 px-3 text-sm`,children:[(0,Z.jsx)(w,{className:`size-3.5 shrink-0`}),`Operate`]})]})}),(0,Z.jsx)(z,{value:`monitor`,className:`flex-1 py-2`,children:(0,Z.jsxs)(a.div,{initial:{opacity:0,y:6},animate:{opacity:1,y:0},transition:{duration:.15,ease:`easeOut`},className:`flex flex-col gap-5 sm:gap-6`,children:[(0,Z.jsx)(Se,{}),(0,Z.jsx)(we,{})]},`monitor`)}),(0,Z.jsx)(z,{value:`operate`,className:`flex-1 py-2`,children:(0,Z.jsxs)(a.div,{initial:{opacity:0,y:6},animate:{opacity:1,y:0},transition:{duration:.15,ease:`easeOut`},className:`grid min-h-0 min-w-0 grid-cols-1 items-start gap-5 @2xl/main:grid-cols-2 @2xl/main:gap-4`,children:[(0,Z.jsx)(he,{}),(0,Z.jsx)(Te,{})]},`operate`)})]})]})}export{Y as n,Ee as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./control-89sOxkPx.js";export{e as ControlPage};
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-COnpUsM8.js";import{c as t}from"./vendor-charts-95ykyDlI.js";import{ot as n}from"./vendor-ui-D8j69UH4.js";import{T as r,b as i,c as a,d as o,f as s,l as c,m as l,n as u,s as d}from"./dom-CQuChC3G.js";import{n as f,t as ee}from"./by-path-e6y8DTMV.js";import{A as p,B as m,C as te,D as h,E as g,F as _,H as v,L as y,P as b,V as x,X as ne,_ as re,a as S,b as ie,c as ae,g as C,h as oe,i as se,j as ce,k as le,n as ue,o as de,r as fe,s as pe,t as me,w as he,x as ge}from"./status-DNfdEhTs.js";import{i as _e,n as ve,r as ye,t as be}from"./tank-xgQfMS2d.js";import{t as xe}from"./stages-C0cErwSQ.js";import{a as Se,n as Ce,o as we,r as Te,t as Ee}from"./boiler-BQwqgoVY.js";var De=[[`boilerA`,`hot-water-boiler`,`heat-plant`,`boilers`,0],[`boilerB`,`hot-water-boiler`,`heat-plant`,`boilers`,1],[`boilerC`,`hot-water-boiler`,`heat-plant`,`boilers`,2],[`primaryA`,`centrifugal-pump`,`heat-plant`,`primary-loop`,0],[`primaryB`,`centrifugal-pump`,`heat-plant`,`primary-loop`,1],[`accumulator`,`storage-tank`,`heat-plant`,`primary-loop`,0],[`networkA`,`centrifugal-pump`,`network`,`trunk-main`,0],[`networkB`,`centrifugal-pump`,`network`,`trunk-main`,1],[`hospital`,`heat-substation`,`customers`,`hospital`,0],[`university`,`heat-substation`,`customers`,`university`,0],[`residential`,`heat-substation`,`customers`,`residential`,0],[`office`,`heat-substation`,`customers`,`office-park`,0]],Oe=e=>ee(De,e);function ke(e){let t=(e,t,n)=>({key:e,assetId:e,name:t,kind:`utility`,area:n});return[t(e.boilerA,`Boiler 1 (lead)`,`Heat plant`),t(e.boilerB,`Boiler 2`,`Heat plant`),t(e.boilerC,`Boiler 3`,`Heat plant`),t(e.accumulator,`Thermal accumulator`,`Heat plant`),t(e.primaryA,`Primary pump A`,`Heat plant`),t(e.primaryB,`Primary pump B`,`Heat plant`),t(e.networkA,`Network pump A`,`Network`),t(e.networkB,`Network pump B`,`Network`),t(e.hospital,`Hospital substation`,`Customers`),t(e.university,`University substation`,`Customers`),t(e.residential,`Residential substation`,`Customers`),t(e.office,`Office park substation`,`Customers`)]}var Ae=3600/(4186*30*.97),je=8,Me=e=>Number(e.dataset.win)*37%101;function Ne(e){let{svg:t,P:n,feed:i}=e,o=(e,t)=>i.num(e,t),s=u(t,`[data-valve]`).map(e=>{let n=pe(e),r=e=>u(t,`[data-asset="${n}"] ${e}`),i=r(`[data-spin="sub"]`)[0];return{id:n,el:e,at:d(e.dataset.valve),rotor:i,rotorAt:ae(i?.dataset.at),rotorR:Number(i?.dataset.radius)||2,foul:r(`[data-foul]`)[0],act:r(`[data-act]`)[0],wins:r(`[data-win]`).sort((e,t)=>Me(e)-Me(t)),valve:0,rate:0,spin:0,lit:-1,heat:ge(te(t,n),3,2),ret:ae(e.dataset.ret)}}),c=new Map(s.map(e=>[e.id,e]));return{draw(t,c,l){let u=e.reducedMotion();for(let e of s){e.valve=re(e.valve,C(o(e.id,`control_valve_position`)/100),t,.6,u);let[s=0,d=0,f=0,ee=4]=e.at;if(a(e.el,`d`,r([s,d],[s,d],f,n)+r([s-1.6,d],[s+1.6,d],f+e.valve*ee,n)),e.rate=re(e.rate,o(e.id,`circulation_pump_speed`)/100*je,t,.8,u),u||(e.spin+=e.rate*t),e.rotor){let[t,i,o]=e.rotorAt,s=``;for(let a=0;a<3;a++){let c=e.spin+a*oe/3;s+=r([t,i],[t+Math.cos(c)*e.rotorR,i+Math.sin(c)*e.rotorR],o,n)}a(e.rotor,`d`,s)}e.foul&&(e.foul.style.opacity=l&&he(i,e.id,`hx_fouling`)?`0.85`:`0`);let p=l&&he(i,e.id,`valve_stuck`);a(e.act,`data-s`,p&&Math.sin(c*6)>0?`a`:null),e.heat.draw(l&&!u&&he(i,e.id,`low_delta_t`),c,n,e.ret);let m=Math.round(C(o(e.id,`occupancy_pu`))*e.wins.length);if(m!==e.lit){e.lit=m;for(let[t,n]of e.wins.entries())a(n,`data-on`,t<m?``:null)}}},bar(e){return c.has(e)?C(o(e,`heat_delivered_kw`)/i.param(e,`design_load_kw`,500)):void 0},flowPu(e){let t=i.param(e,`design_load_kw`,0)*Ae;return t>0?C(o(e,`primary_flow`)/t):0}}}var w=e=>e>.002?6+26*C(e*2):0,Pe=e=>{let{svg:t,feed:n,ids:r}=e,i=ie(t),a=fe(e,i),o=Ee(e,i),s=be(e),c=Ne(e),l=[a,o,s,c],u=se(e,e=>ue(n,e,`availability`)),d=de(e,{needle:e=>o.needle(e)??0,bar:e=>l.reduce((t,n)=>t??n.bar(e),void 0)??0,alertsHigh:()=>!0,ready:()=>!0}),f=()=>a.flowPu(r.primaryA)+a.flowPu(r.primaryB),ee=()=>a.flowPu(r.networkA)+a.flowPu(r.networkB),p=[r.boilerA,r.boilerB,r.boilerC],m=e=>{let t=p.filter(e=>o.circulating(e)).length;return o.circulating(e)?f()/t:0},te=new Map([[`hospital`,r.hospital],[`university`,r.university],[`residential`,r.residential],[`office`,r.office]]),h=S(e,({id:e})=>{switch(e){case`sup-1`:return w(m(r.boilerA));case`sup-2`:case`ret-2`:return w(m(r.boilerB));case`sup-3`:case`ret-3`:return w(m(r.boilerC));case`sup-23`:return w(m(r.boilerB)+m(r.boilerC));case`to-acc`:return w(f());case`ret-a`:case`suction-pa`:return w(a.flowPu(r.primaryA));case`ret-collect`:return w(f());case`ret-12`:return w(m(r.boilerA)+m(r.boilerB));case`ret-1`:return w(m(r.boilerA));case`ret-b`:case`suction-b`:return w(a.flowPu(r.primaryB));case`suction-a`:case`sup-a`:return w(a.flowPu(r.networkA));case`sup-b`:case`suction-nb`:return w(a.flowPu(r.networkB));case`acc-out`:case`trunk-sup`:case`trunk-ret`:return w(ee());default:{let t=te.get(e.slice(0,e.lastIndexOf(`-`)));return t?w(c.flowPu(t)):0}}});return{data(e){u.draw(e)},draw({sdt:e,t,introDone:n}){h.draw(e),d.draw(e,t);for(let r of l)r.draw(e,t,n)},resync(){},status:e=>me(n,e,`availability`)}},Fe=e(t(),1),Ie=11;function Le(e,t){let{k:n,P:r,S:i,L:a,slab:o,cyl:s}=e,{plan:c,floors:l,kind:u}=t,d=l*14+4,f=[],ee=e=>a(e,{tone:`faint`}),p=Array.from({length:l-1},(e,t)=>n.sideSeam(c,4+(t+1)*14,r,2)).join(``);f.push(i(n.slabOf(c,0,d,r,2,.6),{tone:u===`office`?`lo`:`mid`,inner:ee(p)})),f.push(a(n.planOutline(n.insetPlan(c,2),d,r,2),{tone:`lo`})),f.push(o({x:c.x+c.w*.2,y:c.y+c.d*.2,w:18,d:12,r:1},d,7,{tone:`mid`},2,.3)),f.push(s(c.x+c.w*.7,c.y+c.d*.35,4,d,9,{tone:`mid`},20));let m=[],te=0,h=(e,t,n)=>`<path class="bd-win" data-win="${te++}" d="M${e.toFixed(1)} ${(-(t+8)).toFixed(1)}H${(e+n).toFixed(1)}V${(-t).toFixed(1)}H${e.toFixed(1)}Z"/>`,g=u===`office`;for(let[t,i,a]of[[c.w,e.front(c.y+c.d),c.x],[c.d,n.sideMatrix([c.x+c.w,c.y+c.d],0,r,`right`),0]]){let e=Math.max(1,Math.floor((t-6)/Ie)),n=a+(t-e*Ie)/2,r=[];for(let t=0;t<l;t++){let i=7+t*14;if(g)r.push(h(n+1,i,e*Ie-2));else for(let t=0;t<e;t++)r.push(h(n+t*Ie+2,i,Ie-4))}m.push(`<g transform="${i}">${r.join(``)}</g>`)}f.push(...m);let _=c.x+c.w/2,v=c.y+c.d,y=(e,t,n,r,i,a=0)=>{let l=c.x+c.w/2+a;f.push(o({x:l-4.5,y:v,w:9,d:.6,r:.2},0,n-1,{tone:`lo`},2,0),...[-1,1].flatMap(r=>[s(l+r*(e-3)/2,v+t-1.2,1.7,0,.8,{tone:`lo`},14),s(l+r*(e-3)/2,v+t-1.2,i,.8,n-.8,{tone:`mid`},12)]),o({x:l-e/2,y:v,w:e,d:t,r:.5},n,1.4,{tone:r},2,.2))};if(u===`hospital`)f.push(o({x:_-6,y:v-1,w:12,d:1.2,r:.4},d-14,12,{tone:`lo`},2,0)),f.push(`<g transform="${e.front(v+.25)}"><path class="bd-cross" d="M${_-1.4} ${-(d-3.6)}H${_+1.4}V${-(d-6.6)}H${_+4.4}V${-(d-9.4)}H${_+1.4}V${-(d-12.4)}H${_-1.4}V${-(d-9.4)}H${_-4.4}V${-(d-6.6)}H${_-1.4}Z"/></g>`),y(24,8,12,`mid`,.9);else if(u===`university`)y(30,9,18,`mid`,1.8,-16);else if(u===`residential`)for(let e=1;e<l;e++)f.push(o({x:c.x+4,y:v,w:c.w-8,d:4,r:.4},4+e*14,1,{tone:`mid`},2,0));else y(20,7,14,`mid`,.9);return f.join(``)}var T=1.8,E=4,D=-14,O=[-5,5],k=[10,26],A=[26,k[0]],j=13,Re=17.5,ze=2.2,Be=-26,M=[[O[0],28,k[1]],[O[0],28,k[0]]],Ve={x:-16,y:-24,w:34,d:54,r:2};function He(e,t){let{k:n,G:r,P:i,at:a,S:o,L:s,D:c,slab:l,cyl:u,hmi:d,screws:f,faceRule:ee}=e,p=[];p.push(l({x:-14,y:-22,w:30,d:50,r:2},0,3,{tone:`lo`},3,.4)),p.push(f(n.corners({x:-14,y:-22,w:30,d:50},2.4),3)),p.push(l({x:-1.2,y:D-6,w:2.4,d:3,r:.4},3,36,{tone:`mid`},2,.2),l({x:-1.4,y:D-6,w:2.8,d:E-D+9,r:.4},36,2.6,{tone:`mid`},2,.2)),p.push(l({x:-10,y:D-3,w:20,d:3,r:.6},3,33,{tone:`mid`},2,.3));let te=[];for(let e=D+.8;e<E-.4;e+=.9)te.push(n.segment([9,e,6],[9,e,33],i));p.push(o(n.slabOf({x:-9,y:D,w:18,d:E-D,r:.4},5,29,i,2,.2),{tone:`lo`,inner:s(te.join(``),{tone:`faint`})}));let h=[[9.1,D+.4,6],[9.1,E-.4,6],[9.1,E-.4,33],[9.1,D+.4,33]].map(e=>a(e));p.push(`<path class="sf-grime" data-foul="" style="opacity:0" d="${n.pathOf(h,!0)}"/>`),p.push(l({x:-11,y:E,w:22,d:3.4,r:.6},3,35,{tone:`mid`},2,.3));let g=E+3.4;p.push(c([-10.4,10.4].flatMap(e=>[7,31].map(t=>a([e,g,t]))),{size:.5}));for(let e of O)for(let t of k){let n=r.frameAlong([e,g,t],[0,1,0]);p.push(o(r.disc(0,2.2,T+.2,n,i),{tone:`mid`}),o(r.disc(2.2,3,T+1.4,n,i),{tone:`mid`}))}let _=(e,t)=>[O[e],g+3,k[t]],[v,y]=M;p.push(m(e,[v,_(0,1)],T,`mid`,3,`heat`),m(e,[_(0,0),y],T,`mid`,3,`heatret`));for(let e of[v,y]){let t=r.frameAlong([e[0],e[1]-1.6,e[2]],[0,1,0]);p.push(o(r.disc(0,1.6,T+1.2,t,i),{tone:`mid`}))}let[b,,x]=v,ne=r.frameAlong([b,14,x],[0,1,0]);p.push(o(r.disc(0,1,T+1.4,ne,i),{tone:`mid`}),o(r.solidOf([[1,2.6],[2.6,3.6,1],[5.4,3.6,1],[7,2.6]],ne,i),{tone:`mid`}),o(r.disc(7,8,T+1.4,ne,i),{tone:`mid`}),u(b,18,1.2,x+3,4,{tone:`mid`,crease:`none`},12),u(b,18,4.4,x+7,2,{tone:`mid`},24),u(b,18,4.8,x+9,5,{tone:`mid`,crease:`lo`},28));let re=a([b+4.8,18,x+11.5]);p.push(`<path class="iso-line" data-tone="lit" data-valve="${b},21,${x+14},4" data-ret="${y[0]},${y[1]-4},${y[2]+2}" d=""/>`,`<circle class="sb-act" data-act="" cx="${re[0].toFixed(2)}" cy="${re[1].toFixed(2)}" r="0.6"/>`);let S=[O[1],g+14,k[1]],ie=(e,t)=>{let n=r.frameAlong([e,-30,t],[0,1,0]);return o(r.disc(0,1.2,T+2.6,n,i),{tone:`mid`})+o(r.disc(1.2,ze,T+1.4,n,i),{tone:`mid`})},ae=(e,t)=>u(e,Be,2.4,0,1,{tone:`lo`},18)+u(e,Be,.9,1,t-T-2.6,{tone:`mid`,crease:`none`},12)+u(e,Be,1.8,t-T-1.6,1,{tone:`mid`},16),C=-30+ze;return p.push(ie(j,A[0]),ie(j,A[1]),ae(j,A[1]),ae(Re,A[0]),l({x:j-1,y:Be-.9,w:Re-j+1.9,d:1.8,r:.3},A[0]-T-1.6,1,{tone:`mid`},2,0),m(e,[_(1,1),S,[j,S[1],A[0]],[j,C,A[0]]],T,`mid`,4,`heat`,[!0,!1]),m(e,[_(1,0),[O[1],g+16,k[0]],[j,g+16,k[0]],[j,C,A[1]]],T,`mid`,4,`heatret`,[!0,!1])),p.push(u(S[0],S[1],3.6,k[1]-3,6,{tone:`mid`},24)),p.push(u(S[0],S[1],3,k[1]+3,7,{tone:`mid`,crease:`lo`},24)),p.push(`<path class="iso-line" data-tone="lo" data-spin="sub" data-at="${S[0]},${S[1]},${k[1]+10}" data-radius="2.4" d=""/>`),p.push(l({x:-14,y:10,w:6,d:8,r:.6},3,22,{tone:`mid`},2,.3)),p.push(d(t,18,-13.6,-8.4,8,21)),p.push(ee(18,-13.6,4,5,2)),p.join(``)}var Ue=1e3,We={x:-380,y:-360,w:305,d:315,r:8},Ge={x:-60,y:-300,w:240,d:150,r:8},Ke={x:-380,y:-15,w:620,d:200,r:8},qe={x:-400,y:-380,w:660,d:585,r:16},Je=i([...l(qe,-21,-14),...l(We,-14,120),...l(Ge,-14,90),...l(Ke,-14,110)],Ue,620,{pad:22,azimuth:60}),Ye=[[-262,-335],[-262,-245],[-262,-155]],Xe=[-120,-255],Ze={r:34,h:118,windowX:6,panelX:40,nozzles:[{angle:180,z:80,r:3.4,role:`inlet`},{angle:0,z:80,r:3.4,role:`outlet`}]},Qe=[94,-130,0],N={primaryA:{c:[-255,-78],scale:1},primaryB:{c:[-130,-78],scale:1},networkA:{c:[0,-190],scale:1.15},networkB:{c:[135,-190],scale:1.15}},$e=[b[0]-Qe[0],b[1]-Qe[1],b[2]],et=[p[0]-Qe[0],p[1]-Qe[1],p[2]],tt=18,nt=(e,t,n,r,i)=>({key:e,skid:[t+n/2-tt,104],building:{kind:e,plan:{x:t-n/2,y:74-r,w:n,d:r,r:2},floors:i}}),rt=[nt(`hospital`,150,112,62,4),nt(`university`,-5,120,64,3),nt(`residential`,-158,68,56,5),nt(`office`,-300,92,58,4)],it=xe([...Ye.map((e,t)=>({key:`boiler${t}`,at:e,h:60})),{key:`accumulator`,at:Xe,h:Ze.h+12},...Object.entries(N).map(([e,t])=>({key:e,at:t.c,h:45})),...rt.flatMap(e=>[{key:`${e.key}-building`,at:[e.building.plan.x+e.building.plan.w/2,e.building.plan.y+e.building.plan.d/2],h:e.building.floors*14+4},{key:e.key,at:e.skid,h:40}])],Je),at=it.order,ot=it.slotDepths,st=it.depth,ct=(e,t)=>[e.c[0]+t[0]*e.scale,e.c[1]+t[1]*e.scale,t[2]*e.scale],P=(e,t,n,r)=>[t??e[0],n??e[1],r??e[2]],lt=e=>{let t=Ze.nozzles[e],[n,r,i]=t?ye(Ze,t):[0,0,0];return[Xe[0]+n,Xe[1]+r,i]},F=(Ye[0]?.[0]??0)+Se[0],I=(Ye[0]?.[0]??0)+Te[0],ut=Se[2],L=80,R=84,[dt=0,z=0,ft=0]=Ye.map(e=>e[1]),pt=lt(0),B=lt(1),{primaryA:V,primaryB:H,networkA:U,networkB:W}=N,G=e=>ct(e,[et[0],et[1],et[2]-3]),K=e=>ct(e,$e),mt=10,q=e=>P(K(e),K(e)[0]+mt*e.scale,null,null),ht=72,J=-106,gt=K(V)[2],Y=220,X=232,_t=3.2*N.networkA.scale,vt=100,yt=vt-18,bt=-40,xt=M[0][2],Z=M[1][2],Q=104+M[0][1]+30,St=Math.min(...rt.map(e=>e.skid[0]))+M[0][0]-14,Ct={z:10,flanged:!0,routes:[{id:`sup-1`,medium:`heat`,r:3.2,pts:[[F,dt,ut],[F,dt,L],[F,pt[1],L]]},{id:`sup-23`,medium:`heat`,r:3.2,reverse:!0,pts:[[F,pt[1],L],[F,z,L]]},{id:`sup-3`,medium:`heat`,r:3.2,reverse:!0,pts:[[F,z,L],[F,ft,L],[F,ft,ut]]},{id:`sup-2`,medium:`heat`,r:3.2,pts:[[F,z,ut],[F,z,L]]},{id:`to-acc`,medium:`heat`,r:3.4,pts:[[F,pt[1],L],pt]},{id:`ret-b`,medium:`heatret`,r:3.2,fromStub:!0,pts:[G(H),P(G(H),null,null,ht),P(G(V),null,null,ht)]},{id:`ret-a`,medium:`heatret`,r:3.2,fromStub:!0,pts:[G(V),P(G(V),null,null,ht)]},{id:`ret-collect`,medium:`heatret`,r:3.2,bend:6,pts:[P(G(V),null,null,ht),P(G(V),I,null,ht),P(G(V),I,null,R),[I,ft,R]]},{id:`ret-12`,medium:`heatret`,r:3.2,pts:[[I,ft,R],[I,z,R]]},{id:`ret-1`,medium:`heatret`,r:3.2,pts:[[I,z,R],[I,dt,R],[I,dt,ut]]},{id:`ret-2`,medium:`heatret`,r:3.2,pts:[[I,z,R],[I,z,ut]]},{id:`ret-3`,medium:`heatret`,r:3.2,pts:[[I,ft,R],[I,ft,ut]]},{id:`acc-out`,medium:`heat`,r:3.4,pts:[B,P(q(U),null,B[1],B[2])]},{id:`suction-nb`,medium:`heat`,r:3.4,pts:[P(q(U),null,B[1],B[2]),P(B,q(W)[0],null,null),P(q(W),null,B[1],null),q(W),K(W)]},{id:`suction-a`,medium:`heat`,r:3.4,pts:[P(q(U),null,B[1],B[2]),P(q(U),null,B[1],null),q(U),K(U)]},...rt.flatMap(e=>{let[t,n]=e.skid,r=[t+M[0][0],n+M[0][1],xt],i=[t+M[1][0],n+M[1][1],Z];return[{id:`${e.key}-sup`,medium:`heat`,r:1.8,pts:[P(r,null,Q,null),r]},{id:`${e.key}-ret`,medium:`heatret`,r:1.8,pts:[i,P(i,null,Q,null)]}]}),{id:`trunk-ret`,medium:`heatret`,r:3.6,blind:[!0,!1],pts:[[St,Q,Z],[X,Q,Z],[X,J,Z],[X,J,gt],P(q(H),null,J,null)]},{id:`suction-pa`,medium:`heatret`,r:3.6,pts:[P(q(H),null,J,null),P(q(V),null,J,null),q(V),K(V)]},{id:`sup-a`,medium:`heat`,r:_t,fromStub:!0,pts:[G(U),P(G(U),null,null,vt),P(G(W),null,null,vt)]},{id:`trunk-sup`,medium:`heat`,r:3.6,blind:[!1,!0],pts:[P(G(W),null,null,vt),[Y,G(U)[1],vt],[Y,G(U)[1],yt],[Y,bt,yt],[Y,bt,xt],[Y,Q,xt],[St,Q,xt]]},{id:`sup-b`,medium:`heat`,r:_t,fromStub:!0,pts:[G(W),P(G(W),null,null,vt)]},{id:`suction-b`,medium:`heatret`,r:3.2,pts:[K(H),q(H),P(q(H),null,J,null)]}],posts:[[Y,-130,3.6,yt],[Y,-70,3.6,yt],[Y,0,3.6,xt,0],[Y,80,3.6,xt,0],[X,-60,3.6,Z],[X,40,3.6,Z,0],[X,120,3.6,Z,0],...[150,50,-40].map(e=>[e,J,3.6,gt]),[-120,J,3.6,gt,0],...[-230,-80,75,140].map(e=>[e,Q,3.6,Z,0])]},$=n(),wt=(e,t)=>we(e,t,10),Tt=(e,t)=>_(e,t,`heatret`,!0),Et=(e,t)=>_(e,t,`heat`,!0),Dt=(e,t)=>_e(e,t,Ze),Ot=ve(Ze);function kt({id:e,spec:t,intro:n}){let r=s();return(0,$.jsx)(o,{html:(0,Fe.useMemo)(()=>Le(r,t),[r,t]),asset:e,intro:n})}function At({ids:e}){let t=s(),n=g(Ct,st),r=(0,Fe.useMemo)(()=>y(t,qe)+t.plinth(We)+t.plinth(Ge)+t.plinth(Ke),[t]),i=e=>(0,$.jsx)(o,{html:`${n.layers[e]??``}<g data-flows="${e}" data-depth="${e===0?-1e9:ot[e-1]??0}"></g>`,data:{pipes:``}},`pipes-${e}`),a=(e,t,n,r)=>(0,$.jsx)(h,{from:Qe,to:le(t.c),scale:t.scale,children:(0,$.jsx)(c,{id:e,plan:ce,intro:r,draw:n})}),l=[e.boilerA,e.boilerB,e.boilerC],u={hospital:e.hospital,university:e.university,residential:e.residential,office:e.office},d={accumulator:(0,$.jsx)(h,{to:le(Xe),children:(0,$.jsx)(c,{id:e.accumulator,plan:Ot,intro:5,draw:Dt})}),primaryA:a(e.primaryA,N.primaryA,Tt,6),primaryB:a(e.primaryB,N.primaryB,Tt,7),networkA:a(e.networkA,N.networkA,Et,8),networkB:a(e.networkB,N.networkB,Et,9)};for(let[e,t]of Ye.entries())d[`boiler${e}`]=(0,$.jsx)(h,{to:le(t),children:(0,$.jsx)(c,{id:l[e]??``,plan:Ce,intro:2+e,draw:wt})});for(let[e,t]of rt.entries()){let n=u[t.key];d[`${t.key}-building`]=(0,$.jsx)(kt,{id:n,spec:t.building,intro:10+e}),d[t.key]=(0,$.jsx)(h,{to:le(t.skid),children:(0,$.jsx)(c,{id:n,plan:Ve,intro:11+e,draw:He})})}return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(o,{html:r,data:{plinth:``}}),i(0),at.flatMap((e,t)=>[(0,$.jsx)(`g`,{children:d[e.key]},e.key),i(t+1)])]})}var jt=x(Je),Mt=v(jt,Ct,st),Nt=ne({layout:{width:Ue,height:620,label:`Isometric model of the District Heating network: the heat plant with three gas boilers, the thermal accumulator and two primary pumps; the network pump house with two trunk pumps; and four customers (a hospital, a university, a residential block and an office park), each with its substation, joined by the supply and return trunk main. Every moving part follows live values from the running engine.`,kit:jt,flows:Mt.flows,joints:Mt.joints,Scene:At,compose:Pe},resolve:Oe,things:ke,caption:`heat plant · network · customers`,mismatch:`This floor expects the District Heating network: three boilers, the accumulator and two primary pumps, two network pumps, and the hospital, university, residential and office substations, by area and line.`,statusBasis:`availability`,Overview:f,tab:`Network`});export{Nt as heatingFloor};
1
+ import{a as e}from"./rolldown-runtime-COnpUsM8.js";import{c as t}from"./vendor-charts-95ykyDlI.js";import{ot as n}from"./vendor-ui-D8j69UH4.js";import{T as r,b as i,c as a,d as o,f as s,l as c,m as l,n as u,s as d}from"./dom-CQuChC3G.js";import{n as f,t as ee}from"./by-path-CKZo157c.js";import{A as p,B as m,C as te,D as h,E as g,F as _,H as v,L as y,P as b,V as x,X as ne,_ as re,a as S,b as ie,c as ae,g as C,h as oe,i as se,j as ce,k as le,n as ue,o as de,r as fe,s as pe,t as me,w as he,x as ge}from"./status-DNfdEhTs.js";import{i as _e,n as ve,r as ye,t as be}from"./tank-xgQfMS2d.js";import{t as xe}from"./stages-C0cErwSQ.js";import{a as Se,n as Ce,o as we,r as Te,t as Ee}from"./boiler-BQwqgoVY.js";var De=[[`boilerA`,`hot-water-boiler`,`heat-plant`,`boilers`,0],[`boilerB`,`hot-water-boiler`,`heat-plant`,`boilers`,1],[`boilerC`,`hot-water-boiler`,`heat-plant`,`boilers`,2],[`primaryA`,`centrifugal-pump`,`heat-plant`,`primary-loop`,0],[`primaryB`,`centrifugal-pump`,`heat-plant`,`primary-loop`,1],[`accumulator`,`storage-tank`,`heat-plant`,`primary-loop`,0],[`networkA`,`centrifugal-pump`,`network`,`trunk-main`,0],[`networkB`,`centrifugal-pump`,`network`,`trunk-main`,1],[`hospital`,`heat-substation`,`customers`,`hospital`,0],[`university`,`heat-substation`,`customers`,`university`,0],[`residential`,`heat-substation`,`customers`,`residential`,0],[`office`,`heat-substation`,`customers`,`office-park`,0]],Oe=e=>ee(De,e);function ke(e){let t=(e,t,n)=>({key:e,assetId:e,name:t,kind:`utility`,area:n});return[t(e.boilerA,`Boiler 1 (lead)`,`Heat plant`),t(e.boilerB,`Boiler 2`,`Heat plant`),t(e.boilerC,`Boiler 3`,`Heat plant`),t(e.accumulator,`Thermal accumulator`,`Heat plant`),t(e.primaryA,`Primary pump A`,`Heat plant`),t(e.primaryB,`Primary pump B`,`Heat plant`),t(e.networkA,`Network pump A`,`Network`),t(e.networkB,`Network pump B`,`Network`),t(e.hospital,`Hospital substation`,`Customers`),t(e.university,`University substation`,`Customers`),t(e.residential,`Residential substation`,`Customers`),t(e.office,`Office park substation`,`Customers`)]}var Ae=3600/(4186*30*.97),je=8,Me=e=>Number(e.dataset.win)*37%101;function Ne(e){let{svg:t,P:n,feed:i}=e,o=(e,t)=>i.num(e,t),s=u(t,`[data-valve]`).map(e=>{let n=pe(e),r=e=>u(t,`[data-asset="${n}"] ${e}`),i=r(`[data-spin="sub"]`)[0];return{id:n,el:e,at:d(e.dataset.valve),rotor:i,rotorAt:ae(i?.dataset.at),rotorR:Number(i?.dataset.radius)||2,foul:r(`[data-foul]`)[0],act:r(`[data-act]`)[0],wins:r(`[data-win]`).sort((e,t)=>Me(e)-Me(t)),valve:0,rate:0,spin:0,lit:-1,heat:ge(te(t,n),3,2),ret:ae(e.dataset.ret)}}),c=new Map(s.map(e=>[e.id,e]));return{draw(t,c,l){let u=e.reducedMotion();for(let e of s){e.valve=re(e.valve,C(o(e.id,`control_valve_position`)/100),t,.6,u);let[s=0,d=0,f=0,ee=4]=e.at;if(a(e.el,`d`,r([s,d],[s,d],f,n)+r([s-1.6,d],[s+1.6,d],f+e.valve*ee,n)),e.rate=re(e.rate,o(e.id,`circulation_pump_speed`)/100*je,t,.8,u),u||(e.spin+=e.rate*t),e.rotor){let[t,i,o]=e.rotorAt,s=``;for(let a=0;a<3;a++){let c=e.spin+a*oe/3;s+=r([t,i],[t+Math.cos(c)*e.rotorR,i+Math.sin(c)*e.rotorR],o,n)}a(e.rotor,`d`,s)}e.foul&&(e.foul.style.opacity=l&&he(i,e.id,`hx_fouling`)?`0.85`:`0`);let p=l&&he(i,e.id,`valve_stuck`);a(e.act,`data-s`,p&&Math.sin(c*6)>0?`a`:null),e.heat.draw(l&&!u&&he(i,e.id,`low_delta_t`),c,n,e.ret);let m=Math.round(C(o(e.id,`occupancy_pu`))*e.wins.length);if(m!==e.lit){e.lit=m;for(let[t,n]of e.wins.entries())a(n,`data-on`,t<m?``:null)}}},bar(e){return c.has(e)?C(o(e,`heat_delivered_kw`)/i.param(e,`design_load_kw`,500)):void 0},flowPu(e){let t=i.param(e,`design_load_kw`,0)*Ae;return t>0?C(o(e,`primary_flow`)/t):0}}}var w=e=>e>.002?6+26*C(e*2):0,Pe=e=>{let{svg:t,feed:n,ids:r}=e,i=ie(t),a=fe(e,i),o=Ee(e,i),s=be(e),c=Ne(e),l=[a,o,s,c],u=se(e,e=>ue(n,e,`availability`)),d=de(e,{needle:e=>o.needle(e)??0,bar:e=>l.reduce((t,n)=>t??n.bar(e),void 0)??0,alertsHigh:()=>!0,ready:()=>!0}),f=()=>a.flowPu(r.primaryA)+a.flowPu(r.primaryB),ee=()=>a.flowPu(r.networkA)+a.flowPu(r.networkB),p=[r.boilerA,r.boilerB,r.boilerC],m=e=>{let t=p.filter(e=>o.circulating(e)).length;return o.circulating(e)?f()/t:0},te=new Map([[`hospital`,r.hospital],[`university`,r.university],[`residential`,r.residential],[`office`,r.office]]),h=S(e,({id:e})=>{switch(e){case`sup-1`:return w(m(r.boilerA));case`sup-2`:case`ret-2`:return w(m(r.boilerB));case`sup-3`:case`ret-3`:return w(m(r.boilerC));case`sup-23`:return w(m(r.boilerB)+m(r.boilerC));case`to-acc`:return w(f());case`ret-a`:case`suction-pa`:return w(a.flowPu(r.primaryA));case`ret-collect`:return w(f());case`ret-12`:return w(m(r.boilerA)+m(r.boilerB));case`ret-1`:return w(m(r.boilerA));case`ret-b`:case`suction-b`:return w(a.flowPu(r.primaryB));case`suction-a`:case`sup-a`:return w(a.flowPu(r.networkA));case`sup-b`:case`suction-nb`:return w(a.flowPu(r.networkB));case`acc-out`:case`trunk-sup`:case`trunk-ret`:return w(ee());default:{let t=te.get(e.slice(0,e.lastIndexOf(`-`)));return t?w(c.flowPu(t)):0}}});return{data(e){u.draw(e)},draw({sdt:e,t,introDone:n}){h.draw(e),d.draw(e,t);for(let r of l)r.draw(e,t,n)},resync(){},status:e=>me(n,e,`availability`)}},Fe=e(t(),1),Ie=11;function Le(e,t){let{k:n,P:r,S:i,L:a,slab:o,cyl:s}=e,{plan:c,floors:l,kind:u}=t,d=l*14+4,f=[],ee=e=>a(e,{tone:`faint`}),p=Array.from({length:l-1},(e,t)=>n.sideSeam(c,4+(t+1)*14,r,2)).join(``);f.push(i(n.slabOf(c,0,d,r,2,.6),{tone:u===`office`?`lo`:`mid`,inner:ee(p)})),f.push(a(n.planOutline(n.insetPlan(c,2),d,r,2),{tone:`lo`})),f.push(o({x:c.x+c.w*.2,y:c.y+c.d*.2,w:18,d:12,r:1},d,7,{tone:`mid`},2,.3)),f.push(s(c.x+c.w*.7,c.y+c.d*.35,4,d,9,{tone:`mid`},20));let m=[],te=0,h=(e,t,n)=>`<path class="bd-win" data-win="${te++}" d="M${e.toFixed(1)} ${(-(t+8)).toFixed(1)}H${(e+n).toFixed(1)}V${(-t).toFixed(1)}H${e.toFixed(1)}Z"/>`,g=u===`office`;for(let[t,i,a]of[[c.w,e.front(c.y+c.d),c.x],[c.d,n.sideMatrix([c.x+c.w,c.y+c.d],0,r,`right`),0]]){let e=Math.max(1,Math.floor((t-6)/Ie)),n=a+(t-e*Ie)/2,r=[];for(let t=0;t<l;t++){let i=7+t*14;if(g)r.push(h(n+1,i,e*Ie-2));else for(let t=0;t<e;t++)r.push(h(n+t*Ie+2,i,Ie-4))}m.push(`<g transform="${i}">${r.join(``)}</g>`)}f.push(...m);let _=c.x+c.w/2,v=c.y+c.d,y=(e,t,n,r,i,a=0)=>{let l=c.x+c.w/2+a;f.push(o({x:l-4.5,y:v,w:9,d:.6,r:.2},0,n-1,{tone:`lo`},2,0),...[-1,1].flatMap(r=>[s(l+r*(e-3)/2,v+t-1.2,1.7,0,.8,{tone:`lo`},14),s(l+r*(e-3)/2,v+t-1.2,i,.8,n-.8,{tone:`mid`},12)]),o({x:l-e/2,y:v,w:e,d:t,r:.5},n,1.4,{tone:r},2,.2))};if(u===`hospital`)f.push(o({x:_-6,y:v-1,w:12,d:1.2,r:.4},d-14,12,{tone:`lo`},2,0)),f.push(`<g transform="${e.front(v+.25)}"><path class="bd-cross" d="M${_-1.4} ${-(d-3.6)}H${_+1.4}V${-(d-6.6)}H${_+4.4}V${-(d-9.4)}H${_+1.4}V${-(d-12.4)}H${_-1.4}V${-(d-9.4)}H${_-4.4}V${-(d-6.6)}H${_-1.4}Z"/></g>`),y(24,8,12,`mid`,.9);else if(u===`university`)y(30,9,18,`mid`,1.8,-16);else if(u===`residential`)for(let e=1;e<l;e++)f.push(o({x:c.x+4,y:v,w:c.w-8,d:4,r:.4},4+e*14,1,{tone:`mid`},2,0));else y(20,7,14,`mid`,.9);return f.join(``)}var T=1.8,E=4,D=-14,O=[-5,5],k=[10,26],A=[26,k[0]],j=13,Re=17.5,ze=2.2,Be=-26,M=[[O[0],28,k[1]],[O[0],28,k[0]]],Ve={x:-16,y:-24,w:34,d:54,r:2};function He(e,t){let{k:n,G:r,P:i,at:a,S:o,L:s,D:c,slab:l,cyl:u,hmi:d,screws:f,faceRule:ee}=e,p=[];p.push(l({x:-14,y:-22,w:30,d:50,r:2},0,3,{tone:`lo`},3,.4)),p.push(f(n.corners({x:-14,y:-22,w:30,d:50},2.4),3)),p.push(l({x:-1.2,y:D-6,w:2.4,d:3,r:.4},3,36,{tone:`mid`},2,.2),l({x:-1.4,y:D-6,w:2.8,d:E-D+9,r:.4},36,2.6,{tone:`mid`},2,.2)),p.push(l({x:-10,y:D-3,w:20,d:3,r:.6},3,33,{tone:`mid`},2,.3));let te=[];for(let e=D+.8;e<E-.4;e+=.9)te.push(n.segment([9,e,6],[9,e,33],i));p.push(o(n.slabOf({x:-9,y:D,w:18,d:E-D,r:.4},5,29,i,2,.2),{tone:`lo`,inner:s(te.join(``),{tone:`faint`})}));let h=[[9.1,D+.4,6],[9.1,E-.4,6],[9.1,E-.4,33],[9.1,D+.4,33]].map(e=>a(e));p.push(`<path class="sf-grime" data-foul="" style="opacity:0" d="${n.pathOf(h,!0)}"/>`),p.push(l({x:-11,y:E,w:22,d:3.4,r:.6},3,35,{tone:`mid`},2,.3));let g=E+3.4;p.push(c([-10.4,10.4].flatMap(e=>[7,31].map(t=>a([e,g,t]))),{size:.5}));for(let e of O)for(let t of k){let n=r.frameAlong([e,g,t],[0,1,0]);p.push(o(r.disc(0,2.2,T+.2,n,i),{tone:`mid`}),o(r.disc(2.2,3,T+1.4,n,i),{tone:`mid`}))}let _=(e,t)=>[O[e],g+3,k[t]],[v,y]=M;p.push(m(e,[v,_(0,1)],T,`mid`,3,`heat`),m(e,[_(0,0),y],T,`mid`,3,`heatret`));for(let e of[v,y]){let t=r.frameAlong([e[0],e[1]-1.6,e[2]],[0,1,0]);p.push(o(r.disc(0,1.6,T+1.2,t,i),{tone:`mid`}))}let[b,,x]=v,ne=r.frameAlong([b,14,x],[0,1,0]);p.push(o(r.disc(0,1,T+1.4,ne,i),{tone:`mid`}),o(r.solidOf([[1,2.6],[2.6,3.6,1],[5.4,3.6,1],[7,2.6]],ne,i),{tone:`mid`}),o(r.disc(7,8,T+1.4,ne,i),{tone:`mid`}),u(b,18,1.2,x+3,4,{tone:`mid`,crease:`none`},12),u(b,18,4.4,x+7,2,{tone:`mid`},24),u(b,18,4.8,x+9,5,{tone:`mid`,crease:`lo`},28));let re=a([b+4.8,18,x+11.5]);p.push(`<path class="iso-line" data-tone="lit" data-valve="${b},21,${x+14},4" data-ret="${y[0]},${y[1]-4},${y[2]+2}" d=""/>`,`<circle class="sb-act" data-act="" cx="${re[0].toFixed(2)}" cy="${re[1].toFixed(2)}" r="0.6"/>`);let S=[O[1],g+14,k[1]],ie=(e,t)=>{let n=r.frameAlong([e,-30,t],[0,1,0]);return o(r.disc(0,1.2,T+2.6,n,i),{tone:`mid`})+o(r.disc(1.2,ze,T+1.4,n,i),{tone:`mid`})},ae=(e,t)=>u(e,Be,2.4,0,1,{tone:`lo`},18)+u(e,Be,.9,1,t-T-2.6,{tone:`mid`,crease:`none`},12)+u(e,Be,1.8,t-T-1.6,1,{tone:`mid`},16),C=-30+ze;return p.push(ie(j,A[0]),ie(j,A[1]),ae(j,A[1]),ae(Re,A[0]),l({x:j-1,y:Be-.9,w:Re-j+1.9,d:1.8,r:.3},A[0]-T-1.6,1,{tone:`mid`},2,0),m(e,[_(1,1),S,[j,S[1],A[0]],[j,C,A[0]]],T,`mid`,4,`heat`,[!0,!1]),m(e,[_(1,0),[O[1],g+16,k[0]],[j,g+16,k[0]],[j,C,A[1]]],T,`mid`,4,`heatret`,[!0,!1])),p.push(u(S[0],S[1],3.6,k[1]-3,6,{tone:`mid`},24)),p.push(u(S[0],S[1],3,k[1]+3,7,{tone:`mid`,crease:`lo`},24)),p.push(`<path class="iso-line" data-tone="lo" data-spin="sub" data-at="${S[0]},${S[1]},${k[1]+10}" data-radius="2.4" d=""/>`),p.push(l({x:-14,y:10,w:6,d:8,r:.6},3,22,{tone:`mid`},2,.3)),p.push(d(t,18,-13.6,-8.4,8,21)),p.push(ee(18,-13.6,4,5,2)),p.join(``)}var Ue=1e3,We={x:-380,y:-360,w:305,d:315,r:8},Ge={x:-60,y:-300,w:240,d:150,r:8},Ke={x:-380,y:-15,w:620,d:200,r:8},qe={x:-400,y:-380,w:660,d:585,r:16},Je=i([...l(qe,-21,-14),...l(We,-14,120),...l(Ge,-14,90),...l(Ke,-14,110)],Ue,620,{pad:22,azimuth:60}),Ye=[[-262,-335],[-262,-245],[-262,-155]],Xe=[-120,-255],Ze={r:34,h:118,windowX:6,panelX:40,nozzles:[{angle:180,z:80,r:3.4,role:`inlet`},{angle:0,z:80,r:3.4,role:`outlet`}]},Qe=[94,-130,0],N={primaryA:{c:[-255,-78],scale:1},primaryB:{c:[-130,-78],scale:1},networkA:{c:[0,-190],scale:1.15},networkB:{c:[135,-190],scale:1.15}},$e=[b[0]-Qe[0],b[1]-Qe[1],b[2]],et=[p[0]-Qe[0],p[1]-Qe[1],p[2]],tt=18,nt=(e,t,n,r,i)=>({key:e,skid:[t+n/2-tt,104],building:{kind:e,plan:{x:t-n/2,y:74-r,w:n,d:r,r:2},floors:i}}),rt=[nt(`hospital`,150,112,62,4),nt(`university`,-5,120,64,3),nt(`residential`,-158,68,56,5),nt(`office`,-300,92,58,4)],it=xe([...Ye.map((e,t)=>({key:`boiler${t}`,at:e,h:60})),{key:`accumulator`,at:Xe,h:Ze.h+12},...Object.entries(N).map(([e,t])=>({key:e,at:t.c,h:45})),...rt.flatMap(e=>[{key:`${e.key}-building`,at:[e.building.plan.x+e.building.plan.w/2,e.building.plan.y+e.building.plan.d/2],h:e.building.floors*14+4},{key:e.key,at:e.skid,h:40}])],Je),at=it.order,ot=it.slotDepths,st=it.depth,ct=(e,t)=>[e.c[0]+t[0]*e.scale,e.c[1]+t[1]*e.scale,t[2]*e.scale],P=(e,t,n,r)=>[t??e[0],n??e[1],r??e[2]],lt=e=>{let t=Ze.nozzles[e],[n,r,i]=t?ye(Ze,t):[0,0,0];return[Xe[0]+n,Xe[1]+r,i]},F=(Ye[0]?.[0]??0)+Se[0],I=(Ye[0]?.[0]??0)+Te[0],ut=Se[2],L=80,R=84,[dt=0,z=0,ft=0]=Ye.map(e=>e[1]),pt=lt(0),B=lt(1),{primaryA:V,primaryB:H,networkA:U,networkB:W}=N,G=e=>ct(e,[et[0],et[1],et[2]-3]),K=e=>ct(e,$e),mt=10,q=e=>P(K(e),K(e)[0]+mt*e.scale,null,null),ht=72,J=-106,gt=K(V)[2],Y=220,X=232,_t=3.2*N.networkA.scale,vt=100,yt=vt-18,bt=-40,xt=M[0][2],Z=M[1][2],Q=104+M[0][1]+30,St=Math.min(...rt.map(e=>e.skid[0]))+M[0][0]-14,Ct={z:10,flanged:!0,routes:[{id:`sup-1`,medium:`heat`,r:3.2,pts:[[F,dt,ut],[F,dt,L],[F,pt[1],L]]},{id:`sup-23`,medium:`heat`,r:3.2,reverse:!0,pts:[[F,pt[1],L],[F,z,L]]},{id:`sup-3`,medium:`heat`,r:3.2,reverse:!0,pts:[[F,z,L],[F,ft,L],[F,ft,ut]]},{id:`sup-2`,medium:`heat`,r:3.2,pts:[[F,z,ut],[F,z,L]]},{id:`to-acc`,medium:`heat`,r:3.4,pts:[[F,pt[1],L],pt]},{id:`ret-b`,medium:`heatret`,r:3.2,fromStub:!0,pts:[G(H),P(G(H),null,null,ht),P(G(V),null,null,ht)]},{id:`ret-a`,medium:`heatret`,r:3.2,fromStub:!0,pts:[G(V),P(G(V),null,null,ht)]},{id:`ret-collect`,medium:`heatret`,r:3.2,bend:6,pts:[P(G(V),null,null,ht),P(G(V),I,null,ht),P(G(V),I,null,R),[I,ft,R]]},{id:`ret-12`,medium:`heatret`,r:3.2,pts:[[I,ft,R],[I,z,R]]},{id:`ret-1`,medium:`heatret`,r:3.2,pts:[[I,z,R],[I,dt,R],[I,dt,ut]]},{id:`ret-2`,medium:`heatret`,r:3.2,pts:[[I,z,R],[I,z,ut]]},{id:`ret-3`,medium:`heatret`,r:3.2,pts:[[I,ft,R],[I,ft,ut]]},{id:`acc-out`,medium:`heat`,r:3.4,pts:[B,P(q(U),null,B[1],B[2])]},{id:`suction-nb`,medium:`heat`,r:3.4,pts:[P(q(U),null,B[1],B[2]),P(B,q(W)[0],null,null),P(q(W),null,B[1],null),q(W),K(W)]},{id:`suction-a`,medium:`heat`,r:3.4,pts:[P(q(U),null,B[1],B[2]),P(q(U),null,B[1],null),q(U),K(U)]},...rt.flatMap(e=>{let[t,n]=e.skid,r=[t+M[0][0],n+M[0][1],xt],i=[t+M[1][0],n+M[1][1],Z];return[{id:`${e.key}-sup`,medium:`heat`,r:1.8,pts:[P(r,null,Q,null),r]},{id:`${e.key}-ret`,medium:`heatret`,r:1.8,pts:[i,P(i,null,Q,null)]}]}),{id:`trunk-ret`,medium:`heatret`,r:3.6,blind:[!0,!1],pts:[[St,Q,Z],[X,Q,Z],[X,J,Z],[X,J,gt],P(q(H),null,J,null)]},{id:`suction-pa`,medium:`heatret`,r:3.6,pts:[P(q(H),null,J,null),P(q(V),null,J,null),q(V),K(V)]},{id:`sup-a`,medium:`heat`,r:_t,fromStub:!0,pts:[G(U),P(G(U),null,null,vt),P(G(W),null,null,vt)]},{id:`trunk-sup`,medium:`heat`,r:3.6,blind:[!1,!0],pts:[P(G(W),null,null,vt),[Y,G(U)[1],vt],[Y,G(U)[1],yt],[Y,bt,yt],[Y,bt,xt],[Y,Q,xt],[St,Q,xt]]},{id:`sup-b`,medium:`heat`,r:_t,fromStub:!0,pts:[G(W),P(G(W),null,null,vt)]},{id:`suction-b`,medium:`heatret`,r:3.2,pts:[K(H),q(H),P(q(H),null,J,null)]}],posts:[[Y,-130,3.6,yt],[Y,-70,3.6,yt],[Y,0,3.6,xt,0],[Y,80,3.6,xt,0],[X,-60,3.6,Z],[X,40,3.6,Z,0],[X,120,3.6,Z,0],...[150,50,-40].map(e=>[e,J,3.6,gt]),[-120,J,3.6,gt,0],...[-230,-80,75,140].map(e=>[e,Q,3.6,Z,0])]},$=n(),wt=(e,t)=>we(e,t,10),Tt=(e,t)=>_(e,t,`heatret`,!0),Et=(e,t)=>_(e,t,`heat`,!0),Dt=(e,t)=>_e(e,t,Ze),Ot=ve(Ze);function kt({id:e,spec:t,intro:n}){let r=s();return(0,$.jsx)(o,{html:(0,Fe.useMemo)(()=>Le(r,t),[r,t]),asset:e,intro:n})}function At({ids:e}){let t=s(),n=g(Ct,st),r=(0,Fe.useMemo)(()=>y(t,qe)+t.plinth(We)+t.plinth(Ge)+t.plinth(Ke),[t]),i=e=>(0,$.jsx)(o,{html:`${n.layers[e]??``}<g data-flows="${e}" data-depth="${e===0?-1e9:ot[e-1]??0}"></g>`,data:{pipes:``}},`pipes-${e}`),a=(e,t,n,r)=>(0,$.jsx)(h,{from:Qe,to:le(t.c),scale:t.scale,children:(0,$.jsx)(c,{id:e,plan:ce,intro:r,draw:n})}),l=[e.boilerA,e.boilerB,e.boilerC],u={hospital:e.hospital,university:e.university,residential:e.residential,office:e.office},d={accumulator:(0,$.jsx)(h,{to:le(Xe),children:(0,$.jsx)(c,{id:e.accumulator,plan:Ot,intro:5,draw:Dt})}),primaryA:a(e.primaryA,N.primaryA,Tt,6),primaryB:a(e.primaryB,N.primaryB,Tt,7),networkA:a(e.networkA,N.networkA,Et,8),networkB:a(e.networkB,N.networkB,Et,9)};for(let[e,t]of Ye.entries())d[`boiler${e}`]=(0,$.jsx)(h,{to:le(t),children:(0,$.jsx)(c,{id:l[e]??``,plan:Ce,intro:2+e,draw:wt})});for(let[e,t]of rt.entries()){let n=u[t.key];d[`${t.key}-building`]=(0,$.jsx)(kt,{id:n,spec:t.building,intro:10+e}),d[t.key]=(0,$.jsx)(h,{to:le(t.skid),children:(0,$.jsx)(c,{id:n,plan:Ve,intro:11+e,draw:He})})}return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(o,{html:r,data:{plinth:``}}),i(0),at.flatMap((e,t)=>[(0,$.jsx)(`g`,{children:d[e.key]},e.key),i(t+1)])]})}var jt=x(Je),Mt=v(jt,Ct,st),Nt=ne({layout:{width:Ue,height:620,label:`Isometric model of the District Heating network: the heat plant with three gas boilers, the thermal accumulator and two primary pumps; the network pump house with two trunk pumps; and four customers (a hospital, a university, a residential block and an office park), each with its substation, joined by the supply and return trunk main. Every moving part follows live values from the running engine.`,kit:jt,flows:Mt.flows,joints:Mt.joints,Scene:At,compose:Pe},resolve:Oe,things:ke,caption:`heat plant · network · customers`,mismatch:`This floor expects the District Heating network: three boilers, the accumulator and two primary pumps, two network pumps, and the hospital, university, residential and office substations, by area and line.`,statusBasis:`availability`,Overview:f,tab:`Network`});export{Nt as heatingFloor};
@@ -0,0 +1 @@
1
+ import{t as e}from"./events-NZs3OoQw.js";export{e as EventsPage};