@miravo/cli-linux-x64 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.
- package/console-dist/assets/api-DEoRnScz.js +1 -0
- package/console-dist/assets/api-GfuYYI6q.js +1 -0
- package/console-dist/assets/{asset-detail-B2YDSfM1.js → asset-detail-CbRJwcZg.js} +1 -1
- package/console-dist/assets/{asset-detail-actions-BrttEn24.js → asset-detail-actions-Ceb1_r18.js} +1 -1
- package/console-dist/assets/{backup-power-Cm_Ij5yj.js → backup-power-qtHJlSI4.js} +1 -1
- package/console-dist/assets/{by-path-e6y8DTMV.js → by-path-CKZo157c.js} +1 -1
- package/console-dist/assets/catalog-CshTwzQu.js +1 -0
- package/console-dist/assets/{catalog-DOGCbTe4.js → catalog-Lt1tguKF.js} +1 -1
- package/console-dist/assets/{catalog-template-icons-7CBAYTtP.js → catalog-template-icons-DvKspieo.js} +1 -1
- package/console-dist/assets/{commercial-building-D95MTyEI.js → commercial-building-Bk4sBQtx.js} +1 -1
- package/console-dist/assets/{console-panel-iWo8EgKP.js → console-panel-DOt0r_Oz.js} +1 -1
- package/console-dist/assets/control-89sOxkPx.js +1 -0
- package/console-dist/assets/control-BBMXQRSU.js +1 -0
- package/console-dist/assets/{district-heating-B_YycTG-.js → district-heating-BofEIyfg.js} +1 -1
- package/console-dist/assets/events-DFkG5maw.js +1 -0
- package/console-dist/assets/{events-5RYkaW81.js → events-NZs3OoQw.js} +1 -1
- package/console-dist/assets/export-tab-R8Oac9J5.js +1 -0
- package/console-dist/assets/{factory-3x3_UmJZ.js → factory-BYX8AmsW.js} +1 -1
- package/console-dist/assets/factory-Cp52pnAL.js +1 -0
- package/console-dist/assets/{floor-page-D0qm0GgG.js → floor-page-CiS52QbQ.js} +1 -1
- package/console-dist/assets/{get-error-message-C9VW9IZB.js → get-error-message-DJGhcwLn.js} +1 -1
- package/console-dist/assets/{index-M2C34y3X.js → index-B8B-S-lq.js} +5 -5
- package/console-dist/assets/{integration-api-ChbzMP5N.js → integration-api-B5s7_LWo.js} +1 -1
- package/console-dist/assets/{integrations-Cop24rSE.js → integrations-Bg7xzjIj.js} +1 -1
- package/console-dist/assets/integrations-CG1fPcwM.js +1 -0
- package/console-dist/assets/{login-BZANmwgH.js → login-Dq1AJRqO.js} +1 -1
- package/console-dist/assets/{models-BgGuH6PQ.js → models-BYr_QK_5.js} +1 -1
- package/console-dist/assets/models-jmRXhSoh.js +1 -0
- package/console-dist/assets/{pharma-cleanroom-BbYfEQjP.js → pharma-cleanroom-oxgPn6h6.js} +1 -1
- package/console-dist/assets/{protocol-card-B8XGneNM.js → protocol-card-1DCkgN_l.js} +1 -1
- package/console-dist/assets/{registry-BXGfJ4np.js → registry-BqqyCPJz.js} +2 -2
- package/console-dist/assets/{status-kit-pFRjEjVU.js → status-kit-Darp7bPB.js} +1 -1
- package/console-dist/assets/tags-DlnWXo4p.js +1 -0
- package/console-dist/assets/{tags-Bw7b0x14.js → tags-r7Fx_0yG.js} +2 -2
- package/console-dist/assets/{transition-nav-link-CSrpkA7_.js → transition-nav-link-DIx78Lol.js} +1 -1
- package/console-dist/assets/use-engine-command-mutation-CTbPh58S.js +1 -0
- package/console-dist/assets/{use-transition-navigate-D2Y8kfw6.js → use-transition-navigate-aOjMH_eS.js} +2 -2
- package/console-dist/assets/{useQuery-Cl48zZ73.js → useQuery-BfWNkVkT.js} +1 -1
- package/console-dist/assets/validation-DSsZ8qyt.js +1 -0
- package/console-dist/assets/{water-treatment-jG0T2rhc.js → water-treatment-COXMW4qC.js} +1 -1
- package/console-dist/index.html +23 -23
- package/miravo +2 -2
- package/package.json +1 -1
- package/console-dist/assets/api-BG2sUkwk.js +0 -1
- package/console-dist/assets/api-CKfC8_zv.js +0 -1
- package/console-dist/assets/catalog-Bz24KMiz.js +0 -1
- package/console-dist/assets/control-BMhNX7vM.js +0 -1
- package/console-dist/assets/control-CML5aS8w.js +0 -1
- package/console-dist/assets/events-z582V8se.js +0 -1
- package/console-dist/assets/export-tab-BsV7px7m.js +0 -1
- package/console-dist/assets/factory-LkZOsGje.js +0 -1
- package/console-dist/assets/integrations-BpOu11IH.js +0 -1
- package/console-dist/assets/models-C09Ba-2G.js +0 -1
- package/console-dist/assets/tags-BjW65yls.js +0 -1
- package/console-dist/assets/use-engine-command-mutation-DrMOfYty.js +0 -1
- 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{S as r,o as i,
|
|
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{n as c}from"./chunk-OE4NN4TA-DBWZidbW.js";import{C as l,_ as u,d,f,g as p,w as m}from"./format-Bx7DF-TB.js";import{t as h}from"./utils-XFKvwlFT.js";import{t as g}from"./arrow-up-right-CwPw_2U1.js";import{n as _,t as v}from"./chevron-right-CrNKVFcI.js";import{i as y,r as b}from"./console-panel-DOt0r_Oz.js";import{i as x,n as S,t as C}from"./asset-detail-actions-Ceb1_r18.js";var w=new Set([`Boolean`,`String`]),T=/_(command|reference|setpoint|sp|target)$/,E=`pu`;function D(e,t=2){if(!e)return[];let n=[];for(let[t,r]of Object.entries(e.members))r.kind!==`variable`||r.access!==`read`||w.has(r.dataType)||T.test(t)||!r.unit||!r.euRange||r.euRange[1]<=r.euRange[0]||n.push({member:t,unit:r.unit,min:r.euRange[0],max:r.euRange[1]});return[...n.filter(e=>e.unit!==E),...n.filter(e=>e.unit===E)].slice(0,t)}function O(e){return s({queryKey:a.catalog.modelSchemasBatch(e.join(`,`)),queryFn:()=>Promise.all(e.map(e=>i(`/catalog/models/${e}`,r.catalogModelDetail))),enabled:e.length>0})}var k=e(t(),1);function A(e,t,n){let r=(0,k.useRef)(new Map),i=(0,k.useRef)(n);i.current=n;let[,a]=(0,k.useState)(0),s=t.join(`|`);return(0,k.useEffect)(()=>{if(r.current=new Map,!e)return;let t=s.split(`|`).filter(Boolean);return o.subscribe((n,o)=>{if(n.tick===o.tick)return;let s=n.memberValues.get(e);for(let e of t){let t=r.current.get(e)??[],n=s?.get(e)?.value,a=typeof n==`number`?n:t.at(-1)??i.current(e);a!==void 0&&(t.push(a),t.length>90&&t.shift(),r.current.set(e,t))}a(e=>e+1)})},[e,s]),r.current}var j=n(),M=100,N=22;function P(e,t,n){if(e.length<2)return``;let r=n-t||1,i=90-e.length;return e.map((e,a)=>{let o=(i+a)/89*M,s=N-3-(Math.min(n,Math.max(t,e))-t)/r*(N-6);return`${a?`L`:`M`}${o.toFixed(1)} ${s.toFixed(1)}`}).join(``)}function F({reading:e,value:t,series:n}){let{member:r,unit:i,min:a,max:o}=e,s=t===void 0?0:Math.max(0,Math.min(1,(t-a)/(o-a)));return(0,j.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,j.jsxs)(`div`,{className:`flex items-baseline justify-between gap-3`,children:[(0,j.jsx)(`span`,{className:`truncate text-xs text-muted-foreground`,children:p(r)}),(0,j.jsxs)(`span`,{className:`shrink-0 font-mono text-sm font-semibold tabular-nums`,children:[t===void 0?`–`:f(t),(0,j.jsx)(`span`,{className:`ml-1 text-[10px] font-medium text-muted-foreground`,children:u(i)})]})]}),(0,j.jsxs)(`svg`,{viewBox:`0 0 ${M} ${N}`,preserveAspectRatio:`none`,className:`h-6 w-full overflow-visible`,role:`img`,"aria-label":`${r} trend`,children:[(0,j.jsx)(`rect`,{x:`0`,y:N-1.2,width:M,height:`1.2`,className:`fill-border`}),(0,j.jsx)(`rect`,{x:`0`,y:N-1.2,width:s*M,height:`1.2`,className:`fill-info/70`}),(0,j.jsx)(`path`,{d:P(n,a,o),className:`fill-none stroke-info`,strokeWidth:`1`,strokeLinejoin:`round`,vectorEffect:`non-scaling-stroke`})]})]})}var I=new Set([`off_shift`,`down_planned`,`stopped`,`idle`,`steady`]),L=new Set([`down`,`fault`,`failed`]);function R(e,t){return t?`fault`:e?e===`running`||e===`filling`?`live`:L.has(e)?`fault`:I.has(e)?`off`:`idle`:`off`}function z(e){return e?e.replace(/_/g,` `):`–`}var B=6;function V({title:e,note:t,children:n}){return(0,j.jsxs)(`section`,{className:`flex flex-col gap-3 border-t border-border/50 px-4 py-4`,children:[(0,j.jsxs)(`header`,{className:`flex items-baseline justify-between gap-3`,children:[(0,j.jsx)(`h3`,{className:`text-[11px] font-semibold uppercase tracking-[0.14em] text-muted-foreground`,children:e}),t?(0,j.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:t}):null]}),n]})}function H({name:e,sub:t,pill:n,onBack:r}){return(0,j.jsxs)(`header`,{className:`flex flex-col gap-2 px-4 pt-3 pb-4`,children:[(0,j.jsxs)(l,{size:`sm`,variant:`ghost`,className:`-ml-2 h-7 w-fit gap-1 px-2 text-xs text-muted-foreground`,onClick:r,children:[(0,j.jsx)(_,{className:`size-3.5`,"aria-hidden":!0}),`Line`]}),(0,j.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1`,children:[(0,j.jsx)(`h2`,{className:`truncate font-heading text-lg font-medium tracking-tight`,children:e}),(0,j.jsx)(`span`,{className:`truncate font-mono text-[11px] text-muted-foreground`,children:t})]}),n]})]})}function U({label:e,value:t}){return(0,j.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,j.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:e}),(0,j.jsx)(`span`,{className:`font-mono text-lg font-semibold tabular-nums`,children:t})]})}function W({thing:e,assetId:t,line:n,basis:l,onBack:u}){let f=s({queryKey:a.assets.detail(t),queryFn:()=>i(`/assets/${t}`,r.assetDetail)}),p=f.data,h=o(e=>e.assets.find(e=>e.id===t)),_=o(e=>e.models),v=o(e=>e.memberValues.get(t)),w=h?.model??p?.assetType,T=D(O(w?[w]:[]).data?.[0],B),E=x(t,p,()=>f.refetch()),k=h?.activeFaults??[],M=_.find(e=>e.name===w)?.faultNames??[],N=n?.stations.find(e=>e.id===t),P=n?.buffers.find(e=>e.after===t),I=v?.get(`availability_state`)?.value,L=N?.state??(l===`availability`&&typeof I==`string`?I:v?.get(`run_command`)?.value===!1?`stopped`:`running`),W=N?.good??0,G=N?.scrap??0,K=e=>{let t=v?.get(e)?.value??p?.members[e]?.value;return typeof t==`number`?t:void 0},q=A(t,T.map(e=>e.member),K);return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(H,{name:e.name,sub:`${t} · ${w??`…`}`,onBack:u,pill:(0,j.jsx)(y,{tone:R(L,k.length>0),children:(0,j.jsx)(b,{children:k.length>0?`fault`:z(L)})})}),N?(0,j.jsx)(V,{title:`Production`,note:P?`buffer ${P.level}/${P.capacity}`:`end of line`,children:(0,j.jsxs)(`div`,{className:`grid grid-cols-3 gap-3`,children:[(0,j.jsx)(U,{label:`Good`,value:d(W)}),(0,j.jsx)(U,{label:`Scrap`,value:d(G)}),(0,j.jsx)(U,{label:`Yield`,value:W+G>0?`${(W/(W+G)*100).toFixed(1)}%`:`–`})]})}):null,T.length>0?(0,j.jsx)(V,{title:`Live`,note:`last 90 ticks`,children:(0,j.jsx)(`div`,{className:`flex flex-col gap-3`,children:T.map(e=>(0,j.jsx)(F,{reading:e,value:K(e.member),series:q.get(e.member)??[]},e.member))})}):null,p&&Object.keys(p.methods).length>0?(0,j.jsx)(`div`,{className:`border-t border-border/50 [&>#commands]:px-4`,children:(0,j.jsx)(C,{detail:p,methodArgs:E.methodArgs,setMethodArgs:E.setMethodArgs,onInvoke:E.invoke,isPending:E.isPending,pendingMethod:E.pendingMethod})}):null,(0,j.jsx)(`div`,{className:`border-t border-border/50`,children:(0,j.jsx)(S,{activeFaults:k,availableFaults:M,onTriggerFault:E.triggerFault,onClearFault:E.clearFault})}),(0,j.jsx)(`div`,{className:`border-t border-border/50 px-4 py-3`,children:(0,j.jsxs)(c,{to:`/asset/${encodeURIComponent(t)}`,className:m({size:`sm`,variant:`ghost`,className:`-ml-2 gap-1`}),children:[`Open asset page`,(0,j.jsx)(g,{className:`size-3.5`,"aria-hidden":!0})]})})]})}var G={live:`bg-success`,idle:`bg-warning`,fault:`bg-destructive`,off:`bg-muted-foreground/50`};function K({label:e,value:t}){return(0,j.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,j.jsx)(`span`,{className:`text-[10px] uppercase tracking-[0.14em] text-muted-foreground`,children:e}),(0,j.jsx)(`span`,{className:`font-mono text-lg font-semibold tabular-nums`,children:t})]})}var q=`flex w-full items-center gap-2.5 rounded-[var(--miravo-radius-tight)] px-2 py-2 text-left`;function J({tone:e,name:t,note:n,onSelect:r}){let i=(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`span`,{className:h(`size-1.5 shrink-0 rounded-full`,G[e])}),(0,j.jsx)(`span`,{className:`min-w-0 shrink text-sm`,children:t}),(0,j.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-right font-mono text-[11px] text-muted-foreground tabular-nums`,children:n})]});return r?(0,j.jsx)(`li`,{children:(0,j.jsxs)(`button`,{type:`button`,onClick:r,className:h(q,`group outline-none transition-colors hover:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring`),children:[i,(0,j.jsx)(v,{className:`size-3.5 shrink-0 text-muted-foreground/60 transition-transform group-hover:translate-x-0.5`,"aria-hidden":!0})]})}):(0,j.jsx)(`li`,{className:q,children:i})}export{z as a,D as c,V as i,J as n,R as o,W as r,O as s,K as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./tags-r7Fx_0yG.js";export{e as TagsPage};
|
|
@@ -1,4 +1,4 @@
|
|
|
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{
|
|
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{Ot as r,S as i,o as a,v as o,vt as s}from"./api-GfuYYI6q.js";import{t as c}from"./useQuery-BfWNkVkT.js";import{i as l,n as u,t as d}from"./dist-xY0pK9Wy.js";import{n as f}from"./chunk-OE4NN4TA-DBWZidbW.js";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./dialog-B5PqrKVw.js";import{C as y,S as b,T as x,s as S,u as C,v as ee,y as te}from"./format-Bx7DF-TB.js";import{n as w,t as ne}from"./utils-XFKvwlFT.js";import{a as re,c as ie,i as ae,n as oe,o as se,r as ce,s as le,t as ue}from"./dropdown-menu-B_MMNbTy.js";import{t as de}from"./chevron-down-x70Pto6j.js";import{n as fe,t as pe}from"./chevron-right-CrNKVFcI.js";import{t as T}from"./copy-button-CSUP1VjU.js";import{t as me}from"./download-i8CTJ7oi.js";import{t as he}from"./query-fetch-error-CWLZA2L5.js";import{i as E,n as D,t as O}from"./tooltip-B3vOB1Vu.js";import{n as ge}from"./auth-screen-backdrop-CEykEbfF.js";import{t as k}from"./label-2sIXTEUK.js";import{n as _e}from"./get-error-message-DJGhcwLn.js";import{a as A,i as j,n as M,o as ve,r as N,s as ye,t as P}from"./combobox-B8h0-NHs.js";import{c as F,i as I,n as L,s as R,t as z}from"./select-BWlrSYlA.js";import{n as B,r as V}from"./integration-targets-Byvdd3Or.js";import{a as be,i as xe,n as Se,o as Ce,r as we,t as Te}from"./vendor-table-BQAIXM34.js";var Ee=w(`arrow-down`,[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]),De=w(`arrow-up`,[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]),Oe=w(`braces`,[[`path`,{d:`M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1`,key:`ezmyqa`}],[`path`,{d:`M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1`,key:`e1hn23`}]]),ke=w(`database`,[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]),Ae=w(`external-link`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]),je=w(`table-2`,[[`path`,{d:`M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18`,key:`gugj83`}]]),H=e(t(),1),Me={mqtt:`MQTT Client`,opcua:`OPC UA Client Advanced`,modbus:`Modbus TCP`},U={Boolean:`bool`,Int32:`int32`,UInt16:`uint16`,UInt32:`uint32`,Float:`float32`,Double:`float64`,String:`string`},W={float32:`float32`,int32:`int32`,uint32:`uint32`,uint16:`word`,boolean:`word`},Ne=`deviceId,deviceName,driverName,name,tagName,description,valueType,registerId,publishCoV,tagFormula,metaData,Retain,Qos,address,count,pollingInterval,endianness`;function Pe(e,t,n){let r=[Ne];for(let i of n){let n=Me[i]??i;for(let a of e){let e=a.protocols[i];e&&r.push(G(i,{deviceName:t,driverName:n,memberName:a.member,browsePath:a.browsePath,dataType:a.dataType,protocolData:e,unit:a.unit,euRange:a.euRange,model:a.model,asset:a.asset,access:a.access}))}}return`${r.join(`
|
|
2
2
|
`)}\n`}function G(e,t){switch(e){case`mqtt`:return K(t);case`opcua`:return Fe(t);case`modbus`:return Ie(t);default:throw Error(`Unsupported LE export protocol: "${e}"`)}}function K(e){let t=typeof e.protocolData?.topic==`string`?e.protocolData.topic:`${e.browsePath}/${e.memberName}`;return[``,q(e.deviceName),q(e.driverName),q(t),q(e.memberName),``,`string`,``,`false`,``,J(e),`Disable`,`0`,``,``,``,``].join(`,`)}function Fe(e){let t=typeof e.protocolData?.nodeId==`string`?e.protocolData.nodeId:`ns=1;s=${e.browsePath}/${e.memberName}`,n=U[e.dataType]??`string`;return[``,q(e.deviceName),q(e.driverName),q(t),q(e.memberName),``,n,``,`false`,``,J(e),``,``,``,``,``,``].join(`,`)}function Ie(e){let t=W[String(e.protocolData?.registerType??``)]??Le(e.dataType),n=e.protocolData?.address;return[``,q(e.deviceName),q(e.driverName),`H`,q(e.memberName),``,t,``,`false`,``,J(e),``,``,typeof n==`number`?String(n):`0`,`1`,`1.0000000000`,`AB CD`].join(`,`)}function Le(e){switch(e){case`Double`:case`Float`:return`float32`;case`Int32`:return`int32`;case`UInt32`:return`uint32`;case`Boolean`:case`UInt16`:return`word`;default:return`float32`}}function q(e){return e.includes(`,`)||e.includes(`"`)||e.includes(`
|
|
3
|
-
`)?`"${e.replace(/"/g,`""`)}"`:e}function J(e){let t={uns_path:e.browsePath?`${e.browsePath}/${e.memberName}`:e.memberName,model:e.model,asset:e.asset,access:e.access};return e.unit!=null&&(t.unit=e.unit),e.euRange!=null&&(t.eu_range_min=String(e.euRange[0]),t.eu_range_max=String(e.euRange[1])),q(JSON.stringify(t))}var Y=n(),Re={mqtt:`MQTT`,opcua:`OPC UA`,modbus:`Modbus`},ze=[{id:V.id,label:V.label}];function Be({open:e,onOpenChange:t,tags:n,totalTags:r,enabledProtocols:i,selectedAsset:a}){let[o,s]=(0,H.useState)(`litmus-edge`),[c,l]=(0,H.useState)(``),[u,d]=(0,H.useState)(``),f=(0,H.useRef)(null),x=(0,H.useRef)(!1);(0,H.useEffect)(()=>{e&&!x.current&&(s(V.id),l(a??``),d(i[0]??``),setTimeout(()=>f.current?.focus(),80)),x.current=e},[e,i,a]);let S=c.trim()!==``&&u!==``,C=o===V.id?S:!1,ee=(0,H.useCallback)(()=>{if(o===V.id){let e=Pe(n,c.trim(),[u]),r=new Blob([e],{type:`text/csv`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=`${c.trim()}-litmus-edge-tags.csv`,a.click(),URL.revokeObjectURL(i),t(!1)}},[o,c,n,u,t]),te=n.length<r,w=(0,H.useMemo)(()=>[...ze.map(e=>({value:e.id,label:e.label})),...B.map(e=>({value:e.id,label:e.label}))],[]),ne=(0,H.useMemo)(()=>i.map(e=>({value:e,label:Re[e]??e.toUpperCase()})),[i]);return(0,Y.jsx)(v,{open:e,onOpenChange:t,children:(0,Y.jsxs)(h,{className:`sm:max-w-lg`,children:[(0,Y.jsxs)(p,{children:[(0,Y.jsx)(g,{children:`Export for Integration`}),(0,Y.jsx)(_,{children:te?`Exporting ${n.length} of ${r} tags based on current table filters.`:`Exporting all ${n.length} tags. Use table filters to narrow scope.`})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-4 py-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(k,{className:`text-sm`,children:`Integration`}),(0,Y.jsxs)(z,{value:o,onValueChange:e=>e&&s(e),items:w,children:[(0,Y.jsx)(R,{className:`w-full text-sm`,children:(0,Y.jsx)(F,{placeholder:`Select integration`})}),(0,Y.jsxs)(L,{children:[ze.map(e=>(0,Y.jsx)(I,{value:e.id,children:e.label},e.id)),B.map(e=>(0,Y.jsx)(I,{value:e.id,disabled:!0,children:e.label},e.id))]})]})]}),o===V.id&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsxs)(k,{htmlFor:`device-name`,className:`text-sm`,children:[`Device name `,(0,Y.jsx)(`span`,{className:`text-destructive`,children:`*`})]}),(0,Y.jsx)(b,{id:`device-name`,ref:f,placeholder:`e.g. smart_factory_cnc_001`,value:c,onChange:e=>l(e.target.value),onKeyDown:e=>e.key===`Enter`&&C&&ee(),className:`font-mono text-sm`})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(k,{className:`text-sm`,children:`Protocol`}),(0,Y.jsxs)(z,{value:u||void 0,onValueChange:e=>e&&d(e),items:ne,children:[(0,Y.jsx)(R,{className:`w-full text-sm`,children:(0,Y.jsx)(F,{placeholder:`Select a protocol`})}),(0,Y.jsx)(L,{children:i.map(e=>(0,Y.jsx)(I,{value:e,children:Re[e]??e.toUpperCase()},e))})]})]})]})]}),(0,Y.jsxs)(m,{children:[(0,Y.jsx)(y,{variant:`outline`,size:`sm`,onClick:()=>t(!1),children:`Cancel`}),(0,Y.jsxs)(y,{size:`sm`,className:`gap-1.5`,disabled:!C,onClick:ee,children:[(0,Y.jsx)(me,{className:`size-3.5`}),`Download CSV`]})]})]})})}var Ve=`border-border/70 bg-popover/98 font-body text-sm shadow-xl ring-1 ring-foreground/12 backdrop-blur-sm supports-backdrop-filter:bg-popover/90 p-1.5`,He=`px-2 pb-1 font-heading text-[9px] font-semibold tracking-[0.14em] text-muted-foreground uppercase`,Ue=`h-8 gap-1.5 border-border/80 bg-background/80 text-xs font-medium shadow-sm transition-colors hover:border-primary/35 hover:bg-accent/40`,We=`gap-2.5 rounded-[var(--miravo-radius-tight)] py-2 pl-2 pr-2 text-[13px] data-[highlighted]:bg-sidebar-accent data-[highlighted]:text-sidebar-accent-foreground`;function Ge({protocol:e,asset:t,model:n,member:r,enabledProtocols:i,hasFilters:a,memberSearchRef:o,onProtocolChange:s,onAssetChange:c,onModelChange:l,onMemberChange:u,onClearFilters:d,onAssetSearch:f,onModelSearch:p,filteredAssetOptions:m,filteredModelOptions:h}){let g=(0,H.useMemo)(()=>[{value:`all`,label:`All protocols`},...i.map(e=>({value:e,label:e.toUpperCase()}))],[i]);return(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsxs)(z,{value:e||`all`,onValueChange:e=>s(!e||e===`all`?``:e),items:g,children:[(0,Y.jsx)(R,{className:`h-8 w-[140px]`,"aria-label":`Protocol filter`,children:(0,Y.jsx)(F,{placeholder:`All protocols`})}),(0,Y.jsxs)(L,{alignItemWithTrigger:!1,align:`start`,children:[(0,Y.jsx)(I,{value:`all`,children:`All protocols`}),i.map(e=>(0,Y.jsx)(I,{value:e,children:e.toUpperCase()},e))]})]}),(0,Y.jsxs)(P,{value:t?{value:t,label:S(t)}:null,onValueChange:e=>c(e?.value??``),isItemEqualToValue:(e,t)=>e?.value===t?.value,onInputValueChange:f,children:[(0,Y.jsx)(N,{placeholder:`All assets`,className:`h-8 w-[200px]`,showClear:!!t}),(0,Y.jsx)(M,{children:(0,Y.jsxs)(A,{children:[m.map(([e,t])=>(0,Y.jsxs)(j,{value:{value:e,label:S(e)},children:[(0,Y.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,title:`${S(e)} (${e})`,children:S(e)}),(0,Y.jsxs)(`span`,{className:`shrink-0 tabular-nums text-muted-foreground`,children:[`(`,t,`)`]})]},e)),m.length===0&&(0,Y.jsx)(`p`,{className:`py-2 text-center text-xs text-muted-foreground`,children:`No assets found`})]})})]}),(0,Y.jsxs)(P,{value:n?{value:n,label:C(n)}:null,onValueChange:e=>l(e?.value??``),isItemEqualToValue:(e,t)=>e?.value===t?.value,onInputValueChange:p,children:[(0,Y.jsx)(N,{placeholder:`All models`,className:`h-8 w-[200px]`,showClear:!!n}),(0,Y.jsx)(M,{children:(0,Y.jsxs)(A,{children:[h.map(([e,t])=>(0,Y.jsxs)(j,{value:{value:e,label:C(e)},children:[(0,Y.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:C(e)}),(0,Y.jsxs)(`span`,{className:`shrink-0 tabular-nums text-muted-foreground`,children:[`(`,t,`)`]})]},e)),h.length===0&&(0,Y.jsx)(`p`,{className:`py-2 text-center text-xs text-muted-foreground`,children:`No models found`})]})})]}),(0,Y.jsxs)(`div`,{className:`relative`,children:[(0,Y.jsx)(b,{ref:o,placeholder:`Search member…`,className:`h-8 w-[160px] pr-7`,value:r,onChange:e=>u(e.target.value)}),!r&&(0,Y.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:`/`})]}),a&&(0,Y.jsxs)(y,{variant:`ghost`,size:`sm`,className:`h-8 gap-1 text-xs`,onClick:d,children:[(0,Y.jsx)(x,{className:`size-3`}),`Clear`]})]})}function X({sorted:e}){return e===`asc`?(0,Y.jsx)(De,{className:`ml-1 inline size-3`}):e===`desc`?(0,Y.jsx)(Ee,{className:`ml-1 inline size-3`}):(0,Y.jsx)(ie,{className:`ml-1 inline size-3 opacity-30`})}function Ke(e,t=1,n=2){let r=e.split(`/`);return r.length<=t+n+1?e:[...r.slice(0,t),`...`,...r.slice(-n)].join(`/`)}function Z({label:e,value:t,collapsible:n}){let r=n?Ke(t):t;return(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`p`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:e}),(0,Y.jsx)(T,{value:t,label:`Copy ${e}`,tooltipSide:`top`,render:({icon:e})=>(0,Y.jsxs)(`button`,{type:`button`,className:`mt-0.5 flex items-start gap-1 font-mono text-xs hover:text-foreground`,children:[n?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`break-all lg:hidden`,children:r}),(0,Y.jsx)(`span`,{className:`hidden break-all lg:inline`,children:t})]}):(0,Y.jsx)(`span`,{className:`break-all`,children:t}),(0,Y.jsx)(`span`,{className:`mt-0.5 shrink-0 text-muted-foreground`,children:e})]})})]})}function qe({tag:e,enabledProtocols:t}){let n=`${e.browsePath}/${e.member}`,r=e.protocols.opcua,i=e.protocols.modbus,a=e.access===`readwrite`?`rw`:e.access;return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-3 text-xs`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-x-10 gap-y-2.5`,children:[(0,Y.jsx)(Z,{label:`Topic / UNS`,value:n,collapsible:!0}),t.includes(`opcua`)&&typeof r?.nodeId==`string`&&(0,Y.jsx)(Z,{label:`OPC UA NodeId`,value:r.nodeId,collapsible:!0}),t.includes(`modbus`)&&i?.address!=null&&(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`p`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:`Modbus`}),(0,Y.jsxs)(`p`,{className:`mt-0.5 font-mono`,children:[`addr=`,String(i.address),` regs=`,String(i.count),` `,String(i.registerType)]})]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-4 gap-y-1 text-muted-foreground`,children:[(0,Y.jsxs)(O,{children:[(0,Y.jsx)(E,{className:`font-mono`,render:(0,Y.jsx)(`span`,{}),children:e.dataType}),(0,Y.jsx)(D,{side:`top`,children:`Data type`})]}),e.unit&&(0,Y.jsxs)(O,{children:[(0,Y.jsx)(E,{className:`font-mono`,render:(0,Y.jsx)(`span`,{}),children:e.unit}),(0,Y.jsx)(D,{side:`top`,children:`Unit`})]}),(0,Y.jsxs)(O,{children:[(0,Y.jsx)(E,{className:`font-mono`,render:(0,Y.jsx)(`span`,{}),children:a}),(0,Y.jsx)(D,{side:`top`,children:`Access: r / w / rw`})]}),e.euRange&&(0,Y.jsxs)(O,{children:[(0,Y.jsxs)(E,{className:`font-mono`,render:(0,Y.jsx)(`span`,{}),children:[`[`,e.euRange[0],`, `,e.euRange[1],`]`]}),(0,Y.jsx)(D,{side:`top`,children:`EU range (min, max)`})]}),(0,Y.jsxs)(O,{children:[(0,Y.jsxs)(E,{render:(0,Y.jsx)(f,{to:`/asset/${e.asset}`,className:`inline-flex items-center gap-1 text-primary underline-offset-4 hover:underline`,"aria-label":`Open asset`}),children:[`View asset`,(0,Y.jsx)(Ae,{className:`size-3`})]}),(0,Y.jsx)(D,{side:`top`,children:`Open asset`})]})]})]})}var Je=[{id:`expand`,meta:{cellClass:`!pl-2 !pr-0 w-0`},header:()=>(0,Y.jsx)(`span`,{className:`sr-only`,children:`Expand row`}),enableSorting:!1,cell:({row:e})=>(0,Y.jsx)(`button`,{type:`button`,className:`inline-flex size-5 items-center justify-center rounded-[var(--miravo-radius-tight)] text-muted-foreground hover:text-foreground`,"aria-label":e.getIsExpanded()?`Collapse row`:`Expand row`,"aria-expanded":e.getIsExpanded(),onClick:t=>{t.stopPropagation(),e.toggleExpanded()},children:(0,Y.jsx)(de,{className:`size-3.5 transition-transform ${e.getIsExpanded()?`rotate-0`:`-rotate-90`}`})})},{accessorKey:`asset`,header:({column:e})=>(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center`,onClick:e.getToggleSortingHandler(),children:[`Asset`,(0,Y.jsx)(X,{sorted:e.getIsSorted()})]}),cell:({getValue:e})=>(0,Y.jsx)(`span`,{className:`block max-w-[18rem] truncate font-mono text-xs`,title:e(),children:e()})},{accessorKey:`member`,header:({column:e})=>(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center`,onClick:e.getToggleSortingHandler(),children:[`Member`,(0,Y.jsx)(X,{sorted:e.getIsSorted()})]}),cell:({getValue:e})=>(0,Y.jsx)(`span`,{className:`block max-w-[20rem] truncate font-mono text-xs`,title:e(),children:e()})},{accessorKey:`model`,header:({column:e})=>(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center`,onClick:e.getToggleSortingHandler(),children:[`Model`,(0,Y.jsx)(X,{sorted:e.getIsSorted()})]}),cell:({getValue:e})=>(0,Y.jsx)(`span`,{className:`block max-w-[18rem] truncate text-xs`,title:e(),children:e()})},{accessorKey:`dataType`,meta:{hideClass:`hidden lg:table-cell`},header:({column:e})=>(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center`,onClick:e.getToggleSortingHandler(),children:[`Type`,(0,Y.jsx)(X,{sorted:e.getIsSorted()})]}),cell:({getValue:e})=>(0,Y.jsx)(`span`,{className:`font-mono text-xs`,children:e()})},{accessorKey:`unit`,meta:{hideClass:`hidden lg:table-cell`},header:`Unit`,enableSorting:!1,cell:({getValue:e})=>(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e()??`—`})},{accessorKey:`access`,meta:{hideClass:`hidden lg:table-cell`},header:`Access`,enableSorting:!1,cell:({getValue:e})=>{let t=e();return(0,Y.jsx)(`span`,{className:`font-mono text-xs`,children:t===`readwrite`?`rw`:t})}}];function Ye(e,t){let n=new Blob([e],{type:`text/csv`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=t,i.click(),URL.revokeObjectURL(r)}var Xe=[10,15,25,50,100],Ze=15,Qe=100;function $e(e){return Xe.includes(e)?e:Ze}function et(e){return/[",\r\n]/.test(e)?`"${e.replaceAll(`"`,`""`)}"`:e}function Q(){let[e,t]=(0,H.useState)(!1),n=(0,H.useRef)(null);(0,H.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(),n.current?.focus())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]);let[p,m]=l(`protocol`,u.withDefault(``)),[h,g]=l(`asset`,u.withDefault(``)),[_,v]=l(`model`,u.withDefault(``)),[b,x]=l(`member`,u.withDefault(``)),[S,C]=l(`perPage`,d.withDefault(Ze)),w=$e(S),ie=o(e=>e.assetCount),T=c({queryKey:s.tags.manifest(ie),queryFn:()=>a(`/manifest`,r.manifest),placeholderData:i}),E=T.data??null,D=T.isError,O=T.isPending&&!E&&!D,k=_e(T.error,`Failed to fetch manifest.`),A=E?.tags??[],j=E?.summary?.enabledProtocols??[],M=(0,H.useDeferredValue)(b),N=(0,H.useMemo)(()=>A.filter(e=>e.kind===`variable`),[A]),P=(0,H.useMemo)(()=>{let e=new Map;for(let t of N)e.set(t.asset,(e.get(t.asset)??0)+1);return[...e.entries()].sort((e,t)=>e[0].localeCompare(t[0]))},[N]),B=(0,H.useMemo)(()=>{let e=new Map;for(let t of N)e.set(t.model,(e.get(t.model)??0)+1);return[...e.entries()].sort((e,t)=>e[0].localeCompare(t[0]))},[N]),V=(0,H.useMemo)(()=>{let e=M.trim().toLowerCase();if(!p&&!h&&!_&&!e)return N;let t=[];for(let n of N)p&&n.protocols[p]==null||h&&n.asset!==h||_&&n.model!==_||e&&!n.member.toLowerCase().includes(e)||t.push(n);return t},[N,p,h,_,M]),[Ee,De]=(0,H.useState)([]),[Ae,Me]=(0,H.useState)({}),[U,W]=(0,H.useState)(0),Ne=p!==``||h!==``||_!==``||b!==``,Pe=(0,H.useCallback)(()=>{m(``),g(``),v(``),x(``),W(0)},[m,g,v,x]),G=Se({data:V,columns:Je,getCoreRowModel:we(),getSortedRowModel:Ce(),getExpandedRowModel:xe(),getRowCanExpand:()=>!0,getPaginationRowModel:be(),onSortingChange:De,onExpandedChange:Me,onPaginationChange:e=>{let t=typeof e==`function`?e({pageIndex:U,pageSize:w}):e;W(t.pageIndex),C(t.pageSize)},state:{sorting:Ee,expanded:Ae,pagination:{pageIndex:U,pageSize:w}}}),K=Math.ceil(V.length/w);(0,H.useEffect)(()=>{S!==w&&C(w)},[w,S,C]),(0,H.useEffect)(()=>{K>0&&U>=K&&W(K-1)},[K,U]);let Fe=(0,H.useCallback)(e=>{W(0),C(e)},[C]),Ie=(0,H.useCallback)(e=>{W(0),m(e)},[m]),Le=(0,H.useCallback)(e=>{W(0),g(e)},[g]),q=(0,H.useCallback)(e=>{W(0),v(e)},[v]),J=(0,H.useCallback)(e=>{W(0),x(e)},[x]),[Re,ze]=(0,H.useState)(``),[X,Ke]=(0,H.useState)(``),Z=(0,H.useDeferredValue)(Re),Q=(0,H.useDeferredValue)(X),tt=(0,H.useMemo)(()=>(Z?P.filter(([e])=>ee(e,Z)):P).slice(0,Qe),[P,Z]),nt=(0,H.useMemo)(()=>(Q?B.filter(([e])=>te(e,Q)):B).slice(0,Qe),[B,Q]),rt=G.getRowModel().rows,$=rt.length,it=$===0||V.length===0?0:U*w+1,at=$===0||V.length===0?0:U*w+$,ot=K,st=V.length===0||ot===0?0:U+1,ct=(0,H.useCallback)(()=>{let e=p?[p]:j,t=[`asset`,`member`,`model`,`dataType`,`unit`,`access`,`browsePath`,...e.includes(`mqtt`)?[`mqtt_topic`]:[],...e.includes(`opcua`)?[`opcua_nodeId`]:[],...e.includes(`modbus`)?[`modbus_address`,`modbus_count`,`modbus_encoding`]:[]],n=V.map(t=>{let n=t.protocols.mqtt,r=t.protocols.opcua,i=t.protocols.modbus;return[t.asset,t.member,t.model,t.dataType,t.unit??``,t.access,t.browsePath,...e.includes(`mqtt`)?[String(n?.topic??``)]:[],...e.includes(`opcua`)?[String(r?.nodeId??``)]:[],...e.includes(`modbus`)?[String(i?.address??``),String(i?.count??``),String(i?.registerType??``)]:[]]});Ye([t.map(et).join(`,`),...n.map(e=>e.map(et).join(`,`))].join(`
|
|
3
|
+
`)?`"${e.replace(/"/g,`""`)}"`:e}function J(e){let t={uns_path:e.browsePath?`${e.browsePath}/${e.memberName}`:e.memberName,model:e.model,asset:e.asset,access:e.access};return e.unit!=null&&(t.unit=e.unit),e.euRange!=null&&(t.eu_range_min=String(e.euRange[0]),t.eu_range_max=String(e.euRange[1])),q(JSON.stringify(t))}var Y=n(),Re={mqtt:`MQTT`,opcua:`OPC UA`,modbus:`Modbus`},ze=[{id:V.id,label:V.label}];function Be({open:e,onOpenChange:t,tags:n,totalTags:r,enabledProtocols:i,selectedAsset:a}){let[o,s]=(0,H.useState)(`litmus-edge`),[c,l]=(0,H.useState)(``),[u,d]=(0,H.useState)(``),f=(0,H.useRef)(null),x=(0,H.useRef)(!1);(0,H.useEffect)(()=>{e&&!x.current&&(s(V.id),l(a??``),d(i[0]??``),setTimeout(()=>f.current?.focus(),80)),x.current=e},[e,i,a]);let S=c.trim()!==``&&u!==``,C=o===V.id?S:!1,ee=(0,H.useCallback)(()=>{if(o===V.id){let e=Pe(n,c.trim(),[u]),r=new Blob([e],{type:`text/csv`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=`${c.trim()}-litmus-edge-tags.csv`,a.click(),URL.revokeObjectURL(i),t(!1)}},[o,c,n,u,t]),te=n.length<r,w=(0,H.useMemo)(()=>[...ze.map(e=>({value:e.id,label:e.label})),...B.map(e=>({value:e.id,label:e.label}))],[]),ne=(0,H.useMemo)(()=>i.map(e=>({value:e,label:Re[e]??e.toUpperCase()})),[i]);return(0,Y.jsx)(v,{open:e,onOpenChange:t,children:(0,Y.jsxs)(h,{className:`sm:max-w-lg`,children:[(0,Y.jsxs)(p,{children:[(0,Y.jsx)(g,{children:`Export for Integration`}),(0,Y.jsx)(_,{children:te?`Exporting ${n.length} of ${r} tags based on current table filters.`:`Exporting all ${n.length} tags. Use table filters to narrow scope.`})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-4 py-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(k,{className:`text-sm`,children:`Integration`}),(0,Y.jsxs)(z,{value:o,onValueChange:e=>e&&s(e),items:w,children:[(0,Y.jsx)(R,{className:`w-full text-sm`,children:(0,Y.jsx)(F,{placeholder:`Select integration`})}),(0,Y.jsxs)(L,{children:[ze.map(e=>(0,Y.jsx)(I,{value:e.id,children:e.label},e.id)),B.map(e=>(0,Y.jsx)(I,{value:e.id,disabled:!0,children:e.label},e.id))]})]})]}),o===V.id&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsxs)(k,{htmlFor:`device-name`,className:`text-sm`,children:[`Device name `,(0,Y.jsx)(`span`,{className:`text-destructive`,children:`*`})]}),(0,Y.jsx)(b,{id:`device-name`,ref:f,placeholder:`e.g. smart_factory_cnc_001`,value:c,onChange:e=>l(e.target.value),onKeyDown:e=>e.key===`Enter`&&C&&ee(),className:`font-mono text-sm`})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(k,{className:`text-sm`,children:`Protocol`}),(0,Y.jsxs)(z,{value:u||void 0,onValueChange:e=>e&&d(e),items:ne,children:[(0,Y.jsx)(R,{className:`w-full text-sm`,children:(0,Y.jsx)(F,{placeholder:`Select a protocol`})}),(0,Y.jsx)(L,{children:i.map(e=>(0,Y.jsx)(I,{value:e,children:Re[e]??e.toUpperCase()},e))})]})]})]})]}),(0,Y.jsxs)(m,{children:[(0,Y.jsx)(y,{variant:`outline`,size:`sm`,onClick:()=>t(!1),children:`Cancel`}),(0,Y.jsxs)(y,{size:`sm`,className:`gap-1.5`,disabled:!C,onClick:ee,children:[(0,Y.jsx)(me,{className:`size-3.5`}),`Download CSV`]})]})]})})}var Ve=`border-border/70 bg-popover/98 font-body text-sm shadow-xl ring-1 ring-foreground/12 backdrop-blur-sm supports-backdrop-filter:bg-popover/90 p-1.5`,He=`px-2 pb-1 font-heading text-[9px] font-semibold tracking-[0.14em] text-muted-foreground uppercase`,Ue=`h-8 gap-1.5 border-border/80 bg-background/80 text-xs font-medium shadow-sm transition-colors hover:border-primary/35 hover:bg-accent/40`,We=`gap-2.5 rounded-[var(--miravo-radius-tight)] py-2 pl-2 pr-2 text-[13px] data-[highlighted]:bg-sidebar-accent data-[highlighted]:text-sidebar-accent-foreground`;function Ge({protocol:e,asset:t,model:n,member:r,enabledProtocols:i,hasFilters:a,memberSearchRef:o,onProtocolChange:s,onAssetChange:c,onModelChange:l,onMemberChange:u,onClearFilters:d,onAssetSearch:f,onModelSearch:p,filteredAssetOptions:m,filteredModelOptions:h}){let g=(0,H.useMemo)(()=>[{value:`all`,label:`All protocols`},...i.map(e=>({value:e,label:e.toUpperCase()}))],[i]);return(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsxs)(z,{value:e||`all`,onValueChange:e=>s(!e||e===`all`?``:e),items:g,children:[(0,Y.jsx)(R,{className:`h-8 w-[140px]`,"aria-label":`Protocol filter`,children:(0,Y.jsx)(F,{placeholder:`All protocols`})}),(0,Y.jsxs)(L,{alignItemWithTrigger:!1,align:`start`,children:[(0,Y.jsx)(I,{value:`all`,children:`All protocols`}),i.map(e=>(0,Y.jsx)(I,{value:e,children:e.toUpperCase()},e))]})]}),(0,Y.jsxs)(P,{value:t?{value:t,label:S(t)}:null,onValueChange:e=>c(e?.value??``),isItemEqualToValue:(e,t)=>e?.value===t?.value,onInputValueChange:f,children:[(0,Y.jsx)(N,{placeholder:`All assets`,className:`h-8 w-[200px]`,showClear:!!t}),(0,Y.jsx)(M,{children:(0,Y.jsxs)(A,{children:[m.map(([e,t])=>(0,Y.jsxs)(j,{value:{value:e,label:S(e)},children:[(0,Y.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,title:`${S(e)} (${e})`,children:S(e)}),(0,Y.jsxs)(`span`,{className:`shrink-0 tabular-nums text-muted-foreground`,children:[`(`,t,`)`]})]},e)),m.length===0&&(0,Y.jsx)(`p`,{className:`py-2 text-center text-xs text-muted-foreground`,children:`No assets found`})]})})]}),(0,Y.jsxs)(P,{value:n?{value:n,label:C(n)}:null,onValueChange:e=>l(e?.value??``),isItemEqualToValue:(e,t)=>e?.value===t?.value,onInputValueChange:p,children:[(0,Y.jsx)(N,{placeholder:`All models`,className:`h-8 w-[200px]`,showClear:!!n}),(0,Y.jsx)(M,{children:(0,Y.jsxs)(A,{children:[h.map(([e,t])=>(0,Y.jsxs)(j,{value:{value:e,label:C(e)},children:[(0,Y.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:C(e)}),(0,Y.jsxs)(`span`,{className:`shrink-0 tabular-nums text-muted-foreground`,children:[`(`,t,`)`]})]},e)),h.length===0&&(0,Y.jsx)(`p`,{className:`py-2 text-center text-xs text-muted-foreground`,children:`No models found`})]})})]}),(0,Y.jsxs)(`div`,{className:`relative`,children:[(0,Y.jsx)(b,{ref:o,placeholder:`Search member…`,className:`h-8 w-[160px] pr-7`,value:r,onChange:e=>u(e.target.value)}),!r&&(0,Y.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:`/`})]}),a&&(0,Y.jsxs)(y,{variant:`ghost`,size:`sm`,className:`h-8 gap-1 text-xs`,onClick:d,children:[(0,Y.jsx)(x,{className:`size-3`}),`Clear`]})]})}function X({sorted:e}){return e===`asc`?(0,Y.jsx)(De,{className:`ml-1 inline size-3`}):e===`desc`?(0,Y.jsx)(Ee,{className:`ml-1 inline size-3`}):(0,Y.jsx)(ie,{className:`ml-1 inline size-3 opacity-30`})}function Ke(e,t=1,n=2){let r=e.split(`/`);return r.length<=t+n+1?e:[...r.slice(0,t),`...`,...r.slice(-n)].join(`/`)}function Z({label:e,value:t,collapsible:n}){let r=n?Ke(t):t;return(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`p`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:e}),(0,Y.jsx)(T,{value:t,label:`Copy ${e}`,tooltipSide:`top`,render:({icon:e})=>(0,Y.jsxs)(`button`,{type:`button`,className:`mt-0.5 flex items-start gap-1 font-mono text-xs hover:text-foreground`,children:[n?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`break-all lg:hidden`,children:r}),(0,Y.jsx)(`span`,{className:`hidden break-all lg:inline`,children:t})]}):(0,Y.jsx)(`span`,{className:`break-all`,children:t}),(0,Y.jsx)(`span`,{className:`mt-0.5 shrink-0 text-muted-foreground`,children:e})]})})]})}function qe({tag:e,enabledProtocols:t}){let n=`${e.browsePath}/${e.member}`,r=e.protocols.opcua,i=e.protocols.modbus,a=e.access===`readwrite`?`rw`:e.access;return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-3 text-xs`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-x-10 gap-y-2.5`,children:[(0,Y.jsx)(Z,{label:`Topic / UNS`,value:n,collapsible:!0}),t.includes(`opcua`)&&typeof r?.nodeId==`string`&&(0,Y.jsx)(Z,{label:`OPC UA NodeId`,value:r.nodeId,collapsible:!0}),t.includes(`modbus`)&&i?.address!=null&&(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`p`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:`Modbus`}),(0,Y.jsxs)(`p`,{className:`mt-0.5 font-mono`,children:[`addr=`,String(i.address),` regs=`,String(i.count),` `,String(i.registerType)]})]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-4 gap-y-1 text-muted-foreground`,children:[(0,Y.jsxs)(O,{children:[(0,Y.jsx)(E,{className:`font-mono`,render:(0,Y.jsx)(`span`,{}),children:e.dataType}),(0,Y.jsx)(D,{side:`top`,children:`Data type`})]}),e.unit&&(0,Y.jsxs)(O,{children:[(0,Y.jsx)(E,{className:`font-mono`,render:(0,Y.jsx)(`span`,{}),children:e.unit}),(0,Y.jsx)(D,{side:`top`,children:`Unit`})]}),(0,Y.jsxs)(O,{children:[(0,Y.jsx)(E,{className:`font-mono`,render:(0,Y.jsx)(`span`,{}),children:a}),(0,Y.jsx)(D,{side:`top`,children:`Access: r / w / rw`})]}),e.euRange&&(0,Y.jsxs)(O,{children:[(0,Y.jsxs)(E,{className:`font-mono`,render:(0,Y.jsx)(`span`,{}),children:[`[`,e.euRange[0],`, `,e.euRange[1],`]`]}),(0,Y.jsx)(D,{side:`top`,children:`EU range (min, max)`})]}),(0,Y.jsxs)(O,{children:[(0,Y.jsxs)(E,{render:(0,Y.jsx)(f,{to:`/asset/${e.asset}`,className:`inline-flex items-center gap-1 text-primary underline-offset-4 hover:underline`,"aria-label":`Open asset`}),children:[`View asset`,(0,Y.jsx)(Ae,{className:`size-3`})]}),(0,Y.jsx)(D,{side:`top`,children:`Open asset`})]})]})]})}var Je=[{id:`expand`,meta:{cellClass:`!pl-2 !pr-0 w-0`},header:()=>(0,Y.jsx)(`span`,{className:`sr-only`,children:`Expand row`}),enableSorting:!1,cell:({row:e})=>(0,Y.jsx)(`button`,{type:`button`,className:`inline-flex size-5 items-center justify-center rounded-[var(--miravo-radius-tight)] text-muted-foreground hover:text-foreground`,"aria-label":e.getIsExpanded()?`Collapse row`:`Expand row`,"aria-expanded":e.getIsExpanded(),onClick:t=>{t.stopPropagation(),e.toggleExpanded()},children:(0,Y.jsx)(de,{className:`size-3.5 transition-transform ${e.getIsExpanded()?`rotate-0`:`-rotate-90`}`})})},{accessorKey:`asset`,header:({column:e})=>(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center`,onClick:e.getToggleSortingHandler(),children:[`Asset`,(0,Y.jsx)(X,{sorted:e.getIsSorted()})]}),cell:({getValue:e})=>(0,Y.jsx)(`span`,{className:`block max-w-[18rem] truncate font-mono text-xs`,title:e(),children:e()})},{accessorKey:`member`,header:({column:e})=>(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center`,onClick:e.getToggleSortingHandler(),children:[`Member`,(0,Y.jsx)(X,{sorted:e.getIsSorted()})]}),cell:({getValue:e})=>(0,Y.jsx)(`span`,{className:`block max-w-[20rem] truncate font-mono text-xs`,title:e(),children:e()})},{accessorKey:`model`,header:({column:e})=>(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center`,onClick:e.getToggleSortingHandler(),children:[`Model`,(0,Y.jsx)(X,{sorted:e.getIsSorted()})]}),cell:({getValue:e})=>(0,Y.jsx)(`span`,{className:`block max-w-[18rem] truncate text-xs`,title:e(),children:e()})},{accessorKey:`dataType`,meta:{hideClass:`hidden lg:table-cell`},header:({column:e})=>(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center`,onClick:e.getToggleSortingHandler(),children:[`Type`,(0,Y.jsx)(X,{sorted:e.getIsSorted()})]}),cell:({getValue:e})=>(0,Y.jsx)(`span`,{className:`font-mono text-xs`,children:e()})},{accessorKey:`unit`,meta:{hideClass:`hidden lg:table-cell`},header:`Unit`,enableSorting:!1,cell:({getValue:e})=>(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e()??`—`})},{accessorKey:`access`,meta:{hideClass:`hidden lg:table-cell`},header:`Access`,enableSorting:!1,cell:({getValue:e})=>{let t=e();return(0,Y.jsx)(`span`,{className:`font-mono text-xs`,children:t===`readwrite`?`rw`:t})}}];function Ye(e,t){let n=new Blob([e],{type:`text/csv`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=t,i.click(),URL.revokeObjectURL(r)}var Xe=[10,15,25,50,100],Ze=15,Qe=100;function $e(e){return Xe.includes(e)?e:Ze}function et(e){return/[",\r\n]/.test(e)?`"${e.replaceAll(`"`,`""`)}"`:e}function Q(){let[e,t]=(0,H.useState)(!1),n=(0,H.useRef)(null);(0,H.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(),n.current?.focus())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]);let[p,m]=l(`protocol`,u.withDefault(``)),[h,g]=l(`asset`,u.withDefault(``)),[_,v]=l(`model`,u.withDefault(``)),[b,x]=l(`member`,u.withDefault(``)),[S,C]=l(`perPage`,d.withDefault(Ze)),w=$e(S),ie=s(e=>e.assetCount),T=c({queryKey:o.tags.manifest(ie),queryFn:()=>a(`/manifest`,i.manifest),placeholderData:r}),E=T.data??null,D=T.isError,O=T.isPending&&!E&&!D,k=_e(T.error,`Failed to fetch manifest.`),A=E?.tags??[],j=E?.summary?.enabledProtocols??[],M=(0,H.useDeferredValue)(b),N=(0,H.useMemo)(()=>A.filter(e=>e.kind===`variable`),[A]),P=(0,H.useMemo)(()=>{let e=new Map;for(let t of N)e.set(t.asset,(e.get(t.asset)??0)+1);return[...e.entries()].sort((e,t)=>e[0].localeCompare(t[0]))},[N]),B=(0,H.useMemo)(()=>{let e=new Map;for(let t of N)e.set(t.model,(e.get(t.model)??0)+1);return[...e.entries()].sort((e,t)=>e[0].localeCompare(t[0]))},[N]),V=(0,H.useMemo)(()=>{let e=M.trim().toLowerCase();if(!p&&!h&&!_&&!e)return N;let t=[];for(let n of N)p&&n.protocols[p]==null||h&&n.asset!==h||_&&n.model!==_||e&&!n.member.toLowerCase().includes(e)||t.push(n);return t},[N,p,h,_,M]),[Ee,De]=(0,H.useState)([]),[Ae,Me]=(0,H.useState)({}),[U,W]=(0,H.useState)(0),Ne=p!==``||h!==``||_!==``||b!==``,Pe=(0,H.useCallback)(()=>{m(``),g(``),v(``),x(``),W(0)},[m,g,v,x]),G=Se({data:V,columns:Je,getCoreRowModel:we(),getSortedRowModel:Ce(),getExpandedRowModel:xe(),getRowCanExpand:()=>!0,getPaginationRowModel:be(),onSortingChange:De,onExpandedChange:Me,onPaginationChange:e=>{let t=typeof e==`function`?e({pageIndex:U,pageSize:w}):e;W(t.pageIndex),C(t.pageSize)},state:{sorting:Ee,expanded:Ae,pagination:{pageIndex:U,pageSize:w}}}),K=Math.ceil(V.length/w);(0,H.useEffect)(()=>{S!==w&&C(w)},[w,S,C]),(0,H.useEffect)(()=>{K>0&&U>=K&&W(K-1)},[K,U]);let Fe=(0,H.useCallback)(e=>{W(0),C(e)},[C]),Ie=(0,H.useCallback)(e=>{W(0),m(e)},[m]),Le=(0,H.useCallback)(e=>{W(0),g(e)},[g]),q=(0,H.useCallback)(e=>{W(0),v(e)},[v]),J=(0,H.useCallback)(e=>{W(0),x(e)},[x]),[Re,ze]=(0,H.useState)(``),[X,Ke]=(0,H.useState)(``),Z=(0,H.useDeferredValue)(Re),Q=(0,H.useDeferredValue)(X),tt=(0,H.useMemo)(()=>(Z?P.filter(([e])=>ee(e,Z)):P).slice(0,Qe),[P,Z]),nt=(0,H.useMemo)(()=>(Q?B.filter(([e])=>te(e,Q)):B).slice(0,Qe),[B,Q]),rt=G.getRowModel().rows,$=rt.length,it=$===0||V.length===0?0:U*w+1,at=$===0||V.length===0?0:U*w+$,ot=K,st=V.length===0||ot===0?0:U+1,ct=(0,H.useCallback)(()=>{let e=p?[p]:j,t=[`asset`,`member`,`model`,`dataType`,`unit`,`access`,`browsePath`,...e.includes(`mqtt`)?[`mqtt_topic`]:[],...e.includes(`opcua`)?[`opcua_nodeId`]:[],...e.includes(`modbus`)?[`modbus_address`,`modbus_count`,`modbus_encoding`]:[]],n=V.map(t=>{let n=t.protocols.mqtt,r=t.protocols.opcua,i=t.protocols.modbus;return[t.asset,t.member,t.model,t.dataType,t.unit??``,t.access,t.browsePath,...e.includes(`mqtt`)?[String(n?.topic??``)]:[],...e.includes(`opcua`)?[String(r?.nodeId??``)]:[],...e.includes(`modbus`)?[String(i?.address??``),String(i?.count??``),String(i?.registerType??``)]:[]]});Ye([t.map(et).join(`,`),...n.map(e=>e.map(et).join(`,`))].join(`
|
|
4
4
|
`),`miravo-tags.csv`)},[V,p,j]);return D&&!E?(0,Y.jsx)(ge,{className:`min-h-full`,children:(0,Y.jsx)(`div`,{className:`flex min-h-[40vh] flex-col items-center justify-center p-6 sm:p-12`,children:(0,Y.jsx)(`div`,{className:`w-full max-w-md`,children:(0,Y.jsx)(he,{message:k,onRetry:()=>void T.refetch(),isRetrying:T.isFetching})})})}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-screen-2xl flex-col gap-5 p-4 sm:gap-6 sm:p-6`,children:[D&&E?(0,Y.jsx)(he,{message:`${k} Showing cached tags.`,onRetry:()=>void T.refetch(),isRetrying:T.isFetching}):null,(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,Y.jsx)(`h1`,{className:`font-heading text-2xl font-semibold tracking-tight`,children:`Tag Explorer`}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:O?`Loading tag manifest...`:`${E?.summary?.totalAssets??0} assets · ${j.length} protocols`})]}),(0,Y.jsxs)(ue,{children:[(0,Y.jsxs)(le,{render:(0,Y.jsx)(y,{variant:`outline`,size:`sm`,className:ne(Ue,`px-3`)}),children:[(0,Y.jsx)(me,{className:`size-3.5 opacity-90`,"aria-hidden":!0}),`Export`,(0,Y.jsx)(de,{className:`size-3 opacity-60`,"aria-hidden":!0})]}),(0,Y.jsx)(oe,{align:`end`,sideOffset:6,className:ne(`min-w-[13.5rem]`,Ve),children:(0,Y.jsxs)(ce,{children:[(0,Y.jsx)(re,{className:He,children:`Export`}),(0,Y.jsx)(se,{className:`bg-border/60`}),(0,Y.jsxs)(ae,{onClick:ct,className:We,children:[(0,Y.jsx)(je,{className:`size-3.5 shrink-0 text-primary`,"aria-hidden":!0}),`Download CSV`]}),(0,Y.jsxs)(ae,{onClick:()=>t(!0),className:We,children:[(0,Y.jsx)(Oe,{className:`size-3.5 shrink-0 text-primary`,"aria-hidden":!0}),`Export for Integration…`]})]})})]})]}),(0,Y.jsx)(Ge,{protocol:p,asset:h,model:_,member:b,enabledProtocols:j,hasFilters:Ne,memberSearchRef:n,onProtocolChange:Ie,onAssetChange:Le,onModelChange:q,onMemberChange:J,onClearFilters:Pe,onAssetSearch:ze,onModelSearch:Ke,filteredAssetOptions:tt,filteredModelOptions:nt}),V.length!==N.length&&N.length>0&&(0,Y.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Showing`,` `,(0,Y.jsx)(`span`,{className:`font-medium tabular-nums text-foreground`,children:V.length}),` of`,` `,(0,Y.jsx)(`span`,{className:`tabular-nums`,children:N.length}),` tags`]}),(0,Y.jsx)(ve,{className:`min-w-0 py-0`,children:(0,Y.jsx)(ye,{className:`p-0`,children:(0,Y.jsx)(`div`,{className:`min-w-0 overflow-auto`,children:(0,Y.jsxs)(`table`,{className:`w-full caption-bottom text-sm`,children:[(0,Y.jsx)(`thead`,{className:`sticky top-0 z-10 border-b bg-background [&_tr]:border-b`,children:G.getHeaderGroups().map(e=>(0,Y.jsx)(`tr`,{className:`border-b transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground`,children:e.headers.map(e=>{let t=e.column.columnDef.meta;return(0,Y.jsx)(`th`,{className:`h-10 whitespace-nowrap px-1.5 text-left text-xs font-medium text-muted-foreground sm:px-4 ${t?.hideClass??``} ${t?.cellClass??``}`,children:e.isPlaceholder?null:Te(e.column.columnDef.header,e.getContext())},e.id)})},e.id))}),(0,Y.jsx)(`tbody`,{className:`[&_tr:last-child]:border-0`,children:O?null:rt.length>0?rt.map(e=>{let t=e.getIsExpanded(),n=e.getVisibleCells();return(0,Y.jsxs)(H.Fragment,{children:[(0,Y.jsx)(`tr`,{tabIndex:0,className:`cursor-pointer border-b transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:bg-sidebar-accent focus-visible:outline-none`,onClick:()=>e.toggleExpanded(),onKeyDown:t=>{t.key!==`Enter`&&t.key!==` `||(t.preventDefault(),e.toggleExpanded())},children:n.map(e=>{let t=e.column.columnDef.meta;return(0,Y.jsx)(`td`,{className:`whitespace-nowrap px-1.5 py-1.5 text-left sm:px-4 ${t?.hideClass??``} ${t?.cellClass??``}`,children:Te(e.column.columnDef.cell,e.getContext())},e.id)})}),t&&(0,Y.jsx)(`tr`,{children:(0,Y.jsx)(`td`,{colSpan:n.length,className:`p-0`,children:(0,Y.jsx)(`div`,{className:`border-b`,children:(0,Y.jsx)(`div`,{className:`px-1.5 py-3 pl-6 sm:px-4 sm:pl-10`,children:(0,Y.jsx)(qe,{tag:e.original,enabledProtocols:j})})})})})]},e.id)}):(0,Y.jsx)(`tr`,{children:(0,Y.jsx)(`td`,{colSpan:Je.length,className:`h-32 px-2 text-center sm:px-4`,children:N.length===0?(0,Y.jsxs)(`div`,{className:`flex flex-col items-center gap-2`,children:[(0,Y.jsx)(ke,{className:`size-8 text-muted-foreground`}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No tags available`}),(0,Y.jsx)(f,{to:`/catalog`,className:`text-xs text-primary underline-offset-4 hover:underline`,children:`Start a factory from the Catalog to generate tags`})]}):(0,Y.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`No matching tags.`,` `,(0,Y.jsx)(`span`,{className:`text-xs`,children:`Try adjusting your filters.`})]})})})})]})})})}),(0,Y.jsx)(`div`,{className:`px-3 py-2 text-xs text-muted-foreground`,children:(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between sm:gap-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 sm:justify-start sm:gap-5`,children:[(0,Y.jsxs)(`p`,{className:`min-w-0 leading-tight`,children:[(0,Y.jsx)(`span`,{className:`font-medium tabular-nums text-foreground`,children:it===0?`0`:`${it}\u2013${at}`}),` `,(0,Y.jsxs)(`span`,{className:`text-muted-foreground`,children:[`of `,V.length,` tags`]})]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5 whitespace-nowrap`,children:[(0,Y.jsxs)(z,{value:String(w),onValueChange:e=>e&&Fe(Number(e)),children:[(0,Y.jsx)(R,{className:`h-8 w-[4.25rem]`,"aria-label":`Rows per page`,children:(0,Y.jsx)(F,{})}),(0,Y.jsx)(L,{children:Xe.map(e=>(0,Y.jsx)(I,{value:String(e),children:e},e))})]}),(0,Y.jsx)(`span`,{className:`hidden text-muted-foreground sm:inline`,children:`per page`})]})]}),(0,Y.jsxs)(`nav`,{className:`flex items-center justify-center gap-2 border-border/60 border-t pt-2 sm:justify-end sm:border-0 sm:pt-0`,"aria-label":`Table pages`,children:[(0,Y.jsx)(y,{variant:`outline`,size:`sm`,className:`h-8 w-8 shrink-0 p-0`,disabled:!G.getCanPreviousPage(),onClick:()=>G.previousPage(),"aria-label":`Previous page`,children:(0,Y.jsx)(fe,{className:`size-3.5`})}),(0,Y.jsxs)(`span`,{className:`min-w-[5ch] text-center text-sm font-medium tabular-nums whitespace-nowrap text-foreground`,children:[st,` / `,ot]}),(0,Y.jsx)(y,{variant:`outline`,size:`sm`,className:`h-8 w-8 shrink-0 p-0`,disabled:!G.getCanNextPage(),onClick:()=>G.nextPage(),"aria-label":`Next page`,children:(0,Y.jsx)(pe,{className:`size-3.5`})})]})]})}),(0,Y.jsx)(Be,{open:e,onOpenChange:t,tags:V,totalTags:A.length,enabledProtocols:j,selectedAsset:h||void 0})]})}export{Q as t};
|
package/console-dist/assets/{transition-nav-link-CSrpkA7_.js → transition-nav-link-DIx78Lol.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ot as e}from"./vendor-ui-D8j69UH4.js";import{r as t}from"./chunk-OE4NN4TA-DBWZidbW.js";import{n,t as r}from"./use-transition-navigate-
|
|
1
|
+
import{ot as e}from"./vendor-ui-D8j69UH4.js";import{r as t}from"./chunk-OE4NN4TA-DBWZidbW.js";import{n,t as r}from"./use-transition-navigate-aOjMH_eS.js";var i=e();function a(e){return e.button===0&&!e.metaKey&&!e.altKey&&!e.ctrlKey&&!e.shiftKey}function o({to:e,transitionType:o,preloadOnIntent:s=!0,onClick:c,...l}){let u=r();return(0,i.jsx)(t,{...l,to:e,onMouseEnter:t=>{l.onMouseEnter?.(t),s&&n(e)},onFocus:t=>{l.onFocus?.(t),s&&n(e)},onClick:t=>{c?.(t),!t.defaultPrevented&&(l.reloadDocument||l.target&&l.target!==`_self`||l.download||a(t)&&(t.preventDefault(),u(e,{transitionType:o})))}})}export{o 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{A as n,B as r,C as i,D as a,F as o,H as s,I as c,L as l,M as u,N as d,O as f,P as p,Q as m,R as h,U as ee,V as te,at as g,c as ne,ct as _,d as v,dt as y,ft as b,ht as x,it as S,j as re,lt as C,mt as w,n as ie,ot as T,pt as E,rt as D,st as O,tt as ae,ut as k,vt as A,y as j,z as M}from"./api-GfuYYI6q.js";import{c as N}from"./dialog-B5PqrKVw.js";import{x as oe}from"./format-Bx7DF-TB.js";import{n as se}from"./utils-XFKvwlFT.js";import{n as ce,r as le,t as ue}from"./runtime-link-BRnaEnOm.js";var de=se(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]);C({path:y().min(1),name:y().min(1),description:y().optional(),memberCount:_().int().nonnegative(),methodCount:_().int().nonnegative(),faultCount:_().int().nonnegative(),hasLifecycle:S(),lifecycleStageCount:_().int().nonnegative()}),C({path:y().min(1),id:y().min(1),name:y().min(1),description:y().optional(),areaCount:_().int().nonnegative(),assetAssignmentCount:_().int().nonnegative(),uniqueModelCount:_().int().nonnegative(),modelNames:D(y().min(1)),totalAssetCount:_().int().nonnegative()});var fe=C({severity:T([`error`,`warning`]),message:y(),fix:y(),file:y().optional(),line:_().int().positive().optional()});C({valid:S(),templatePath:y(),issues:D(fe)});var pe=y().min(1).max(128).regex(/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/),me=/^miravo-[a-f0-9]{12}$/;function he(e){return me.test(e)}var P=T([`Boolean`,`Int32`,`UInt16`,`UInt32`,`Double`,`Float`,`String`]);T([`variable`,`property`]);var F=T([`read`,`readwrite`,`write`]),I=T([`>`,`>=`,`<`,`<=`,`==`,`!=`]),L=`Must be 1-64 chars and contain only letters, numbers, underscores, or hyphens.`,ge=g(`type`,[C({type:O(`threshold`),member:y().regex(m,L),operator:I,threshold:_().finite()}).strict(),C({type:O(`lifecycle-stage`)}).strict(),C({type:O(`health-state`)}).strict(),C({type:O(`fault-active`)}).strict(),C({type:O(`fault-count`)}).strict(),C({type:O(`active-fault-code`),fallback:y().default(``)}).strict(),C({type:O(`availability-state`),member:y().regex(m,L),operator:I.default(`>`),threshold:_().finite().default(0),running_state:y().default(`running`),stopped_state:y().default(`stopped`),faulted_state:y().default(`faulted`)}).strict()]),R=`Must be 1-64 chars and contain only letters, numbers, underscores, or hyphens.`,z=D(y().min(1)).min(1),B=C({data_type:P,unit:r.optional(),description:y().optional(),enum_values:z.optional()}).strict(),_e=E([C({member:y().regex(m,R),value:E([_(),y(),S()])}).strict(),C({member:y().regex(m,R),argument:y().regex(m,R)}).strict()]),ve=C({type:O(`set-members`),writes:D(_e).min(1)}).strict(),ye=E([C({parameter:y().regex(m,R),value:_().finite()}).strict(),C({parameter:y().regex(m,R),argument:y().regex(m,R)}).strict()]),be=g(`type`,[ve,C({type:O(`set-parameters`),writes:D(ye).min(1)}).strict(),C({type:O(`clear-faults`)}).strict(),C({type:O(`reset-lifecycle`),stage:y().min(1).optional(),clear_faults:S().optional()}).strict()]),xe=C({description:y().optional(),input_arguments:k(y().regex(m,R),B).optional(),output_arguments:k(y().regex(m,R),B).optional(),runtime:be.optional()}).strict(),Se=k(y().regex(m,R),xe);function V(e){return e===`Double`||e===`Float`||e===`Int32`||e===`UInt16`||e===`UInt32`}function Ce(e){return e===`Int32`||e===`UInt16`||e===`UInt32`}function H(e,t){switch(t){case`Boolean`:return typeof e==`boolean`;case`String`:return typeof e==`string`;case`Double`:case`Float`:return typeof e==`number`&&Number.isFinite(e);case`Int32`:return typeof e==`number`&&Number.isSafeInteger(e)&&e>=-2147483648&&e<=2147483647;case`UInt16`:return typeof e==`number`&&Number.isSafeInteger(e)&&e>=0&&e<=65535;case`UInt32`:return typeof e==`number`&&Number.isSafeInteger(e)&&e>=0&&e<=4294967295;default:return!1}}function we(e,t,n){e.unit!==void 0&&(e.data_type===`Boolean`||e.data_type===`String`)&&t.addIssue({code:x.custom,path:[...n,`unit`],message:`Members with data_type "${e.data_type}" must not declare engineering units. Fix: remove the unit or use a numeric data_type.`}),e.enum_values&&e.data_type!==`String`&&t.addIssue({code:x.custom,path:[...n,`enum_values`],message:`enum_values is only valid for String members. Fix: remove enum_values or change data_type to "String".`})}function U(e,t,n,r,i){if(M(e)&&typeof e.type==`string`)switch(e.type){case`correlated`:typeof e.source==`string`&&n.push({member:e.source,path:[...t,`source`],previousTick:!1}),G(e.factor,[...t,`factor`],r),G(e.offset,[...t,`offset`],r);return;case`sine`:case`noise`:case`waveform`:case`chirp`:G(e.center,[...t,`center`],r);return;case`mean-reverting-noise`:G(e.mean,[...t,`mean`],r);return;case`second-order`:G(e.initial_value,[...t,`initial_value`],r),G(e.min,[...t,`min`],r),G(e.max,[...t,`max`],r),G(e.gain,[...t,`gain`],r),G(e.bias,[...t,`bias`],r),W(e.input,[...t,`input`],n,r,i);return;case`first-order-lag`:G(e.initial_value,[...t,`initial_value`],r),G(e.gain,[...t,`gain`],r),G(e.bias,[...t,`bias`],r),W(e.input,[...t,`input`],n,r,i);return;case`transport-delay`:G(e.delay,[...t,`delay`],r),W(e.input,[...t,`input`],n,r,i);return;case`integrator`:G(e.initial_value,[...t,`initial_value`],r),G(e.gain,[...t,`gain`],r),W(e.input,[...t,`input`],n,r,i);return;case`slew-rate-limiter`:G(e.initial_value,[...t,`initial_value`],r),W(e.input,[...t,`input`],n,r,i);return;case`hysteresis-relay`:G(e.on_threshold,[...t,`on_threshold`],r),G(e.off_threshold,[...t,`off_threshold`],r),W(e.input,[...t,`input`],n,r,i);return;case`weighted-sum`:G(e.bias,[...t,`bias`],r),G(e.min,[...t,`min`],r),G(e.max,[...t,`max`],r),h(e,t,(e,t)=>{G(e.weight,[...t,`weight`],r),W(e.input,[...t,`input`],n,r,i)});return;case`expression`:{G(e.min,[...t,`min`],r),G(e.max,[...t,`max`],r);let a=typeof e.expression==`string`?K(e.expression):void 0;if(!a)return;let o=[...t,`expression`];for(let e of a.members)n.push({member:e,path:o,previousTick:!1});for(let e of a.previousMembers)n.push({member:e,path:o,previousTick:!0});for(let e of a.params)r.push({param:e,path:o});for(let e of a.ports)i.push({port:e,path:o});return}case`gate`:n.push({member:String(e.enabled_member),path:[...t,`enabled_member`],previousTick:!1}),W(e.input,[...t,`input`],n,r,i);return;case`health-dependent`:{let a=e.stages;if(!M(a))return;for(let[e,o]of Object.entries(a))U(o,[...t,`stages`,e],n,r,i);return}default:return}}function W(e,t,n,r,i){c(e,t,(e,t)=>n.push({member:e,path:t,previousTick:!1}),(e,t)=>n.push({member:e,path:t,previousTick:!0}),(e,t)=>r.push({param:e,path:t}),(e,t)=>i.push({port:e,path:t}),(e,t)=>U(e,t,n,r,i))}function G(e,t,n){if(typeof e!=`string`)return;let r=K(e);if(r)for(let e of r.params)n.push({param:e,path:t})}function K(e){try{return s(ee(e))}catch(e){if(e instanceof te)return;throw e}}function Te(e,t,n){if(!M(e))return;let r=e.type;(r===`threshold`||r===`availability-state`)&&typeof e.member==`string`&&n.push({member:e.member,path:[...t,`member`],previousTick:!1})}function q(e,t,n){if(!M(e))return;let r=e.type;if(typeof r!=`string`)return;if(r===`integrator`&&e.wrap===!0&&(typeof e.wrap_at!=`number`||!Number.isFinite(e.wrap_at)||e.wrap_at<=0)&&n.addIssue({code:x.custom,path:[...t,`wrap_at`],message:`wrap_at must be a finite number greater than 0 when wrap is true. Fix: Set wrap_at to a positive number, or set wrap to false.`}),r===`health-dependent`){let r=e.stages;if(M(r))for(let[e,i]of Object.entries(r))q(i,[...t,`stages`,e],n)}function i(e,t){!M(e)||!(`generator`in e)||q(e.generator,[...t,`generator`],n)}i(e.input,[...t,`input`]),h(e,t,(e,t)=>{i(e.input,[...t,`input`])})}function Ee(e){switch(e){case`Boolean`:return!1;case`String`:return``;case`Double`:case`Float`:case`Int32`:case`UInt16`:case`UInt32`:return 0;default:return 0}}var De=D(g(`type`,[C({type:O(`white_noise`),strength:_().min(0).max(1),scale:_().positive().optional()}).strict(),C({type:O(`drift`),tau:_().positive(),sigma:_().min(0).max(1),scale:_().positive().optional()}).strict(),C({type:O(`outlier`),probability:_().min(0).max(1),magnitude:_().positive(),scale:_().positive().optional()}).strict(),C({type:O(`gap`),probability:_().min(0).max(1),duration:_().int().positive().default(10)}).strict(),C({type:O(`noise_burst`),probability:_().min(0).max(1),duration:_().int().positive().default(5),strength:_().min(0).max(1),scale:_().positive().optional()}).strict(),C({type:O(`quantize`),resolution:_().positive().optional(),bits:_().int().min(8).max(24).optional()}).strict(),C({type:O(`deadband`),absolute:_().positive().optional(),percent:_().positive().max(100).optional()}).strict(),C({type:O(`stuck`),probability:_().min(0).max(1),duration_s:E([_().positive(),b([_().positive(),_().positive()])]),quality:T([`good`,`uncertain`]).default(`good`)}).strict()])).min(1).optional(),Oe={white_noise:0,drift:0,outlier:0,noise_burst:0,quantize:1,deadband:2,stuck:2};function ke(e,t,n){let r=[],i=0,a=``;return e.forEach((e,o)=>{let s=e=>{r.push({index:o,message:e})};e.type===`quantize`?(e.resolution===void 0==(e.bits===void 0)&&s(`Member "${n}" quantize needs exactly one of resolution or bits. Fix: use "quantize: { resolution: 0.1 }" or "quantize: { bits: 12 }".`),e.bits!==void 0&&!t&&s(`Member "${n}" quantize uses bits but has no eu_range. Fix: add eu_range: [min, max] to the member, or use resolution: <number>.`)):e.type===`deadband`?(e.absolute===void 0==(e.percent===void 0)&&s(`Member "${n}" deadband needs exactly one of absolute or percent. Fix: use "deadband: { absolute: 0.5 }" or "deadband: { percent: 1 }".`),e.percent!==void 0&&!t&&s(`Member "${n}" deadband uses percent but has no eu_range. Fix: add eu_range: [min, max] to the member, or use absolute: <number>.`)):e.type===`stuck`&&Array.isArray(e.duration_s)&&e.duration_s[0]>e.duration_s[1]&&s(`Member "${n}" stuck duration_s [${e.duration_s[0]}, ${e.duration_s[1]}] has min > max. Fix: swap the values.`);let c=Oe[e.type];c!==void 0&&(c<i?s(`Member "${n}" declares "${e.type}" after "${a}". Fix: order effects as white_noise/drift/outlier/noise_burst, then quantize, then deadband/stuck.`):c>i&&(i=c,a=e.type))}),r}var J=`Must be 1-64 chars and contain only letters, numbers, underscores, or hyphens.`,Ae=new Set([`enterprise`,`site`,`area`,`line`,`asset`,`prefix`]),je=y().regex(ae,`Must be a $param.X parameter reference`),Y=E([_(),y(),S()]),Me=C({name:y().regex(m,J),description:y().optional(),namespace:y().optional()}).strict(),Ne=g(`kind`,[C({kind:O(`variable`),data_type:P,access:F,unit:r.optional(),enum_values:z.optional(),eu_range:b([_(),_()]).refine(([e,t])=>e<=t,{message:`eu_range[0] (min) must be <= eu_range[1] (max).`}).optional(),generator:re.optional(),binding:ge.optional(),default:Y.optional(),observation_effects:De}).strict(),C({kind:O(`property`),data_type:P,access:F,unit:r.optional(),enum_values:z.optional(),default:E([Y,je]).optional()}).strict()]);function Pe(e){return k(y().regex(m,J),Ne).refine(e=>Object.keys(e).length>=1,{message:`Members map must have at least 1 member.`}).refine(t=>Object.keys(t).length<=e,{message:`Members map must have at most ${e} members.`}).refine(e=>!Object.keys(e).some(e=>Ae.has(e)),{message:`Member names cannot use reserved env keys: enterprise/site/area/line/asset/prefix`})}function Fe(e={}){let t=Pe(e.maxMembersPerModel??1e3);return C({schema_version:O(`2`),model:Me,parameters:k(y(),o).optional(),inputs:k(y().regex(m,J),u).optional(),members:t,methods:Se.optional(),lifecycle:p.optional(),faults:D(n).optional()}).strict().superRefine((e,t)=>{let n=Object.keys(e.members),r=new Map;for(let e=0;e<n.length;e++){let t=n[e];t!==void 0&&r.set(t,e)}let i=e.lifecycle?.running_member;i!==void 0&&e.members[i]?.data_type!==`Boolean`&&t.addIssue({code:x.custom,path:[`lifecycle`,`running_member`],message:`Lifecycle running_member "${i}" must name a Boolean member of this model. Fix: define that Boolean member or change running_member.`});let a=e.lifecycle?.hours_member,o=a===void 0?void 0:e.members[a];a!==void 0&&(o===void 0||!(`generator`in o)||o.generator?.type!==`integrator`)?t.addIssue({code:x.custom,path:[`lifecycle`,`hours_member`],message:`Lifecycle hours_member "${a}" must name a member with an integrator generator. Fix: define that member or change hours_member.`}):o!==void 0&&`generator`in o&&o.generator?.type===`integrator`&&typeof o.generator.initial_value!=`number`&&t.addIssue({code:x.custom,path:[`members`,a,`generator`,`initial_value`],message:`Lifecycle hours_member "${a}" needs a numeric initial_value so starting_hours can offset it. Fix: replace the parameter reference with a number.`});let s=new Set(Object.keys(e.parameters??{})),c=new Set(Object.entries(e.parameters??{}).filter(([,e])=>e.type===`float`||e.type===`int`).map(([e])=>e)),u=new Set(Object.keys(e.inputs??{}));for(let e of u){let n;if(r.has(e))n=`member`;else if(s.has(e))n=`parameter`;else continue;t.addIssue({code:x.custom,path:[`inputs`,e],message:`Input port "${e}" has the same name as a ${n}. Fix: Rename the port (for example "${e}_in") so port, member and parameter names stay distinct.`})}for(let i=0;i<n.length;i++){let a=n[i];if(a===void 0)continue;let o=e.members[a];if(!o||(we(o,t,[`members`,a]),o.kind===`variable`&&o.generator!==void 0&&o.binding!==void 0&&t.addIssue({code:x.custom,path:[`members`,a,`binding`],message:`Variable members cannot define both "generator" and "binding". Fix: keep one source of value generation.`}),o.kind===`variable`&&o.binding!==void 0&&o.access!==`read`&&t.addIssue({code:x.custom,path:[`members`,a,`access`],message:`Variable members with a "binding" must use access "read". Fix: change access to "read" or remove the binding.`}),o.kind!==`variable`||!o.generator&&!o.binding))continue;let l=[],d=[],f=[],p=[`members`,a,`generator`];if(o.generator&&U(o.generator,p,l,d,f),o.binding&&Te(o.binding,[`members`,a,`binding`],l),o.generator&&(q(o.generator,p,t),o.data_type===`Boolean`&&o.generator.type!==`gate`&&t.addIssue({code:x.custom,path:[`members`,a,`generator`],message:`Member "${a}" is Boolean but its ${o.generator.type} generator produces numbers, which OPC UA and Modbus reject. Fix: replace the generator with binding: { type: threshold, member: <numeric member>, operator: ">", threshold: 0 }, or make it data_type: Double.`}),o.generator.type===`gate`)){let n=e.members[o.generator.enabled_member];n&&n.data_type!==`Boolean`&&t.addIssue({code:x.custom,path:[`members`,a,`generator`,`enabled_member`],message:`Gate generator for "${a}" references "${o.generator.enabled_member}", but "${o.generator.enabled_member}" is not Boolean. Fix: use a Boolean command/state member for enabled_member.`}),H(o.generator.disabled_value,o.data_type)||t.addIssue({code:x.custom,path:[`members`,a,`generator`,`disabled_value`],message:`Gate generator disabled_value for "${a}" does not match data_type "${o.data_type}". Fix: use a compatible disabled_value literal.`})}for(let e of l){let n=r.get(e.member);if(n===void 0){t.addIssue({code:x.custom,path:[...e.path],message:`Member "${a}" references member "${e.member}", but "${e.member}" is not defined. Fix: Define "${e.member}" in members, or change the reference to a parameter.`});continue}!e.previousTick&&n>=i&&t.addIssue({code:x.custom,path:[...e.path],message:`Member "${a}" references member "${e.member}" which is defined later (or is itself). Members are evaluated in declaration order. Fix: Move "${e.member}" above "${a}".`})}for(let e of f)u.has(e.port)||t.addIssue({code:x.custom,path:[...e.path],message:`Member "${a}" reads input port "${e.port}", but "${e.port}" is not declared. Fix: Declare it under inputs (for example inputs: { ${e.port}: { default: 0 } }), or use { member: ... } / { param: ... }.`});for(let n of d)s.has(n.param)?c.has(n.param)||t.addIssue({code:x.custom,path:[...n.path],message:`Member "${a}" references parameter "${n.param}" in a numeric position, but "${n.param}" has type "${e.parameters?.[n.param]?.type}". Only float and int parameters can be used as generator coefficients or inputs. Fix: Change "${n.param}" to type "float" or "int".`}):t.addIssue({code:x.custom,path:[...n.path],message:`Member "${a}" references parameter "${n.param}", but "${n.param}" is not defined. Fix: Define "${n.param}" under parameters, or replace "$param.${n.param}" with a literal value.`});if(o.binding)switch(o.binding.type){case`threshold`:o.data_type!==`Boolean`&&t.addIssue({code:x.custom,path:[`members`,a,`data_type`],message:`Members using binding.type "threshold" must use data_type "Boolean". Fix: change data_type to "Boolean".`}),X(a,o.binding.member,e,t,[`members`,a,`binding`,`member`]);break;case`availability-state`:o.data_type!==`String`&&t.addIssue({code:x.custom,path:[`members`,a,`data_type`],message:`Members using binding.type "availability-state" must use data_type "String". Fix: change data_type to "String".`}),X(a,o.binding.member,e,t,[`members`,a,`binding`,`member`]);break;case`lifecycle-stage`:case`health-state`:case`active-fault-code`:o.data_type!==`String`&&t.addIssue({code:x.custom,path:[`members`,a,`data_type`],message:`Members using binding.type "${o.binding.type}" must use data_type "String". Fix: change data_type to "String".`});break;case`fault-active`:o.data_type!==`Boolean`&&t.addIssue({code:x.custom,path:[`members`,a,`data_type`],message:`Members using binding.type "fault-active" must use data_type "Boolean". Fix: change data_type to "Boolean".`});break;case`fault-count`:o.data_type!==`Int32`&&o.data_type!==`UInt16`&&o.data_type!==`UInt32`&&t.addIssue({code:x.custom,path:[`members`,a,`data_type`],message:`Members using binding.type "fault-count" must use an integer data_type (Int32, UInt16, or UInt32). Fix: change data_type to an integer type.`});break;default:o.binding}if(o.kind===`variable`&&o.observation_effects){V(o.data_type)||t.addIssue({code:x.custom,path:[`members`,a,`observation_effects`],message:`Observation effects on "${a}" require a numeric data_type (Double, Float, Int32, UInt16, or UInt32). Member has data_type "${o.data_type}", which cannot be degraded by noise, gaps, or drift. Fix: remove observation_effects, or change data_type to a numeric type.`}),o.access!==`read`&&t.addIssue({code:x.custom,path:[`members`,a,`observation_effects`],message:`Observation effects on "${a}" require access "read". Observation effects corrupt values — they must not be applied to command targets or setpoints. Fix: change access to "read" or remove observation_effects.`});for(let e=0;e<o.observation_effects.length;e++){let n=o.observation_effects[e];n&&(n.type===`white_noise`||n.type===`drift`||n.type===`outlier`||n.type===`noise_burst`)&&!(`scale`in n&&n.scale!==void 0)&&!o.eu_range&&t.addIssue({code:x.custom,path:[`members`,a,`observation_effects`,e],message:`Member "${a}" uses relative observation effect "${n.type}" but has no eu_range and no explicit scale. Fix: add eu_range: [min, max] to the member, or add scale: <number> to the effect.`})}for(let e of ke(o.observation_effects,o.eu_range,a))t.addIssue({code:x.custom,path:[`members`,a,`observation_effects`,e.index],message:e.message})}}function d(n,i,a){if(!r.has(n)){t.addIssue({code:x.custom,path:[...i],message:`${a} has effect on "${n}", but "${n}" is not a defined member. Fix: Change "${n}" to a valid member name.`});return}let o=e.members[n];o&&o.kind!==`variable`&&t.addIssue({code:x.custom,path:[...i],message:`${a} has effect on "${n}", but "${n}" is a property (kind: "property"). Effects can only target variable members.`})}if(e.lifecycle){let t=[`lifecycle`,`stages`];for(let n of e.lifecycle.stages)for(let e of Object.keys(n.effects))d(e,t,`Lifecycle stage "${n.name}"`)}if(e.faults){let n=new Set;for(let r=0;r<e.faults.length;r++){let i=e.faults[r];if(!i)continue;n.has(i.name)&&t.addIssue({code:x.custom,path:[`faults`,r,`name`],message:`Fault names must be unique. Duplicate "${i.name}". Fix: Rename one fault so each fault has a unique name.`}),n.add(i.name);let a=[`faults`,r,`effects`];for(let e of Object.keys(i.effects))d(e,a,`Fault "${i.name}"`);for(let e of Object.keys(i.precursor?.effects??{}))d(e,[`faults`,r,`precursor`,`effects`],`Fault "${i.name}" precursor`)}}for(let r of n){let n=e.members[r];if(!n||n.kind!==`property`||typeof n.default!=`string`)continue;let i=l(n.default);i!==void 0&&!s.has(i)&&t.addIssue({code:x.custom,path:[`members`,r,`default`],message:`Property "${r}" default references parameter "${i}", but "${i}" is not defined. Fix: Define "${i}" under parameters, or use a literal value.`})}if(e.methods)for(let[n,r]of Object.entries(e.methods))Ie(n,r.input_arguments,t,[`methods`,n,`input_arguments`]),Ie(n,r.output_arguments,t,[`methods`,n,`output_arguments`]),Le(n,r,e,t,[`methods`,n,`runtime`])})}function X(e,t,n,r,i){let a=n.members[t];a&&(V(a.data_type)||r.addIssue({code:x.custom,path:[...i],message:`Member "${e}" binding references "${t}", but "${t}" is not numeric. Fix: bind to a numeric member or change the source member data_type.`}))}function Ie(e,t,n,r){if(t)for(let[i,a]of Object.entries(t))a.unit!==void 0&&(a.data_type===`Boolean`||a.data_type===`String`)&&n.addIssue({code:x.custom,path:[...r,i,`unit`],message:`Method "${e}" argument "${i}" uses data_type "${a.data_type}" and must not declare an engineering unit. Fix: remove the unit or use a numeric data_type.`}),a.enum_values&&a.data_type!==`String`&&n.addIssue({code:x.custom,path:[...r,i,`enum_values`],message:`Method "${e}" argument "${i}" can only use enum_values with data_type "String". Fix: remove enum_values or change the data_type.`})}function Le(e,t,n,r,i){let a=t.runtime;if(a)switch(a.type){case`clear-faults`:return;case`reset-lifecycle`:{if(!n.lifecycle){r.addIssue({code:x.custom,path:[...i],message:`Method "${e}" uses runtime "reset-lifecycle" but the model has no lifecycle. Fix: add a lifecycle block or remove the method.`});return}let t=n.lifecycle.stages.map(e=>e.name);a.stage!==void 0&&!t.includes(a.stage)&&r.addIssue({code:x.custom,path:[...i,`stage`],message:`Method "${e}" stage "${a.stage}" is not a lifecycle stage. Fix: use one of [${t.join(`, `)}].`});return}case`set-parameters`:for(let o=0;o<a.writes.length;o++){let s=a.writes[o];if(!s)continue;let c=[...i,`writes`,o],l=n.parameters?.[s.parameter];if(!l){r.addIssue({code:x.custom,path:[...c,`parameter`],message:`Method "${e}" runtime targets parameter "${s.parameter}", but "${s.parameter}" is not defined. Fix: target a declared parameter.`});continue}if(l.type!==`float`&&l.type!==`int`){r.addIssue({code:x.custom,path:[...c,`parameter`],message:`Method "${e}" runtime targets parameter "${s.parameter}" of type "${l.type}". Fix: use set-parameters only with float or int parameters.`});continue}if(`argument`in s){let n=t.input_arguments?.[s.argument];if(!n){r.addIssue({code:x.custom,path:[...c,`argument`],message:`Method "${e}" runtime references input argument "${s.argument}", but that argument is not defined. Fix: declare the input argument or use a literal value.`});continue}V(n.data_type)||r.addIssue({code:x.custom,path:[...c,`argument`],message:`Method "${e}" runtime argument "${s.argument}" must be numeric to write parameter "${s.parameter}". Fix: use Double, Float, Int32, UInt16, or UInt32.`}),l.type===`int`&&!Ce(n.data_type)&&r.addIssue({code:x.custom,path:[...c,`argument`],message:`Method "${e}" runtime argument "${s.argument}" uses data_type "${n.data_type}" but parameter "${s.parameter}" is type "int". Fix: use Int32, UInt16, or UInt32 so runtime writes stay integer-safe.`});continue}l.type===`int`&&!Number.isSafeInteger(s.value)&&r.addIssue({code:x.custom,path:[...c,`value`],message:`Method "${e}" runtime literal for integer parameter "${s.parameter}" must be a safe integer. Fix: use a whole-number literal.`})}return;case`set-members`:for(let o=0;o<a.writes.length;o++){let s=a.writes[o];if(!s)continue;let c=[...i,`writes`,o],l=n.members[s.member];if(!l){r.addIssue({code:x.custom,path:[...c,`member`],message:`Method "${e}" runtime targets member "${s.member}", but "${s.member}" is not defined. Fix: target a declared member.`});continue}if(l.kind!==`variable`&&r.addIssue({code:x.custom,path:[...c,`member`],message:`Method "${e}" runtime targets "${s.member}", but "${s.member}" is a property. Fix: target a writable variable member.`}),l.access!==`readwrite`&&l.access!==`write`&&r.addIssue({code:x.custom,path:[...c,`member`],message:`Method "${e}" runtime targets "${s.member}", but "${s.member}" is not writable. Fix: set access to "readwrite" or "write".`}),l.kind===`variable`&&l.binding&&r.addIssue({code:x.custom,path:[...c,`member`],message:`Method "${e}" runtime targets "${s.member}", but bound members are computed at runtime. Fix: write to a command/setpoint member without a binding.`}),`argument`in s){let n=t.input_arguments?.[s.argument];if(!n){r.addIssue({code:x.custom,path:[...c,`argument`],message:`Method "${e}" runtime references input argument "${s.argument}", but that argument is not defined. Fix: declare the input argument or use a literal value.`});continue}if(H(Ee(n.data_type),l.data_type)||r.addIssue({code:x.custom,path:[...c,`argument`],message:`Method "${e}" runtime argument "${s.argument}" uses data_type "${n.data_type}" which does not match target member "${s.member}" data_type "${l.data_type}". Fix: align the argument and target member data types.`}),n.enum_values&&l.enum_values){let t=n.enum_values.filter(e=>!l.enum_values?.includes(e));t.length>0&&r.addIssue({code:x.custom,path:[...c,`argument`],message:`Method "${e}" runtime argument "${s.argument}" allows values [${t.join(`, `)}] that are not valid for target member "${s.member}". Fix: align enum_values between the argument and target member.`})}continue}H(s.value,l.data_type)||r.addIssue({code:x.custom,path:[...c,`value`],message:`Method "${e}" runtime literal for "${s.member}" does not match data_type "${l.data_type}". Fix: use a compatible literal value.`}),l.enum_values&&typeof s.value==`string`&&!l.enum_values.includes(s.value)&&r.addIssue({code:x.custom,path:[...c,`value`],message:`Method "${e}" runtime literal "${s.value}" is not allowed for member "${s.member}". Fix: use one of [${l.enum_values.join(`, `)}].`})}return;default:}}Fe();var Re=E([_().finite(),y(),S()]),ze=y().regex(/^[a-f0-9]{64}$/),Be=C({id:y().min(1),model:y().min(1),browsePath:D(y().min(1)).min(1),parameters:k(y(),Re),lifecycleStage:y().min(1),operatingHours:_().finite().nonnegative(),activeFaults:D(y().min(1)),templateId:y().min(1).optional(),protocolScope:D(f).min(1).optional(),inputBindings:k(y(),a).optional(),observationState:k(y(),k(y(),w())).optional().default({}),lifecycleState:C({stageStartHours:_().finite().nonnegative().optional(),lastMaintenanceHours:_().finite().nonnegative().optional(),maintenance:d.optional()}).optional(),faultState:k(y(),C({remaining:_().finite(),pendingSample:S(),elapsed:_().finite(),recovering:S(),recoveryElapsed:_().finite(),recoverySeconds:_().finite(),precursor:S().optional(),precursorElapsed:_().finite().optional()})).optional().default({})}),Ve=C({templateId:y().min(1),templateName:y().min(1),templatePath:y().min(1),entryHash:ze,idFloors:k(y(),_().int().nonnegative()).default({})}),He=C({name:y().min(1),enabled:S(),config:k(y(),w()),secretPaths:D(D(y())).optional()});C({version:O(3),savedAt:y().min(1),factoryName:pe,models:D(y().min(1)),assets:D(Be),templates:D(Ve),adapters:D(He).default([]).refine(e=>new Set(e.map(e=>e.name)).size===e.length,{message:`Duplicate adapter names. Keep one entry per adapter name in 'adapters', or delete the state file to start fresh.`})});var Ue=`group relative border border-solid border-border transition-colors hover:border-muted-foreground/25`,We=`group relative border border-solid border-border`,Ge=`blueprint-card ${Ue} overflow-hidden rounded-[var(--miravo-radius-stadium-sm)]`,Ke=`${We} w-full min-w-0 overflow-hidden rounded-[var(--miravo-radius-stadium-sm)] bg-transparent`,qe=`${We} w-full min-w-0 overflow-hidden rounded-[var(--miravo-radius-stadium-sm)] bg-transparent`,Je=`blueprint-card catalog-card-frame group relative border border-solid overflow-hidden rounded-[var(--miravo-radius-stadium-sm)]`,Ye=Je,Xe=`border-border bg-muted/40 text-primary shadow-none hover:border-muted-foreground/30 hover:bg-muted/60 hover:text-primary focus-visible:border-ring border-border bg-muted/30 hover:border-muted-foreground/35 hover:bg-muted/45 [&_svg]:text-primary`,Z=e(t(),1),Ze=new Set([`spawn`,`removeAsset`,`loadTemplate`,`unloadTemplate`,`resetFactory`,`enableAdapter`,`disableAdapter`]);function Qe(e,t){let n=e.type===`spawn`&&Array.isArray(t.data)?oe(t.data):void 0;N.success(t.message,n?{description:`Created ${n}`}:void 0)}function Q(e){if(e instanceof ue){N.error(`Command not sent`,{description:e.detail});return}if(e instanceof ie){N.error(e.result.message,{description:e.result.error});return}if(i.is(e)){N.error(e.message,{description:e.hint});return}if(e instanceof TypeError){if(typeof navigator<`u`&&navigator.onLine===!1){N.error(`Command not sent`,{description:`This browser is offline — reconnect to the network and try again.`});return}let{connectionState:e}=A.getState(),t=le(e);if(t){N.error(`Command not sent`,{description:t});return}N.error(`Command failed`,{description:`Could not reach the Miravo server — it may have stopped or restarted.`});return}N.error(`Command failed`,{description:e instanceof Error?e.message:`Unknown error.`})}async function $e(){try{let e=await ne();j.setQueryData([`bootstrap`],e),e.authenticated?A.getState().replaceRuntime(e.runtime,{allowSameRevision:!0,allowRevisionRewind:!0}):A.getState().markUnauthenticated()}catch{}finally{j.invalidateQueries({queryKey:[`bootstrap`]})}}async function $(e){if(e.type===`setSpeed`){A.setState({speedMultiplier:e.multiplier});return}Ze.has(e.type)&&await $e()}function et(){let[e,t]=(0,Z.useState)(!1);return{mutate:(0,Z.useCallback)(e=>{try{ce(A.getState().connectionState)}catch(e){Q(e);return}t(!0),v(e).then(t=>(Qe(e,t),$(e))).catch(Q).finally(()=>{t(!1)})},[]),mutateAsync:(0,Z.useCallback)(async e=>{try{ce(A.getState().connectionState)}catch(e){throw Q(e),e}t(!0);try{let t=await v(e);return Qe(e,t),await $(e),t}catch(e){throw Q(e),e}finally{t(!1)}},[]),isPending:e}}export{Ge as a,he as c,Xe as i,de as l,qe as n,Je as o,Ke as r,Ye as s,et as t};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/factory-
|
|
2
|
-
import{a as e}from"./rolldown-runtime-COnpUsM8.js";import{c as t}from"./vendor-charts-95ykyDlI.js";import{c as n,d as r}from"./chunk-OE4NN4TA-DBWZidbW.js";var i=e(t(),1),a=[{test:e=>e===`/`,load:()=>r(()=>import(`./factory-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/factory-Cp52pnAL.js","assets/factory-BYX8AmsW.js","assets/rolldown-runtime-COnpUsM8.js","assets/chunk-OE4NN4TA-DBWZidbW.js","assets/vendor-charts-95ykyDlI.js","assets/api-GfuYYI6q.js","assets/vendor-ui-D8j69UH4.js","assets/useQuery-BfWNkVkT.js","assets/format-Bx7DF-TB.js","assets/utils-XFKvwlFT.js","assets/AnimatePresence-BSSlw02V.js","assets/proxy-CWZabK8f.js","assets/activity-Cy_niK56.js","assets/server-BVem_egD.js","assets/dropdown-menu-B_MMNbTy.js","assets/catalog-template-icons-DvKspieo.js","assets/chevron-down-x70Pto6j.js","assets/chevron-right-CrNKVFcI.js","assets/copy-button-CSUP1VjU.js","assets/check-B-yvIfMj.js","assets/dialog-B5PqrKVw.js","assets/tooltip-B3vOB1Vu.js","assets/registry-BqqyCPJz.js","assets/use-engine-command-mutation-CTbPh58S.js","assets/runtime-link-BRnaEnOm.js","assets/query-fetch-error-CWLZA2L5.js","assets/export-tab-R8Oac9J5.js","assets/download-i8CTJ7oi.js","assets/source-host-miravo-B8eM2IHw.js","assets/loader-circle-DjgHgHHl.js","assets/label-2sIXTEUK.js","assets/shallow-Cin0mLuv.js","assets/badge-Bk1DaL6C.js","assets/tabs-Ch_VG8_S.js","assets/status-kit-Darp7bPB.js","assets/arrow-up-right-CwPw_2U1.js","assets/console-panel-DOt0r_Oz.js","assets/asset-detail-actions-Ceb1_r18.js","assets/circle-x-6JtFdy1_.js","assets/trash-2-BH9HDsZv.js","assets/triangle-alert-DoAwrRgk.js","assets/validation-DSsZ8qyt.js","assets/get-error-message-DJGhcwLn.js","assets/integration-api-B5s7_LWo.js","assets/protocol-card-1DCkgN_l.js","assets/radio-BxpVYiyS.js","assets/transition-nav-link-DIx78Lol.js","assets/plus-Cl4Ay5Ry.js","assets/rocket-KZ5oHK1G.js","assets/dist-xY0pK9Wy.js","assets/combobox-B8h0-NHs.js","assets/checkbox-DEAkDfFr.js","assets/select-BWlrSYlA.js","assets/select-display-items-DN2G8DNG.js","assets/integration-targets-Byvdd3Or.js","assets/transition-types-BKZuWApE.js","assets/catalog-CshTwzQu.js","assets/catalog-Lt1tguKF.js","assets/catalog-source-B4L5N-a1.js","assets/models-jmRXhSoh.js","assets/models-BYr_QK_5.js","assets/minus-CaT9UaQx.js","assets/events-DFkG5maw.js","assets/events-NZs3OoQw.js","assets/auth-screen-backdrop-CEykEbfF.js","assets/events-format-C5HTkIsC.js","assets/control-BBMXQRSU.js","assets/control-89sOxkPx.js","assets/sliders-horizontal-BNKmYQgd.js","assets/pause-CqW7v5Dc.js","assets/tags-DlnWXo4p.js","assets/tags-r7Fx_0yG.js","assets/vendor-table-BQAIXM34.js","assets/integrations-CG1fPcwM.js","assets/integrations-Bg7xzjIj.js","assets/asset-detail-CbRJwcZg.js","assets/login-Dq1AJRqO.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{a as e}from"./rolldown-runtime-COnpUsM8.js";import{c as t}from"./vendor-charts-95ykyDlI.js";import{c as n,d as r}from"./chunk-OE4NN4TA-DBWZidbW.js";var i=e(t(),1),a=[{test:e=>e===`/`,load:()=>r(()=>import(`./factory-Cp52pnAL.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55]))},{test:e=>e===`/catalog`,load:()=>r(()=>import(`./catalog-CshTwzQu.js`),__vite__mapDeps([56,57,2,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,48,58]))},{test:e=>e===`/models`,load:()=>r(()=>import(`./models-jmRXhSoh.js`),__vite__mapDeps([59,60,2,5,4,6,7,8,9,10,11,12,16,28,61,23,20,24,47,25,48,58,26,27,29,30,40,32,51,19,33,42]))},{test:e=>e===`/events`,load:()=>r(()=>import(`./events-DFkG5maw.js`),__vite__mapDeps([62,63,2,3,4,5,6,7,8,9,10,11,25,64,32,50,19,16,52,53,42,24,55,65]))},{test:e=>e===`/control`,load:()=>r(()=>import(`./control-BBMXQRSU.js`),__vite__mapDeps([66,67,2,5,4,6,8,9,10,11,13,38,44,12,16,18,19,20,21,29,23,24,45,40,46,3,32,30,68,69,48,49,31,36,50,52,41,33]))},{test:e=>e===`/tags`,load:()=>r(()=>import(`./tags-DlnWXo4p.js`),__vite__mapDeps([70,71,2,3,4,5,6,7,72,8,9,14,16,17,18,19,20,21,27,25,49,64,50,30,52,42,54]))},{test:e=>e===`/integrations`,load:()=>r(()=>import(`./integrations-CG1fPcwM.js`),__vite__mapDeps([73,74,2,3,4,5,6,7,8,9,10,11,12,13,16,38,43,18,19,20,21,28,29,47,25,39,40,49,32,30,52,33,42,54]))},{test:e=>e.startsWith(`/asset/`),load:()=>r(()=>import(`./asset-detail-CbRJwcZg.js`),__vite__mapDeps([75,2,3,4,5,6,7,8,9,11,12,18,19,20,21,68,23,24,45,25,40,49,64,32,33,37,38,29,39,41,42,55]))},{test:e=>e===`/login`,load:()=>r(()=>import(`./login-Dq1AJRqO.js`),__vite__mapDeps([76,2,5,4,6,46,3,42]))}],o=new Set;function s(e){if(!e.startsWith(`/`))return null;let t=e.indexOf(`?`),n=e.indexOf(`#`),r=t===-1?n===-1?e.length:n:n===-1?t:Math.min(t,n);return e.slice(0,r)}function c(e){let t=s(e);if(!t||o.has(t))return;let n=a.find(e=>e.test(t));n&&(o.add(t),n.load().catch(()=>{o.delete(t)}))}function l(){let e=n();return(0,i.useCallback)((t,n)=>{n?.preload!==!1&&c(t),(0,i.startTransition)(()=>{n?.transitionType&&(0,i.addTransitionType)(n.transitionType),e(t,{replace:n?.replace})})},[e])}export{c as n,l 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{
|
|
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{At as r,Ct as i,Dt as a,Et as o,Ft as s,It as c,Lt as l,Mt as u,Nt as d,Pt as f,Rt as p,Tt as m,kt as h,wt as g,zt as _}from"./api-GfuYYI6q.js";var v=class extends _{constructor(e,t){super(),this.options=t,this.#e=e,this.#s=null,this.#o=m(),this.bindMethods(),this.setOptions(t)}#e;#t=void 0;#n=void 0;#r=void 0;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),b(this.#t,this.options)?this.#h():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return x(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return x(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#x(),this.#t.removeObserver(this)}setOptions(e){let t=this.options,n=this.#t;if(this.options=this.#e.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!=`boolean`&&typeof this.options.enabled!=`function`&&typeof u(this.options.enabled,this.#t)!=`boolean`)throw Error(`Expected enabled to be a boolean or a callback that returns a boolean`);this.#S(),this.#t.setOptions(this.options),t._defaulted&&!f(this.options,t)&&this.#e.getQueryCache().notify({type:`observerOptionsUpdated`,query:this.#t,observer:this});let r=this.hasListeners();r&&S(this.#t,n,this.options,t)&&this.#h(),this.updateResult(),r&&(this.#t!==n||u(this.options.enabled,this.#t)!==u(t.enabled,this.#t)||d(this.options.staleTime,this.#t)!==d(t.staleTime,this.#t))&&this.#g();let i=this.#_();r&&(this.#t!==n||u(this.options.enabled,this.#t)!==u(t.enabled,this.#t)||i!==this.#p)&&this.#v(i)}getOptimisticResult(e){let t=this.#e.getQueryCache().build(this.#e,e),n=this.createResult(t,e);return w(this,n)&&(this.#r=n,this.#a=this.options,this.#i=this.#t.state),n}getCurrentResult(){return this.#r}trackResult(e,t){return new Proxy(e,{get:(e,n)=>(this.trackProp(n),t?.(n),n===`promise`&&(this.trackProp(`data`),!this.options.experimental_prefetchInRender&&this.#o.status===`pending`&&this.#o.reject(Error(`experimental_prefetchInRender feature flag is not enabled`))),Reflect.get(e,n))})}trackProp(e){this.#m.add(e)}getCurrentQuery(){return this.#t}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),n=this.#e.getQueryCache().build(this.#e,t);return n.fetch().then(()=>this.createResult(n,t))}fetch(e){return this.#h({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#r))}#h(e){this.#S();let t=this.#t.fetch(this.options,e);return e?.throwOnError||(t=t.catch(h)),t}#g(){this.#b();let e=d(this.options.staleTime,this.#t);if(o.isServer()||this.#r.isStale||!a(e))return;let t=c(this.#r.dataUpdatedAt,e)+1;this.#d=l.setTimeout(()=>{this.#r.isStale||this.updateResult()},t)}#_(){return(typeof this.options.refetchInterval==`function`?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#v(e){this.#x(),this.#p=e,!(o.isServer()||u(this.options.enabled,this.#t)===!1||!a(this.#p)||this.#p===0)&&(this.#f=l.setInterval(()=>{(this.options.refetchIntervalInBackground||p.isFocused())&&this.#h()},this.#p))}#y(){this.#g(),this.#v(this.#_())}#b(){this.#d!==void 0&&(l.clearTimeout(this.#d),this.#d=void 0)}#x(){this.#f!==void 0&&(l.clearInterval(this.#f),this.#f=void 0)}createResult(e,t){let n=this.#t,a=this.options,o=this.#r,s=this.#i,c=this.#a,l=e===n?this.#n:e.state,{state:d}=e,f={...d},p=!1,h;if(t._optimisticResults){let r=this.hasListeners(),o=!r&&b(e,t),s=r&&S(e,n,t,a);(o||s)&&(f={...f,...i(d.data,e.options)}),t._optimisticResults===`isRestoring`&&(f.fetchStatus=`idle`)}let{error:g,errorUpdatedAt:_,status:v}=f;h=f.data;let y=!1;if(t.placeholderData!==void 0&&h===void 0&&v===`pending`){let e;o?.isPlaceholderData&&t.placeholderData===c?.placeholderData?(e=o.data,y=!0):e=typeof t.placeholderData==`function`?t.placeholderData(this.#u?.state.data,this.#u):t.placeholderData,e!==void 0&&(v=`success`,h=r(o?.data,e,t),p=!0)}if(t.select&&h!==void 0&&!y)if(o&&h===s?.data&&t.select===this.#c)h=this.#l;else try{this.#c=t.select,h=t.select(h),h=r(o?.data,h,t),this.#l=h,this.#s=null}catch(e){this.#s=e}this.#s&&(g=this.#s,h=this.#l,_=Date.now(),v=`error`);let x=f.fetchStatus===`fetching`,w=v===`pending`,T=v===`error`,E=w&&x,D=h!==void 0,O={status:v,fetchStatus:f.fetchStatus,isPending:w,isSuccess:v===`success`,isError:T,isInitialLoading:E,isLoading:E,data:h,dataUpdatedAt:f.dataUpdatedAt,error:g,errorUpdatedAt:_,failureCount:f.fetchFailureCount,failureReason:f.fetchFailureReason,errorUpdateCount:f.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:f.dataUpdateCount>l.dataUpdateCount||f.errorUpdateCount>l.errorUpdateCount,isFetching:x,isRefetching:x&&!w,isLoadingError:T&&!D,isPaused:f.fetchStatus===`paused`,isPlaceholderData:p,isRefetchError:T&&D,isStale:C(e,t),refetch:this.refetch,promise:this.#o,isEnabled:u(t.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){let t=O.data!==void 0,r=O.status===`error`&&!t,i=e=>{r?e.reject(O.error):t&&e.resolve(O.data)},a=()=>{i(this.#o=O.promise=m())},o=this.#o;switch(o.status){case`pending`:e.queryHash===n.queryHash&&i(o);break;case`fulfilled`:(r||O.data!==o.value)&&a();break;case`rejected`:(!r||O.error!==o.reason)&&a();break}}return O}updateResult(){let e=this.#r,t=this.createResult(this.#t,this.options);this.#i=this.#t.state,this.#a=this.options,this.#i.data!==void 0&&(this.#u=this.#t),!f(t,e)&&(this.#r=t,this.#C({listeners:(()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,n=typeof t==`function`?t():t;if(n===`all`||!n&&!this.#m.size)return!0;let r=new Set(n??this.#m);return this.options.throwOnError&&r.add(`error`),Object.keys(this.#r).some(t=>{let n=t;return this.#r[n]!==e[n]&&r.has(n)})})()}))}#S(){let e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#t)return;let t=this.#t;this.#t=e,this.#n=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}#C(e){g.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(this.#r)}),this.#e.getQueryCache().notify({query:this.#t,type:`observerResultsUpdated`})})}};function y(e,t){return u(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status===`error`&&t.retryOnMount===!1)}function b(e,t){return y(e,t)||e.state.data!==void 0&&x(e,t,t.refetchOnMount)}function x(e,t,n){if(u(t.enabled,e)!==!1&&d(t.staleTime,e)!==`static`){let r=typeof n==`function`?n(e):n;return r===`always`||r!==!1&&C(e,t)}return!1}function S(e,t,n,r){return(e!==t||u(r.enabled,e)===!1)&&(!n.suspense||e.state.status!==`error`)&&C(e,n)}function C(e,t){return u(t.enabled,e)!==!1&&e.isStaleByTime(d(t.staleTime,e))}function w(e,t){return!f(e.getCurrentResult(),t)}var T=e(t(),1),E=n(),D=T.createContext(void 0),O=e=>{let t=T.useContext(D);if(e)return e;if(!t)throw Error(`No QueryClient set, use QueryClientProvider to set one`);return t},k=({client:e,children:t})=>(T.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,E.jsx)(D.Provider,{value:e,children:t})),A=T.createContext(!1),j=()=>T.useContext(A);A.Provider;function M(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var N=T.createContext(M()),P=()=>T.useContext(N),F=(e,t,n)=>{let r=n?.state.error&&typeof e.throwOnError==`function`?s(e.throwOnError,[n.state.error,n]):e.throwOnError;(e.suspense||e.experimental_prefetchInRender||r)&&(t.isReset()||(e.retryOnMount=!1))},I=e=>{T.useEffect(()=>{e.clearReset()},[e])},L=({result:e,errorResetBoundary:t,throwOnError:n,query:r,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&r&&(i&&e.data===void 0||s(n,[e.error,r])),R=e=>{if(e.suspense){let t=1e3,n=e=>e===`static`?e:Math.max(e??t,t),r=e.staleTime;e.staleTime=typeof r==`function`?(...e)=>n(r(...e)):n(r),typeof e.gcTime==`number`&&(e.gcTime=Math.max(e.gcTime,t))}},z=(e,t)=>e.isLoading&&e.isFetching&&!t,B=(e,t)=>e?.suspense&&t.isPending,V=(e,t,n)=>t.fetchOptimistic(e).catch(()=>{n.clearReset()});function H(e,t,n){let r=j(),i=P(),a=O(n),s=a.defaultQueryOptions(e);a.getDefaultOptions().queries?._experimental_beforeQuery?.(s);let c=a.getQueryCache().get(s.queryHash);s._optimisticResults=r?`isRestoring`:`optimistic`,R(s),F(s,i,c),I(i);let l=!a.getQueryCache().get(s.queryHash),[u]=T.useState(()=>new t(a,s)),d=u.getOptimisticResult(s),f=!r&&e.subscribed!==!1;if(T.useSyncExternalStore(T.useCallback(e=>{let t=f?u.subscribe(g.batchCalls(e)):h;return u.updateResult(),t},[u,f]),()=>u.getCurrentResult(),()=>u.getCurrentResult()),T.useEffect(()=>{u.setOptions(s)},[s,u]),B(s,d))throw V(s,u,i);if(L({result:d,errorResetBoundary:i,throwOnError:s.throwOnError,query:c,suspense:s.suspense}))throw d.error;return a.getDefaultOptions().queries?._experimental_afterQuery?.(s,d),s.experimental_prefetchInRender&&!o.isServer()&&z(d,r)&&(l?V(s,u,i):c?.promise)?.catch(h).finally(()=>{u.updateResult()}),s.notifyOnChangeProps?d:u.trackResult(d)}function U(e,t){return H(e,v,t)}export{B as a,I as c,k as d,O as f,V as i,P as l,H as n,F as o,v as p,R as r,L as s,U as t,j as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ot as e,tt as t}from"./vendor-ui-D8j69UH4.js";import{G as n,ct as r,dt as i,it as a,k as o,lt as s}from"./api-GfuYYI6q.js";import{c}from"./dialog-B5PqrKVw.js";import{t as l}from"./utils-XFKvwlFT.js";import"./use-engine-command-mutation-CTbPh58S.js";var u=e();function d({className:e,orientation:n=`horizontal`,...r}){return(0,u.jsx)(t,{"data-slot":`separator`,orientation:n,className:l(`shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch`,e),...r})}function f(){return i().trim().optional().refine(e=>e===void 0||e===``||e.length<=120,{message:`Use at most 120 characters.`}).refine(e=>e===void 0||e===``||n(e)===null,{message:`Use letters, numbers, underscores, and hyphens only.`})}var p=s({multiplier:r({message:`Speed multiplier must be a number.`}).positive(`Speed multiplier must be positive.`).finite(`Speed multiplier must be finite.`).max(1e3,`Speed multiplier cannot exceed 1000.`)});s({model:i().min(1,`Model is required.`),count:r({message:`Count must be a number.`}).int(`Count must be a whole number.`).positive(`Count must be at least 1.`).max(100,`Count cannot exceed 100.`),assetName:f(),assetPrefix:f(),protocolScope:o.optional(),dryRun:a().optional()});var m=s({assetId:i().min(1,`Asset is required.`),fault:i().min(1,`Fault name is required.`)});function h(e,t,n){if(!t.trim())return c.error(`Argument "${e}" is required.`),null;switch(n){case`Double`:case`Float`:{let n=Number(t);return Number.isFinite(n)?{value:n}:(c.error(`"${e}" must be a valid number.`),null)}case`Int32`:case`UInt16`:case`UInt32`:{let r=Number(t);return!Number.isFinite(r)||!Number.isSafeInteger(r)?(c.error(`"${e}" must be a valid integer.`),null):(n===`UInt16`||n===`UInt32`)&&r<0?(c.error(`"${e}" must be non-negative.`),null):{value:r}}case`Boolean`:return t!==`true`&&t!==`false`?(c.error(`"${e}" must be "true" or "false".`),null):{value:t===`true`};case`String`:return{value:t};default:return{value:t}}}function g(e,t){let n=e.safeParse(t);return n.success?n.data:(c.error(n.error.issues[0]?.message??`Validation error.`),null)}export{d as a,h as i,p as n,g as r,m 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,t as p,y as m}from"./dom-CQuChC3G.js";import{n as h,t as g}from"./by-path-e6y8DTMV.js";import{A as _,C as v,D as y,E as ee,F as te,H as ne,L as re,O as b,P as ie,T as ae,V as oe,X as se,_ as ce,a as le,b as ue,c as de,g as x,h as fe,i as pe,j as me,k as he,n as ge,o as _e,p as ve,r as ye,s as be,t as xe,w as S,x as Se,y as Ce}from"./status-DNfdEhTs.js";import{n as we,t as Te}from"./compressor-BkWNdwvy.js";import{i as Ee,n as De,r as Oe,t as ke}from"./tank-xgQfMS2d.js";var Ae=[[`rawPumpA`,`centrifugal-pump`,`intake`,`raw-inlet`,0],[`rawPumpB`,`centrifugal-pump`,`intake`,`raw-inlet`,1],[`rawTank`,`storage-tank`,`intake`,`raw-inlet`,0],[`blower`,`air-compressor`,`treatment`,`aeration`,0],[`dosePump`,`centrifugal-pump`,`treatment`,`chemical-dosing`,0],[`mixer`,`ac-induction-motor`,`treatment`,`mixing`,0],[`sludgePump`,`centrifugal-pump`,`treatment`,`clarifier`,0],[`clarifier`,`storage-tank`,`treatment`,`clarifier`,0],[`clearWell`,`storage-tank`,`distribution`,`clear-well`,0],[`distPumpA`,`centrifugal-pump`,`distribution`,`distribution-pumps`,0],[`distPumpB`,`centrifugal-pump`,`distribution`,`distribution-pumps`,1]],je=e=>g(Ae,e);function Me(e){let t=(e,t,n)=>({key:e,assetId:e,name:t,kind:`utility`,area:n});return[t(e.rawPumpA,`Raw pump A (duty)`,`Intake`),t(e.rawPumpB,`Raw pump B (standby)`,`Intake`),t(e.rawTank,`Raw water tank`,`Intake`),t(e.blower,`Aeration blower`,`Treatment`),t(e.dosePump,`Coagulant dosing pump`,`Treatment`),t(e.mixer,`Flash mixer`,`Treatment`),t(e.clarifier,`Clarifier`,`Treatment`),t(e.sludgePump,`Sludge pump`,`Treatment`),t(e.clearWell,`Clear well`,`Distribution`),t(e.distPumpA,`Distribution pump A (duty)`,`Distribution`),t(e.distPumpB,`Distribution pump B (standby)`,`Distribution`)]}var C=6,Ne=.9;function Pe(e,t){let{svg:n,P:a}=e,o=p(n,`[data-bubbles]`),[s=0,c=0,...l]=f(o?.dataset.bubbles),u=Array.from({length:Math.floor(l.length/2)},(e,t)=>({x:l[t*2]??0,y:l[t*2+1]??0,phase:t*.618%1})),d=o?ae(o,u.length*C,`ellipse`,`sf-bubble`):[];return{draw(n){let o=Math.ceil(u.length*x(t())),l=e.reducedMotion();for(let[e,t]of d.entries()){let d=u[Math.floor(e/C)];if(!d||l||Math.floor(e/C)>=o){i(t.el,`0`);continue}let f=(n*.4+d.phase+e%C/C)%1,p=.5+1.8*f,m=d.x+p*Math.sin(n*2.1+e*1.9),h=d.y+p*Math.cos(n*1.7+e*2.3);if(f<Ne){let[e,n]=r([m,h,s+f/Ne*(c-s)],a),o=.28+.4*f;Fe(t.el,e,n,o,o),i(t.el,(Math.min(1,f*10)*.9).toFixed(2))}else{let e=(f-Ne)/(1-Ne),[n,o]=r([m,h,c],a);Fe(t.el,n,o,.9+2.6*e,(.9+2.6*e)*.5),i(t.el,((1-e)*.7).toFixed(2))}}}}}function Fe(e,t,n,r,i){e.setAttribute(`cx`,t.toFixed(1)),e.setAttribute(`cy`,n.toFixed(1)),e.setAttribute(`rx`,r.toFixed(2)),e.setAttribute(`ry`,i.toFixed(2))}function Ie(e,t){let{svg:n,P:i,feed:a}=e,s=(e,t)=>a.num(e,t),c=e=>a.param(e,`rated_rpm`,1500),l=d(n,`[data-spin="motor"]`).map(e=>{let t=be(e),[r=0,i=0]=f(e.dataset.span),a=e.closest(`[data-asset]`),o=v(n,t),s=(e=>a?.querySelector(e)??null)(`[data-swirl]`);return{el:e,id:t,at:de(e.dataset.shaft),r:Number(e.dataset.radius)||0,s0:r,s1:i,bearing:de(e.dataset.bearing),swirl:s,swirlAt:f(s?.dataset.swirl),rpm:0,spin:0,heat:Se(o),smoke:Ce(o,`smoke`)}}),u=new Map(l.map(e=>[e.id,e]));return{draw(n,u,d){let f=e.reducedMotion();for(let e of l){if(e.rpm=ce(e.rpm,s(e.id,`speed_feedback`),n,.8,f),f||(e.spin+=e.rpm/c(e.id)*1.6*fe*n),o(e.el,`d`,ve(i,`z`,e.at,e.r,e.s0,e.s1,e.spin,8)),e.swirl){let[t=0,n=0,a=0,s=0]=e.swirlAt,l=x(e.rpm/c(e.id)),u=``;for(let o=0;o<3;o++){let c=s*(.38+o*.24),l=e.spin*.35+o*fe/3,d=Array.from({length:9},(e,o)=>{let s=l+o/8*1.5;return r([t+Math.cos(s)*c,n+Math.sin(s)*c,a],i)});u+=`M${d.map(([e,t])=>`${e.toFixed(1)} ${t.toFixed(1)}`).join(`L`)}`}o(e.swirl,`d`,e.rpm>20?u:``),e.swirl.style.opacity=(.25+l*.55).toFixed(2)}if(!d)continue;let l=S(a,e.id,`bearing_defect_inner_race`,`winding_insulation`);e.heat.draw((l||S(a,e.id,`winding_burnout`))&&!f,u,i,e.bearing),e.smoke.draw(S(a,e.id,`winding_burnout`)&&!f,u,i,e.bearing,[.2,.5]),t(e.id,f?0:S(a,e.id,`rotor_imbalance`)?.5:S(a,e.id,`bearing_defect_inner_race`)?.35:0,u)}},bar(e){return u.get(e)?x(s(e,`speed_feedback`)/(c(e)*1.3)):void 0}}}var w=e=>e>.002?6+26*x(e*3):0,Le=e=>{let{svg:t,feed:n,ids:r}=e,i=ue(t),a=ye(e,i),o=Te(e,i),s=[a,o,Ie(e,i),ke(e)],c=pe(e,e=>ge(n,e,`availability`)),l=_e(e,{needle:e=>o.needle(e)??0,bar:e=>s.reduce((t,n)=>t??n.bar(e),void 0)??0,alertsHigh:()=>!0,ready:()=>!0}),u=Pe(e,()=>o.deliveredPu(r.blower)),d=(...e)=>e.reduce((e,t)=>e+n.param(t,`rated_flow`,0),0),f=()=>d(r.rawPumpA,r.rawPumpB),p=()=>d(r.distPumpA,r.distPumpB),m=(e,t)=>t>0?e/t:0,h=(e,t)=>n.num(e,t),g=(e,t)=>h(e,t)*3.6,_=le(e,({id:e})=>{switch(e){case`suction-a`:case`raw-a`:return w(a.flowPu(r.rawPumpA));case`suction-b`:case`raw-b`:return w(a.flowPu(r.rawPumpB));case`raw-in`:return w(m(h(r.rawPumpA,`flow_rate`)+h(r.rawPumpB,`flow_rate`),f()));case`to-aeration`:case`to-mix`:return w(m(g(r.rawTank,`outflow_rate`),f()));case`to-clarifier`:return w(m(g(r.clarifier,`inflow_rate`),f()));case`air`:return w(o.deliveredPu(r.blower));case`tote`:case`dosing`:return w(a.flowPu(r.dosePump));case`sludge-draw`:case`sludge`:return w(a.flowPu(r.sludgePump));case`to-well`:return w(m(g(r.clearWell,`inflow_rate`),p()));case`well-out`:case`to-outfall`:return w(m(h(r.distPumpA,`flow_rate`)+h(r.distPumpB,`flow_rate`),p()));case`well-out-a`:case`dist-a`:return w(a.flowPu(r.distPumpA));case`well-out-b`:case`dist-b`:return w(a.flowPu(r.distPumpB));default:return 0}});return{data(e){c.draw(e)},draw({sdt:e,t,introDone:n}){_.draw(e),l.draw(e,t);for(let r of s)r.draw(e,t,n);u.draw(t)},resync(){},status:e=>xe(n,e,`availability`)}},Re=1e3,ze={x:-430,y:-215,w:235,d:270,r:8},Be={x:-155,y:-215,w:265,d:205,r:8},T={x:-135,y:95,w:250,d:180,r:8},Ve={x:-500,y:95,w:335,d:180,r:8},He={x:-520,y:-235,w:650,d:530,r:16},E=a([...u(He,-21,-14),...u(ze,-14,92),...u(Be,-14,80),...u(T,-14,92),...u(Ve,-14,92)],Re,640,{pad:22,azimuth:60}),D={raw:[-322,-150],clarifier:[55,165],clearWell:[-207,195]},O=D.clarifier[0],Ue=42.5,We=D.clarifier[1]-Math.sqrt((Ue+5)**2-(O-D.clarifier[0])**2),Ge=22,Ke=42,qe=ie[2],k=5.6,Je=.68,Ye={r:52,h:84,nozzles:[{angle:0,z:70,r:3.2,role:`inlet`},{angle:0,z:18,r:3.2,role:`outlet`}]},A={r:Ue,h:44,open:!0,spout:[O-D.clarifier[0],We+Ge-D.clarifier[1],50],nozzles:[{angle:180,z:6,r:3.2,role:`outlet`},{angle:135,z:22*Je,r:2.2}]},Xe={r:Ke,h:40,nozzles:[{angle:0,z:6,r:3.2,role:`inlet`},{angle:180,z:qe,r:3.4,role:`outlet`}]},Ze=-180,Qe=-140,j={key:`aeration`,plan:{x:-145,y:-205,w:130,d:100,r:3},h:30,wall:5,waterZ:24,diffusers:!0,ports:[[-15,Ze,18,1,3.2]]},M={key:`flash`,plan:{x:-5,y:-195,w:70,d:70,r:3},h:30,wall:5,waterZ:24,baffles:2,ports:[[65,Qe,18,1,3.2]]},$e=([e,t,n])=>[e+1.6,t,n],et={half:30,rimZ:30,waterZ:24},N={x:-413,y:10,w:218,d:30,r:2},P={x:-102,y:230,w:26,d:26,r:2},F={x:64,y:-72,w:22,d:22,r:1},I={x:-494,y:126,w:26,d:28,r:2},tt=10.8,L=[94,-130,0],nt=[-68,-128,0],rt=[ie[0]-L[0],ie[1]-L[1],ie[2]],it=[_[0]-L[0],_[1]-L[1],_[2]],at=[-110,-113.4,24],R=(e,t,n)=>{let[r,i,a]=Oe(t,t.nozzles[n]);return[e[0]+r,e[1]+i,a]},z=R(D.clarifier,A,1),ot=8,st=(A.nozzles[1]?.angle??0)*(Math.PI/180),ct=[z[0]+Math.cos(st)*ot,z[1]+Math.sin(st)*ot,z[2]],B={rawA:{c:[-372,-35],scale:1},rawB:{c:[-262,-35],scale:1},dose:{c:[10,-60],scale:.55},sludge:{c:[ct[0]-(rt[0]+10)*Je,243],scale:Je},distA:{c:[-440,195],scale:1},distB:{c:[-325,195],scale:1}},V=[-80,-60,0],lt=[30,-160,0],ut=[...[{key:`rawTank`,at:D.raw},{key:`rawA`,at:B.rawA.c},{key:`rawB`,at:B.rawB.c},{key:`channel`,at:[N.x+N.w,N.y+N.d]},{key:`aeration`,at:[j.plan.x+j.plan.w/2,j.plan.y+j.plan.d/2]},{key:`flash`,at:[M.plan.x+M.plan.w/2,M.plan.y+M.plan.d/2]},{key:`mixer`,at:[lt[0],lt[1]+.5]},{key:`blower`,at:[V[0],V[1]]},{key:`dose`,at:B.dose.c},{key:`tote`,at:[F.x+F.w/2,F.y+F.d/2]},{key:`clarifier`,at:D.clarifier},{key:`sludge`,at:B.sludge.c},{key:`sump`,at:[P.x+P.w/2,P.y+P.d/2]},{key:`clearWell`,at:D.clearWell},{key:`distA`,at:B.distA.c},{key:`distB`,at:B.distB.c},{key:`outfall`,at:[I.x+I.w/2,I.y+I.d/2]}]].sort((e,t)=>m([e.at[0],e.at[1],0],E)-m([t.at[0],t.at[1],0],E)),dt=ut.map(e=>m([e.at[0],e.at[1],0],E)),ft=m([D.clarifier[0],D.clarifier[1],0],E),pt={layer:e=>{let t=m([e[0],e[1],Math.max(0,e[2]-12)],E);return e[2]>A.h+4&&Math.hypot(e[0]-D.clarifier[0],e[1]-D.clarifier[1])<Ue+6&&(t=Math.max(t,ft+.01)),dt.filter(e=>e<=t).length},glide:()=>!0},mt=(e,t)=>[e.c[0]+t[0]*e.scale,e.c[1]+t[1]*e.scale,t[2]*e.scale],H=e=>{let t=mt(e,rt);return[t,[t[0]+10*e.scale,t[1],t[2]]]},U=e=>{let t=mt(e,it);return[G(t,null,null,t[2]-3*e.scale),[t[0],t[1],t[2]+6*e.scale]]},W=e=>e+.9,G=(e,t,n,r)=>[t??e[0],n??e[1],r??e[2]],ht=R(D.raw,Ye,0),gt=R(D.raw,Ye,1),_t=R(D.clarifier,A,0),K=R(D.clearWell,Xe,0),vt=R(D.clearWell,Xe,1),yt=[D.clarifier[0]+(A.spout?.[0]??0),D.clarifier[1]+(A.spout?.[1]??0),A.spout?.[2]??0],{rawA:bt,rawB:xt,dose:St,sludge:Ct,distA:wt,distB:Tt}=B,[Et,Dt]=H(bt),[Ot,kt]=H(xt),[At,jt]=U(bt),[Mt,Nt]=U(xt),[Pt]=H(St),[Ft,It]=U(St),[Lt,Rt]=H(Ct),[zt,Bt]=U(Ct),[Vt,Ht]=H(wt),[Ut]=H(Tt),[Wt,Gt]=U(wt),[Kt,qt]=U(Tt),q=[V[0]+at[0]-nt[0],V[1]+at[1]-nt[1],at[2]],J=[q[0],-128],Y=[Ft[0],-136,28],Jt=[Pt[1],Pt[2]],Yt=F.x-3.6,Xt=5,Zt=-75,Qt=70,$t=[Nt[0],Zt,Qt],X=I.y+I.d/2,en=Gt[2],Z=3.2,tn=[Wt[0],X,en],nn=[I.x+I.w/2,X,en],rn=(e,t)=>[e,t,G(t,null,X,null)],Q=[(vt[0]+Ut[0])/2,vt[1],vt[2]],an=-143,on=It[2],sn=[P.x+P.w/2,Ct.c[1],8],cn={z:10,flanged:!0,routes:[{id:`suction-a`,medium:`water`,r:3.4,pts:[Et,Dt,G(Dt,null,null,Xt),G(Dt,null,N.y,Xt)]},{id:`suction-b`,medium:`water`,r:3.4,pts:[Ot,kt,G(kt,null,null,Xt),G(kt,null,N.y,Xt)]},{id:`raw-a`,medium:`water`,r:3.2,fromStub:!0,pts:[At,G(jt,null,null,Qt),G(jt,null,Zt,Qt),$t]},{id:`raw-b`,medium:`water`,r:3.2,fromStub:!0,pts:[Mt,G(Nt,null,null,Qt),$t]},{id:`raw-in`,medium:`water`,r:3.2,pts:[$t,G($t,null,ht[1],null),ht]},{id:`to-aeration`,medium:`water`,r:3.2,pts:[gt,[j.plan.x,gt[1],18]]},{id:`to-mix`,medium:`water`,r:3.2,pts:[$e(j.ports[0]),[M.plan.x,Ze,18]]},{id:`to-clarifier`,bare:[!1,!0],medium:`water`,r:3.2,pts:[$e(M.ports[0]),[100,Qe,18],[100,Qe,W(3.2)],[100,T.y+10,W(3.2)],[O,T.y+10,W(3.2)],[O,We,W(3.2)],[O,We,58],[O,yt[1],58],[O,yt[1],yt[2]+1.5]]},{id:`air`,bare:[!1,!0],medium:`air`,r:1.2,pts:[q,[q[0],q[1]+14,q[2]],[q[0],q[1]+14,66],[J[0],J[1],66],[J[0],J[1],j.waterZ]]},{id:`tote`,medium:`dosing`,r:1.9,pts:[Pt,G(Pt,Yt,null,null)]},{id:`dosing`,bend:9,bare:[!1,!0],medium:`dosing`,r:1.76,fromStub:!0,pts:[Ft,It,[Y[0],Y[1],on],[Y[0],Y[1],Y[2]+1]]},{id:`sludge-draw`,medium:`sludge`,r:2.2,pts:[z,ct,G(Rt,null,null,z[2]),Lt]},{id:`sludge`,bare:[!1,!0],medium:`sludge`,r:2.2,fromStub:!0,pts:[zt,Bt,G(sn,null,null,Bt[2]),sn]},{id:`to-well`,medium:`water`,r:3.2,pts:[_t,G(_t,an,null,null),G(K,an,null,null),K]},{id:`well-out`,medium:`water`,r:3.4,pts:[vt,Q]},{id:`well-out-a`,medium:`water`,r:3.4,pts:[Q,G(Q,null,null,k),G(Q,null,242,k),G(Q,Ht[0],242,k),G(Ht,null,null,k),Ht,Vt]},{id:`well-out-b`,medium:`water`,r:3.4,pts:[Q,Ut]},{id:`dist-a`,bend:9,medium:`water`,r:Z,fromStub:!0,pts:rn(Wt,Gt)},{id:`dist-b`,bend:9,medium:`water`,r:Z,fromStub:!0,pts:[...rn(Kt,qt),tn]},{id:`to-outfall`,medium:`water`,r:Z,pts:[tn,nn,G(nn,null,null,tt+1.6)]}],posts:[[-182,gt[1],3.2,18],[-168,gt[1],3.2,18],[100,10,3.2,W(3.2)],[100,45,3.2,W(3.2)],[100,80,3.2,W(3.2)],[an,(_t[1]+K[1])/2,3.2,K[2]],[-153,K[1],3.2,K[2]],[-350,X,Z,en,0],[-455,X,Z,en,0]]},ln=e(t(),1),un=7;function dn(e,t){let{k:n,G:r,P:i,S:a,L:o,slab:s,cyl:c,screws:l}=e,{plan:u,h:d,wall:f,waterZ:p,key:m}=t,h=[s(u,0,d,{tone:`mid`},6,1)],g=n.insetPlan(u,f),_=(e,t)=>n.planOutline(e,t,i,6);h.push(`<path class="tk-bore" d="${_(g,d)}"/>`),h.push(o(_(n.insetPlan(u,f/2),d),{tone:`faint`})),h.push(`<clipPath id="clip-${m}"><path d="${_(g,d)}"/></clipPath>`);let v=[],y=[];if(t.diffusers){let e=g.x+12,t=g.x+g.w-12;for(let n=1;n<=4;n++){let r=g.y+g.d*n/5;for(let n=0;n<5;n++)y.push(e+(t-e)*n/4,r)}}for(let e=1;e<=(t.baffles??0);e++){let r=g.x+g.w*e/((t.baffles??0)+1);v.push(o(n.segment([r,g.y+4,4],[r,g.y+g.d*.62,4],i)+n.segment([r,g.y+4,p-1],[r,g.y+g.d*.62,p-1],i),{tone:`faint`}))}v.length&&h.push(`<g clip-path="url(#clip-${m})">${v.join(``)}</g>`),h.push(`<path class="tk-water" clip-path="url(#clip-${m})" d="${_(n.insetPlan(u,f-.4),p)}"/>`),t.drop&&h.push(o(n.ring(t.drop[0],t.drop[1],3.4,p,i,18),{tone:`faint`})),h.push(o(_(g,d),{tone:`lo`})),t.diffusers&&h.push(`<g clip-path="url(#clip-${m})" data-bubbles="${[un+1.2,p,...y].map(e=>e.toFixed(1)).join(`,`)}"></g>`),h.push(l(n.corners(u,f/2),d));for(let[e,n,o,s,c]of t.ports??[]){let t=r.frameAlong([e,n,o],[s,0,0]);h.push(a(r.disc(0,1.6,c+2,t,i),{tone:`mid`}))}if(t.nozzle){let[e,n,r]=t.nozzle;h.push(c(e,n,2.6,r-3.4,3.4,{tone:`mid`},14),c(e,n,1.3,r-5.4,2,{tone:`mid`,crease:`none`},10))}return h.join(``)}function fn(e,t,n){let{k:r,P:i,L:a,slab:o}=e,s=[o(t,0,12,{tone:`mid`},4,.8)],c=r.insetPlan(t,4);s.push(`<path class="tk-bore" d="${r.planOutline(c,12,i,4)}"/>`),s.push(`<clipPath id="clip-${n}"><path d="${r.planOutline(c,12,i,4)}"/></clipPath><path class="tk-water" clip-path="url(#clip-${n})" d="${r.planOutline(r.insetPlan(t,3.6),9,i,4)}"/>`),s.push(a(r.planOutline(c,12,i,4),{tone:`lo`}));let l=c.x+14,u=[],d=[];for(let e=c.y+3;e<c.y+c.d-2;e+=3.4)u.push(r.segment([l,e,9],[l,e,12],i)),d.push(r.segment([l,e,12],[l,e,18],i));return s.push(`<g clip-path="url(#clip-${n})">${a(u.join(``),{tone:`mid`})}</g>`,a(d.join(``),{tone:`mid`})),s.push(o({x:l-1.2,y:t.y,w:2.4,d:t.d,r:.4},18,2.2,{tone:`mid`},2,.2)),s.join(``)}function pn(e,t,n){let{k:r,P:i,L:a,slab:o}=e,s=[o(t,0,6,{tone:`mid`},3,.6)],c=r.insetPlan(t,3);s.push(`<path class="tk-bore" d="${r.planOutline(c,6,i,3)}"/>`),s.push(`<clipPath id="clip-${n}"><path d="${r.planOutline(c,6,i,3)}"/></clipPath><path class="tk-sludge" clip-path="url(#clip-${n})" d="${r.planOutline(c,3.6,i,3)}"/>`);let l=[];for(let e=1;e<6;e++)l.push(r.lineOnTop([c.x+c.w*e/6,c.y],[c.x+c.w*e/6,c.y+c.d],6.4,i));return s.push(a(l.join(``),{tone:`mid`})),s.join(``)}function mn(e,t,n,r){let{k:i,P:a,G:o,S:s,L:c,slab:l,cyl:u}=e,d=[l({...t,x:t.x-1,y:t.y-1,w:t.w+2,d:t.d+2},0,3,{tone:`lo`},2,.4)],f=t.x+.8,p=t.y+.8,m=t.x+t.w-.8,h=t.y+t.d-.8,g=[9,16],_=[i.segment([f,p,3],[f,p,27],a)],v=[];for(let[e,t]of[[f,h],[m,h],[m,p]])v.push(i.segment([e,t,3],[e,t,27],a));for(let e of g)_.push(i.segment([f,p,e],[m,p,e],a),i.segment([f,p,e],[f,h,e],a)),v.push(i.segment([f,h,e],[m,h,e],a),i.segment([m,p,e],[m,h,e],a));v.push(i.planOutline(i.insetPlan(t,.8),27,a,2)),d.push(c(_.join(``),{tone:`lo`})),d.push(l(i.insetPlan(t,2.4),3,21,{tone:`mid`},2,1.4)),d.push(c(v.join(``),{tone:`lo`})),d.push(u(t.x+t.w*.5,t.y+t.d*.3,2.4,24,4.4,{tone:`mid`},14));let y=o.frameAlong([t.x+2.4,n,r],[-1,0,0]);return d.push(s(o.disc(0,4.4,1.5,y,a),{tone:`mid`}),s(o.disc(1.6,3.4,2.4,y,a),{tone:`mid`}),s(o.disc(4.4,6,2.8,y,a),{tone:`mid`})),d.join(``)}function hn(e,t,n){let{k:r,P:i,G:a,S:o,L:s,slab:c,screws:l}=e,u=[c(t,0,10,{tone:`mid`},3,.8)],d=r.insetPlan(t,3);u.push(c(d,10,.8,{tone:`lo`},2,.3));let f=[];for(let e=1;e<5;e++){let t=d.y+d.d*e/5;f.push(r.lineOnTop([d.x+2,t],[d.x+d.w-2,t],11,i))}u.push(s(f.join(``),{tone:`faint`}),l(r.corners(d,2),10.8));let p=a.frameAlong([t.x+t.w/2,t.y+t.d/2,10.8],[0,0,1]);return u.push(o(a.disc(0,1.6,n+2,p,i),{tone:`mid`})),u.join(``)}function gn(e){let t=[...e].sort((e,t)=>e[0]-t[0]||e[1]-t[1]),n=(e,t,n)=>(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0]),r=e=>{let t=[];for(let r of e){for(;t.length>=2&&n(t[t.length-2],t[t.length-1],r)<=0;)t.pop();t.push(r)}return t.pop(),t};return[...r(t),...r([...t].reverse())]}function _n(e){return{x:-e.half-8,y:-8,w:e.half*2+16,d:16,r:2}}function vn(e,t,n){let{k:r,P:i,L:a,slab:o,cyl:s,screws:c,hmi:l}=e,{half:u,rimZ:d,waterZ:f}=n,p=d+3,m=[],h=p,g=r.roundedPlan({x:-u,y:-u,w:u*2,d:u*2,r:3},6).map(e=>r.iso([e[0],e[1],d],i));m.push(`<clipPath id="bore-${t}"><path d="${r.pathOf(gn([...g,...g.map(([e,t])=>[e,t-400])]),!0)}"/></clipPath>`),m.push(s(0,0,3.2,h-3,3,{tone:`mid`},16)),m.push(`<g clip-path="url(#bore-${t})">`),m.push(a(r.ring(0,0,2.8,f,i,18),{tone:`faint`})),m.push(`<path class="tk-swirl" data-swirl="0,0,${f},${u-12}" d=""/>`),m.push(s(0,0,1.8,f,h-3-f,{tone:`mid`,crease:`none`},12)),m.push(`<path class="iso-line" data-tone="lo" data-spin="motor" data-shaft="0,0,0" data-radius="1.8" data-span="${f},${h-3}" d=""/>`),m.push(`</g>`),m.push(o({x:-u-8,y:-6,w:u*2+16,d:12,r:1},d,3,{tone:`mid`},2,.4)),m.push(a(r.lineOnTop([-u-6,-4.8],[u+6,-4.8],d+3.2,i)+r.lineOnTop([-u-6,4.8],[u+6,4.8],d+3.2,i),{tone:`faint`})),m.push(c([[-u-5,0],[u+5,0]],p));let _=[];for(let e of[-u-6,-u/2,0,u/2,u+6])for(let t of[-6,6])_.push(r.segment([e,t,p],[e,t,p+8],i));for(let e of[-6,6])_.push(r.segment([-u-6,e,p+8],[u+6,e,p+8],i));m.push(a(_.join(``),{tone:`lo`})),m.push(s(0,0,7,p,8,{tone:`mid`},28)),m.push(s(0,0,10,p+8,18,{tone:`mid`,crease:`faint`},32));let v=[];for(let e=-.5;e<2.9;e+=.32)v.push(r.segment([Math.cos(e)*10.2,Math.sin(e)*10.2,p+10],[Math.cos(e)*10.2,Math.sin(e)*10.2,p+24],i));return m.push(a(v.join(``),{tone:`faint`})),m.push(s(0,0,10.6,p+26,2.4,{tone:`mid`},32),s(0,0,6,p+28.4,1.4,{tone:`lo`},24)),m.push(o({x:9,y:-3,w:6,d:6,r:1},p+12,7,{tone:`mid`},2,.3)),m.push(o({x:u-4,y:10,w:20,d:4,r:.8},d+3,15,{tone:`mid`},2,.3),l(t,14,u-2,u+14,d+5.4,d+16.6)),m.join(``)}var $=n(),yn={x:-132,y:-150,w:128,d:44,r:3},bn=(e,t)=>te(e,t,`water`,!0),xn=(e,t)=>te(e,t,`dosing`,!0),Sn=(e,t)=>te(e,t,`sludge`,!0),Cn=(e,t)=>we(e,t,{barFull:2.5,dialFull:4}),wn=(e,t)=>Ee(e,t,Ye),Tn=(e,t)=>Ee(e,t,A),En=(e,t)=>Ee(e,t,Xe),Dn=_n(et),On=(e,t)=>vn(e,t,et),kn=e=>dn(e,{...j,drop:J}),An=e=>dn(e,{...M,nozzle:Y}),jn=e=>fn(e,N,`intake`),Mn=e=>pn(e,P,`sump`),Nn=e=>mn(e,F,Jt[0],Jt[1]),Pn=e=>hn(e,I,Z);function Fn({ids:e}){let t=c(),n=ee(cn,pt),r=(0,ln.useMemo)(()=>re(t,He)+t.plinth(ze)+t.plinth(Be)+t.plinth(T)+t.plinth(Ve),[t]),i=e=>(0,$.jsx)(s,{html:`${n.layers[e]??``}<g data-flows="${e}" data-depth="${e===0?-1e9:dt[e-1]??0}"></g>`,data:{pipes:``}},`pipes-${e}`),a=(e,t,n,r)=>(0,$.jsx)(y,{from:L,to:he(t.c),scale:t.scale,children:(0,$.jsx)(l,{id:e,plan:me,intro:r,draw:n})}),o={rawTank:(0,$.jsx)(y,{from:[0,0,0],to:he(D.raw),children:(0,$.jsx)(l,{id:e.rawTank,plan:De(Ye),intro:3,draw:wn})}),rawA:a(e.rawPumpA,B.rawA,bn,4),rawB:a(e.rawPumpB,B.rawB,bn,5),channel:(0,$.jsx)(b,{build:jn,intro:1}),aeration:(0,$.jsx)(b,{build:kn,intro:1}),flash:(0,$.jsx)(b,{build:An,intro:1}),mixer:(0,$.jsx)(y,{from:[0,0,0],to:lt,children:(0,$.jsx)(l,{id:e.mixer,plan:Dn,intro:9,draw:On})}),blower:(0,$.jsx)(y,{from:nt,to:V,children:(0,$.jsx)(l,{id:e.blower,plan:yn,intro:6,draw:Cn})}),dose:a(e.dosePump,B.dose,xn,7),tote:(0,$.jsx)(b,{build:Nn,intro:2}),clarifier:(0,$.jsx)(y,{from:[0,0,0],to:he(D.clarifier),children:(0,$.jsx)(l,{id:e.clarifier,plan:De(A),intro:8,draw:Tn})}),sludge:a(e.sludgePump,B.sludge,Sn,10),sump:(0,$.jsx)(b,{build:Mn,intro:2}),clearWell:(0,$.jsx)(y,{from:[0,0,0],to:he(D.clearWell),children:(0,$.jsx)(l,{id:e.clearWell,plan:De(Xe),intro:11,draw:En})}),distA:a(e.distPumpA,B.distA,bn,12),distB:a(e.distPumpB,B.distB,bn,13),outfall:(0,$.jsx)(b,{build:Pn,intro:2})};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(s,{html:r,data:{plinth:``}}),i(0),ut.flatMap((e,t)=>[(0,$.jsx)(`g`,{children:o[e.key]},e.key),i(t+1)])]})}var In=oe(E),Ln=ne(In,cn,pt),Rn=se({layout:{width:Re,height:640,label:`Isometric model of the Water Treatment Plant: three areas on their own plinths. Intake has a channel, two raw water pumps and the raw tank; treatment has an aeration basin with its blower, a flash-mix basin with a coagulant dosing pump and a motor-driven mixer, and a clarifier with its sludge pump and sump; distribution has the clear well and two distribution pumps feeding the outfall. Pipes carry water, air, coagulant and sludge between them. Every moving part follows live values from the running engine.`,kit:In,flows:Ln.flows,joints:Ln.joints,Scene:Fn,compose:Le},resolve:je,things:Me,caption:`intake · treatment · distribution`,mismatch:`This floor expects the Water Treatment plant: raw pumps and tank, blower, dosing pump, mixer, clarifier with its sludge pump, clear well and two distribution pumps, by area and line.`,statusBasis:`availability`,Overview:h,tab:`Plant`});export{Rn as waterFloor};
|
|
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,t as p,y as m}from"./dom-CQuChC3G.js";import{n as h,t as g}from"./by-path-CKZo157c.js";import{A as _,C as v,D as y,E as ee,F as te,H as ne,L as re,O as b,P as ie,T as ae,V as oe,X as se,_ as ce,a as le,b as ue,c as de,g as x,h as fe,i as pe,j as me,k as he,n as ge,o as _e,p as ve,r as ye,s as be,t as xe,w as S,x as Se,y as Ce}from"./status-DNfdEhTs.js";import{n as we,t as Te}from"./compressor-BkWNdwvy.js";import{i as Ee,n as De,r as Oe,t as ke}from"./tank-xgQfMS2d.js";var Ae=[[`rawPumpA`,`centrifugal-pump`,`intake`,`raw-inlet`,0],[`rawPumpB`,`centrifugal-pump`,`intake`,`raw-inlet`,1],[`rawTank`,`storage-tank`,`intake`,`raw-inlet`,0],[`blower`,`air-compressor`,`treatment`,`aeration`,0],[`dosePump`,`centrifugal-pump`,`treatment`,`chemical-dosing`,0],[`mixer`,`ac-induction-motor`,`treatment`,`mixing`,0],[`sludgePump`,`centrifugal-pump`,`treatment`,`clarifier`,0],[`clarifier`,`storage-tank`,`treatment`,`clarifier`,0],[`clearWell`,`storage-tank`,`distribution`,`clear-well`,0],[`distPumpA`,`centrifugal-pump`,`distribution`,`distribution-pumps`,0],[`distPumpB`,`centrifugal-pump`,`distribution`,`distribution-pumps`,1]],je=e=>g(Ae,e);function Me(e){let t=(e,t,n)=>({key:e,assetId:e,name:t,kind:`utility`,area:n});return[t(e.rawPumpA,`Raw pump A (duty)`,`Intake`),t(e.rawPumpB,`Raw pump B (standby)`,`Intake`),t(e.rawTank,`Raw water tank`,`Intake`),t(e.blower,`Aeration blower`,`Treatment`),t(e.dosePump,`Coagulant dosing pump`,`Treatment`),t(e.mixer,`Flash mixer`,`Treatment`),t(e.clarifier,`Clarifier`,`Treatment`),t(e.sludgePump,`Sludge pump`,`Treatment`),t(e.clearWell,`Clear well`,`Distribution`),t(e.distPumpA,`Distribution pump A (duty)`,`Distribution`),t(e.distPumpB,`Distribution pump B (standby)`,`Distribution`)]}var C=6,Ne=.9;function Pe(e,t){let{svg:n,P:a}=e,o=p(n,`[data-bubbles]`),[s=0,c=0,...l]=f(o?.dataset.bubbles),u=Array.from({length:Math.floor(l.length/2)},(e,t)=>({x:l[t*2]??0,y:l[t*2+1]??0,phase:t*.618%1})),d=o?ae(o,u.length*C,`ellipse`,`sf-bubble`):[];return{draw(n){let o=Math.ceil(u.length*x(t())),l=e.reducedMotion();for(let[e,t]of d.entries()){let d=u[Math.floor(e/C)];if(!d||l||Math.floor(e/C)>=o){i(t.el,`0`);continue}let f=(n*.4+d.phase+e%C/C)%1,p=.5+1.8*f,m=d.x+p*Math.sin(n*2.1+e*1.9),h=d.y+p*Math.cos(n*1.7+e*2.3);if(f<Ne){let[e,n]=r([m,h,s+f/Ne*(c-s)],a),o=.28+.4*f;Fe(t.el,e,n,o,o),i(t.el,(Math.min(1,f*10)*.9).toFixed(2))}else{let e=(f-Ne)/(1-Ne),[n,o]=r([m,h,c],a);Fe(t.el,n,o,.9+2.6*e,(.9+2.6*e)*.5),i(t.el,((1-e)*.7).toFixed(2))}}}}}function Fe(e,t,n,r,i){e.setAttribute(`cx`,t.toFixed(1)),e.setAttribute(`cy`,n.toFixed(1)),e.setAttribute(`rx`,r.toFixed(2)),e.setAttribute(`ry`,i.toFixed(2))}function Ie(e,t){let{svg:n,P:i,feed:a}=e,s=(e,t)=>a.num(e,t),c=e=>a.param(e,`rated_rpm`,1500),l=d(n,`[data-spin="motor"]`).map(e=>{let t=be(e),[r=0,i=0]=f(e.dataset.span),a=e.closest(`[data-asset]`),o=v(n,t),s=(e=>a?.querySelector(e)??null)(`[data-swirl]`);return{el:e,id:t,at:de(e.dataset.shaft),r:Number(e.dataset.radius)||0,s0:r,s1:i,bearing:de(e.dataset.bearing),swirl:s,swirlAt:f(s?.dataset.swirl),rpm:0,spin:0,heat:Se(o),smoke:Ce(o,`smoke`)}}),u=new Map(l.map(e=>[e.id,e]));return{draw(n,u,d){let f=e.reducedMotion();for(let e of l){if(e.rpm=ce(e.rpm,s(e.id,`speed_feedback`),n,.8,f),f||(e.spin+=e.rpm/c(e.id)*1.6*fe*n),o(e.el,`d`,ve(i,`z`,e.at,e.r,e.s0,e.s1,e.spin,8)),e.swirl){let[t=0,n=0,a=0,s=0]=e.swirlAt,l=x(e.rpm/c(e.id)),u=``;for(let o=0;o<3;o++){let c=s*(.38+o*.24),l=e.spin*.35+o*fe/3,d=Array.from({length:9},(e,o)=>{let s=l+o/8*1.5;return r([t+Math.cos(s)*c,n+Math.sin(s)*c,a],i)});u+=`M${d.map(([e,t])=>`${e.toFixed(1)} ${t.toFixed(1)}`).join(`L`)}`}o(e.swirl,`d`,e.rpm>20?u:``),e.swirl.style.opacity=(.25+l*.55).toFixed(2)}if(!d)continue;let l=S(a,e.id,`bearing_defect_inner_race`,`winding_insulation`);e.heat.draw((l||S(a,e.id,`winding_burnout`))&&!f,u,i,e.bearing),e.smoke.draw(S(a,e.id,`winding_burnout`)&&!f,u,i,e.bearing,[.2,.5]),t(e.id,f?0:S(a,e.id,`rotor_imbalance`)?.5:S(a,e.id,`bearing_defect_inner_race`)?.35:0,u)}},bar(e){return u.get(e)?x(s(e,`speed_feedback`)/(c(e)*1.3)):void 0}}}var w=e=>e>.002?6+26*x(e*3):0,Le=e=>{let{svg:t,feed:n,ids:r}=e,i=ue(t),a=ye(e,i),o=Te(e,i),s=[a,o,Ie(e,i),ke(e)],c=pe(e,e=>ge(n,e,`availability`)),l=_e(e,{needle:e=>o.needle(e)??0,bar:e=>s.reduce((t,n)=>t??n.bar(e),void 0)??0,alertsHigh:()=>!0,ready:()=>!0}),u=Pe(e,()=>o.deliveredPu(r.blower)),d=(...e)=>e.reduce((e,t)=>e+n.param(t,`rated_flow`,0),0),f=()=>d(r.rawPumpA,r.rawPumpB),p=()=>d(r.distPumpA,r.distPumpB),m=(e,t)=>t>0?e/t:0,h=(e,t)=>n.num(e,t),g=(e,t)=>h(e,t)*3.6,_=le(e,({id:e})=>{switch(e){case`suction-a`:case`raw-a`:return w(a.flowPu(r.rawPumpA));case`suction-b`:case`raw-b`:return w(a.flowPu(r.rawPumpB));case`raw-in`:return w(m(h(r.rawPumpA,`flow_rate`)+h(r.rawPumpB,`flow_rate`),f()));case`to-aeration`:case`to-mix`:return w(m(g(r.rawTank,`outflow_rate`),f()));case`to-clarifier`:return w(m(g(r.clarifier,`inflow_rate`),f()));case`air`:return w(o.deliveredPu(r.blower));case`tote`:case`dosing`:return w(a.flowPu(r.dosePump));case`sludge-draw`:case`sludge`:return w(a.flowPu(r.sludgePump));case`to-well`:return w(m(g(r.clearWell,`inflow_rate`),p()));case`well-out`:case`to-outfall`:return w(m(h(r.distPumpA,`flow_rate`)+h(r.distPumpB,`flow_rate`),p()));case`well-out-a`:case`dist-a`:return w(a.flowPu(r.distPumpA));case`well-out-b`:case`dist-b`:return w(a.flowPu(r.distPumpB));default:return 0}});return{data(e){c.draw(e)},draw({sdt:e,t,introDone:n}){_.draw(e),l.draw(e,t);for(let r of s)r.draw(e,t,n);u.draw(t)},resync(){},status:e=>xe(n,e,`availability`)}},Re=1e3,ze={x:-430,y:-215,w:235,d:270,r:8},Be={x:-155,y:-215,w:265,d:205,r:8},T={x:-135,y:95,w:250,d:180,r:8},Ve={x:-500,y:95,w:335,d:180,r:8},He={x:-520,y:-235,w:650,d:530,r:16},E=a([...u(He,-21,-14),...u(ze,-14,92),...u(Be,-14,80),...u(T,-14,92),...u(Ve,-14,92)],Re,640,{pad:22,azimuth:60}),D={raw:[-322,-150],clarifier:[55,165],clearWell:[-207,195]},O=D.clarifier[0],Ue=42.5,We=D.clarifier[1]-Math.sqrt((Ue+5)**2-(O-D.clarifier[0])**2),Ge=22,Ke=42,qe=ie[2],k=5.6,Je=.68,Ye={r:52,h:84,nozzles:[{angle:0,z:70,r:3.2,role:`inlet`},{angle:0,z:18,r:3.2,role:`outlet`}]},A={r:Ue,h:44,open:!0,spout:[O-D.clarifier[0],We+Ge-D.clarifier[1],50],nozzles:[{angle:180,z:6,r:3.2,role:`outlet`},{angle:135,z:22*Je,r:2.2}]},Xe={r:Ke,h:40,nozzles:[{angle:0,z:6,r:3.2,role:`inlet`},{angle:180,z:qe,r:3.4,role:`outlet`}]},Ze=-180,Qe=-140,j={key:`aeration`,plan:{x:-145,y:-205,w:130,d:100,r:3},h:30,wall:5,waterZ:24,diffusers:!0,ports:[[-15,Ze,18,1,3.2]]},M={key:`flash`,plan:{x:-5,y:-195,w:70,d:70,r:3},h:30,wall:5,waterZ:24,baffles:2,ports:[[65,Qe,18,1,3.2]]},$e=([e,t,n])=>[e+1.6,t,n],et={half:30,rimZ:30,waterZ:24},N={x:-413,y:10,w:218,d:30,r:2},P={x:-102,y:230,w:26,d:26,r:2},F={x:64,y:-72,w:22,d:22,r:1},I={x:-494,y:126,w:26,d:28,r:2},tt=10.8,L=[94,-130,0],nt=[-68,-128,0],rt=[ie[0]-L[0],ie[1]-L[1],ie[2]],it=[_[0]-L[0],_[1]-L[1],_[2]],at=[-110,-113.4,24],R=(e,t,n)=>{let[r,i,a]=Oe(t,t.nozzles[n]);return[e[0]+r,e[1]+i,a]},z=R(D.clarifier,A,1),ot=8,st=(A.nozzles[1]?.angle??0)*(Math.PI/180),ct=[z[0]+Math.cos(st)*ot,z[1]+Math.sin(st)*ot,z[2]],B={rawA:{c:[-372,-35],scale:1},rawB:{c:[-262,-35],scale:1},dose:{c:[10,-60],scale:.55},sludge:{c:[ct[0]-(rt[0]+10)*Je,243],scale:Je},distA:{c:[-440,195],scale:1},distB:{c:[-325,195],scale:1}},V=[-80,-60,0],lt=[30,-160,0],ut=[...[{key:`rawTank`,at:D.raw},{key:`rawA`,at:B.rawA.c},{key:`rawB`,at:B.rawB.c},{key:`channel`,at:[N.x+N.w,N.y+N.d]},{key:`aeration`,at:[j.plan.x+j.plan.w/2,j.plan.y+j.plan.d/2]},{key:`flash`,at:[M.plan.x+M.plan.w/2,M.plan.y+M.plan.d/2]},{key:`mixer`,at:[lt[0],lt[1]+.5]},{key:`blower`,at:[V[0],V[1]]},{key:`dose`,at:B.dose.c},{key:`tote`,at:[F.x+F.w/2,F.y+F.d/2]},{key:`clarifier`,at:D.clarifier},{key:`sludge`,at:B.sludge.c},{key:`sump`,at:[P.x+P.w/2,P.y+P.d/2]},{key:`clearWell`,at:D.clearWell},{key:`distA`,at:B.distA.c},{key:`distB`,at:B.distB.c},{key:`outfall`,at:[I.x+I.w/2,I.y+I.d/2]}]].sort((e,t)=>m([e.at[0],e.at[1],0],E)-m([t.at[0],t.at[1],0],E)),dt=ut.map(e=>m([e.at[0],e.at[1],0],E)),ft=m([D.clarifier[0],D.clarifier[1],0],E),pt={layer:e=>{let t=m([e[0],e[1],Math.max(0,e[2]-12)],E);return e[2]>A.h+4&&Math.hypot(e[0]-D.clarifier[0],e[1]-D.clarifier[1])<Ue+6&&(t=Math.max(t,ft+.01)),dt.filter(e=>e<=t).length},glide:()=>!0},mt=(e,t)=>[e.c[0]+t[0]*e.scale,e.c[1]+t[1]*e.scale,t[2]*e.scale],H=e=>{let t=mt(e,rt);return[t,[t[0]+10*e.scale,t[1],t[2]]]},U=e=>{let t=mt(e,it);return[G(t,null,null,t[2]-3*e.scale),[t[0],t[1],t[2]+6*e.scale]]},W=e=>e+.9,G=(e,t,n,r)=>[t??e[0],n??e[1],r??e[2]],ht=R(D.raw,Ye,0),gt=R(D.raw,Ye,1),_t=R(D.clarifier,A,0),K=R(D.clearWell,Xe,0),vt=R(D.clearWell,Xe,1),yt=[D.clarifier[0]+(A.spout?.[0]??0),D.clarifier[1]+(A.spout?.[1]??0),A.spout?.[2]??0],{rawA:bt,rawB:xt,dose:St,sludge:Ct,distA:wt,distB:Tt}=B,[Et,Dt]=H(bt),[Ot,kt]=H(xt),[At,jt]=U(bt),[Mt,Nt]=U(xt),[Pt]=H(St),[Ft,It]=U(St),[Lt,Rt]=H(Ct),[zt,Bt]=U(Ct),[Vt,Ht]=H(wt),[Ut]=H(Tt),[Wt,Gt]=U(wt),[Kt,qt]=U(Tt),q=[V[0]+at[0]-nt[0],V[1]+at[1]-nt[1],at[2]],J=[q[0],-128],Y=[Ft[0],-136,28],Jt=[Pt[1],Pt[2]],Yt=F.x-3.6,Xt=5,Zt=-75,Qt=70,$t=[Nt[0],Zt,Qt],X=I.y+I.d/2,en=Gt[2],Z=3.2,tn=[Wt[0],X,en],nn=[I.x+I.w/2,X,en],rn=(e,t)=>[e,t,G(t,null,X,null)],Q=[(vt[0]+Ut[0])/2,vt[1],vt[2]],an=-143,on=It[2],sn=[P.x+P.w/2,Ct.c[1],8],cn={z:10,flanged:!0,routes:[{id:`suction-a`,medium:`water`,r:3.4,pts:[Et,Dt,G(Dt,null,null,Xt),G(Dt,null,N.y,Xt)]},{id:`suction-b`,medium:`water`,r:3.4,pts:[Ot,kt,G(kt,null,null,Xt),G(kt,null,N.y,Xt)]},{id:`raw-a`,medium:`water`,r:3.2,fromStub:!0,pts:[At,G(jt,null,null,Qt),G(jt,null,Zt,Qt),$t]},{id:`raw-b`,medium:`water`,r:3.2,fromStub:!0,pts:[Mt,G(Nt,null,null,Qt),$t]},{id:`raw-in`,medium:`water`,r:3.2,pts:[$t,G($t,null,ht[1],null),ht]},{id:`to-aeration`,medium:`water`,r:3.2,pts:[gt,[j.plan.x,gt[1],18]]},{id:`to-mix`,medium:`water`,r:3.2,pts:[$e(j.ports[0]),[M.plan.x,Ze,18]]},{id:`to-clarifier`,bare:[!1,!0],medium:`water`,r:3.2,pts:[$e(M.ports[0]),[100,Qe,18],[100,Qe,W(3.2)],[100,T.y+10,W(3.2)],[O,T.y+10,W(3.2)],[O,We,W(3.2)],[O,We,58],[O,yt[1],58],[O,yt[1],yt[2]+1.5]]},{id:`air`,bare:[!1,!0],medium:`air`,r:1.2,pts:[q,[q[0],q[1]+14,q[2]],[q[0],q[1]+14,66],[J[0],J[1],66],[J[0],J[1],j.waterZ]]},{id:`tote`,medium:`dosing`,r:1.9,pts:[Pt,G(Pt,Yt,null,null)]},{id:`dosing`,bend:9,bare:[!1,!0],medium:`dosing`,r:1.76,fromStub:!0,pts:[Ft,It,[Y[0],Y[1],on],[Y[0],Y[1],Y[2]+1]]},{id:`sludge-draw`,medium:`sludge`,r:2.2,pts:[z,ct,G(Rt,null,null,z[2]),Lt]},{id:`sludge`,bare:[!1,!0],medium:`sludge`,r:2.2,fromStub:!0,pts:[zt,Bt,G(sn,null,null,Bt[2]),sn]},{id:`to-well`,medium:`water`,r:3.2,pts:[_t,G(_t,an,null,null),G(K,an,null,null),K]},{id:`well-out`,medium:`water`,r:3.4,pts:[vt,Q]},{id:`well-out-a`,medium:`water`,r:3.4,pts:[Q,G(Q,null,null,k),G(Q,null,242,k),G(Q,Ht[0],242,k),G(Ht,null,null,k),Ht,Vt]},{id:`well-out-b`,medium:`water`,r:3.4,pts:[Q,Ut]},{id:`dist-a`,bend:9,medium:`water`,r:Z,fromStub:!0,pts:rn(Wt,Gt)},{id:`dist-b`,bend:9,medium:`water`,r:Z,fromStub:!0,pts:[...rn(Kt,qt),tn]},{id:`to-outfall`,medium:`water`,r:Z,pts:[tn,nn,G(nn,null,null,tt+1.6)]}],posts:[[-182,gt[1],3.2,18],[-168,gt[1],3.2,18],[100,10,3.2,W(3.2)],[100,45,3.2,W(3.2)],[100,80,3.2,W(3.2)],[an,(_t[1]+K[1])/2,3.2,K[2]],[-153,K[1],3.2,K[2]],[-350,X,Z,en,0],[-455,X,Z,en,0]]},ln=e(t(),1),un=7;function dn(e,t){let{k:n,G:r,P:i,S:a,L:o,slab:s,cyl:c,screws:l}=e,{plan:u,h:d,wall:f,waterZ:p,key:m}=t,h=[s(u,0,d,{tone:`mid`},6,1)],g=n.insetPlan(u,f),_=(e,t)=>n.planOutline(e,t,i,6);h.push(`<path class="tk-bore" d="${_(g,d)}"/>`),h.push(o(_(n.insetPlan(u,f/2),d),{tone:`faint`})),h.push(`<clipPath id="clip-${m}"><path d="${_(g,d)}"/></clipPath>`);let v=[],y=[];if(t.diffusers){let e=g.x+12,t=g.x+g.w-12;for(let n=1;n<=4;n++){let r=g.y+g.d*n/5;for(let n=0;n<5;n++)y.push(e+(t-e)*n/4,r)}}for(let e=1;e<=(t.baffles??0);e++){let r=g.x+g.w*e/((t.baffles??0)+1);v.push(o(n.segment([r,g.y+4,4],[r,g.y+g.d*.62,4],i)+n.segment([r,g.y+4,p-1],[r,g.y+g.d*.62,p-1],i),{tone:`faint`}))}v.length&&h.push(`<g clip-path="url(#clip-${m})">${v.join(``)}</g>`),h.push(`<path class="tk-water" clip-path="url(#clip-${m})" d="${_(n.insetPlan(u,f-.4),p)}"/>`),t.drop&&h.push(o(n.ring(t.drop[0],t.drop[1],3.4,p,i,18),{tone:`faint`})),h.push(o(_(g,d),{tone:`lo`})),t.diffusers&&h.push(`<g clip-path="url(#clip-${m})" data-bubbles="${[un+1.2,p,...y].map(e=>e.toFixed(1)).join(`,`)}"></g>`),h.push(l(n.corners(u,f/2),d));for(let[e,n,o,s,c]of t.ports??[]){let t=r.frameAlong([e,n,o],[s,0,0]);h.push(a(r.disc(0,1.6,c+2,t,i),{tone:`mid`}))}if(t.nozzle){let[e,n,r]=t.nozzle;h.push(c(e,n,2.6,r-3.4,3.4,{tone:`mid`},14),c(e,n,1.3,r-5.4,2,{tone:`mid`,crease:`none`},10))}return h.join(``)}function fn(e,t,n){let{k:r,P:i,L:a,slab:o}=e,s=[o(t,0,12,{tone:`mid`},4,.8)],c=r.insetPlan(t,4);s.push(`<path class="tk-bore" d="${r.planOutline(c,12,i,4)}"/>`),s.push(`<clipPath id="clip-${n}"><path d="${r.planOutline(c,12,i,4)}"/></clipPath><path class="tk-water" clip-path="url(#clip-${n})" d="${r.planOutline(r.insetPlan(t,3.6),9,i,4)}"/>`),s.push(a(r.planOutline(c,12,i,4),{tone:`lo`}));let l=c.x+14,u=[],d=[];for(let e=c.y+3;e<c.y+c.d-2;e+=3.4)u.push(r.segment([l,e,9],[l,e,12],i)),d.push(r.segment([l,e,12],[l,e,18],i));return s.push(`<g clip-path="url(#clip-${n})">${a(u.join(``),{tone:`mid`})}</g>`,a(d.join(``),{tone:`mid`})),s.push(o({x:l-1.2,y:t.y,w:2.4,d:t.d,r:.4},18,2.2,{tone:`mid`},2,.2)),s.join(``)}function pn(e,t,n){let{k:r,P:i,L:a,slab:o}=e,s=[o(t,0,6,{tone:`mid`},3,.6)],c=r.insetPlan(t,3);s.push(`<path class="tk-bore" d="${r.planOutline(c,6,i,3)}"/>`),s.push(`<clipPath id="clip-${n}"><path d="${r.planOutline(c,6,i,3)}"/></clipPath><path class="tk-sludge" clip-path="url(#clip-${n})" d="${r.planOutline(c,3.6,i,3)}"/>`);let l=[];for(let e=1;e<6;e++)l.push(r.lineOnTop([c.x+c.w*e/6,c.y],[c.x+c.w*e/6,c.y+c.d],6.4,i));return s.push(a(l.join(``),{tone:`mid`})),s.join(``)}function mn(e,t,n,r){let{k:i,P:a,G:o,S:s,L:c,slab:l,cyl:u}=e,d=[l({...t,x:t.x-1,y:t.y-1,w:t.w+2,d:t.d+2},0,3,{tone:`lo`},2,.4)],f=t.x+.8,p=t.y+.8,m=t.x+t.w-.8,h=t.y+t.d-.8,g=[9,16],_=[i.segment([f,p,3],[f,p,27],a)],v=[];for(let[e,t]of[[f,h],[m,h],[m,p]])v.push(i.segment([e,t,3],[e,t,27],a));for(let e of g)_.push(i.segment([f,p,e],[m,p,e],a),i.segment([f,p,e],[f,h,e],a)),v.push(i.segment([f,h,e],[m,h,e],a),i.segment([m,p,e],[m,h,e],a));v.push(i.planOutline(i.insetPlan(t,.8),27,a,2)),d.push(c(_.join(``),{tone:`lo`})),d.push(l(i.insetPlan(t,2.4),3,21,{tone:`mid`},2,1.4)),d.push(c(v.join(``),{tone:`lo`})),d.push(u(t.x+t.w*.5,t.y+t.d*.3,2.4,24,4.4,{tone:`mid`},14));let y=o.frameAlong([t.x+2.4,n,r],[-1,0,0]);return d.push(s(o.disc(0,4.4,1.5,y,a),{tone:`mid`}),s(o.disc(1.6,3.4,2.4,y,a),{tone:`mid`}),s(o.disc(4.4,6,2.8,y,a),{tone:`mid`})),d.join(``)}function hn(e,t,n){let{k:r,P:i,G:a,S:o,L:s,slab:c,screws:l}=e,u=[c(t,0,10,{tone:`mid`},3,.8)],d=r.insetPlan(t,3);u.push(c(d,10,.8,{tone:`lo`},2,.3));let f=[];for(let e=1;e<5;e++){let t=d.y+d.d*e/5;f.push(r.lineOnTop([d.x+2,t],[d.x+d.w-2,t],11,i))}u.push(s(f.join(``),{tone:`faint`}),l(r.corners(d,2),10.8));let p=a.frameAlong([t.x+t.w/2,t.y+t.d/2,10.8],[0,0,1]);return u.push(o(a.disc(0,1.6,n+2,p,i),{tone:`mid`})),u.join(``)}function gn(e){let t=[...e].sort((e,t)=>e[0]-t[0]||e[1]-t[1]),n=(e,t,n)=>(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0]),r=e=>{let t=[];for(let r of e){for(;t.length>=2&&n(t[t.length-2],t[t.length-1],r)<=0;)t.pop();t.push(r)}return t.pop(),t};return[...r(t),...r([...t].reverse())]}function _n(e){return{x:-e.half-8,y:-8,w:e.half*2+16,d:16,r:2}}function vn(e,t,n){let{k:r,P:i,L:a,slab:o,cyl:s,screws:c,hmi:l}=e,{half:u,rimZ:d,waterZ:f}=n,p=d+3,m=[],h=p,g=r.roundedPlan({x:-u,y:-u,w:u*2,d:u*2,r:3},6).map(e=>r.iso([e[0],e[1],d],i));m.push(`<clipPath id="bore-${t}"><path d="${r.pathOf(gn([...g,...g.map(([e,t])=>[e,t-400])]),!0)}"/></clipPath>`),m.push(s(0,0,3.2,h-3,3,{tone:`mid`},16)),m.push(`<g clip-path="url(#bore-${t})">`),m.push(a(r.ring(0,0,2.8,f,i,18),{tone:`faint`})),m.push(`<path class="tk-swirl" data-swirl="0,0,${f},${u-12}" d=""/>`),m.push(s(0,0,1.8,f,h-3-f,{tone:`mid`,crease:`none`},12)),m.push(`<path class="iso-line" data-tone="lo" data-spin="motor" data-shaft="0,0,0" data-radius="1.8" data-span="${f},${h-3}" d=""/>`),m.push(`</g>`),m.push(o({x:-u-8,y:-6,w:u*2+16,d:12,r:1},d,3,{tone:`mid`},2,.4)),m.push(a(r.lineOnTop([-u-6,-4.8],[u+6,-4.8],d+3.2,i)+r.lineOnTop([-u-6,4.8],[u+6,4.8],d+3.2,i),{tone:`faint`})),m.push(c([[-u-5,0],[u+5,0]],p));let _=[];for(let e of[-u-6,-u/2,0,u/2,u+6])for(let t of[-6,6])_.push(r.segment([e,t,p],[e,t,p+8],i));for(let e of[-6,6])_.push(r.segment([-u-6,e,p+8],[u+6,e,p+8],i));m.push(a(_.join(``),{tone:`lo`})),m.push(s(0,0,7,p,8,{tone:`mid`},28)),m.push(s(0,0,10,p+8,18,{tone:`mid`,crease:`faint`},32));let v=[];for(let e=-.5;e<2.9;e+=.32)v.push(r.segment([Math.cos(e)*10.2,Math.sin(e)*10.2,p+10],[Math.cos(e)*10.2,Math.sin(e)*10.2,p+24],i));return m.push(a(v.join(``),{tone:`faint`})),m.push(s(0,0,10.6,p+26,2.4,{tone:`mid`},32),s(0,0,6,p+28.4,1.4,{tone:`lo`},24)),m.push(o({x:9,y:-3,w:6,d:6,r:1},p+12,7,{tone:`mid`},2,.3)),m.push(o({x:u-4,y:10,w:20,d:4,r:.8},d+3,15,{tone:`mid`},2,.3),l(t,14,u-2,u+14,d+5.4,d+16.6)),m.join(``)}var $=n(),yn={x:-132,y:-150,w:128,d:44,r:3},bn=(e,t)=>te(e,t,`water`,!0),xn=(e,t)=>te(e,t,`dosing`,!0),Sn=(e,t)=>te(e,t,`sludge`,!0),Cn=(e,t)=>we(e,t,{barFull:2.5,dialFull:4}),wn=(e,t)=>Ee(e,t,Ye),Tn=(e,t)=>Ee(e,t,A),En=(e,t)=>Ee(e,t,Xe),Dn=_n(et),On=(e,t)=>vn(e,t,et),kn=e=>dn(e,{...j,drop:J}),An=e=>dn(e,{...M,nozzle:Y}),jn=e=>fn(e,N,`intake`),Mn=e=>pn(e,P,`sump`),Nn=e=>mn(e,F,Jt[0],Jt[1]),Pn=e=>hn(e,I,Z);function Fn({ids:e}){let t=c(),n=ee(cn,pt),r=(0,ln.useMemo)(()=>re(t,He)+t.plinth(ze)+t.plinth(Be)+t.plinth(T)+t.plinth(Ve),[t]),i=e=>(0,$.jsx)(s,{html:`${n.layers[e]??``}<g data-flows="${e}" data-depth="${e===0?-1e9:dt[e-1]??0}"></g>`,data:{pipes:``}},`pipes-${e}`),a=(e,t,n,r)=>(0,$.jsx)(y,{from:L,to:he(t.c),scale:t.scale,children:(0,$.jsx)(l,{id:e,plan:me,intro:r,draw:n})}),o={rawTank:(0,$.jsx)(y,{from:[0,0,0],to:he(D.raw),children:(0,$.jsx)(l,{id:e.rawTank,plan:De(Ye),intro:3,draw:wn})}),rawA:a(e.rawPumpA,B.rawA,bn,4),rawB:a(e.rawPumpB,B.rawB,bn,5),channel:(0,$.jsx)(b,{build:jn,intro:1}),aeration:(0,$.jsx)(b,{build:kn,intro:1}),flash:(0,$.jsx)(b,{build:An,intro:1}),mixer:(0,$.jsx)(y,{from:[0,0,0],to:lt,children:(0,$.jsx)(l,{id:e.mixer,plan:Dn,intro:9,draw:On})}),blower:(0,$.jsx)(y,{from:nt,to:V,children:(0,$.jsx)(l,{id:e.blower,plan:yn,intro:6,draw:Cn})}),dose:a(e.dosePump,B.dose,xn,7),tote:(0,$.jsx)(b,{build:Nn,intro:2}),clarifier:(0,$.jsx)(y,{from:[0,0,0],to:he(D.clarifier),children:(0,$.jsx)(l,{id:e.clarifier,plan:De(A),intro:8,draw:Tn})}),sludge:a(e.sludgePump,B.sludge,Sn,10),sump:(0,$.jsx)(b,{build:Mn,intro:2}),clearWell:(0,$.jsx)(y,{from:[0,0,0],to:he(D.clearWell),children:(0,$.jsx)(l,{id:e.clearWell,plan:De(Xe),intro:11,draw:En})}),distA:a(e.distPumpA,B.distA,bn,12),distB:a(e.distPumpB,B.distB,bn,13),outfall:(0,$.jsx)(b,{build:Pn,intro:2})};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(s,{html:r,data:{plinth:``}}),i(0),ut.flatMap((e,t)=>[(0,$.jsx)(`g`,{children:o[e.key]},e.key),i(t+1)])]})}var In=oe(E),Ln=ne(In,cn,pt),Rn=se({layout:{width:Re,height:640,label:`Isometric model of the Water Treatment Plant: three areas on their own plinths. Intake has a channel, two raw water pumps and the raw tank; treatment has an aeration basin with its blower, a flash-mix basin with a coagulant dosing pump and a motor-driven mixer, and a clarifier with its sludge pump and sump; distribution has the clear well and two distribution pumps feeding the outfall. Pipes carry water, air, coagulant and sludge between them. Every moving part follows live values from the running engine.`,kit:In,flows:Ln.flows,joints:Ln.joints,Scene:Fn,compose:Le},resolve:je,things:Me,caption:`intake · treatment · distribution`,mismatch:`This floor expects the Water Treatment plant: raw pumps and tank, blower, dosing pump, mixer, clarifier with its sludge pump, clear well and two distribution pumps, by area and line.`,statusBasis:`availability`,Overview:h,tab:`Plant`});export{Rn as waterFloor};
|
package/console-dist/index.html
CHANGED
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
}
|
|
22
22
|
</style>
|
|
23
23
|
<title>Miravo</title>
|
|
24
|
-
<script type="module" crossorigin src="/assets/index-
|
|
24
|
+
<script type="module" crossorigin src="/assets/index-B8B-S-lq.js"></script>
|
|
25
25
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-COnpUsM8.js">
|
|
26
26
|
<link rel="modulepreload" crossorigin href="/assets/vendor-charts-95ykyDlI.js">
|
|
27
27
|
<link rel="modulepreload" crossorigin href="/assets/chunk-OE4NN4TA-DBWZidbW.js">
|
|
28
|
-
<link rel="modulepreload" crossorigin href="/assets/api-
|
|
28
|
+
<link rel="modulepreload" crossorigin href="/assets/api-GfuYYI6q.js">
|
|
29
29
|
<link rel="modulepreload" crossorigin href="/assets/vendor-ui-D8j69UH4.js">
|
|
30
|
-
<link rel="modulepreload" crossorigin href="/assets/useQuery-
|
|
30
|
+
<link rel="modulepreload" crossorigin href="/assets/useQuery-BfWNkVkT.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assets/utils-XFKvwlFT.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/format-Bx7DF-TB.js">
|
|
33
33
|
<link rel="modulepreload" crossorigin href="/assets/proxy-CWZabK8f.js">
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
<link rel="modulepreload" crossorigin href="/assets/server-BVem_egD.js">
|
|
37
37
|
<link rel="modulepreload" crossorigin href="/assets/chevron-down-x70Pto6j.js">
|
|
38
38
|
<link rel="modulepreload" crossorigin href="/assets/circle-x-6JtFdy1_.js">
|
|
39
|
-
<link rel="modulepreload" crossorigin href="/assets/integration-api-
|
|
39
|
+
<link rel="modulepreload" crossorigin href="/assets/integration-api-B5s7_LWo.js">
|
|
40
40
|
<link rel="modulepreload" crossorigin href="/assets/check-B-yvIfMj.js">
|
|
41
41
|
<link rel="modulepreload" crossorigin href="/assets/dialog-B5PqrKVw.js">
|
|
42
42
|
<link rel="modulepreload" crossorigin href="/assets/tooltip-B3vOB1Vu.js">
|
|
@@ -52,45 +52,45 @@
|
|
|
52
52
|
<link rel="modulepreload" crossorigin href="/assets/label-2sIXTEUK.js">
|
|
53
53
|
<link rel="modulepreload" crossorigin href="/assets/select-BWlrSYlA.js">
|
|
54
54
|
<link rel="modulepreload" crossorigin href="/assets/tabs-Ch_VG8_S.js">
|
|
55
|
-
<link rel="modulepreload" crossorigin href="/assets/get-error-message-
|
|
55
|
+
<link rel="modulepreload" crossorigin href="/assets/get-error-message-DJGhcwLn.js">
|
|
56
56
|
<link rel="modulepreload" crossorigin href="/assets/integration-targets-Byvdd3Or.js">
|
|
57
|
-
<link rel="modulepreload" crossorigin href="/assets/integrations-
|
|
57
|
+
<link rel="modulepreload" crossorigin href="/assets/integrations-Bg7xzjIj.js">
|
|
58
58
|
<link rel="modulepreload" crossorigin href="/assets/vendor-table-BQAIXM34.js">
|
|
59
59
|
<link rel="modulepreload" crossorigin href="/assets/dropdown-menu-B_MMNbTy.js">
|
|
60
60
|
<link rel="modulepreload" crossorigin href="/assets/chevron-right-CrNKVFcI.js">
|
|
61
61
|
<link rel="modulepreload" crossorigin href="/assets/download-i8CTJ7oi.js">
|
|
62
62
|
<link rel="modulepreload" crossorigin href="/assets/auth-screen-backdrop-CEykEbfF.js">
|
|
63
63
|
<link rel="modulepreload" crossorigin href="/assets/combobox-B8h0-NHs.js">
|
|
64
|
-
<link rel="modulepreload" crossorigin href="/assets/tags-
|
|
65
|
-
<link rel="modulepreload" crossorigin href="/assets/registry-
|
|
64
|
+
<link rel="modulepreload" crossorigin href="/assets/tags-r7Fx_0yG.js">
|
|
65
|
+
<link rel="modulepreload" crossorigin href="/assets/registry-BqqyCPJz.js">
|
|
66
66
|
<link rel="modulepreload" crossorigin href="/assets/runtime-link-BRnaEnOm.js">
|
|
67
|
-
<link rel="modulepreload" crossorigin href="/assets/use-engine-command-mutation-
|
|
68
|
-
<link rel="modulepreload" crossorigin href="/assets/export-tab-
|
|
67
|
+
<link rel="modulepreload" crossorigin href="/assets/use-engine-command-mutation-CTbPh58S.js">
|
|
68
|
+
<link rel="modulepreload" crossorigin href="/assets/export-tab-R8Oac9J5.js">
|
|
69
69
|
<link rel="modulepreload" crossorigin href="/assets/shallow-Cin0mLuv.js">
|
|
70
70
|
<link rel="modulepreload" crossorigin href="/assets/arrow-up-right-CwPw_2U1.js">
|
|
71
|
-
<link rel="modulepreload" crossorigin href="/assets/console-panel-
|
|
72
|
-
<link rel="modulepreload" crossorigin href="/assets/validation-
|
|
73
|
-
<link rel="modulepreload" crossorigin href="/assets/asset-detail-actions-
|
|
74
|
-
<link rel="modulepreload" crossorigin href="/assets/status-kit-
|
|
75
|
-
<link rel="modulepreload" crossorigin href="/assets/catalog-template-icons-
|
|
71
|
+
<link rel="modulepreload" crossorigin href="/assets/console-panel-DOt0r_Oz.js">
|
|
72
|
+
<link rel="modulepreload" crossorigin href="/assets/validation-DSsZ8qyt.js">
|
|
73
|
+
<link rel="modulepreload" crossorigin href="/assets/asset-detail-actions-Ceb1_r18.js">
|
|
74
|
+
<link rel="modulepreload" crossorigin href="/assets/status-kit-Darp7bPB.js">
|
|
75
|
+
<link rel="modulepreload" crossorigin href="/assets/catalog-template-icons-DvKspieo.js">
|
|
76
76
|
<link rel="modulepreload" crossorigin href="/assets/radio-BxpVYiyS.js">
|
|
77
|
-
<link rel="modulepreload" crossorigin href="/assets/use-transition-navigate-
|
|
78
|
-
<link rel="modulepreload" crossorigin href="/assets/transition-nav-link-
|
|
79
|
-
<link rel="modulepreload" crossorigin href="/assets/protocol-card-
|
|
77
|
+
<link rel="modulepreload" crossorigin href="/assets/use-transition-navigate-aOjMH_eS.js">
|
|
78
|
+
<link rel="modulepreload" crossorigin href="/assets/transition-nav-link-DIx78Lol.js">
|
|
79
|
+
<link rel="modulepreload" crossorigin href="/assets/protocol-card-1DCkgN_l.js">
|
|
80
80
|
<link rel="modulepreload" crossorigin href="/assets/rocket-KZ5oHK1G.js">
|
|
81
81
|
<link rel="modulepreload" crossorigin href="/assets/checkbox-DEAkDfFr.js">
|
|
82
82
|
<link rel="modulepreload" crossorigin href="/assets/select-display-items-DN2G8DNG.js">
|
|
83
83
|
<link rel="modulepreload" crossorigin href="/assets/transition-types-BKZuWApE.js">
|
|
84
|
-
<link rel="modulepreload" crossorigin href="/assets/factory-
|
|
84
|
+
<link rel="modulepreload" crossorigin href="/assets/factory-BYX8AmsW.js">
|
|
85
85
|
<link rel="modulepreload" crossorigin href="/assets/minus-CaT9UaQx.js">
|
|
86
86
|
<link rel="modulepreload" crossorigin href="/assets/catalog-source-B4L5N-a1.js">
|
|
87
|
-
<link rel="modulepreload" crossorigin href="/assets/models-
|
|
87
|
+
<link rel="modulepreload" crossorigin href="/assets/models-BYr_QK_5.js">
|
|
88
88
|
<link rel="modulepreload" crossorigin href="/assets/sliders-horizontal-BNKmYQgd.js">
|
|
89
|
-
<link rel="modulepreload" crossorigin href="/assets/catalog-
|
|
89
|
+
<link rel="modulepreload" crossorigin href="/assets/catalog-Lt1tguKF.js">
|
|
90
90
|
<link rel="modulepreload" crossorigin href="/assets/pause-CqW7v5Dc.js">
|
|
91
|
-
<link rel="modulepreload" crossorigin href="/assets/control-
|
|
91
|
+
<link rel="modulepreload" crossorigin href="/assets/control-89sOxkPx.js">
|
|
92
92
|
<link rel="modulepreload" crossorigin href="/assets/events-format-C5HTkIsC.js">
|
|
93
|
-
<link rel="modulepreload" crossorigin href="/assets/events-
|
|
93
|
+
<link rel="modulepreload" crossorigin href="/assets/events-NZs3OoQw.js">
|
|
94
94
|
<link rel="stylesheet" crossorigin href="/assets/index-CrLa65Ur.css">
|
|
95
95
|
</head>
|
|
96
96
|
<body>
|
package/miravo
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
[diffend] Oversized file quarantined before diffing.
|
|
2
2
|
name: package/miravo
|
|
3
|
-
size:
|
|
4
|
-
sha256:
|
|
3
|
+
size: 105650304 bytes
|
|
4
|
+
sha256: dd46abcada0e7b9930c007f24bafaa7afa735ea388ac25992c8c30aad84f6989
|