@owox/web 0.36.0 → 0.37.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/dist/assets/ModelCanvas-By1wBUBL.js +2 -0
- package/dist/assets/RelationshipCanvas-HaHLbPRS.js +1 -0
- package/dist/assets/erd-fields-section-CDkC1Pzu.js +12 -0
- package/dist/assets/index-DPgXWGfA.css +1 -0
- package/dist/assets/{index-D5dI1sj2.js → index-Dr0TbJRt.js} +7 -7
- package/dist/assets/index-IRYqNEd8.js +1758 -0
- package/dist/assets/lucide-icon-catalog-BIDsv2NX.js +6591 -0
- package/dist/assets/pencil-line-BP_bhkzs.js +6 -0
- package/dist/assets/zoom-out-CcoidGXK.js +16 -0
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/dist/assets/ModelCanvas-BIPDBSA2.js +0 -12
- package/dist/assets/RelationshipCanvas-BoamwL_P.js +0 -1
- package/dist/assets/erd-fields-section-BDlFV3FN.js +0 -27
- package/dist/assets/index-C5zthIAZ.css +0 -1
- package/dist/assets/index-DbpdnvsV.js +0 -1757
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-Dr0TbJRt.js","assets/index-IRYqNEd8.js","assets/index-DPgXWGfA.css","assets/erd-fields-section-CDkC1Pzu.js","assets/erd-fields-section-BnuhLJ6X.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{t as Ee,D as De,r as o,j as n,A as Et,k as vt,l as jt,S as Dt,m as pe,P as St,n as yt,o as fe,p as Nt,q as Rt,s as _t,L as It,v as Lt,w as Ot,T as Se,a as ye,R as Tt,H as At,b as Ne,x as kt,y as Pt,z as Mt,I as Ft,E as $t,F as Ht,U as Ut,G as Bt,J as Gt,K as Qt,O as Vt,Q as Wt,V as A,W as zt,X as Jt,Y as Kt,_ as qt,Z as qe,$ as he,c as ge}from"./index-IRYqNEd8.js";import{A as Zt,F as Yt,p as Xt,s as en,t as tn,W as nn,m as ve,q as sn,B as an,D as Ze,v as rn,w as on,x as ln,y as cn,u as dn,P as ae,l as me,H as Me,S as Fe,E as $e,N as un,R as pn,b as fn,c as xe,d as hn,e as He,n as gn,r as mn,f as Ue,G as xn,I as bn,h as Cn,C as wn,i as En,M as vn,j as jn,o as Dn}from"./erd-fields-section-CDkC1Pzu.js";import{P as Sn}from"./pencil-line-BP_bhkzs.js";import{L as yn,Z as Nn,a as Rn}from"./zoom-out-CcoidGXK.js";const _n=[{part:"source",label:"Input source",helper:"View, Table, SQL, Pattern or Connector"},{part:"fields",label:"Fields",helper:"Number of fields in the Output Schema"},{part:"triggers",label:"Triggers",helper:"Scheduled triggers of the Data Mart"},{part:"reports",label:"Reports",helper:"Reports built on the Data Mart"},{part:"relationships",label:"Relationships",helper:"Joins with other Data Marts"},{part:"status",label:"Draft badge",helper:"Shown on Data Marts not yet published"},{part:"footer",label:"Quality and sharing",helper:"Data Quality, Data Last Updated and sharing icons"},{part:"fieldAlias",label:"Field aliases",helper:"Output Schema alias in place of the name"},{part:"fieldDescription",label:"Field descriptions",helper:"Output Schema description under each field"}],In=(t,e)=>[t,e].sort().join("->"),Ln=56;function On(t,e=Ln){const i=new Map;for(const r of t){if(r.sourceId===r.targetId)continue;const l=In(r.sourceId,r.targetId),g=i.get(l);g?g.push(r):i.set(l,[r])}const a=new Map;for(const r of t)r.sourceId===r.targetId&&a.set(r.id,0);for(const r of i.values()){const l=[...r].sort((m,C)=>m.id.localeCompare(C.id)),g=l.length;l.forEach((m,C)=>{a.set(m.id,(C-(g-1)/2)*e)})}return a}const Tn=11,An=6.5;let be,Ce;const Be=new Map;function kn(){return be===void 0&&(be=typeof document>"u"?null:document.createElement("canvas").getContext("2d")),be}function le(t){const e=Be.get(t);if(e!==void 0)return e;const i=kn();let a;return i?(Ce??(Ce=`${String(Tn)}px ${getComputedStyle(document.body).fontFamily||"sans-serif"}`),i.font=Ce,a=i.measureText(t).width):a=t.length*An,Be.set(t,a),a}const Pn=40,Mn=12,Fn=28,$n=24,Hn=42,Un=240,Bn=256;function ce(t){return t==="erd"?Bn:Un}function je(t){return{sourceHidden:t.source,fieldCountHidden:t.fields,triggersHidden:t.triggers,reportsHidden:t.reports,relationshipsHidden:t.relationships,footerHidden:t.footer,fieldLabels:Ee(t)}}function Ye(t,{sourceHidden:e=!1,fieldCountHidden:i=!1,triggersHidden:a=!1,reportsHidden:r=!1,relationshipsHidden:l=!1}={}){return{definition:!e&&!!t.definitionType&&De.getInfo(t.definitionType).type!==null,fieldCount:!i&&t.fieldCount>0,triggers:!a&&(t.triggersCount??0)>0,reports:!r&&(t.reportsCount??0)>0,relationships:!l&&(t.relationshipCount??0)>0}}function re(t,e){return`${String(t)} ${e}${t===1?"":"s"}`}function Gn(t,e){const i=[];return e.definition&&t.definitionType&&i.push({kind:"definition",label:De.getInfo(t.definitionType).displayName}),e.fieldCount&&i.push({kind:"fields",label:re(t.fieldCount,"field")}),e.triggers&&i.push({kind:"triggers",label:re(t.triggersCount??0,"trigger")}),e.reports&&i.push({kind:"reports",label:re(t.reportsCount??0,"report")}),e.relationships&&i.push({kind:"relationships",label:re(t.relationshipCount??0,"relationship")}),i}const Qn=26,Vn=28,Ge=4,Wn=2;function zn(t,e,i=le){const a=ce(e)-Qn,r=[];let l=0;for(const g of t){const m=Math.ceil(i(g.label))+Vn+Wn,C=r.at(-1);C&&l+Ge+m<=a?(C.push(g),l+=Ge+m):(r.push([g]),l=m)}return r}function Xe(t,e,i={},a=le){return zn(Gn(t,Ye(t,i)),e,a)}function Jn(t,e,i={},a=le){return Xe(t,e,i,a).length}function Kn(t,e,i,a){const r=Jn(t,e,i,a),l=r===0?0:Fn+(r-1)*$n,g=i.footerHidden?Mn:Hn;return Pn+l+g}function et(t,e,i={},a=le){const r=Kn(t,e,i,a);if(e!=="erd")return r;const l=t.fields??[];return l.length===0?r:r+Zt(l,i.fieldLabels??Yt)}function qn(t,e,i,a,r,l){let g,m,C,j;if(l==="vertical"){const x=Math.max(40,Math.abs(a-e)*.3);g=t+r,m=e+x,C=i+r,j=a-x}else{const x=Math.max(40,Math.abs(i-t)*.3);g=t+x,m=e+r,C=i-x,j=a+r}return{path:`M ${t} ${e} C ${g} ${m}, ${C} ${j}, ${i} ${a}`,labelX:(t+3*g+3*C+i)/8,labelY:(e+3*m+3*j+a)/8}}function Zn({id:t,sourceX:e,sourceY:i,targetX:a,targetY:r,sourcePosition:l,targetPosition:g,selected:m,data:C}){const{bowOffset:j,warning:x,joinLabel:b,dimmed:w,direction:v,bidirectional:k}=C;let D;if(j!==0)D=qn(e,i,a,r,j,v);else{const[N,_,I]=Xt({sourceX:e,sourceY:i,sourcePosition:l,targetX:a,targetY:r,targetPosition:g});D={path:N,labelX:_,labelY:I}}const S=x?nn:m?ve:sn,O=o.useId(),y=en("mc-arrow",O);return n.jsxs(n.Fragment,{children:[n.jsx(tn,{markerId:y,color:S,withStart:k}),n.jsx(an,{id:t,path:D.path,markerEnd:`url(#${y}-end)`,markerStart:k?`url(#${y}-start)`:void 0,style:{stroke:S,strokeWidth:m?on:ln,strokeDasharray:x?rn:void 0,opacity:w?Ze:1,transition:"opacity 0.2s, stroke 0.2s"}}),n.jsx(cn,{x:D.labelX,y:D.labelY,lines:b,selected:m??!1,dimmed:w})]})}function Yn({dataMartTitle:t,relationships:e}){return n.jsx("ul",{className:"border-t","aria-label":`Relationships of ${t}`,children:e.map(i=>{const a=i.direction==="outgoing",r=a?Et:vt,l=a?"Joins":"Joined by";return n.jsxs("li",{className:"border-border/50 border-b px-3.5 py-1.5 text-[11.5px] last:border-b-0",children:[n.jsxs("div",{className:"flex items-center gap-2",title:`${l} ${i.otherTitle}`,children:[n.jsx(r,{className:"text-muted-foreground h-3 w-3 shrink-0","aria-label":l}),n.jsx("span",{className:"text-foreground flex-1 truncate",children:i.otherTitle})]}),i.joinFields.length>0?i.joinFields.map(({field:g,otherField:m})=>n.jsxs("div",{className:"text-muted-foreground truncate pl-5 font-mono text-[10px] leading-[14px]",title:`${g} = ${m}`,children:[g," = ",m]},`${g}=${m}`)):n.jsx("div",{className:"text-muted-foreground/80 pl-5 text-[10.5px] leading-[14px] italic",children:"Join fields not set"})]},`${i.id}:${i.direction}`)})})}const Xn={availableForReporting:{label:"Shared for reporting",description:"All project members can see this Data Mart and build reports on it"},availableForMaintenance:{label:"Shared for maintenance",description:"Members with the Data Owner role can edit, delete, and manage triggers for this Data Mart"}},ei=100,ti=200;function Z(t,e){return`${t} ${e}${t===1?"":"s"}`}function ni({dataMartTitle:t,summary:e,onOpenQuality:i,onRunQuality:a}){const[r,l]=o.useState(!1),[g,m]=o.useState(!1),C=o.useRef(null),j=o.useRef(null),x=o.useRef(null),b=o.useRef(null),w=o.useRef(null),v=o.useRef(!1),k=o.useRef(!1),D=o.useRef(!1),S=jt(e),O=S.icon,y=[{count:e.errorChecks,singular:"execution error",tone:"error",icon:Dt},{count:e.errorFindings,singular:"critical finding",tone:"error",icon:pe},{count:e.warningFindings,singular:"warning finding",tone:"warning",icon:pe},{count:e.noticeFindings,singular:"notice finding",tone:"notice",icon:pe}].filter(p=>p.count>0),N=(e.state==="ISSUES"||e.state==="EXECUTION_FAILED")&&y.length>0,_=y.map(p=>Z(p.count,p.singular)).join(", "),I=`Open Data Quality for ${t}: ${S.label}${N?`, ${_}`:""}`,R=S.isActive,W=e.state==="QUEUED"?"Queued":e.state==="RUNNING"?"Started":"Last checked";function $(){b.current!==null&&(clearTimeout(b.current),b.current=null)}function G(){w.current!==null&&(clearTimeout(w.current),w.current=null)}function M(){$(),G()}function z(){G(),!(r||v.current||b.current!==null)&&(b.current=setTimeout(()=>{b.current=null,!v.current&&l(!0)},ei))}function L(){$(),!(!r||v.current||w.current!==null)&&(w.current=setTimeout(()=>{w.current=null,!v.current&&l(!1)},ti))}function u(p){if(p.stopPropagation(),p.preventDefault(),M(),v.current&&r){v.current=!1,l(!1);return}v.current=!0,l(!0),p.detail===0&&queueMicrotask(()=>{var P;(P=x.current)==null||P.focus()})}function F(p){if(M(),p){v.current=!0,l(!0);return}v.current=!1,l(!1)}function Y(p){p.stopPropagation(),p.preventDefault(),i()}async function te(p){if(p.stopPropagation(),p.preventDefault(),!(R||g)){m(!0);try{await a()}finally{m(!1)}}}return o.useEffect(()=>()=>{b.current!==null&&clearTimeout(b.current),w.current!==null&&clearTimeout(w.current)},[]),o.useEffect(()=>{if(!r)return;function p(P){var H,J;const T=P.target;T instanceof Node&&((H=C.current)!=null&&H.contains(T)||(J=j.current)!=null&&J.contains(T)||(b.current!==null&&(clearTimeout(b.current),b.current=null),w.current!==null&&(clearTimeout(w.current),w.current=null),v.current=!1,l(!1)))}return document.addEventListener("pointerdown",p,!0),()=>{document.removeEventListener("pointerdown",p,!0)}},[r]),n.jsxs(St,{open:r,onOpenChange:F,children:[n.jsx(yt,{asChild:!0,children:n.jsx("button",{ref:C,type:"button",className:`${N?"":fe[S.tone]} -ml-0.5 inline-flex shrink-0 cursor-pointer items-center rounded p-0.5 transition-colors ${N?"gap-1.5":""}`,"aria-label":I,onPointerDown:p=>{p.stopPropagation()},onPointerEnter:()=>{z()},onPointerLeave:()=>{L()},onFocus:()=>{if(D.current){D.current=!1;return}z()},onBlur:()=>{L()},onClick:u,children:N?y.map(p=>{const P=Z(p.count,p.singular),T=p.icon;return n.jsxs("span",{role:"img","aria-label":P,className:`${fe[p.tone]} inline-flex items-center gap-0.5`,children:[n.jsx(T,{className:"size-4","aria-hidden":!0}),n.jsx("span",{className:"leading-none font-medium tabular-nums",children:p.count})]},p.singular)}):n.jsx(O,{className:`size-4 ${e.state==="RUNNING"?"animate-spin":""}`,"aria-hidden":!0})})}),n.jsxs(Nt,{ref:j,side:"top",align:"center",role:"region","aria-label":`Data Quality checks for ${t}`,className:"w-72 max-w-72 p-3 text-xs sm:w-72 sm:max-w-72",onOpenAutoFocus:p=>{p.preventDefault()},onCloseAutoFocus:p=>{var P;p.preventDefault(),k.current&&(k.current=!1,D.current=!0,(P=C.current)==null||P.focus({preventScroll:!0}),queueMicrotask(()=>{D.current=!1}))},onEscapeKeyDown:()=>{k.current=!0},onPointerEnter:()=>{G()},onPointerLeave:()=>{L()},onPointerDown:p=>{p.stopPropagation()},children:[n.jsxs("div",{className:"border-border flex items-center justify-between gap-3 border-b pb-2",children:[n.jsx(Rt,{className:"text-sm font-semibold whitespace-nowrap",children:"Data Quality checks"}),n.jsx("span",{className:`${fe[S.tone]} shrink-0 font-medium whitespace-nowrap`,children:S.label})]}),n.jsxs("div",{className:"text-muted-foreground space-y-1 py-2",children:[e.enabledChecks>0&&n.jsxs("p",{children:[e.enabledChecks," enabled"]}),R?n.jsx("p",{children:"Terminal results will be available after this run finishes."}):n.jsxs(n.Fragment,{children:[e.passedChecks>0&&n.jsxs("p",{children:[e.passedChecks," passed"]}),e.notApplicableChecks>0&&n.jsxs("p",{children:[e.notApplicableChecks," not applicable"]}),e.errorChecks>0&&n.jsx("p",{children:Z(e.errorChecks,"execution error")}),e.errorFindings>0&&n.jsx("p",{children:Z(e.errorFindings,"critical finding")}),e.warningFindings>0&&n.jsx("p",{children:Z(e.warningFindings,"warning finding")}),e.noticeFindings>0&&n.jsx("p",{children:Z(e.noticeFindings,"notice finding")})]}),e.lastRunAt&&n.jsx("p",{className:"text-foreground pt-2 pb-1 font-medium",children:`${W} ${_t(e.lastRunAt)}`})]}),n.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[n.jsx("button",{ref:x,type:"button",className:"border-input bg-background hover:bg-muted inline-flex cursor-pointer items-center justify-center rounded-md border px-3 py-1.5 font-medium transition-colors","aria-label":`Open Data Quality page for ${t}`,onPointerDown:p=>{p.stopPropagation()},onClick:Y,children:"Open"}),n.jsxs("button",{type:"button",className:"bg-primary text-primary-foreground hover:bg-primary/90 inline-flex cursor-pointer items-center justify-center gap-1.5 rounded-md px-3 py-1.5 font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50","aria-label":`Run Quality for ${t}`,title:R?"A Data Quality run is already active":void 0,disabled:R||g,onPointerDown:p=>{p.stopPropagation()},onClick:p=>{te(p)},children:[g?n.jsx(It,{className:"size-3.5 animate-spin","aria-hidden":"true"}):n.jsx(Lt,{className:"size-3.5","aria-hidden":"true"}),g?"Starting…":"Run checks"]})]})]})]})}function ii({dataMartTitle:t,block:e,isChecking:i=!1}){const a=i?"checking…":Ot(e);return n.jsxs(Se,{children:[n.jsx(ye,{asChild:!0,children:n.jsx("button",{type:"button",className:`nodrag inline-flex cursor-default items-center rounded p-0.5 transition-colors ${i||e!=null&&e.dataLastUpdatedAt?"text-muted-foreground hover:text-foreground":"text-muted-foreground/50 hover:text-muted-foreground"}`,"aria-label":`Data Last Updated for ${t}: ${a}`,onPointerDown:r=>{r.stopPropagation()},children:i?n.jsx(Tt,{className:"h-3.5 w-3.5 animate-spin","aria-hidden":"true"}):n.jsx(At,{className:"h-3.5 w-3.5","aria-hidden":"true"})})}),n.jsx(Ne,{side:"top",align:"start",role:"tooltip",className:"max-w-xs",children:i?n.jsx("div",{className:"text-xs",children:"Checking Data Last Updated…"}):e?n.jsx(kt,{block:e}):n.jsx("div",{className:"text-xs",children:"Data Last Updated has not been checked yet. Use Actions → Check Data Last Updated to measure the visible Data Marts."})})]})}const si={fields:Vt,triggers:Qt,reports:Gt,relationships:Bt};function we({icon:t,children:e,toggle:i}){const a="inline-flex h-5 shrink-0 items-center gap-1 rounded-md px-1.5 text-[11px] leading-none whitespace-nowrap",r=n.jsxs(n.Fragment,{children:[n.jsx("span",{className:"inline-flex shrink-0","aria-hidden":"true",children:n.jsx(t,{className:"h-3 w-3"})}),e]});return i?n.jsx("button",{type:"button",className:`nodrag cursor-pointer transition-colors ${a} ${i.expanded?"bg-foreground/10 text-foreground":"bg-muted text-muted-foreground hover:text-foreground hover:bg-foreground/10"}`,"aria-expanded":i.expanded,"aria-label":i.label,title:i.label,onPointerDown:l=>{l.stopPropagation()},onClick:l=>{l.stopPropagation(),i.onToggle()},children:r}):n.jsx("span",{className:`bg-muted text-muted-foreground ${a}`,children:r})}function Qe({icon:t,flag:e,on:i}){if(!i)return null;const{label:a,description:r}=Xn[e];return n.jsxs(Se,{children:[n.jsx(ye,{asChild:!0,children:n.jsx("button",{type:"button",className:"hover:text-foreground nodrag inline-flex cursor-default rounded p-0.5 transition-colors","aria-label":a,onPointerDown:l=>{l.stopPropagation()},children:n.jsx(t,{className:"h-3.5 w-3.5","aria-hidden":"true"})})}),n.jsxs(Ne,{side:"top",align:"end",role:"tooltip",className:"max-w-xs",children:[n.jsx("div",{className:"text-xs font-medium",children:a}),n.jsx("div",{className:"text-xs opacity-80",children:r})]})]})}function ai({id:t,data:e,selected:i}){const[a,r]=o.useState(!1),[l,g]=o.useState(null),m=dn();o.useEffect(()=>{m(t)},[a,l,t,m]);const C=e.viewMode==="erd",j=e.fields,x=C&&j.length>0,b=e.objectLabels??Pt,w=Ye(e,je(b)),v=w.definition&&e.definitionType?De.getInfo(e.definitionType):null,k=!b.status&&e.isDraft,D=Xe(e,e.viewMode,je(b)),S=!C&&j.length>0&&w.fieldCount,O=e.relationships.length>0&&w.relationships,y=l==="fields"&&S,N=l==="relationships"&&O,_=y||N||x&&a,I=o.useRef(e.onRaisedChange);I.current=e.onRaisedChange,o.useEffect(()=>{var u;(u=I.current)==null||u.call(I,_)},[_]),o.useEffect(()=>()=>{var u;(u=I.current)==null||u.call(I,!1)},[]);const R=u=>{g(F=>F===u?null:u)},W=!b.footer,$=e.direction==="vertical"?ae.Top:ae.Left,G=e.direction==="vertical"?ae.Bottom:ae.Right,M=`Open ${e.title} in new tab`;function z(u){if(u.kind==="definition")return v?n.jsx(we,{icon:v.icon,children:u.label},u.kind):null;const F=u.kind==="fields"&&S?{expanded:y,label:`${y?"Hide":"Show"} fields of ${e.title}`,onToggle:()=>{R("fields")}}:u.kind==="relationships"&&O?{expanded:N,label:`${N?"Hide":"Show"} relationships of ${e.title}`,onToggle:()=>{R("relationships")}}:void 0;return n.jsx(we,{icon:si[u.kind],toggle:F,children:u.label},u.kind)}function L(u){u.stopPropagation(),u.preventDefault(),e.onOpenExternal()}return n.jsxs("div",{className:"bg-background relative flex cursor-grab flex-col overflow-hidden rounded-xl border shadow-sm active:cursor-grabbing",style:{width:ce(e.viewMode),borderColor:e.highlighted?me:i?ve:void 0,boxShadow:e.highlighted?`0 0 0 3px ${me}40, 0 0 12px ${me}60`:i?`0 0 0 1px ${ve}`:void 0,opacity:e.dimmed?Ze:1,filter:e.dimmed?"grayscale(0.8)":void 0,animation:e.highlighted?"node-pulse 1.5s ease-in-out infinite":void 0,transition:"opacity 0.2s, filter 0.2s"},children:[e.hasIncoming&&n.jsx(Me,{type:"target",position:$,isConnectable:!1,style:Fe}),n.jsxs("div",{className:"flex items-center gap-2 pt-3 pr-3 pl-3",children:[n.jsx("span",{className:"bg-muted text-foreground flex h-7 w-7 shrink-0 items-center justify-center rounded-md","aria-hidden":"true",children:n.jsx(Mt,{icon:e.icon,className:"h-4 w-4"})}),n.jsx("span",{className:"text-foreground min-w-0 flex-1 truncate text-sm font-semibold",title:e.title,children:e.title}),k&&n.jsx(we,{icon:Sn,children:"Draft"}),e.description&&n.jsxs(Se,{children:[n.jsx(ye,{asChild:!0,children:n.jsx("button",{type:"button",className:"text-muted-foreground hover:text-foreground nodrag inline-flex shrink-0 cursor-default rounded p-0.5 transition-colors","aria-label":`Description for ${e.title}`,onPointerDown:u=>{u.stopPropagation()},children:n.jsx(Ft,{className:"h-3.5 w-3.5","aria-hidden":"true"})})}),n.jsx(Ne,{side:"top",align:"center",role:"tooltip",className:"max-w-xs",children:e.description})]}),n.jsx("button",{type:"button",className:"text-muted-foreground hover:text-foreground nodrag shrink-0 cursor-pointer rounded p-0.5 transition-colors",onPointerDown:u=>{u.stopPropagation()},onClick:L,title:M,"aria-label":M,children:n.jsx($t,{className:"h-3.5 w-3.5","aria-hidden":"true"})})]}),D.map((u,F)=>n.jsx("div",{className:`flex items-center gap-1 overflow-hidden pr-3 pl-3 ${F===0?"pt-2":"pt-1"}`,children:u.map(z)},u.map(Y=>Y.kind).join("+"))),!W&&n.jsx("div",{className:"h-3","aria-hidden":"true"}),W&&n.jsx(n.Fragment,{children:n.jsxs("div",{className:"text-muted-foreground flex items-center gap-1 pt-2.5 pr-3 pb-3 pl-3 text-[11px]",children:[n.jsx(ni,{dataMartTitle:e.title,summary:e.qualitySummary,onOpenQuality:e.onOpenQuality,onRunQuality:e.onRunQuality}),n.jsx(ii,{dataMartTitle:e.title,block:e.dataLastUpdated,isChecking:e.isCheckingDataLastUpdated}),n.jsxs("span",{className:"ml-auto flex items-center gap-1",children:[n.jsx(Qe,{icon:Ht,flag:"availableForReporting",on:e.availableForReporting}),n.jsx(Qe,{icon:Ut,flag:"availableForMaintenance",on:e.availableForMaintenance})]})]})}),N&&n.jsx(Yn,{dataMartTitle:e.title,relationships:e.relationships}),y&&n.jsx($e,{fields:j,labels:Ee(b),expanded:a,onToggleExpanded:()=>{r(u=>!u)}}),x&&n.jsx($e,{fields:j,labels:Ee(b),expanded:a,onToggleExpanded:()=>{r(u=>!u)}}),e.hasOutgoing&&n.jsx(Me,{type:"source",position:G,isConnectable:!1,style:Fe})]})}const Ve="model-canvas-layout",We="model-canvas-show-join-fields",ze="model-canvas-view-mode",Je="model-canvas-object-labels",ri="model-canvas-positions";function oe(t){return`${ri}:${t}`}function oi(t){if(!t)return{};const e=A.get(oe(t),"json");if(!e)return{};const i={};for(const[a,r]of Object.entries(e)){const l=r;l&&typeof l.x=="number"&&typeof l.y=="number"&&(i[a]={x:l.x,y:l.y})}return i}const ee=.2,li=1e3,ci=150,di={modelCanvasNode:ai},ui={modelCanvasEdge:Zn};function pi(t){return JSON.stringify(t.map(({id:e,title:i,status:a,description:r,fieldCount:l,definitionType:g,fields:m,triggersCount:C,reportsCount:j,relationshipCount:x,relationships:b,availableForReporting:w,availableForMaintenance:v})=>({id:e,title:i,status:a,description:r,fieldCount:l,definitionType:g,fields:m,triggersCount:C,reportsCount:j,relationshipCount:x,relationships:b,availableForReporting:w,availableForMaintenance:v})))}function fi(t){return JSON.stringify(t)}function Ke(t,e){const i=e(t),a=o.useRef({signature:i,value:t});return a.current.signature!==i&&(a.current={signature:i,value:t}),a.current.value}function hi(t){const{node:e,highlight:i,viewMode:a,objectLabels:r}=t;return{id:e.id,type:"modelCanvasNode",position:t.position,width:ce(a),height:et(e,a,t.layout),draggable:!0,selectable:!1,focusable:!1,deletable:!1,style:Dn,data:{title:e.title,isDraft:e.status===qe.DRAFT,fieldCount:e.fieldCount,triggersCount:e.triggersCount,reportsCount:e.reportsCount,relationshipCount:e.relationshipCount??0,relationships:e.relationships??[],availableForReporting:e.availableForReporting,availableForMaintenance:e.availableForMaintenance,description:e.description,icon:e.icon??null,definitionType:e.definitionType??null,fields:e.fields??[],viewMode:a,objectLabels:r,dataLastUpdated:e.dataLastUpdated,isCheckingDataLastUpdated:t.isCheckingDataLastUpdated,hasIncoming:t.hasIncoming,hasOutgoing:t.hasOutgoing,highlighted:i.highlighted,dimmed:i.dimmed,direction:t.direction,onOpenExternal:t.onOpenExternal,qualitySummary:e.qualitySummary,onOpenQuality:t.onOpenQuality,onRaisedChange:t.onRaisedChange,onRunQuality:t.onRunQuality}}}function gi(t){return t.joinConditions.map(e=>`${e.sourceFieldName} = ${e.targetFieldName}`)}function mi(t){const{edge:e,warning:i}=t;return{id:e.id,type:"modelCanvasEdge",source:e.sourceId,target:e.targetId,focusable:!1,selectable:!0,deletable:!1,data:{bowOffset:t.bowOffset,warning:i,joinLabel:t.joinLabel,dimmed:t.dimmed,direction:t.direction,bidirectional:e.bidirectional}}}function xi({nodes:t,edges:e,searchQuery:i,onOpenDataMart:a,onOpenQuality:r,onRunQuality:l,isCheckingDataLastUpdated:g=!1,storageId:m,storageTitle:C,exportApiRef:j}){const x=fn(),b=xe(c=>c.width),w=xe(c=>c.height),v=xe(c=>c.domNode),k=o.useRef(a);k.current=a;const D=o.useRef(r);D.current=r;const S=o.useRef(l);S.current=l;const O=o.useRef(t);O.current=t;const y=o.useRef(i);y.current=i;const N=o.useRef(g);N.current=g;const[_,I]=o.useState(()=>Wt(A.get(Ve))),[R,W]=o.useState(()=>zt(A.get(ze))),[$,G]=o.useState(()=>A.get(We,"boolean")??!1),[M,z]=o.useState(()=>Jt(A.get(Je))),L=o.useRef(null),u=o.useRef(m);(L.current===null||u.current!==m)&&(u.current=m,L.current=oi(m));const[F,Y]=o.useState(0),te=o.useRef(null),[p,P]=o.useState(!1),[T,H]=o.useState([]),[J,ne]=o.useState([]),[Re,tt]=o.useState(()=>new Set),_e=o.useCallback((c,f)=>{tt(d=>{if(d.has(c)===f)return d;const h=new Set(d);return f?h.add(c):h.delete(c),h})},[]),Ie=o.useMemo(()=>hn(T),[T]),Q=Ke(t,pi),U=Ke(e,fi);o.useImperativeHandle(j,()=>({exportCanvas:async c=>{await Kt(t.map(d=>d.icon));const{exportModelCanvas:f}=await qt(async()=>{const{exportModelCanvas:d}=await import("./index-Dr0TbJRt.js");return{exportModelCanvas:d}},__vite__mapDeps([0,1,2,3,4]));return f(c,{viewport:(v==null?void 0:v.querySelector(".react-flow__viewport"))??null,flowNodes:T,nodes:t,edges:e,storageTitle:C})}}),[v,T,t,e,C]),o.useEffect(()=>{const c=new Set(U.map(s=>s.targetId)),f=new Set(U.map(s=>s.sourceId)),d=new Map(Q.map(s=>[s.id,s.status===qe.DRAFT])),h=He(Q,y.current,s=>s.id,s=>s.title),E=je(M),q=Q.map(s=>({id:s.id,width:ce(R),height:et(s,R,E)})),B=$?new Map(U.map(s=>[s.id,gi(s)])):new Map,V=U.map(s=>({id:s.id,sourceId:s.sourceId,targetId:s.targetId,label:gn(B.get(s.id)??[])})),{positions:ie}=mn(q,V,_),gt=On(U),mt=new Set(Q.map(s=>s.id)),Le=Object.entries(L.current??{}),se=Object.fromEntries(Le.filter(([s])=>mt.has(s)));Le.length!==Object.keys(se).length&&(L.current=se,u.current&&A.set(oe(u.current),se));const xt=new Map(O.current.map(s=>[s.id,s.qualitySummary])),bt=new Map(O.current.map(s=>[s.id,s.dataLastUpdated])),Oe=new Map(O.current.map(s=>[s.id,s.icon]));H(Q.map(s=>hi({node:{...s,qualitySummary:xt.get(s.id)??s.qualitySummary,dataLastUpdated:bt.get(s.id)??s.dataLastUpdated,icon:Oe.has(s.id)?Oe.get(s.id):s.icon},position:se[s.id]??ie.get(s.id)??{x:0,y:0},hasIncoming:c.has(s.id),hasOutgoing:f.has(s.id),highlight:h.get(s.id)??Ue,direction:_,viewMode:R,objectLabels:M,layout:E,onOpenExternal:()=>{k.current(s.id)},onOpenQuality:()=>{D.current(s.id)},onRunQuality:()=>S.current(s.id),onRaisedChange:X=>{_e(s.id,X)},isCheckingDataLastUpdated:N.current}))),ne(U.map(s=>{var ke,Pe;const X=((ke=h.get(s.sourceId))==null?void 0:ke.dimmed)??!1,wt=((Pe=h.get(s.targetId))==null?void 0:Pe.dimmed)??!1;return mi({edge:s,joinLabel:B.get(s.id)??[],bowOffset:gt.get(s.id)??0,warning:s.joinNotConfigured||(d.get(s.sourceId)??!1)||(d.get(s.targetId)??!1),dimmed:X&&wt,direction:_})})),P(!0);const Te=[Q,U,_,F,R],ue=te.current;if(ue!=null&&ue.every((s,X)=>s===Te[X]))return;const Ae=[...h.entries()].filter(([,s])=>s.highlighted).map(([s])=>s),Ct=requestAnimationFrame(()=>{te.current=Te,x.fitView(Ae.length>0?{nodes:Ae.map(s=>({id:s})),duration:300,padding:ee}:{padding:ee,duration:300})});return()=>{cancelAnimationFrame(Ct)}},[Q,U,_,F,R,$,M,x,_e]);const nt=o.useCallback(c=>{H(f=>xn(c,f))},[]),it=o.useCallback(c=>{ne(f=>bn(c,f))},[]),[K,de]=o.useState(null),st=o.useCallback((c,f)=>{de(d=>d===f.id?null:f.id),ne(d=>d.some(h=>h.selected)?d.map(h=>h.selected?{...h,selected:!1}:h):d)},[]),at=o.useCallback(()=>{de(null)},[]),rt=o.useCallback(()=>{de(null)},[]),ot=o.useMemo(()=>T.map(c=>{const f=c.id===K,d=Re.has(c.id)?li:0;return!!c.selected===f&&(c.zIndex??0)===d?c:{...c,selected:f,zIndex:d}}),[T,K,Re]),lt=o.useMemo(()=>K?J.map(c=>c.source===K||c.target===K?{...c,selected:!0}:c):J,[J,K]),ct=o.useCallback((c,f)=>{const d=L.current??{};d[f.id]={x:f.position.x,y:f.position.y},L.current=d,u.current&&A.set(oe(u.current),d)},[]);o.useEffect(()=>{const c=new Map(t.map(h=>[h.id,h.qualitySummary])),f=new Map(t.map(h=>[h.id,h.dataLastUpdated])),d=new Map(t.map(h=>[h.id,h.icon??null]));H(h=>h.map(E=>{const q=c.get(E.id)??E.data.qualitySummary,B=f.has(E.id)?f.get(E.id)??null:E.data.dataLastUpdated,V=d.has(E.id)?d.get(E.id)??null:E.data.icon;return E.data.qualitySummary!==q||E.data.dataLastUpdated!==B||E.data.icon!==V?{...E,data:{...E.data,qualitySummary:q,dataLastUpdated:B,icon:V}}:E}))},[t]),o.useEffect(()=>{H(c=>c.map(f=>f.data.isCheckingDataLastUpdated===g?f:{...f,data:{...f.data,isCheckingDataLastUpdated:g}}))},[g]),o.useEffect(()=>{const c=He(O.current,i,d=>d.id,d=>d.title);H(d=>d.map(h=>{const E=c.get(h.id)??Ue;return h.data.highlighted===E.highlighted&&h.data.dimmed===E.dimmed?h:{...h,data:{...h.data,...E}}})),ne(d=>d.map(h=>{var V,ie;const E=((V=c.get(h.source))==null?void 0:V.dimmed)??!1,q=((ie=c.get(h.target))==null?void 0:ie.dimmed)??!1,B=E&&q;return h.data.dimmed===B?h:{...h,data:{...h.data,dimmed:B}}}));const f=[...c.entries()].filter(([,d])=>d.highlighted).map(([d])=>d);f.length>0&&x.fitView({nodes:f.map(d=>({id:d})),duration:300,padding:ee})},[i,x]);const dt=o.useCallback(c=>{I(c),A.set(Ve,c),L.current={},u.current&&A.remove(oe(u.current)),Y(f=>f+1)},[]),ut=o.useCallback(c=>{z(f=>he(f)===he(c)?f:(A.set(Je,he(c)),c))},[]),pt=o.useCallback(c=>{W(c),A.set(ze,c)},[]),ft=o.useCallback(c=>{G(c),A.set(We,c)},[]),ht=o.useCallback((c,f)=>{if(b===0||w===0)return;const d=Cn(f,Ie,b,w,ci);d.x===f.x&&d.y===f.y||x.setViewport(d)},[Ie,w,b,x]);return n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"absolute top-3 right-3 z-10 flex flex-col gap-1.5",children:[n.jsx(ge,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:()=>{x.fitView({padding:ee,duration:300})},"aria-label":"Fit to view",children:n.jsx(yn,{className:"h-6 w-6"})}),n.jsx(ge,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:()=>{x.zoomIn({duration:150})},"aria-label":"Zoom in",children:n.jsx(Nn,{className:"h-6 w-6"})}),n.jsx(ge,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:()=>{x.zoomOut({duration:150})},"aria-label":"Zoom out",children:n.jsx(Rn,{className:"h-6 w-6"})}),n.jsx(wn,{viewMode:R,onViewModeChange:pt,direction:_,onDirectionChange:dt,showJoinFields:$,onShowJoinFieldsChange:ft,objectLabels:M,onObjectLabelsChange:ut,objectLabelOptions:_n})]}),p&&n.jsx(En,{nodes:ot,edges:lt,nodeTypes:di,edgeTypes:ui,onNodesChange:nt,onEdgesChange:it,onNodeDragStop:ct,onNodeClick:st,onEdgeClick:rt,onPaneClick:at,deleteKeyCode:null,nodesDraggable:!0,nodesConnectable:!1,elementsSelectable:!0,edgesFocusable:!1,minZoom:.05,maxZoom:2,onMove:ht,fitView:!0,fitViewOptions:{padding:ee},proOptions:{hideAttribution:!0},style:{width:"100%",height:"100%"},children:n.jsx(vn,{pannable:!0,zoomable:!0,style:{width:140,height:100},nodeColor:jn})})]})}function vi({nodes:t,edges:e,searchQuery:i,onOpenDataMart:a,onOpenQuality:r,onRunQuality:l,isCheckingDataLastUpdated:g,storageId:m,storageTitle:C,exportApiRef:j,className:x,style:b}){return t.length===0?null:n.jsxs("div",{className:`relative overflow-hidden ${x??""}`,style:b??{height:480},children:[n.jsx("style",{children:un}),n.jsx(pn,{children:n.jsx(xi,{nodes:t,edges:e,searchQuery:i,onOpenDataMart:a,onOpenQuality:r,onRunQuality:l,isCheckingDataLastUpdated:g,storageId:m,storageTitle:C,exportApiRef:j})})]})}export{vi as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as s,D as Oe,u as _e,r,C as Ae,N as Me,T as Re,a as ve,I as ke,b as Pe,E as Te,B as Le,t as be,c as U,M as Fe,g as He,d as Ge,e as We,h as Be,i as he,f as Ke}from"./index-IRYqNEd8.js";import{O as Ne,a as ze,g as $e,N as Ye,R as Ze,u as Ve,P as q,H as ee,S as te,E as Xe,b as Je,c as ge,d as Ue,e as qe,f as Qe,h as et,C as tt,i as st,M as it,j as nt,k as at,W as ae,D as Ce,l as se,m as ne,n as ot,r as rt,o as lt,p as ct,q as dt,s as ut,t as ht,B as gt,v as ft,w as pt,x as mt,y as xt,z as bt,A as Nt}from"./erd-fields-section-CDkC1Pzu.js";import{L as Ct,Z as Et,a as It}from"./zoom-out-CcoidGXK.js";const yt=[{part:"source",label:"Input source",helper:"View, Table, SQL, Pattern or Connector"},{part:"fields",label:"Fields",helper:"Number of fields of the Data Mart"},{part:"status",label:"Status",helper:"Published or draft dot next to the title"},{part:"fieldAlias",label:"Field aliases",helper:"Output Schema alias in place of the name"},{part:"fieldDescription",label:"Field descriptions",helper:"Output Schema description under each field"}];function fe({isDraft:i,decorative:e=!1}){const l=i?"Draft":"Published";return s.jsxs("span",{className:"inline-flex shrink-0 items-center",title:l,children:[s.jsx("span",{className:"h-2 w-2 rounded-full",style:{background:i?Ne:ze},"aria-hidden":"true"}),!e&&s.jsx("span",{className:"sr-only",children:l})]})}function jt({type:i,joined:e=!1}){if(!i)return null;const l=Oe.getInfo(i),c=l.icon;return s.jsxs("span",{className:`border-border inline-flex items-center gap-1 border px-1.5 py-0.25 text-[8px] font-semibold tracking-wide uppercase ${e?"rounded-r-full":"-ml-0.5 rounded-full"}`,children:[s.jsx(c,{className:"h-2.5 w-2.5"}),l.displayName]})}const Y=3,Ee=.05,wt=1e-4,pe=1;function Dt(i,e,l,c){const d=i.maxX-i.minX,f=i.maxY-i.minY;return d<=0||f<=0||e<=0||l<=0?null:$e({x:i.minX,y:i.minY,width:d,height:f},e,l,Ee,Y,c)}function St(i){const e=Number.isFinite(i)&&i>0?Math.min(i,Y):pe;return{min:e>=Y?pe:e,max:Y}}function Ot(i,e,l){if(!Number.isFinite(i)||i<=0)return null;const c=i*(1+e),d=Math.min(Math.max(c,l.min),l.max);return!Number.isFinite(d)||Math.abs(d-i)<wt||e>0!=d>i?null:{zoom:d,delta:d/i-1}}const Z=240,Ie=48,Q=92,_t=.85,ie=1/_t-1,At=150,Mt=Ne;function me({data:i}){const e=He(i);if(!e)return null;const l=e.kind==="attention";return s.jsxs("span",{title:l?Ge:void 0,style:{position:"absolute",top:-18,right:4,display:"inline-flex",alignItems:"center",gap:2,fontSize:10,fontWeight:600,color:l?at:ae,lineHeight:1,whiteSpace:"nowrap"},children:[l&&s.jsx(We,{style:{width:12,height:12,color:Mt}}),e.label]})}function ye(i){return i==="erd"?bt:Z}function xe(i,e){return{width:i.isSource?Z:ye(i.viewMode),borderColor:i.highlighted?se:Be(i)?ae:e?ne:void 0,boxShadow:i.highlighted?`0 0 0 3px ${se}40, 0 0 12px ${se}60`:e?`0 0 0 1px ${ne}`:void 0,opacity:i.dimmed?Ce:1,filter:i.dimmed?"grayscale(0.8)":void 0,animation:i.highlighted?"node-pulse 1.5s ease-in-out infinite":void 0,transition:"opacity 0.2s, filter 0.2s",cursor:"pointer"}}function Rt({id:i,data:e,selected:l}){const[c,d]=r.useState(!1),f=Ve();r.useEffect(()=>{f(i)},[c,i,f]);const b=e.objectLabels,N=!b.source,u=!b.fields,S=!b.status,O=e.direction==="vertical"?q.Top:q.Left,C=e.direction==="vertical"?q.Bottom:q.Right;function y(p){p.stopPropagation(),p.preventDefault(),e.onOpenExternal()}if(e.isSource)return s.jsxs("div",{className:"bg-primary/5 relative flex items-center gap-2 rounded-xl border shadow-sm",style:{...xe(e,l),height:Ie,padding:"0 14px"},children:[s.jsx(me,{data:e}),s.jsx("span",{className:"text-foreground flex-1 truncate text-[13px] font-semibold",title:e.label,children:e.label}),S&&s.jsx(fe,{isDraft:e.isDraft,decorative:!0}),e.hasOutgoing&&s.jsx(ee,{type:"source",position:C,isConnectable:!1,style:te})]});const j=`Open ${e.label} in new tab`,w=e.viewMode==="erd"&&e.fields.length>0;return s.jsxs("div",{title:e.isCycleStub?Ae:void 0,className:"bg-background relative flex flex-col rounded-xl border shadow-sm",style:xe(e,l),children:[s.jsx(me,{data:e}),s.jsx(ee,{type:"target",position:O,isConnectable:!1,style:te}),s.jsxs("div",{className:"flex items-center gap-2 px-3.5 pt-3 pb-1",children:[s.jsx("span",{className:"text-foreground flex-1 truncate text-[13px] font-semibold",title:e.label,children:e.label}),S&&s.jsx(fe,{isDraft:e.isDraft,decorative:!0}),!e.userHasAccess&&s.jsx(Me,{}),e.description&&s.jsxs(Re,{children:[s.jsx(ve,{asChild:!0,children:s.jsx("button",{type:"button",className:"text-muted-foreground hover:text-foreground inline-flex cursor-default rounded p-0.5 transition-colors","aria-label":`Description for ${e.label}`,onPointerDown:p=>{p.stopPropagation()},children:s.jsx(ke,{className:"h-3.5 w-3.5","aria-hidden":"true"})})}),s.jsx(Pe,{side:"top",align:"center",role:"tooltip",className:"max-w-xs",children:e.description})]}),s.jsx("button",{type:"button",className:"text-muted-foreground hover:text-foreground shrink-0 cursor-pointer rounded p-0.5 transition-colors",onPointerDown:p=>{p.stopPropagation()},onClick:y,title:j,"aria-label":j,children:s.jsx(Te,{className:"h-3.5 w-3.5","aria-hidden":"true"})})]}),s.jsxs("div",{className:"flex min-w-0 items-center gap-2 px-3.5 pt-1 pb-3",children:[N&&s.jsx(jt,{type:e.definitionType}),e.targetAlias&&s.jsx(Le,{variant:"secondary",className:"inline-block max-w-[90px] truncate px-1.5 py-0 text-[10px]",title:e.targetAlias,children:e.targetAlias}),u&&s.jsxs("span",{className:"text-muted-foreground ml-auto shrink-0 text-[11px]",children:[e.fieldCount??0," field",e.fieldCount!==1?"s":""]})]}),w&&s.jsx(Xe,{fields:e.fields,labels:be(b),expanded:c,onToggleExpanded:()=>{d(p=>!p)}}),e.hasOutgoing&&s.jsx(ee,{type:"source",position:C,isConnectable:!1,style:te})]})}function vt({id:i,sourceX:e,sourceY:l,targetX:c,targetY:d,sourcePosition:f,targetPosition:b,selected:N,data:u}){const[S,O,C]=ct({sourceX:e,sourceY:l,sourcePosition:f,targetX:c,targetY:d,targetPosition:b}),y=u.warning?ae:N?ne:dt,j=r.useId(),w=ut("rel-arrow",j);return s.jsxs(s.Fragment,{children:[s.jsx(ht,{markerId:w,color:y,withStart:!1}),s.jsx(gt,{id:i,path:S,markerEnd:`url(#${w}-end)`,style:{stroke:y,strokeWidth:N?pt:mt,strokeDasharray:u.warning?ft:void 0,opacity:u.dimmed?Ce:1,transition:"opacity 0.2s, stroke 0.2s"}}),s.jsx(xt,{x:O,y:C,lines:u.joinLabel,selected:N??!1,dimmed:u.dimmed})]})}const kt={relationshipNode:Rt},Pt={relationshipEdge:vt};function Tt(i){return JSON.stringify([i.nodes.map(e=>[e.id,e.data.isSource,e.data.label,e.data.targetAlias,e.data.fieldCount,e.data.description,e.data.isDraft,e.data.isBlocked,e.data.isJoinNotConfigured,e.data.isCycleStub,e.data.isMissingPrimaryKey,e.data.userHasAccess,e.data.hasOutgoing]),i.edges.map(e=>[e.id,e.source,e.target,e.data.warning])])}function Lt(i,e,l,c){return i?Ie:l!=="erd"?Q:Q+Nt(e,c)}function Ft({dataMartId:i,dataMartTitle:e,dataMartDescription:l,dataMartStatus:c,rootDefinitionType:d,definitionTypes:f,initialRelationships:b,graph:N,fieldCounts:u,showLooped:S,statusFilter:O,viewMode:C,objectLabels:y,direction:j,showJoinFields:w,fieldsByAliasPath:p,onOpenExternal:T}){let G=0;const R=(t,a)=>a&&!S||O!=="all"&&t!==O?(G++,!1):!0,_=new Map,M=[],W=new Set,L=c==="DRAFT";_.set(i,{dmId:i,title:e,description:l,depth:0,isSource:!0,isDraft:L,userHasAccess:!0});const h=new Map;h.set("",i);function E(t,a,m,I,A){const z=`path:${I}`;M.push({sourceId:t,targetId:z,joinLabel:w?A.map(X=>`${X.sourceFieldName} = ${X.targetFieldName}`):[]}),W.add(t),_.set(z,{dmId:a,aliasPath:I,...m}),h.set(I,z)}if(N)for(const t of N.nodes){const a=t.aliasPath.lastIndexOf("."),m=a===-1?"":t.aliasPath.slice(0,a),I=h.get(m);I&&R(t.relationship.targetDataMart.status,t.isCycleStub)&&E(I,t.relationship.targetDataMart.id,{title:t.relationship.targetDataMart.title,description:t.relationship.targetDataMart.description,depth:t.depth,isSource:!1,targetAlias:t.relationship.targetAlias,fieldCount:(u==null?void 0:u.get(t.relationship.id))??0,isDraft:t.relationship.targetDataMart.status==="DRAFT",isBlocked:t.isBlocked,isJoinNotConfigured:t.relationship.joinConditions.length===0,isCycleStub:t.isCycleStub,isMissingPrimaryKey:he(t.relationship.targetDataMart.hasPrimaryKey,t.relationship.joinConditions.length),userHasAccess:t.relationship.targetDataMart.userHasAccess},t.aliasPath,t.relationship.joinConditions)}else for(const t of b)R(t.targetDataMart.status,t.targetDataMart.id===i)&&E(i,t.targetDataMart.id,{title:t.targetDataMart.title,description:t.targetDataMart.description,depth:1,isSource:!1,targetAlias:t.targetAlias,fieldCount:(u==null?void 0:u.get(t.id))??0,isDraft:t.targetDataMart.status==="DRAFT",isBlocked:L,isJoinNotConfigured:t.joinConditions.length===0,isCycleStub:t.targetDataMart.id===i,isMissingPrimaryKey:he(t.targetDataMart.hasPrimaryKey,t.joinConditions.length),userHasAccess:t.targetDataMart.userHasAccess},t.targetAlias,t.joinConditions);const D=new Map,v=new Map,F=new Map,g=be(y);for(const[t,a]of _){const m=a.isSource||a.aliasPath===void 0?[]:(p==null?void 0:p.get(a.aliasPath))??[];D.set(t,m),v.set(t,a.isSource?Z:ye(C)),F.set(t,Lt(a.isSource,m,C,g))}const V=[..._.keys()].map(t=>({id:t,width:v.get(t)??Z,height:F.get(t)??Q})),B=M.map(t=>({id:`${t.sourceId}->${t.targetId}`,sourceId:t.sourceId,targetId:t.targetId,label:ot(t.joinLabel)})),{positions:k}=rt(V,B,j),H=[];for(const[t,a]of _)H.push({id:t,type:"relationshipNode",position:k.get(t)??{x:0,y:0},width:v.get(t)??Z,height:F.get(t)??Q,draggable:!1,selectable:!1,focusable:!1,style:lt,data:{isSource:a.isSource,label:a.title,targetAlias:a.targetAlias,fieldCount:a.fieldCount,description:a.description,definitionType:a.isSource?d:(f==null?void 0:f.get(a.dmId))??null,isDraft:a.isDraft??!1,isBlocked:a.isBlocked??!1,isJoinNotConfigured:a.isJoinNotConfigured??!1,isCycleStub:a.isCycleStub??!1,isMissingPrimaryKey:a.isMissingPrimaryKey??!1,userHasAccess:a.userHasAccess,hasOutgoing:W.has(t)&&!a.isCycleStub,highlighted:!1,dimmed:!1,fields:D.get(t)??[],viewMode:C,objectLabels:y,direction:j,onOpenExternal:()=>{T(a.dmId)}}});const P=[];for(const t of M){const a=_.get(t.sourceId),m=_.get(t.targetId);if(!a||!m)continue;const I=Ke(a,m);P.push({id:`${t.sourceId}->${t.targetId}`,type:"relationshipEdge",source:t.sourceId,target:t.targetId,focusable:!1,selectable:!1,data:{warning:I,dimmed:!1,joinLabel:t.joinLabel}})}return{nodes:H,edges:P,filteredOutCount:G}}function Ht({dataMartId:i,dataMartTitle:e,dataMartDescription:l,dataMartStatus:c,dataMartDefinitionType:d,definitionTypes:f,relationships:b,relationshipGraph:N,connectedFieldCounts:u,searchQuery:S,onRequestFullscreen:O,onOpenExternal:C,showLooped:y,statusFilter:j,viewMode:w,onViewModeChange:p,direction:T,onDirectionChange:G,showJoinFields:R,onShowJoinFieldsChange:_,objectLabels:M,onObjectLabelsChange:W,fieldsByAliasPath:L}){const h=Je(),E=ge(n=>n.width),D=ge(n=>n.height),v=r.useRef(!1),F=r.useRef(!1),g=r.useMemo(()=>Ft({dataMartId:i,dataMartTitle:e,dataMartDescription:l,dataMartStatus:c,rootDefinitionType:d??null,definitionTypes:f,initialRelationships:b,graph:N,fieldCounts:u,showLooped:y,statusFilter:j,viewMode:w,objectLabels:M,direction:T,showJoinFields:R,fieldsByAliasPath:L,onOpenExternal:C}),[i,e,l,c,d,f,b,N,u,y,j,w,M,T,R,L,C]),[V,B]=r.useState(null),[k,H]=r.useState(null),P=r.useMemo(()=>Tt(g),[g]),t=r.useMemo(()=>Ue(g.nodes),[g.nodes]),a=r.useRef(P),m=r.useMemo(()=>Dt(t,E,D,ie),[t,E,D]),I=r.useMemo(()=>St((m==null?void 0:m.zoom)??Number.NaN),[m]);r.useEffect(()=>{a.current!==P&&(a.current=P,F.current=!1,H(n=>n!==null&&g.nodes.some(o=>o.id===n)?n:null),B(n=>n!==null&&g.edges.some(o=>o.id===n)?n:null))},[P,g]);const A=r.useMemo(()=>qe(g.nodes,S,n=>n.id,n=>n.data.label),[g.nodes,S]),z=r.useMemo(()=>g.nodes.map(n=>{const o=A.get(n.id)??Qe,x=n.id===k;return n.data.highlighted===o.highlighted&&n.data.dimmed===o.dimmed&&(n.selected??!1)===x?n:{...n,selected:x,data:{...n.data,...o}}}),[g.nodes,A,k]),X=r.useMemo(()=>g.edges.map(n=>{var de,ue;const o=(((de=A.get(n.source))==null?void 0:de.dimmed)??!1)&&(((ue=A.get(n.target))==null?void 0:ue.dimmed)??!1),x=n.id===V||k!==null&&(n.source===k||n.target===k);return n.data.dimmed===o&&(n.selected??!1)===x?n:{...n,selected:x,data:{...n.data,dimmed:o}}}),[g.edges,A,V,k]),je=r.useCallback((n,o)=>{B(x=>x===o.id?null:o.id),H(null)},[]),we=r.useCallback((n,o)=>{H(x=>x===o.id?null:o.id),B(null)},[]),De=r.useCallback(()=>{B(null),H(null)},[]),oe=r.useRef(A);oe.current=A;const J=r.useCallback(()=>{const n=[...oe.current.entries()].filter(([,o])=>o.highlighted).map(([o])=>o);n.length!==0&&h.fitView({nodes:n.map(o=>({id:o})),duration:300,padding:ie})},[h]),$=r.useCallback(()=>h.fitView({minZoom:Ee,maxZoom:Y,padding:ie}),[h]),re=r.useRef(m);re.current=m;const le=r.useCallback(()=>{const n=re.current;return n?h.setViewport(n):$()},[$,h]),K=r.useCallback(()=>{F.current=!0},[]);r.useEffect(()=>{E===0||D===0||F.current||le().then(()=>{v.current=!0,J()})},[E,D,P,le,J]),r.useEffect(()=>{v.current&&J()},[A,J]);const ce=r.useCallback(n=>{K();const o=h.getZoom();if(!Number.isFinite(o)||o<=0){$();return}const x=Ot(o,n,I);x&&h.zoomTo(x.zoom,{duration:150})},[$,K,h,I]),Se=r.useCallback((n,o)=>{if(E===0||D===0||!Number.isFinite(o.zoom))return;const x=et(o,t,E,D,At);x.x===o.x&&x.y===o.y||h.setViewport(x)},[t,D,E,h]);return s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"absolute top-3 right-3 z-10 flex items-start gap-2",children:s.jsxs("div",{className:"flex flex-col gap-1.5",children:[s.jsx(U,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:()=>{K(),$()},"aria-label":"Fit to view",children:s.jsx(Ct,{className:"h-6 w-6"})}),s.jsx(U,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:()=>{ce(.25)},"aria-label":"Zoom in",children:s.jsx(Et,{className:"h-6 w-6"})}),s.jsx(U,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:()=>{ce(-.25)},"aria-label":"Zoom out",children:s.jsx(It,{className:"h-6 w-6"})}),O&&s.jsx(U,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:O,"aria-label":"Expand diagram",children:s.jsx(Fe,{className:"h-6 w-6"})}),s.jsx(tt,{viewMode:w,onViewModeChange:p,direction:T,onDirectionChange:G,showJoinFields:R,onShowJoinFieldsChange:_,objectLabels:M,onObjectLabelsChange:W,objectLabelOptions:yt})]})}),s.jsxs("div",{className:"h-full w-full",onPointerDownCapture:K,onWheelCapture:K,children:[s.jsx(st,{nodes:z,edges:X,nodeTypes:kt,edgeTypes:Pt,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,edgesFocusable:!1,zoomOnDoubleClick:!1,minZoom:I.min,maxZoom:I.max,onEdgeClick:je,onNodeClick:we,onPaneClick:De,deleteKeyCode:null,panActivationKeyCode:null,onMove:Se,onMoveStart:n=>{n&&K()},proOptions:{hideAttribution:!0},style:{width:"100%",height:"100%"},children:s.jsx(it,{pannable:!0,zoomable:!0,style:{width:140,height:100},nodeColor:nt})}),g.nodes.length===1&&g.filteredOutCount>0&&s.jsx("div",{className:"pointer-events-none absolute inset-x-0 bottom-6 flex justify-center",children:s.jsx("span",{className:"bg-background text-muted-foreground rounded-md border px-3 py-1.5 text-sm shadow-sm",children:"No related data marts match the current filters"})})]})]})}function Kt({dataMartId:i,dataMartTitle:e,dataMartDescription:l,dataMartStatus:c,dataMartDefinitionType:d,definitionTypes:f,relationships:b,relationshipGraph:N,connectedFieldCounts:u,searchQuery:S,onRequestFullscreen:O,showLooped:C,statusFilter:y,viewMode:j,onViewModeChange:w,direction:p,onDirectionChange:T,showJoinFields:G,onShowJoinFieldsChange:R,objectLabels:_,onObjectLabelsChange:M,fieldsByAliasPath:W,className:L,style:h}){const{scope:E}=_e(),D=r.useCallback(v=>{window.open(E(`/data-marts/${v}/data-setup`),"_blank","noopener,noreferrer")},[E]);return b.length===0?null:s.jsxs("div",{className:`relative overflow-hidden rounded-lg border ${L??""}`,style:h??{height:480},children:[s.jsx("style",{children:Ye}),s.jsx(Ze,{children:s.jsx(Ht,{dataMartId:i,dataMartTitle:e,dataMartDescription:l,dataMartStatus:c,dataMartDefinitionType:d,definitionTypes:f,relationships:b,relationshipGraph:N,connectedFieldCounts:u,searchQuery:S,onRequestFullscreen:O,onOpenExternal:D,showLooped:C,statusFilter:y,viewMode:j,onViewModeChange:w,direction:p,onDirectionChange:T,showJoinFields:G,onShowJoinFieldsChange:R,objectLabels:_,onObjectLabelsChange:M,fieldsByAliasPath:W})})]})}export{Kt as RelationshipCanvas,Rt as RelationshipFlowNode};
|