@owox/web 0.33.0-next-20260903101025 → 0.33.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-MoPz1bki.js → ModelCanvas-CzDkVkX_.js} +2 -2
- package/dist/assets/{RelationshipCanvas-DzLulyY-.js → RelationshipCanvas-DUaCxmp5.js} +1 -1
- package/dist/assets/{erd-fields-section-BngQfGWe.js → erd-fields-section-CXhqGUVO.js} +5 -5
- package/dist/assets/index-D0EaJx5B.js +1457 -0
- package/dist/assets/{index-s1e4jO7J.js → index-LAfgsoTV.js} +1 -1
- package/dist/index.html +1 -1
- package/package.json +3 -12
- package/dist/assets/index-BTmqY2jZ.js +0 -1448
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-
|
|
2
|
-
import{r as a,j as t,k as nt,S as st,l as oe,P as at,m as it,D as re,n as ot,o as rt,p as lt,L as ct,q as dt,s as ut,T as Ne,a as Re,R as ft,H as pt,b as Oe,t as ht,v as gt,I as mt,E as xt,w as bt,x as I,y as wt,z as Et,_ as Ct,A as _e,F as le,c as ce}from"./index-BTmqY2jZ.js";import{I as vt,J as jt,K as yt,s as St,v as Dt,w as Lt,W as It,o as fe,t as Nt,B as Rt,D as Te,x as Ot,y as _t,z as Tt,A as Pt,u as kt,d as Pe,P as X,n as de,H as we,S as Ee,E as At,a as Mt,b as Ft,N as $t,R as Ut,c as Ht,e as ue,f as Qt,h as Ce,p as Gt,r as Vt,i as ve,Q as zt,T as Wt,j as qt,L as Bt,Z as Kt,k as Jt,C as Zt,l as Yt,M as Xt,q as en}from"./erd-fields-section-BngQfGWe.js";const tn=(n,e)=>[n,e].sort().join("->"),nn=56;function sn(n,e=nn){const r=new Map;for(const i of n){if(i.sourceId===i.targetId)continue;const d=tn(i.sourceId,i.targetId),h=r.get(d);h?h.push(i):r.set(d,[i])}const u=new Map;for(const i of n)i.sourceId===i.targetId&&u.set(i.id,0);for(const i of r.values()){const d=[...i].sort((m,x)=>m.id.localeCompare(x.id)),h=d.length;d.forEach((m,x)=>{u.set(m.id,(x-(h-1)/2)*e)})}return u}const an=212,je=116,on=256,rn=88;function pe(n){return n==="erd"?on:an}function ke(n,e,r=!1,u=!1){const i=(r?-36:0)+(u?-30:0);if(e!=="erd")return je+i;const d=n.fields??[];if(d.length===0)return je+i;const h=vt(d),m=d.length>h;return rn+i+h*jt+(m?yt:0)}function ln(n,e,r,u,i,d){let h,m,x,j;if(d==="vertical"){const g=Math.max(40,Math.abs(u-e)*.3);h=n+i,m=e+g,x=r+i,j=u-g}else{const g=Math.max(40,Math.abs(r-n)*.3);h=n+g,m=e+i,x=r-g,j=u+i}return{path:`M ${n} ${e} C ${h} ${m}, ${x} ${j}, ${r} ${u}`,labelX:(n+3*h+3*x+r)/8,labelY:(e+3*m+3*j+u)/8}}function cn({id:n,sourceX:e,sourceY:r,targetX:u,targetY:i,sourcePosition:d,targetPosition:h,selected:m,data:x}){const{bowOffset:j,warning:g,joinLabel:b,dimmed:w,direction:E,bidirectional:D}=x;let y;if(j!==0)y=ln(e,r,u,i,j,E);else{const[C,k,z]=St({sourceX:e,sourceY:r,sourcePosition:d,targetX:u,targetY:i,targetPosition:h});y={path:C,labelX:k,labelY:z}}const S=g?It:m?fe:Nt,N=a.useId(),L=Dt("mc-arrow",N);return t.jsxs(t.Fragment,{children:[t.jsx(Lt,{markerId:L,color:S,withStart:D}),t.jsx(Rt,{id:n,path:y.path,markerEnd:`url(#${L}-end)`,markerStart:D?`url(#${L}-start)`:void 0,style:{stroke:S,strokeWidth:m?_t:Tt,strokeDasharray:g?Ot:void 0,opacity:w?Te:1,transition:"opacity 0.2s, stroke 0.2s"}}),t.jsx(Pt,{x:y.labelX,y:y.labelY,lines:b,selected:m??!1,dimmed:w})]})}const dn=100,un=200;function V(n,e){return`${n} ${e}${n===1?"":"s"}`}function fn({dataMartTitle:n,summary:e,onOpenQuality:r,onRunQuality:u}){const[i,d]=a.useState(!1),[h,m]=a.useState(!1),x=a.useRef(null),j=a.useRef(null),g=a.useRef(null),b=a.useRef(null),w=a.useRef(null),E=a.useRef(!1),D=a.useRef(!1),y=a.useRef(!1),S=nt(e),N=S.icon,L=[{count:e.errorChecks,singular:"execution error",tone:"error",icon:st},{count:e.errorFindings,singular:"critical finding",tone:"error",icon:oe},{count:e.warningFindings,singular:"warning finding",tone:"warning",icon:oe},{count:e.noticeFindings,singular:"notice finding",tone:"notice",icon:oe}].filter(l=>l.count>0),C=(e.state==="ISSUES"||e.state==="EXECUTION_FAILED")&&L.length>0,k=L.map(l=>V(l.count,l.singular)).join(", "),z=`Open Data Quality for ${n}: ${S.label}${C?`, ${k}`:""}`,_=S.isActive,te=e.state==="QUEUED"?"Queued":e.state==="RUNNING"?"Started":"Last checked";function U(){b.current!==null&&(clearTimeout(b.current),b.current=null)}function W(){w.current!==null&&(clearTimeout(w.current),w.current=null)}function A(){U(),W()}function K(){W(),!(i||E.current||b.current!==null)&&(b.current=setTimeout(()=>{b.current=null,!E.current&&d(!0)},dn))}function R(){U(),!(!i||E.current||w.current!==null)&&(w.current=setTimeout(()=>{w.current=null,!E.current&&d(!1)},un))}function T(l){if(l.stopPropagation(),l.preventDefault(),A(),E.current&&i){E.current=!1,d(!1);return}E.current=!0,d(!0),l.detail===0&&queueMicrotask(()=>{var v;(v=g.current)==null||v.focus()})}function ne(l){if(A(),l){E.current=!0,d(!0);return}E.current=!1,d(!1)}function se(l){l.stopPropagation(),l.preventDefault(),r()}async function ae(l){if(l.stopPropagation(),l.preventDefault(),!(_||h)){m(!0);try{await u()}finally{m(!1)}}}return a.useEffect(()=>()=>{b.current!==null&&clearTimeout(b.current),w.current!==null&&clearTimeout(w.current)},[]),a.useEffect(()=>{if(!i)return;function l(v){var H,M;const O=v.target;O instanceof Node&&((H=x.current)!=null&&H.contains(O)||(M=j.current)!=null&&M.contains(O)||(b.current!==null&&(clearTimeout(b.current),b.current=null),w.current!==null&&(clearTimeout(w.current),w.current=null),E.current=!1,d(!1)))}return document.addEventListener("pointerdown",l,!0),()=>{document.removeEventListener("pointerdown",l,!0)}},[i]),t.jsxs(at,{open:i,onOpenChange:ne,children:[t.jsx(it,{asChild:!0,children:t.jsx("button",{ref:x,type:"button",className:`${C?"":re[S.tone]} -ml-0.5 inline-flex shrink-0 cursor-pointer items-center rounded p-0.5 transition-colors ${C?"gap-1.5":""}`,"aria-label":z,onPointerDown:l=>{l.stopPropagation()},onPointerEnter:()=>{K()},onPointerLeave:()=>{R()},onFocus:()=>{if(y.current){y.current=!1;return}K()},onBlur:()=>{R()},onClick:T,children:C?L.map(l=>{const v=V(l.count,l.singular),O=l.icon;return t.jsxs("span",{role:"img","aria-label":v,className:`${re[l.tone]} inline-flex items-center gap-0.5`,children:[t.jsx(O,{className:"size-4","aria-hidden":!0}),t.jsx("span",{className:"leading-none font-medium tabular-nums",children:l.count})]},l.singular)}):t.jsx(N,{className:`size-4 ${e.state==="RUNNING"?"animate-spin":""}`,"aria-hidden":!0})})}),t.jsxs(ot,{ref:j,side:"top",align:"center",role:"region","aria-label":`Data Quality checks for ${n}`,className:"w-72 max-w-72 p-3 text-xs sm:w-72 sm:max-w-72",onOpenAutoFocus:l=>{l.preventDefault()},onCloseAutoFocus:l=>{var v;l.preventDefault(),D.current&&(D.current=!1,y.current=!0,(v=x.current)==null||v.focus({preventScroll:!0}),queueMicrotask(()=>{y.current=!1}))},onEscapeKeyDown:()=>{D.current=!0},onPointerEnter:()=>{W()},onPointerLeave:()=>{R()},onPointerDown:l=>{l.stopPropagation()},children:[t.jsxs("div",{className:"border-border flex items-center justify-between gap-3 border-b pb-2",children:[t.jsx(rt,{className:"text-sm font-semibold whitespace-nowrap",children:"Data Quality checks"}),t.jsx("span",{className:`${re[S.tone]} shrink-0 font-medium whitespace-nowrap`,children:S.label})]}),t.jsxs("div",{className:"text-muted-foreground space-y-1 py-2",children:[e.enabledChecks>0&&t.jsxs("p",{children:[e.enabledChecks," enabled"]}),_?t.jsx("p",{children:"Terminal results will be available after this run finishes."}):t.jsxs(t.Fragment,{children:[e.passedChecks>0&&t.jsxs("p",{children:[e.passedChecks," passed"]}),e.notApplicableChecks>0&&t.jsxs("p",{children:[e.notApplicableChecks," not applicable"]}),e.errorChecks>0&&t.jsx("p",{children:V(e.errorChecks,"execution error")}),e.errorFindings>0&&t.jsx("p",{children:V(e.errorFindings,"critical finding")}),e.warningFindings>0&&t.jsx("p",{children:V(e.warningFindings,"warning finding")}),e.noticeFindings>0&&t.jsx("p",{children:V(e.noticeFindings,"notice finding")})]}),e.lastRunAt&&t.jsx("p",{className:"text-foreground pt-2 pb-1 font-medium",children:`${te} ${lt(e.lastRunAt)}`})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[t.jsx("button",{ref:g,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 ${n}`,onPointerDown:l=>{l.stopPropagation()},onClick:se,children:"Open"}),t.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 ${n}`,title:_?"A Data Quality run is already active":void 0,disabled:_||h,onPointerDown:l=>{l.stopPropagation()},onClick:l=>{ae(l)},children:[h?t.jsx(ct,{className:"size-3.5 animate-spin","aria-hidden":"true"}):t.jsx(dt,{className:"size-3.5","aria-hidden":"true"}),h?"Starting…":"Run checks"]})]})]})]})}function pn({dataMartTitle:n,block:e,isChecking:r=!1}){const u=r?"checking…":ut(e);return t.jsxs(Ne,{children:[t.jsx(Re,{asChild:!0,children:t.jsx("button",{type:"button",className:`nodrag inline-flex cursor-default items-center rounded p-0.5 transition-colors ${r||e!=null&&e.dataLastUpdatedAt?"text-muted-foreground hover:text-foreground":"text-muted-foreground/50 hover:text-muted-foreground"}`,"aria-label":`Data Last Updated for ${n}: ${u}`,onPointerDown:i=>{i.stopPropagation()},children:r?t.jsx(ft,{className:"h-3.5 w-3.5 animate-spin","aria-hidden":"true"}):t.jsx(pt,{className:"h-3.5 w-3.5","aria-hidden":"true"})})}),t.jsx(Oe,{side:"top",align:"start",role:"tooltip",className:"max-w-xs",children:r?t.jsx("div",{className:"text-xs",children:"Checking Data Last Updated…"}):e?t.jsx(ht,{block:e}):t.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."})})]})}function hn({id:n,data:e,selected:r}){const[u,i]=a.useState(!1),d=kt();a.useEffect(()=>{d(n)},[u,n,d]);const h=Pe(e.definitionType),m=e.viewMode==="erd",x=e.fields,j=m&&x.length>0,g=e.objectLabels??gt,b=!g.source,w=!g.fields,E=!g.status,D=g.source&&g.fields&&g.status,y=e.direction==="vertical"?X.Top:X.Left,S=e.direction==="vertical"?X.Bottom:X.Right,N=`Open ${e.title} in new tab`;function L(C){C.stopPropagation(),C.preventDefault(),e.onOpenExternal()}return t.jsxs("div",{className:"bg-background relative flex cursor-grab flex-col overflow-hidden rounded-xl border shadow-sm active:cursor-grabbing",style:{width:pe(e.viewMode),borderColor:e.highlighted?de:r?fe:void 0,boxShadow:e.highlighted?`0 0 0 3px ${de}40, 0 0 12px ${de}60`:r?`0 0 0 1px ${fe}`:void 0,opacity:e.dimmed?Te: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&&t.jsx(we,{type:"target",position:y,isConnectable:!1,style:Ee}),t.jsxs("div",{className:`flex items-center gap-2 px-3.5 pt-3 ${D?"pb-3":"pb-1"}`,children:[b&&t.jsx("span",{className:"h-4 w-1 shrink-0 rounded-sm",style:{background:h},"aria-hidden":"true"}),t.jsx("span",{className:"text-foreground flex-1 truncate text-[13px] font-semibold",title:e.title,children:e.title}),E&&t.jsx(At,{isDraft:e.isDraft}),e.description&&t.jsxs(Ne,{children:[t.jsx(Re,{asChild:!0,children:t.jsx("button",{type:"button",className:"text-muted-foreground hover:text-foreground nodrag inline-flex cursor-default rounded p-0.5 transition-colors","aria-label":`Description for ${e.title}`,onPointerDown:C=>{C.stopPropagation()},children:t.jsx(mt,{className:"h-3.5 w-3.5","aria-hidden":"true"})})}),t.jsx(Oe,{side:"top",align:"center",role:"tooltip",className:"max-w-xs",children:e.description})]}),t.jsx("button",{type:"button",className:"text-muted-foreground hover:text-foreground nodrag shrink-0 cursor-pointer rounded p-0.5 transition-colors",onPointerDown:C=>{C.stopPropagation()},onClick:L,title:N,"aria-label":N,children:t.jsx(xt,{className:"h-3.5 w-3.5","aria-hidden":"true"})})]}),b&&t.jsx("div",{className:"text-muted-foreground flex items-center gap-2 px-3.5 pt-1 text-[11px]",children:t.jsx(Mt,{type:e.definitionType})}),!D&&t.jsxs("div",{className:"text-muted-foreground flex items-center gap-1 px-3.5 pt-1 pb-3 text-[11px]",children:[t.jsx(fn,{dataMartTitle:e.title,summary:e.qualitySummary,onOpenQuality:e.onOpenQuality,onRunQuality:e.onRunQuality}),t.jsx(pn,{dataMartTitle:e.title,block:e.dataLastUpdated,isChecking:e.isCheckingDataLastUpdated}),w&&t.jsxs("span",{className:"ml-auto shrink-0",children:[e.fieldCount," field",e.fieldCount!==1?"s":""]})]}),j&&t.jsx(Ft,{fields:x,expanded:u,onToggleExpanded:()=>{i(C=>!C)}}),e.hasOutgoing&&t.jsx(we,{type:"source",position:S,isConnectable:!1,style:Ee})]})}const ye="model-canvas-layout",Se="model-canvas-show-join-fields",De="model-canvas-view-mode",Le="model-canvas-object-labels",gn="model-canvas-positions";function ee(n){return`${gn}:${n}`}function mn(n){if(!n)return{};const e=I.get(ee(n),"json");if(!e)return{};const r={};for(const[u,i]of Object.entries(e)){const d=i;d&&typeof d.x=="number"&&typeof d.y=="number"&&(r[u]={x:d.x,y:d.y})}return r}const B=.2,xn=150,bn={modelCanvasNode:hn},wn={modelCanvasEdge:cn};function En(n){return JSON.stringify(n.map(({id:e,title:r,status:u,description:i,fieldCount:d,definitionType:h,fields:m})=>({id:e,title:r,status:u,description:i,fieldCount:d,definitionType:h,fields:m})))}function Cn(n){return JSON.stringify(n)}function Ie(n,e){const r=e(n),u=a.useRef({signature:r,value:n});return u.current.signature!==r&&(u.current={signature:r,value:n}),u.current.value}function vn(n){const{node:e,highlight:r,viewMode:u,objectLabels:i}=n,d=i.source,h=i.source&&i.fields&&i.status;return{id:e.id,type:"modelCanvasNode",position:n.position,width:pe(u),height:ke(e,u,d,h),draggable:!0,selectable:!1,focusable:!1,deletable:!1,style:en,data:{title:e.title,isDraft:e.status===_e.DRAFT,fieldCount:e.fieldCount,description:e.description,definitionType:e.definitionType??null,fields:e.fields??[],viewMode:u,objectLabels:i,dataLastUpdated:e.dataLastUpdated,isCheckingDataLastUpdated:n.isCheckingDataLastUpdated,hasIncoming:n.hasIncoming,hasOutgoing:n.hasOutgoing,highlighted:r.highlighted,dimmed:r.dimmed,direction:n.direction,onOpenExternal:n.onOpenExternal,qualitySummary:e.qualitySummary,onOpenQuality:n.onOpenQuality,onRunQuality:n.onRunQuality}}}function jn(n){return n.joinConditions.map(e=>`${e.sourceFieldName} = ${e.targetFieldName}`)}function yn(n){const{edge:e,warning:r}=n;return{id:e.id,type:"modelCanvasEdge",source:e.sourceId,target:e.targetId,focusable:!1,selectable:!0,deletable:!1,data:{bowOffset:n.bowOffset,warning:r,joinLabel:n.joinLabel,dimmed:n.dimmed,direction:n.direction,bidirectional:e.bidirectional}}}function Sn({nodes:n,edges:e,searchQuery:r,onOpenDataMart:u,onOpenQuality:i,onRunQuality:d,isCheckingDataLastUpdated:h=!1,storageId:m,storageTitle:x,exportApiRef:j}){const g=Ht(),b=ue(o=>o.width),w=ue(o=>o.height),E=ue(o=>o.domNode),D=a.useRef(u);D.current=u;const y=a.useRef(i);y.current=i;const S=a.useRef(d);S.current=d;const N=a.useRef(n);N.current=n;const L=a.useRef(r);L.current=r;const C=a.useRef(h);C.current=h;const[k,z]=a.useState(()=>bt(I.get(ye))),[_,te]=a.useState(()=>wt(I.get(De))),[U,W]=a.useState(()=>I.get(Se,"boolean")??!1),[A,K]=a.useState(()=>Et(I.get(Le))),R=a.useRef(null),T=a.useRef(m);(R.current===null||T.current!==m)&&(T.current=m,R.current=mn(m));const[ne,se]=a.useState(0),[ae,l]=a.useState(!1),[v,O]=a.useState([]),[H,M]=a.useState([]),he=a.useMemo(()=>Qt(v),[v]),Q=Ie(n,En),F=Ie(e,Cn);a.useImperativeHandle(j,()=>({exportCanvas:async o=>{const{exportModelCanvas:p}=await Ct(async()=>{const{exportModelCanvas:c}=await import("./index-s1e4jO7J.js");return{exportModelCanvas:c}},__vite__mapDeps([0,1,2,3,4]));return p(o,{viewport:(E==null?void 0:E.querySelector(".react-flow__viewport"))??null,flowNodes:v,nodes:n,edges:e,storageTitle:x})}}),[E,v,n,e,x]),a.useEffect(()=>{const o=new Set(F.map(s=>s.targetId)),p=new Set(F.map(s=>s.sourceId)),c=new Map(Q.map(s=>[s.id,s.status===_e.DRAFT])),f=Ce(Q,L.current,s=>s.id,s=>s.title),P=A.source,G=Q.map(s=>({id:s.id,width:pe(_),height:ke(s,_,P)})),q=U?new Map(F.map(s=>[s.id,jn(s)])):new Map,J=F.map(s=>({id:s.id,sourceId:s.sourceId,targetId:s.targetId,label:Gt(q.get(s.id)??[])})),{positions:Z}=Vt(G,J,k),Ke=sn(F),Je=new Set(Q.map(s=>s.id)),ge=Object.entries(R.current??{}),Y=Object.fromEntries(ge.filter(([s])=>Je.has(s)));ge.length!==Object.keys(Y).length&&(R.current=Y,T.current&&I.set(ee(T.current),Y));const Ze=new Map(N.current.map(s=>[s.id,s.qualitySummary])),Ye=new Map(N.current.map(s=>[s.id,s.dataLastUpdated]));O(Q.map(s=>vn({node:{...s,qualitySummary:Ze.get(s.id)??s.qualitySummary,dataLastUpdated:Ye.get(s.id)??s.dataLastUpdated},position:Y[s.id]??Z.get(s.id)??{x:0,y:0},hasIncoming:o.has(s.id),hasOutgoing:p.has(s.id),highlight:f.get(s.id)??ve,direction:k,viewMode:_,objectLabels:A,onOpenExternal:()=>{D.current(s.id)},onOpenQuality:()=>{y.current(s.id)},onRunQuality:()=>S.current(s.id),isCheckingDataLastUpdated:C.current}))),M(F.map(s=>{var xe,be;const et=((xe=f.get(s.sourceId))==null?void 0:xe.dimmed)??!1,tt=((be=f.get(s.targetId))==null?void 0:be.dimmed)??!1;return yn({edge:s,joinLabel:q.get(s.id)??[],bowOffset:Ke.get(s.id)??0,warning:s.joinNotConfigured||(c.get(s.sourceId)??!1)||(c.get(s.targetId)??!1),dimmed:et&&tt,direction:k})})),l(!0);const me=[...f.entries()].filter(([,s])=>s.highlighted).map(([s])=>s),Xe=requestAnimationFrame(()=>{g.fitView(me.length>0?{nodes:me.map(s=>({id:s})),duration:300,padding:B}:{padding:B,duration:300})});return()=>{cancelAnimationFrame(Xe)}},[Q,F,k,ne,_,U,A,g]);const Ae=a.useCallback(o=>{O(p=>zt(o,p))},[]),Me=a.useCallback(o=>{M(p=>Wt(o,p))},[]),[$,ie]=a.useState(null),Fe=a.useCallback((o,p)=>{ie(c=>c===p.id?null:p.id),M(c=>c.some(f=>f.selected)?c.map(f=>f.selected?{...f,selected:!1}:f):c)},[]),$e=a.useCallback(()=>{ie(null)},[]),Ue=a.useCallback(()=>{ie(null)},[]),He=a.useMemo(()=>$?v.map(o=>o.id===$?{...o,selected:!0}:o):v,[v,$]),Qe=a.useMemo(()=>$?H.map(o=>o.source===$||o.target===$?{...o,selected:!0}:o):H,[H,$]),Ge=a.useCallback((o,p)=>{const c=R.current??{};c[p.id]={x:p.position.x,y:p.position.y},R.current=c,T.current&&I.set(ee(T.current),c)},[]);a.useEffect(()=>{const o=new Map(n.map(c=>[c.id,c.qualitySummary])),p=new Map(n.map(c=>[c.id,c.dataLastUpdated]));O(c=>c.map(f=>{const P=o.get(f.id)??f.data.qualitySummary,G=p.has(f.id)?p.get(f.id)??null:f.data.dataLastUpdated;return f.data.qualitySummary!==P||f.data.dataLastUpdated!==G?{...f,data:{...f.data,qualitySummary:P,dataLastUpdated:G}}:f}))},[n]),a.useEffect(()=>{O(o=>o.map(p=>p.data.isCheckingDataLastUpdated===h?p:{...p,data:{...p.data,isCheckingDataLastUpdated:h}}))},[h]),a.useEffect(()=>{const o=Ce(N.current,r,c=>c.id,c=>c.title);O(c=>c.map(f=>{const P=o.get(f.id)??ve;return f.data.highlighted===P.highlighted&&f.data.dimmed===P.dimmed?f:{...f,data:{...f.data,...P}}})),M(c=>c.map(f=>{var J,Z;const P=((J=o.get(f.source))==null?void 0:J.dimmed)??!1,G=((Z=o.get(f.target))==null?void 0:Z.dimmed)??!1,q=P&&G;return f.data.dimmed===q?f:{...f,data:{...f.data,dimmed:q}}}));const p=[...o.entries()].filter(([,c])=>c.highlighted).map(([c])=>c);p.length>0&&g.fitView({nodes:p.map(c=>({id:c})),duration:300,padding:B})},[r,g]);const Ve=a.useCallback(o=>{z(o),I.set(ye,o),R.current={},T.current&&I.remove(ee(T.current)),se(p=>p+1)},[]),ze=a.useCallback(o=>{K(p=>le(p)===le(o)?p:(I.set(Le,le(o)),o))},[]),We=a.useCallback(o=>{te(o),I.set(De,o)},[]),qe=a.useCallback(o=>{W(o),I.set(Se,o)},[]),Be=a.useCallback((o,p)=>{if(b===0||w===0)return;const c=qt(p,he,b,w,xn);c.x===p.x&&c.y===p.y||g.setViewport(c)},[he,w,b,g]);return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"absolute top-3 right-3 z-10 flex flex-col gap-1.5",children:[t.jsx(ce,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:()=>{g.fitView({padding:B,duration:300})},"aria-label":"Fit to view",children:t.jsx(Bt,{className:"h-6 w-6"})}),t.jsx(ce,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:()=>{g.zoomIn({duration:150})},"aria-label":"Zoom in",children:t.jsx(Kt,{className:"h-6 w-6"})}),t.jsx(ce,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:()=>{g.zoomOut({duration:150})},"aria-label":"Zoom out",children:t.jsx(Jt,{className:"h-6 w-6"})}),t.jsx(Zt,{viewMode:_,onViewModeChange:We,direction:k,onDirectionChange:Ve,showJoinFields:U,onShowJoinFieldsChange:qe,objectLabels:A,onObjectLabelsChange:ze})]}),ae&&t.jsx(Yt,{nodes:He,edges:Qe,nodeTypes:bn,edgeTypes:wn,onNodesChange:Ae,onEdgesChange:Me,onNodeDragStop:Ge,onNodeClick:Fe,onEdgeClick:Ue,onPaneClick:$e,deleteKeyCode:null,nodesDraggable:!0,nodesConnectable:!1,elementsSelectable:!0,edgesFocusable:!1,minZoom:.05,maxZoom:2,onMove:Be,fitView:!0,fitViewOptions:{padding:B},proOptions:{hideAttribution:!0},style:{width:"100%",height:"100%"},children:t.jsx(Xt,{pannable:!0,zoomable:!0,style:{width:140,height:100},nodeColor:o=>Pe(o.data.definitionType)})})]})}function In({nodes:n,edges:e,searchQuery:r,onOpenDataMart:u,onOpenQuality:i,onRunQuality:d,isCheckingDataLastUpdated:h,storageId:m,storageTitle:x,exportApiRef:j,className:g,style:b}){return n.length===0?null:t.jsxs("div",{className:`relative overflow-hidden rounded-lg border ${g??""}`,style:b??{height:480},children:[t.jsx("style",{children:$t}),t.jsx(Ut,{children:t.jsx(Sn,{nodes:n,edges:e,searchQuery:r,onOpenDataMart:u,onOpenQuality:i,onRunQuality:d,isCheckingDataLastUpdated:h,storageId:m,storageTitle:x,exportApiRef:j})})]})}export{In as default};
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-LAfgsoTV.js","assets/erd-fields-section-CXhqGUVO.js","assets/index-D0EaJx5B.js","assets/index-Do2n6-dC.css","assets/erd-fields-section-BnuhLJ6X.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as a,j as t,k as nt,S as st,l as oe,P as at,m as it,D as re,n as ot,o as rt,p as lt,L as ct,q as dt,s as ut,T as Ne,a as Re,R as ft,H as pt,b as Oe,t as ht,v as gt,I as mt,E as xt,w as bt,x as I,y as wt,z as Et,_ as Ct,A as _e,F as le,c as ce}from"./index-D0EaJx5B.js";import{I as vt,J as jt,K as yt,s as St,v as Dt,w as Lt,W as It,o as fe,t as Nt,B as Rt,D as Te,x as Ot,y as _t,z as Tt,A as Pt,u as kt,d as Pe,P as X,n as de,H as we,S as Ee,E as At,a as Mt,b as Ft,N as $t,R as Ut,c as Ht,e as ue,f as Qt,h as Ce,p as Gt,r as Vt,i as ve,Q as zt,T as Wt,j as qt,L as Bt,Z as Kt,k as Jt,C as Zt,l as Yt,M as Xt,q as en}from"./erd-fields-section-CXhqGUVO.js";const tn=(n,e)=>[n,e].sort().join("->"),nn=56;function sn(n,e=nn){const r=new Map;for(const i of n){if(i.sourceId===i.targetId)continue;const d=tn(i.sourceId,i.targetId),h=r.get(d);h?h.push(i):r.set(d,[i])}const u=new Map;for(const i of n)i.sourceId===i.targetId&&u.set(i.id,0);for(const i of r.values()){const d=[...i].sort((m,x)=>m.id.localeCompare(x.id)),h=d.length;d.forEach((m,x)=>{u.set(m.id,(x-(h-1)/2)*e)})}return u}const an=212,je=116,on=256,rn=88;function pe(n){return n==="erd"?on:an}function ke(n,e,r=!1,u=!1){const i=(r?-36:0)+(u?-30:0);if(e!=="erd")return je+i;const d=n.fields??[];if(d.length===0)return je+i;const h=vt(d),m=d.length>h;return rn+i+h*jt+(m?yt:0)}function ln(n,e,r,u,i,d){let h,m,x,j;if(d==="vertical"){const g=Math.max(40,Math.abs(u-e)*.3);h=n+i,m=e+g,x=r+i,j=u-g}else{const g=Math.max(40,Math.abs(r-n)*.3);h=n+g,m=e+i,x=r-g,j=u+i}return{path:`M ${n} ${e} C ${h} ${m}, ${x} ${j}, ${r} ${u}`,labelX:(n+3*h+3*x+r)/8,labelY:(e+3*m+3*j+u)/8}}function cn({id:n,sourceX:e,sourceY:r,targetX:u,targetY:i,sourcePosition:d,targetPosition:h,selected:m,data:x}){const{bowOffset:j,warning:g,joinLabel:b,dimmed:w,direction:E,bidirectional:D}=x;let y;if(j!==0)y=ln(e,r,u,i,j,E);else{const[C,k,z]=St({sourceX:e,sourceY:r,sourcePosition:d,targetX:u,targetY:i,targetPosition:h});y={path:C,labelX:k,labelY:z}}const S=g?It:m?fe:Nt,N=a.useId(),L=Dt("mc-arrow",N);return t.jsxs(t.Fragment,{children:[t.jsx(Lt,{markerId:L,color:S,withStart:D}),t.jsx(Rt,{id:n,path:y.path,markerEnd:`url(#${L}-end)`,markerStart:D?`url(#${L}-start)`:void 0,style:{stroke:S,strokeWidth:m?_t:Tt,strokeDasharray:g?Ot:void 0,opacity:w?Te:1,transition:"opacity 0.2s, stroke 0.2s"}}),t.jsx(Pt,{x:y.labelX,y:y.labelY,lines:b,selected:m??!1,dimmed:w})]})}const dn=100,un=200;function V(n,e){return`${n} ${e}${n===1?"":"s"}`}function fn({dataMartTitle:n,summary:e,onOpenQuality:r,onRunQuality:u}){const[i,d]=a.useState(!1),[h,m]=a.useState(!1),x=a.useRef(null),j=a.useRef(null),g=a.useRef(null),b=a.useRef(null),w=a.useRef(null),E=a.useRef(!1),D=a.useRef(!1),y=a.useRef(!1),S=nt(e),N=S.icon,L=[{count:e.errorChecks,singular:"execution error",tone:"error",icon:st},{count:e.errorFindings,singular:"critical finding",tone:"error",icon:oe},{count:e.warningFindings,singular:"warning finding",tone:"warning",icon:oe},{count:e.noticeFindings,singular:"notice finding",tone:"notice",icon:oe}].filter(l=>l.count>0),C=(e.state==="ISSUES"||e.state==="EXECUTION_FAILED")&&L.length>0,k=L.map(l=>V(l.count,l.singular)).join(", "),z=`Open Data Quality for ${n}: ${S.label}${C?`, ${k}`:""}`,_=S.isActive,te=e.state==="QUEUED"?"Queued":e.state==="RUNNING"?"Started":"Last checked";function U(){b.current!==null&&(clearTimeout(b.current),b.current=null)}function W(){w.current!==null&&(clearTimeout(w.current),w.current=null)}function A(){U(),W()}function K(){W(),!(i||E.current||b.current!==null)&&(b.current=setTimeout(()=>{b.current=null,!E.current&&d(!0)},dn))}function R(){U(),!(!i||E.current||w.current!==null)&&(w.current=setTimeout(()=>{w.current=null,!E.current&&d(!1)},un))}function T(l){if(l.stopPropagation(),l.preventDefault(),A(),E.current&&i){E.current=!1,d(!1);return}E.current=!0,d(!0),l.detail===0&&queueMicrotask(()=>{var v;(v=g.current)==null||v.focus()})}function ne(l){if(A(),l){E.current=!0,d(!0);return}E.current=!1,d(!1)}function se(l){l.stopPropagation(),l.preventDefault(),r()}async function ae(l){if(l.stopPropagation(),l.preventDefault(),!(_||h)){m(!0);try{await u()}finally{m(!1)}}}return a.useEffect(()=>()=>{b.current!==null&&clearTimeout(b.current),w.current!==null&&clearTimeout(w.current)},[]),a.useEffect(()=>{if(!i)return;function l(v){var H,M;const O=v.target;O instanceof Node&&((H=x.current)!=null&&H.contains(O)||(M=j.current)!=null&&M.contains(O)||(b.current!==null&&(clearTimeout(b.current),b.current=null),w.current!==null&&(clearTimeout(w.current),w.current=null),E.current=!1,d(!1)))}return document.addEventListener("pointerdown",l,!0),()=>{document.removeEventListener("pointerdown",l,!0)}},[i]),t.jsxs(at,{open:i,onOpenChange:ne,children:[t.jsx(it,{asChild:!0,children:t.jsx("button",{ref:x,type:"button",className:`${C?"":re[S.tone]} -ml-0.5 inline-flex shrink-0 cursor-pointer items-center rounded p-0.5 transition-colors ${C?"gap-1.5":""}`,"aria-label":z,onPointerDown:l=>{l.stopPropagation()},onPointerEnter:()=>{K()},onPointerLeave:()=>{R()},onFocus:()=>{if(y.current){y.current=!1;return}K()},onBlur:()=>{R()},onClick:T,children:C?L.map(l=>{const v=V(l.count,l.singular),O=l.icon;return t.jsxs("span",{role:"img","aria-label":v,className:`${re[l.tone]} inline-flex items-center gap-0.5`,children:[t.jsx(O,{className:"size-4","aria-hidden":!0}),t.jsx("span",{className:"leading-none font-medium tabular-nums",children:l.count})]},l.singular)}):t.jsx(N,{className:`size-4 ${e.state==="RUNNING"?"animate-spin":""}`,"aria-hidden":!0})})}),t.jsxs(ot,{ref:j,side:"top",align:"center",role:"region","aria-label":`Data Quality checks for ${n}`,className:"w-72 max-w-72 p-3 text-xs sm:w-72 sm:max-w-72",onOpenAutoFocus:l=>{l.preventDefault()},onCloseAutoFocus:l=>{var v;l.preventDefault(),D.current&&(D.current=!1,y.current=!0,(v=x.current)==null||v.focus({preventScroll:!0}),queueMicrotask(()=>{y.current=!1}))},onEscapeKeyDown:()=>{D.current=!0},onPointerEnter:()=>{W()},onPointerLeave:()=>{R()},onPointerDown:l=>{l.stopPropagation()},children:[t.jsxs("div",{className:"border-border flex items-center justify-between gap-3 border-b pb-2",children:[t.jsx(rt,{className:"text-sm font-semibold whitespace-nowrap",children:"Data Quality checks"}),t.jsx("span",{className:`${re[S.tone]} shrink-0 font-medium whitespace-nowrap`,children:S.label})]}),t.jsxs("div",{className:"text-muted-foreground space-y-1 py-2",children:[e.enabledChecks>0&&t.jsxs("p",{children:[e.enabledChecks," enabled"]}),_?t.jsx("p",{children:"Terminal results will be available after this run finishes."}):t.jsxs(t.Fragment,{children:[e.passedChecks>0&&t.jsxs("p",{children:[e.passedChecks," passed"]}),e.notApplicableChecks>0&&t.jsxs("p",{children:[e.notApplicableChecks," not applicable"]}),e.errorChecks>0&&t.jsx("p",{children:V(e.errorChecks,"execution error")}),e.errorFindings>0&&t.jsx("p",{children:V(e.errorFindings,"critical finding")}),e.warningFindings>0&&t.jsx("p",{children:V(e.warningFindings,"warning finding")}),e.noticeFindings>0&&t.jsx("p",{children:V(e.noticeFindings,"notice finding")})]}),e.lastRunAt&&t.jsx("p",{className:"text-foreground pt-2 pb-1 font-medium",children:`${te} ${lt(e.lastRunAt)}`})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[t.jsx("button",{ref:g,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 ${n}`,onPointerDown:l=>{l.stopPropagation()},onClick:se,children:"Open"}),t.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 ${n}`,title:_?"A Data Quality run is already active":void 0,disabled:_||h,onPointerDown:l=>{l.stopPropagation()},onClick:l=>{ae(l)},children:[h?t.jsx(ct,{className:"size-3.5 animate-spin","aria-hidden":"true"}):t.jsx(dt,{className:"size-3.5","aria-hidden":"true"}),h?"Starting…":"Run checks"]})]})]})]})}function pn({dataMartTitle:n,block:e,isChecking:r=!1}){const u=r?"checking…":ut(e);return t.jsxs(Ne,{children:[t.jsx(Re,{asChild:!0,children:t.jsx("button",{type:"button",className:`nodrag inline-flex cursor-default items-center rounded p-0.5 transition-colors ${r||e!=null&&e.dataLastUpdatedAt?"text-muted-foreground hover:text-foreground":"text-muted-foreground/50 hover:text-muted-foreground"}`,"aria-label":`Data Last Updated for ${n}: ${u}`,onPointerDown:i=>{i.stopPropagation()},children:r?t.jsx(ft,{className:"h-3.5 w-3.5 animate-spin","aria-hidden":"true"}):t.jsx(pt,{className:"h-3.5 w-3.5","aria-hidden":"true"})})}),t.jsx(Oe,{side:"top",align:"start",role:"tooltip",className:"max-w-xs",children:r?t.jsx("div",{className:"text-xs",children:"Checking Data Last Updated…"}):e?t.jsx(ht,{block:e}):t.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."})})]})}function hn({id:n,data:e,selected:r}){const[u,i]=a.useState(!1),d=kt();a.useEffect(()=>{d(n)},[u,n,d]);const h=Pe(e.definitionType),m=e.viewMode==="erd",x=e.fields,j=m&&x.length>0,g=e.objectLabels??gt,b=!g.source,w=!g.fields,E=!g.status,D=g.source&&g.fields&&g.status,y=e.direction==="vertical"?X.Top:X.Left,S=e.direction==="vertical"?X.Bottom:X.Right,N=`Open ${e.title} in new tab`;function L(C){C.stopPropagation(),C.preventDefault(),e.onOpenExternal()}return t.jsxs("div",{className:"bg-background relative flex cursor-grab flex-col overflow-hidden rounded-xl border shadow-sm active:cursor-grabbing",style:{width:pe(e.viewMode),borderColor:e.highlighted?de:r?fe:void 0,boxShadow:e.highlighted?`0 0 0 3px ${de}40, 0 0 12px ${de}60`:r?`0 0 0 1px ${fe}`:void 0,opacity:e.dimmed?Te: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&&t.jsx(we,{type:"target",position:y,isConnectable:!1,style:Ee}),t.jsxs("div",{className:`flex items-center gap-2 px-3.5 pt-3 ${D?"pb-3":"pb-1"}`,children:[b&&t.jsx("span",{className:"h-4 w-1 shrink-0 rounded-sm",style:{background:h},"aria-hidden":"true"}),t.jsx("span",{className:"text-foreground flex-1 truncate text-[13px] font-semibold",title:e.title,children:e.title}),E&&t.jsx(At,{isDraft:e.isDraft}),e.description&&t.jsxs(Ne,{children:[t.jsx(Re,{asChild:!0,children:t.jsx("button",{type:"button",className:"text-muted-foreground hover:text-foreground nodrag inline-flex cursor-default rounded p-0.5 transition-colors","aria-label":`Description for ${e.title}`,onPointerDown:C=>{C.stopPropagation()},children:t.jsx(mt,{className:"h-3.5 w-3.5","aria-hidden":"true"})})}),t.jsx(Oe,{side:"top",align:"center",role:"tooltip",className:"max-w-xs",children:e.description})]}),t.jsx("button",{type:"button",className:"text-muted-foreground hover:text-foreground nodrag shrink-0 cursor-pointer rounded p-0.5 transition-colors",onPointerDown:C=>{C.stopPropagation()},onClick:L,title:N,"aria-label":N,children:t.jsx(xt,{className:"h-3.5 w-3.5","aria-hidden":"true"})})]}),b&&t.jsx("div",{className:"text-muted-foreground flex items-center gap-2 px-3.5 pt-1 text-[11px]",children:t.jsx(Mt,{type:e.definitionType})}),!D&&t.jsxs("div",{className:"text-muted-foreground flex items-center gap-1 px-3.5 pt-1 pb-3 text-[11px]",children:[t.jsx(fn,{dataMartTitle:e.title,summary:e.qualitySummary,onOpenQuality:e.onOpenQuality,onRunQuality:e.onRunQuality}),t.jsx(pn,{dataMartTitle:e.title,block:e.dataLastUpdated,isChecking:e.isCheckingDataLastUpdated}),w&&t.jsxs("span",{className:"ml-auto shrink-0",children:[e.fieldCount," field",e.fieldCount!==1?"s":""]})]}),j&&t.jsx(Ft,{fields:x,expanded:u,onToggleExpanded:()=>{i(C=>!C)}}),e.hasOutgoing&&t.jsx(we,{type:"source",position:S,isConnectable:!1,style:Ee})]})}const ye="model-canvas-layout",Se="model-canvas-show-join-fields",De="model-canvas-view-mode",Le="model-canvas-object-labels",gn="model-canvas-positions";function ee(n){return`${gn}:${n}`}function mn(n){if(!n)return{};const e=I.get(ee(n),"json");if(!e)return{};const r={};for(const[u,i]of Object.entries(e)){const d=i;d&&typeof d.x=="number"&&typeof d.y=="number"&&(r[u]={x:d.x,y:d.y})}return r}const B=.2,xn=150,bn={modelCanvasNode:hn},wn={modelCanvasEdge:cn};function En(n){return JSON.stringify(n.map(({id:e,title:r,status:u,description:i,fieldCount:d,definitionType:h,fields:m})=>({id:e,title:r,status:u,description:i,fieldCount:d,definitionType:h,fields:m})))}function Cn(n){return JSON.stringify(n)}function Ie(n,e){const r=e(n),u=a.useRef({signature:r,value:n});return u.current.signature!==r&&(u.current={signature:r,value:n}),u.current.value}function vn(n){const{node:e,highlight:r,viewMode:u,objectLabels:i}=n,d=i.source,h=i.source&&i.fields&&i.status;return{id:e.id,type:"modelCanvasNode",position:n.position,width:pe(u),height:ke(e,u,d,h),draggable:!0,selectable:!1,focusable:!1,deletable:!1,style:en,data:{title:e.title,isDraft:e.status===_e.DRAFT,fieldCount:e.fieldCount,description:e.description,definitionType:e.definitionType??null,fields:e.fields??[],viewMode:u,objectLabels:i,dataLastUpdated:e.dataLastUpdated,isCheckingDataLastUpdated:n.isCheckingDataLastUpdated,hasIncoming:n.hasIncoming,hasOutgoing:n.hasOutgoing,highlighted:r.highlighted,dimmed:r.dimmed,direction:n.direction,onOpenExternal:n.onOpenExternal,qualitySummary:e.qualitySummary,onOpenQuality:n.onOpenQuality,onRunQuality:n.onRunQuality}}}function jn(n){return n.joinConditions.map(e=>`${e.sourceFieldName} = ${e.targetFieldName}`)}function yn(n){const{edge:e,warning:r}=n;return{id:e.id,type:"modelCanvasEdge",source:e.sourceId,target:e.targetId,focusable:!1,selectable:!0,deletable:!1,data:{bowOffset:n.bowOffset,warning:r,joinLabel:n.joinLabel,dimmed:n.dimmed,direction:n.direction,bidirectional:e.bidirectional}}}function Sn({nodes:n,edges:e,searchQuery:r,onOpenDataMart:u,onOpenQuality:i,onRunQuality:d,isCheckingDataLastUpdated:h=!1,storageId:m,storageTitle:x,exportApiRef:j}){const g=Ht(),b=ue(o=>o.width),w=ue(o=>o.height),E=ue(o=>o.domNode),D=a.useRef(u);D.current=u;const y=a.useRef(i);y.current=i;const S=a.useRef(d);S.current=d;const N=a.useRef(n);N.current=n;const L=a.useRef(r);L.current=r;const C=a.useRef(h);C.current=h;const[k,z]=a.useState(()=>bt(I.get(ye))),[_,te]=a.useState(()=>wt(I.get(De))),[U,W]=a.useState(()=>I.get(Se,"boolean")??!1),[A,K]=a.useState(()=>Et(I.get(Le))),R=a.useRef(null),T=a.useRef(m);(R.current===null||T.current!==m)&&(T.current=m,R.current=mn(m));const[ne,se]=a.useState(0),[ae,l]=a.useState(!1),[v,O]=a.useState([]),[H,M]=a.useState([]),he=a.useMemo(()=>Qt(v),[v]),Q=Ie(n,En),F=Ie(e,Cn);a.useImperativeHandle(j,()=>({exportCanvas:async o=>{const{exportModelCanvas:p}=await Ct(async()=>{const{exportModelCanvas:c}=await import("./index-LAfgsoTV.js");return{exportModelCanvas:c}},__vite__mapDeps([0,1,2,3,4]));return p(o,{viewport:(E==null?void 0:E.querySelector(".react-flow__viewport"))??null,flowNodes:v,nodes:n,edges:e,storageTitle:x})}}),[E,v,n,e,x]),a.useEffect(()=>{const o=new Set(F.map(s=>s.targetId)),p=new Set(F.map(s=>s.sourceId)),c=new Map(Q.map(s=>[s.id,s.status===_e.DRAFT])),f=Ce(Q,L.current,s=>s.id,s=>s.title),P=A.source,G=Q.map(s=>({id:s.id,width:pe(_),height:ke(s,_,P)})),q=U?new Map(F.map(s=>[s.id,jn(s)])):new Map,J=F.map(s=>({id:s.id,sourceId:s.sourceId,targetId:s.targetId,label:Gt(q.get(s.id)??[])})),{positions:Z}=Vt(G,J,k),Ke=sn(F),Je=new Set(Q.map(s=>s.id)),ge=Object.entries(R.current??{}),Y=Object.fromEntries(ge.filter(([s])=>Je.has(s)));ge.length!==Object.keys(Y).length&&(R.current=Y,T.current&&I.set(ee(T.current),Y));const Ze=new Map(N.current.map(s=>[s.id,s.qualitySummary])),Ye=new Map(N.current.map(s=>[s.id,s.dataLastUpdated]));O(Q.map(s=>vn({node:{...s,qualitySummary:Ze.get(s.id)??s.qualitySummary,dataLastUpdated:Ye.get(s.id)??s.dataLastUpdated},position:Y[s.id]??Z.get(s.id)??{x:0,y:0},hasIncoming:o.has(s.id),hasOutgoing:p.has(s.id),highlight:f.get(s.id)??ve,direction:k,viewMode:_,objectLabels:A,onOpenExternal:()=>{D.current(s.id)},onOpenQuality:()=>{y.current(s.id)},onRunQuality:()=>S.current(s.id),isCheckingDataLastUpdated:C.current}))),M(F.map(s=>{var xe,be;const et=((xe=f.get(s.sourceId))==null?void 0:xe.dimmed)??!1,tt=((be=f.get(s.targetId))==null?void 0:be.dimmed)??!1;return yn({edge:s,joinLabel:q.get(s.id)??[],bowOffset:Ke.get(s.id)??0,warning:s.joinNotConfigured||(c.get(s.sourceId)??!1)||(c.get(s.targetId)??!1),dimmed:et&&tt,direction:k})})),l(!0);const me=[...f.entries()].filter(([,s])=>s.highlighted).map(([s])=>s),Xe=requestAnimationFrame(()=>{g.fitView(me.length>0?{nodes:me.map(s=>({id:s})),duration:300,padding:B}:{padding:B,duration:300})});return()=>{cancelAnimationFrame(Xe)}},[Q,F,k,ne,_,U,A,g]);const Ae=a.useCallback(o=>{O(p=>zt(o,p))},[]),Me=a.useCallback(o=>{M(p=>Wt(o,p))},[]),[$,ie]=a.useState(null),Fe=a.useCallback((o,p)=>{ie(c=>c===p.id?null:p.id),M(c=>c.some(f=>f.selected)?c.map(f=>f.selected?{...f,selected:!1}:f):c)},[]),$e=a.useCallback(()=>{ie(null)},[]),Ue=a.useCallback(()=>{ie(null)},[]),He=a.useMemo(()=>$?v.map(o=>o.id===$?{...o,selected:!0}:o):v,[v,$]),Qe=a.useMemo(()=>$?H.map(o=>o.source===$||o.target===$?{...o,selected:!0}:o):H,[H,$]),Ge=a.useCallback((o,p)=>{const c=R.current??{};c[p.id]={x:p.position.x,y:p.position.y},R.current=c,T.current&&I.set(ee(T.current),c)},[]);a.useEffect(()=>{const o=new Map(n.map(c=>[c.id,c.qualitySummary])),p=new Map(n.map(c=>[c.id,c.dataLastUpdated]));O(c=>c.map(f=>{const P=o.get(f.id)??f.data.qualitySummary,G=p.has(f.id)?p.get(f.id)??null:f.data.dataLastUpdated;return f.data.qualitySummary!==P||f.data.dataLastUpdated!==G?{...f,data:{...f.data,qualitySummary:P,dataLastUpdated:G}}:f}))},[n]),a.useEffect(()=>{O(o=>o.map(p=>p.data.isCheckingDataLastUpdated===h?p:{...p,data:{...p.data,isCheckingDataLastUpdated:h}}))},[h]),a.useEffect(()=>{const o=Ce(N.current,r,c=>c.id,c=>c.title);O(c=>c.map(f=>{const P=o.get(f.id)??ve;return f.data.highlighted===P.highlighted&&f.data.dimmed===P.dimmed?f:{...f,data:{...f.data,...P}}})),M(c=>c.map(f=>{var J,Z;const P=((J=o.get(f.source))==null?void 0:J.dimmed)??!1,G=((Z=o.get(f.target))==null?void 0:Z.dimmed)??!1,q=P&&G;return f.data.dimmed===q?f:{...f,data:{...f.data,dimmed:q}}}));const p=[...o.entries()].filter(([,c])=>c.highlighted).map(([c])=>c);p.length>0&&g.fitView({nodes:p.map(c=>({id:c})),duration:300,padding:B})},[r,g]);const Ve=a.useCallback(o=>{z(o),I.set(ye,o),R.current={},T.current&&I.remove(ee(T.current)),se(p=>p+1)},[]),ze=a.useCallback(o=>{K(p=>le(p)===le(o)?p:(I.set(Le,le(o)),o))},[]),We=a.useCallback(o=>{te(o),I.set(De,o)},[]),qe=a.useCallback(o=>{W(o),I.set(Se,o)},[]),Be=a.useCallback((o,p)=>{if(b===0||w===0)return;const c=qt(p,he,b,w,xn);c.x===p.x&&c.y===p.y||g.setViewport(c)},[he,w,b,g]);return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"absolute top-3 right-3 z-10 flex flex-col gap-1.5",children:[t.jsx(ce,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:()=>{g.fitView({padding:B,duration:300})},"aria-label":"Fit to view",children:t.jsx(Bt,{className:"h-6 w-6"})}),t.jsx(ce,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:()=>{g.zoomIn({duration:150})},"aria-label":"Zoom in",children:t.jsx(Kt,{className:"h-6 w-6"})}),t.jsx(ce,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:()=>{g.zoomOut({duration:150})},"aria-label":"Zoom out",children:t.jsx(Jt,{className:"h-6 w-6"})}),t.jsx(Zt,{viewMode:_,onViewModeChange:We,direction:k,onDirectionChange:Ve,showJoinFields:U,onShowJoinFieldsChange:qe,objectLabels:A,onObjectLabelsChange:ze})]}),ae&&t.jsx(Yt,{nodes:He,edges:Qe,nodeTypes:bn,edgeTypes:wn,onNodesChange:Ae,onEdgesChange:Me,onNodeDragStop:Ge,onNodeClick:Fe,onEdgeClick:Ue,onPaneClick:$e,deleteKeyCode:null,nodesDraggable:!0,nodesConnectable:!1,elementsSelectable:!0,edgesFocusable:!1,minZoom:.05,maxZoom:2,onMove:Be,fitView:!0,fitViewOptions:{padding:B},proOptions:{hideAttribution:!0},style:{width:"100%",height:"100%"},children:t.jsx(Xt,{pannable:!0,zoomable:!0,style:{width:140,height:100},nodeColor:o=>Pe(o.data.definitionType)})})]})}function In({nodes:n,edges:e,searchQuery:r,onOpenDataMart:u,onOpenQuality:i,onRunQuality:d,isCheckingDataLastUpdated:h,storageId:m,storageTitle:x,exportApiRef:j,className:g,style:b}){return n.length===0?null:t.jsxs("div",{className:`relative overflow-hidden rounded-lg border ${g??""}`,style:b??{height:480},children:[t.jsx("style",{children:$t}),t.jsx(Ut,{children:t.jsx(Sn,{nodes:n,edges:e,searchQuery:r,onOpenDataMart:u,onOpenQuality:i,onRunQuality:d,isCheckingDataLastUpdated:h,storageId:m,storageTitle:x,exportApiRef:j})})]})}export{In as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as Se,r,j as s,C as Oe,N as ve,T as _e,a as ke,I as Ae,b as Re,E as Me,B as Te,c as U,M as Pe,g as He,d as Le,e as Fe,h as Ge,i as ue,f as We}from"./index-BTmqY2jZ.js";import{g as Ke,N as ze,R as Be,u as $e,d as xe,P as J,E as he,H as Q,S as ee,a as Ye,b as Ze,c as Ve,e as ge,f as Xe,h as Ue,i as Je,j as qe,L as Qe,Z as et,k as tt,C as st,l as it,M as nt,O as at,W as ne,m as ot,D as be,n as te,o as ie,p as rt,r as lt,q as ct,s as dt,t as ut,v as ht,w as gt,B as ft,x as pt,y as mt,z as xt,A as bt,F as Nt,G as Ct}from"./erd-fields-section-BngQfGWe.js";const $=3,Ne=.05,yt=1e-4,fe=1;function Et(i,e,l,m){const d=i.maxX-i.minX,g=i.maxY-i.minY;return d<=0||g<=0||e<=0||l<=0?null:Ke({x:i.minX,y:i.minY,width:d,height:g},e,l,Ne,$,m)}function jt(i){const e=Number.isFinite(i)&&i>0?Math.min(i,$):fe;return{min:e>=$?fe:e,max:$}}function wt(i,e,l){if(!Number.isFinite(i)||i<=0)return null;const m=i*(1+e),d=Math.min(Math.max(m,l.min),l.max);return!Number.isFinite(d)||Math.abs(d-i)<yt||e>0!=d>i?null:{zoom:d,delta:d/i-1}}const Y=240,Ce=48,q=92,It=.85,se=1/It-1,Dt=150,St=ot;function pe({data:i}){const e=He(i);if(!e)return null;const l=e.kind==="attention";return s.jsxs("span",{title:l?Le:void 0,style:{position:"absolute",top:-18,right:4,display:"inline-flex",alignItems:"center",gap:2,fontSize:10,fontWeight:600,color:l?at:ne,lineHeight:1,whiteSpace:"nowrap"},children:[l&&s.jsx(Fe,{style:{width:12,height:12,color:St}}),e.label]})}function ye(i){return i==="erd"?Nt:Y}function me(i,e){return{width:i.isSource?Y:ye(i.viewMode),borderColor:i.highlighted?te:Ge(i)?ne:e?ie:void 0,boxShadow:i.highlighted?`0 0 0 3px ${te}40, 0 0 12px ${te}60`:e?`0 0 0 1px ${ie}`:void 0,opacity:i.dimmed?be: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 Ot({id:i,data:e,selected:l}){const[m,d]=r.useState(!1),g=$e();r.useEffect(()=>{g(i)},[m,i,g]);const y=xe(e.definitionType),x=e.objectLabels,c=!x.source,_=!x.fields,E=!x.status,j=e.direction==="vertical"?J.Top:J.Left,w=e.direction==="vertical"?J.Bottom:J.Right;function O(f){f.stopPropagation(),f.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:{...me(e,l),height:Ce,padding:"0 14px"},children:[s.jsx(pe,{data:e}),c&&s.jsx("span",{className:"h-4 w-1 shrink-0 rounded-sm",style:{background:y},"aria-hidden":"true"}),s.jsx("span",{className:"text-foreground flex-1 truncate text-[13px] font-semibold",title:e.label,children:e.label}),E&&s.jsx(he,{isDraft:e.isDraft,decorative:!0}),e.hasOutgoing&&s.jsx(Q,{type:"source",position:w,isConnectable:!1,style:ee})]});const N=`Open ${e.label} in new tab`,k=e.viewMode==="erd"&&e.fields.length>0;return s.jsxs("div",{title:e.isCycleStub?Oe:void 0,className:"bg-background relative flex flex-col rounded-xl border shadow-sm",style:me(e,l),children:[s.jsx(pe,{data:e}),s.jsx(Q,{type:"target",position:j,isConnectable:!1,style:ee}),s.jsxs("div",{className:"flex items-center gap-2 px-3.5 pt-3 pb-1",children:[c&&s.jsx("span",{className:"h-4 w-1 shrink-0 rounded-sm",style:{background:y},"aria-hidden":"true"}),s.jsx("span",{className:"text-foreground flex-1 truncate text-[13px] font-semibold",title:e.label,children:e.label}),E&&s.jsx(he,{isDraft:e.isDraft,decorative:!0}),!e.userHasAccess&&s.jsx(ve,{}),e.description&&s.jsxs(_e,{children:[s.jsx(ke,{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:f=>{f.stopPropagation()},children:s.jsx(Ae,{className:"h-3.5 w-3.5","aria-hidden":"true"})})}),s.jsx(Re,{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:f=>{f.stopPropagation()},onClick:O,title:N,"aria-label":N,children:s.jsx(Me,{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:[c&&s.jsx(Ye,{type:e.definitionType}),e.targetAlias&&s.jsx(Te,{variant:"secondary",className:"inline-block max-w-[90px] truncate px-1.5 py-0 text-[10px]",title:e.targetAlias,children:e.targetAlias}),_&&s.jsxs("span",{className:"text-muted-foreground ml-auto shrink-0 text-[11px]",children:[e.fieldCount??0," field",e.fieldCount!==1?"s":""]})]}),k&&s.jsx(Ze,{fields:e.fields,expanded:m,onToggleExpanded:()=>{d(f=>!f)}}),e.hasOutgoing&&s.jsx(Q,{type:"source",position:w,isConnectable:!1,style:ee})]})}function vt({id:i,sourceX:e,sourceY:l,targetX:m,targetY:d,sourcePosition:g,targetPosition:y,selected:x,data:c}){const[_,E,j]=dt({sourceX:e,sourceY:l,sourcePosition:g,targetX:m,targetY:d,targetPosition:y}),w=c.warning?ne:x?ie:ut,O=r.useId(),N=ht("rel-arrow",O);return s.jsxs(s.Fragment,{children:[s.jsx(gt,{markerId:N,color:w,withStart:!1}),s.jsx(ft,{id:i,path:_,markerEnd:`url(#${N}-end)`,style:{stroke:w,strokeWidth:x?mt:xt,strokeDasharray:c.warning?pt:void 0,opacity:c.dimmed?be:1,transition:"opacity 0.2s, stroke 0.2s"}}),s.jsx(bt,{x:E,y:j,lines:c.joinLabel,selected:x??!1,dimmed:c.dimmed})]})}const _t={relationshipNode:Ot},kt={relationshipEdge:vt};function At(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 Rt(i,e,l){return i?Ce:l!=="erd"?q:q+Ct(e)}function Mt({dataMartId:i,dataMartTitle:e,dataMartDescription:l,dataMartStatus:m,rootDefinitionType:d,definitionTypes:g,initialRelationships:y,graph:x,fieldCounts:c,showLooped:_,statusFilter:E,viewMode:j,objectLabels:w,direction:O,showJoinFields:N,fieldsByAliasPath:k,onOpenExternal:f}){let F=0;const M=(t,a)=>a&&!_||E!=="all"&&t!==E?(F++,!1):!0,v=new Map,A=[],G=new Set,P=m==="DRAFT";v.set(i,{dmId:i,title:e,description:l,depth:0,isSource:!0,isDraft:P,userHasAccess:!0});const u=new Map;u.set("",i);function C(t,a,D,b,K){const S=`path:${b}`;A.push({sourceId:t,targetId:S,joinLabel:N?K.map(V=>`${V.sourceFieldName} = ${V.targetFieldName}`):[]}),G.add(t),v.set(S,{dmId:a,aliasPath:b,...D}),u.set(b,S)}if(x)for(const t of x.nodes){const a=t.aliasPath.lastIndexOf("."),D=a===-1?"":t.aliasPath.slice(0,a),b=u.get(D);b&&M(t.relationship.targetDataMart.status,t.isCycleStub)&&C(b,t.relationship.targetDataMart.id,{title:t.relationship.targetDataMart.title,description:t.relationship.targetDataMart.description,depth:t.depth,isSource:!1,targetAlias:t.relationship.targetAlias,fieldCount:(c==null?void 0:c.get(t.relationship.id))??0,isDraft:t.relationship.targetDataMart.status==="DRAFT",isBlocked:t.isBlocked,isJoinNotConfigured:t.relationship.joinConditions.length===0,isCycleStub:t.isCycleStub,isMissingPrimaryKey:ue(t.relationship.targetDataMart.hasPrimaryKey,t.relationship.joinConditions.length),userHasAccess:t.relationship.targetDataMart.userHasAccess},t.aliasPath,t.relationship.joinConditions)}else for(const t of y)M(t.targetDataMart.status,t.targetDataMart.id===i)&&C(i,t.targetDataMart.id,{title:t.targetDataMart.title,description:t.targetDataMart.description,depth:1,isSource:!1,targetAlias:t.targetAlias,fieldCount:(c==null?void 0:c.get(t.id))??0,isDraft:t.targetDataMart.status==="DRAFT",isBlocked:P,isJoinNotConfigured:t.joinConditions.length===0,isCycleStub:t.targetDataMart.id===i,isMissingPrimaryKey:ue(t.targetDataMart.hasPrimaryKey,t.joinConditions.length),userHasAccess:t.targetDataMart.userHasAccess},t.targetAlias,t.joinConditions);const I=new Map,T=new Map,H=new Map;for(const[t,a]of v){const D=a.isSource||a.aliasPath===void 0?[]:(k==null?void 0:k.get(a.aliasPath))??[];I.set(t,D),T.set(t,a.isSource?Y:ye(j)),H.set(t,Rt(a.isSource,D,j))}const h=[...v.keys()].map(t=>({id:t,width:T.get(t)??Y,height:H.get(t)??q})),Z=A.map(t=>({id:`${t.sourceId}->${t.targetId}`,sourceId:t.sourceId,targetId:t.targetId,label:rt(t.joinLabel)})),{positions:W}=lt(h,Z,O),R=[];for(const[t,a]of v)R.push({id:t,type:"relationshipNode",position:W.get(t)??{x:0,y:0},width:T.get(t)??Y,height:H.get(t)??q,draggable:!1,selectable:!1,focusable:!1,style:ct,data:{isSource:a.isSource,label:a.title,targetAlias:a.targetAlias,fieldCount:a.fieldCount,description:a.description,definitionType:a.isSource?d:(g==null?void 0:g.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:G.has(t)&&!a.isCycleStub,highlighted:!1,dimmed:!1,fields:I.get(t)??[],viewMode:j,objectLabels:w,direction:O,onOpenExternal:()=>{f(a.dmId)}}});const L=[];for(const t of A){const a=v.get(t.sourceId),D=v.get(t.targetId);if(!a||!D)continue;const b=We(a,D);L.push({id:`${t.sourceId}->${t.targetId}`,type:"relationshipEdge",source:t.sourceId,target:t.targetId,focusable:!1,selectable:!1,data:{warning:b,dimmed:!1,joinLabel:t.joinLabel}})}return{nodes:R,edges:L,filteredOutCount:F}}function Tt({dataMartId:i,dataMartTitle:e,dataMartDescription:l,dataMartStatus:m,dataMartDefinitionType:d,definitionTypes:g,relationships:y,relationshipGraph:x,connectedFieldCounts:c,searchQuery:_,onRequestFullscreen:E,onOpenExternal:j,showLooped:w,statusFilter:O,viewMode:N,onViewModeChange:k,direction:f,onDirectionChange:F,showJoinFields:M,onShowJoinFieldsChange:v,objectLabels:A,onObjectLabelsChange:G,fieldsByAliasPath:P}){const u=Ve(),C=ge(n=>n.width),I=ge(n=>n.height),T=r.useRef(!1),H=r.useRef(!1),h=r.useMemo(()=>Mt({dataMartId:i,dataMartTitle:e,dataMartDescription:l,dataMartStatus:m,rootDefinitionType:d??null,definitionTypes:g,initialRelationships:y,graph:x,fieldCounts:c,showLooped:w,statusFilter:O,viewMode:N,objectLabels:A,direction:f,showJoinFields:M,fieldsByAliasPath:P,onOpenExternal:j}),[i,e,l,m,d,g,y,x,c,w,O,N,A,f,M,P,j]),[Z,W]=r.useState(null),[R,L]=r.useState(null),t=r.useMemo(()=>At(h),[h]),a=r.useMemo(()=>Xe(h.nodes),[h.nodes]),D=r.useRef(t),b=r.useMemo(()=>Et(a,C,I,se),[a,C,I]),K=r.useMemo(()=>jt((b==null?void 0:b.zoom)??Number.NaN),[b]);r.useEffect(()=>{D.current!==t&&(D.current=t,H.current=!1,L(n=>n!==null&&h.nodes.some(o=>o.id===n)?n:null),W(n=>n!==null&&h.edges.some(o=>o.id===n)?n:null))},[t,h]);const S=r.useMemo(()=>Ue(h.nodes,_,n=>n.id,n=>n.data.label),[h.nodes,_]),V=r.useMemo(()=>h.nodes.map(n=>{const o=S.get(n.id)??Je,p=n.id===R;return n.data.highlighted===o.highlighted&&n.data.dimmed===o.dimmed&&(n.selected??!1)===p?n:{...n,selected:p,data:{...n.data,...o}}}),[h.nodes,S,R]),Ee=r.useMemo(()=>h.edges.map(n=>{var ce,de;const o=(((ce=S.get(n.source))==null?void 0:ce.dimmed)??!1)&&(((de=S.get(n.target))==null?void 0:de.dimmed)??!1),p=n.id===Z||R!==null&&(n.source===R||n.target===R);return n.data.dimmed===o&&(n.selected??!1)===p?n:{...n,selected:p,data:{...n.data,dimmed:o}}}),[h.edges,S,Z,R]),je=r.useCallback((n,o)=>{W(p=>p===o.id?null:o.id),L(null)},[]),we=r.useCallback((n,o)=>{L(p=>p===o.id?null:o.id),W(null)},[]),Ie=r.useCallback(()=>{W(null),L(null)},[]),ae=r.useRef(S);ae.current=S;const X=r.useCallback(()=>{const n=[...ae.current.entries()].filter(([,o])=>o.highlighted).map(([o])=>o);n.length!==0&&u.fitView({nodes:n.map(o=>({id:o})),duration:300,padding:se})},[u]),B=r.useCallback(()=>u.fitView({minZoom:Ne,maxZoom:$,padding:se}),[u]),oe=r.useRef(b);oe.current=b;const re=r.useCallback(()=>{const n=oe.current;return n?u.setViewport(n):B()},[B,u]),z=r.useCallback(()=>{H.current=!0},[]);r.useEffect(()=>{C===0||I===0||H.current||re().then(()=>{T.current=!0,X()})},[C,I,t,re,X]),r.useEffect(()=>{T.current&&X()},[S,X]);const le=r.useCallback(n=>{z();const o=u.getZoom();if(!Number.isFinite(o)||o<=0){B();return}const p=wt(o,n,K);p&&u.zoomTo(p.zoom,{duration:150})},[B,z,u,K]),De=r.useCallback((n,o)=>{if(C===0||I===0||!Number.isFinite(o.zoom))return;const p=qe(o,a,C,I,Dt);p.x===o.x&&p.y===o.y||u.setViewport(p)},[a,I,C,u]);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:()=>{z(),B()},"aria-label":"Fit to view",children:s.jsx(Qe,{className:"h-6 w-6"})}),s.jsx(U,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:()=>{le(.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:()=>{le(-.25)},"aria-label":"Zoom out",children:s.jsx(tt,{className:"h-6 w-6"})}),E&&s.jsx(U,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:E,"aria-label":"Expand diagram",children:s.jsx(Pe,{className:"h-6 w-6"})}),s.jsx(st,{viewMode:N,onViewModeChange:k,direction:f,onDirectionChange:F,showJoinFields:M,onShowJoinFieldsChange:v,objectLabels:A,onObjectLabelsChange:G})]})}),s.jsxs("div",{className:"h-full w-full",onPointerDownCapture:z,onWheelCapture:z,children:[s.jsx(it,{nodes:V,edges:Ee,nodeTypes:_t,edgeTypes:kt,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,edgesFocusable:!1,zoomOnDoubleClick:!1,minZoom:K.min,maxZoom:K.max,onEdgeClick:je,onNodeClick:we,onPaneClick:Ie,deleteKeyCode:null,panActivationKeyCode:null,onMove:De,onMoveStart:n=>{n&&z()},proOptions:{hideAttribution:!0},style:{width:"100%",height:"100%"},children:s.jsx(nt,{pannable:!0,zoomable:!0,style:{width:140,height:100},nodeColor:n=>xe(n.data.definitionType)})}),h.nodes.length===1&&h.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 Lt({dataMartId:i,dataMartTitle:e,dataMartDescription:l,dataMartStatus:m,dataMartDefinitionType:d,definitionTypes:g,relationships:y,relationshipGraph:x,connectedFieldCounts:c,searchQuery:_,onRequestFullscreen:E,showLooped:j,statusFilter:w,viewMode:O,onViewModeChange:N,direction:k,onDirectionChange:f,showJoinFields:F,onShowJoinFieldsChange:M,objectLabels:v,onObjectLabelsChange:A,fieldsByAliasPath:G,className:P,style:u}){const{scope:C}=Se(),I=r.useCallback(T=>{window.open(C(`/data-marts/${T}/data-setup`),"_blank","noopener,noreferrer")},[C]);return y.length===0?null:s.jsxs("div",{className:`relative overflow-hidden rounded-lg border ${P??""}`,style:u??{height:480},children:[s.jsx("style",{children:ze}),s.jsx(Be,{children:s.jsx(Tt,{dataMartId:i,dataMartTitle:e,dataMartDescription:l,dataMartStatus:m,dataMartDefinitionType:d,definitionTypes:g,relationships:y,relationshipGraph:x,connectedFieldCounts:c,searchQuery:_,onRequestFullscreen:E,onOpenExternal:I,showLooped:j,statusFilter:w,viewMode:O,onViewModeChange:N,direction:k,onDirectionChange:f,showJoinFields:F,onShowJoinFieldsChange:M,objectLabels:v,onObjectLabelsChange:A,fieldsByAliasPath:G})})]})}export{Lt as RelationshipCanvas,Ot as RelationshipFlowNode};
|
|
1
|
+
import{u as Se,r,j as s,C as Oe,N as ve,T as _e,a as ke,I as Ae,b as Re,E as Me,B as Te,c as U,M as Pe,g as He,d as Le,e as Fe,h as Ge,i as ue,f as We}from"./index-D0EaJx5B.js";import{g as Ke,N as ze,R as Be,u as $e,d as xe,P as J,E as he,H as Q,S as ee,a as Ye,b as Ze,c as Ve,e as ge,f as Xe,h as Ue,i as Je,j as qe,L as Qe,Z as et,k as tt,C as st,l as it,M as nt,O as at,W as ne,m as ot,D as be,n as te,o as ie,p as rt,r as lt,q as ct,s as dt,t as ut,v as ht,w as gt,B as ft,x as pt,y as mt,z as xt,A as bt,F as Nt,G as Ct}from"./erd-fields-section-CXhqGUVO.js";const $=3,Ne=.05,yt=1e-4,fe=1;function Et(i,e,l,m){const d=i.maxX-i.minX,g=i.maxY-i.minY;return d<=0||g<=0||e<=0||l<=0?null:Ke({x:i.minX,y:i.minY,width:d,height:g},e,l,Ne,$,m)}function jt(i){const e=Number.isFinite(i)&&i>0?Math.min(i,$):fe;return{min:e>=$?fe:e,max:$}}function wt(i,e,l){if(!Number.isFinite(i)||i<=0)return null;const m=i*(1+e),d=Math.min(Math.max(m,l.min),l.max);return!Number.isFinite(d)||Math.abs(d-i)<yt||e>0!=d>i?null:{zoom:d,delta:d/i-1}}const Y=240,Ce=48,q=92,It=.85,se=1/It-1,Dt=150,St=ot;function pe({data:i}){const e=He(i);if(!e)return null;const l=e.kind==="attention";return s.jsxs("span",{title:l?Le:void 0,style:{position:"absolute",top:-18,right:4,display:"inline-flex",alignItems:"center",gap:2,fontSize:10,fontWeight:600,color:l?at:ne,lineHeight:1,whiteSpace:"nowrap"},children:[l&&s.jsx(Fe,{style:{width:12,height:12,color:St}}),e.label]})}function ye(i){return i==="erd"?Nt:Y}function me(i,e){return{width:i.isSource?Y:ye(i.viewMode),borderColor:i.highlighted?te:Ge(i)?ne:e?ie:void 0,boxShadow:i.highlighted?`0 0 0 3px ${te}40, 0 0 12px ${te}60`:e?`0 0 0 1px ${ie}`:void 0,opacity:i.dimmed?be: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 Ot({id:i,data:e,selected:l}){const[m,d]=r.useState(!1),g=$e();r.useEffect(()=>{g(i)},[m,i,g]);const y=xe(e.definitionType),x=e.objectLabels,c=!x.source,_=!x.fields,E=!x.status,j=e.direction==="vertical"?J.Top:J.Left,w=e.direction==="vertical"?J.Bottom:J.Right;function O(f){f.stopPropagation(),f.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:{...me(e,l),height:Ce,padding:"0 14px"},children:[s.jsx(pe,{data:e}),c&&s.jsx("span",{className:"h-4 w-1 shrink-0 rounded-sm",style:{background:y},"aria-hidden":"true"}),s.jsx("span",{className:"text-foreground flex-1 truncate text-[13px] font-semibold",title:e.label,children:e.label}),E&&s.jsx(he,{isDraft:e.isDraft,decorative:!0}),e.hasOutgoing&&s.jsx(Q,{type:"source",position:w,isConnectable:!1,style:ee})]});const N=`Open ${e.label} in new tab`,k=e.viewMode==="erd"&&e.fields.length>0;return s.jsxs("div",{title:e.isCycleStub?Oe:void 0,className:"bg-background relative flex flex-col rounded-xl border shadow-sm",style:me(e,l),children:[s.jsx(pe,{data:e}),s.jsx(Q,{type:"target",position:j,isConnectable:!1,style:ee}),s.jsxs("div",{className:"flex items-center gap-2 px-3.5 pt-3 pb-1",children:[c&&s.jsx("span",{className:"h-4 w-1 shrink-0 rounded-sm",style:{background:y},"aria-hidden":"true"}),s.jsx("span",{className:"text-foreground flex-1 truncate text-[13px] font-semibold",title:e.label,children:e.label}),E&&s.jsx(he,{isDraft:e.isDraft,decorative:!0}),!e.userHasAccess&&s.jsx(ve,{}),e.description&&s.jsxs(_e,{children:[s.jsx(ke,{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:f=>{f.stopPropagation()},children:s.jsx(Ae,{className:"h-3.5 w-3.5","aria-hidden":"true"})})}),s.jsx(Re,{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:f=>{f.stopPropagation()},onClick:O,title:N,"aria-label":N,children:s.jsx(Me,{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:[c&&s.jsx(Ye,{type:e.definitionType}),e.targetAlias&&s.jsx(Te,{variant:"secondary",className:"inline-block max-w-[90px] truncate px-1.5 py-0 text-[10px]",title:e.targetAlias,children:e.targetAlias}),_&&s.jsxs("span",{className:"text-muted-foreground ml-auto shrink-0 text-[11px]",children:[e.fieldCount??0," field",e.fieldCount!==1?"s":""]})]}),k&&s.jsx(Ze,{fields:e.fields,expanded:m,onToggleExpanded:()=>{d(f=>!f)}}),e.hasOutgoing&&s.jsx(Q,{type:"source",position:w,isConnectable:!1,style:ee})]})}function vt({id:i,sourceX:e,sourceY:l,targetX:m,targetY:d,sourcePosition:g,targetPosition:y,selected:x,data:c}){const[_,E,j]=dt({sourceX:e,sourceY:l,sourcePosition:g,targetX:m,targetY:d,targetPosition:y}),w=c.warning?ne:x?ie:ut,O=r.useId(),N=ht("rel-arrow",O);return s.jsxs(s.Fragment,{children:[s.jsx(gt,{markerId:N,color:w,withStart:!1}),s.jsx(ft,{id:i,path:_,markerEnd:`url(#${N}-end)`,style:{stroke:w,strokeWidth:x?mt:xt,strokeDasharray:c.warning?pt:void 0,opacity:c.dimmed?be:1,transition:"opacity 0.2s, stroke 0.2s"}}),s.jsx(bt,{x:E,y:j,lines:c.joinLabel,selected:x??!1,dimmed:c.dimmed})]})}const _t={relationshipNode:Ot},kt={relationshipEdge:vt};function At(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 Rt(i,e,l){return i?Ce:l!=="erd"?q:q+Ct(e)}function Mt({dataMartId:i,dataMartTitle:e,dataMartDescription:l,dataMartStatus:m,rootDefinitionType:d,definitionTypes:g,initialRelationships:y,graph:x,fieldCounts:c,showLooped:_,statusFilter:E,viewMode:j,objectLabels:w,direction:O,showJoinFields:N,fieldsByAliasPath:k,onOpenExternal:f}){let F=0;const M=(t,a)=>a&&!_||E!=="all"&&t!==E?(F++,!1):!0,v=new Map,A=[],G=new Set,P=m==="DRAFT";v.set(i,{dmId:i,title:e,description:l,depth:0,isSource:!0,isDraft:P,userHasAccess:!0});const u=new Map;u.set("",i);function C(t,a,D,b,K){const S=`path:${b}`;A.push({sourceId:t,targetId:S,joinLabel:N?K.map(V=>`${V.sourceFieldName} = ${V.targetFieldName}`):[]}),G.add(t),v.set(S,{dmId:a,aliasPath:b,...D}),u.set(b,S)}if(x)for(const t of x.nodes){const a=t.aliasPath.lastIndexOf("."),D=a===-1?"":t.aliasPath.slice(0,a),b=u.get(D);b&&M(t.relationship.targetDataMart.status,t.isCycleStub)&&C(b,t.relationship.targetDataMart.id,{title:t.relationship.targetDataMart.title,description:t.relationship.targetDataMart.description,depth:t.depth,isSource:!1,targetAlias:t.relationship.targetAlias,fieldCount:(c==null?void 0:c.get(t.relationship.id))??0,isDraft:t.relationship.targetDataMart.status==="DRAFT",isBlocked:t.isBlocked,isJoinNotConfigured:t.relationship.joinConditions.length===0,isCycleStub:t.isCycleStub,isMissingPrimaryKey:ue(t.relationship.targetDataMart.hasPrimaryKey,t.relationship.joinConditions.length),userHasAccess:t.relationship.targetDataMart.userHasAccess},t.aliasPath,t.relationship.joinConditions)}else for(const t of y)M(t.targetDataMart.status,t.targetDataMart.id===i)&&C(i,t.targetDataMart.id,{title:t.targetDataMart.title,description:t.targetDataMart.description,depth:1,isSource:!1,targetAlias:t.targetAlias,fieldCount:(c==null?void 0:c.get(t.id))??0,isDraft:t.targetDataMart.status==="DRAFT",isBlocked:P,isJoinNotConfigured:t.joinConditions.length===0,isCycleStub:t.targetDataMart.id===i,isMissingPrimaryKey:ue(t.targetDataMart.hasPrimaryKey,t.joinConditions.length),userHasAccess:t.targetDataMart.userHasAccess},t.targetAlias,t.joinConditions);const I=new Map,T=new Map,H=new Map;for(const[t,a]of v){const D=a.isSource||a.aliasPath===void 0?[]:(k==null?void 0:k.get(a.aliasPath))??[];I.set(t,D),T.set(t,a.isSource?Y:ye(j)),H.set(t,Rt(a.isSource,D,j))}const h=[...v.keys()].map(t=>({id:t,width:T.get(t)??Y,height:H.get(t)??q})),Z=A.map(t=>({id:`${t.sourceId}->${t.targetId}`,sourceId:t.sourceId,targetId:t.targetId,label:rt(t.joinLabel)})),{positions:W}=lt(h,Z,O),R=[];for(const[t,a]of v)R.push({id:t,type:"relationshipNode",position:W.get(t)??{x:0,y:0},width:T.get(t)??Y,height:H.get(t)??q,draggable:!1,selectable:!1,focusable:!1,style:ct,data:{isSource:a.isSource,label:a.title,targetAlias:a.targetAlias,fieldCount:a.fieldCount,description:a.description,definitionType:a.isSource?d:(g==null?void 0:g.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:G.has(t)&&!a.isCycleStub,highlighted:!1,dimmed:!1,fields:I.get(t)??[],viewMode:j,objectLabels:w,direction:O,onOpenExternal:()=>{f(a.dmId)}}});const L=[];for(const t of A){const a=v.get(t.sourceId),D=v.get(t.targetId);if(!a||!D)continue;const b=We(a,D);L.push({id:`${t.sourceId}->${t.targetId}`,type:"relationshipEdge",source:t.sourceId,target:t.targetId,focusable:!1,selectable:!1,data:{warning:b,dimmed:!1,joinLabel:t.joinLabel}})}return{nodes:R,edges:L,filteredOutCount:F}}function Tt({dataMartId:i,dataMartTitle:e,dataMartDescription:l,dataMartStatus:m,dataMartDefinitionType:d,definitionTypes:g,relationships:y,relationshipGraph:x,connectedFieldCounts:c,searchQuery:_,onRequestFullscreen:E,onOpenExternal:j,showLooped:w,statusFilter:O,viewMode:N,onViewModeChange:k,direction:f,onDirectionChange:F,showJoinFields:M,onShowJoinFieldsChange:v,objectLabels:A,onObjectLabelsChange:G,fieldsByAliasPath:P}){const u=Ve(),C=ge(n=>n.width),I=ge(n=>n.height),T=r.useRef(!1),H=r.useRef(!1),h=r.useMemo(()=>Mt({dataMartId:i,dataMartTitle:e,dataMartDescription:l,dataMartStatus:m,rootDefinitionType:d??null,definitionTypes:g,initialRelationships:y,graph:x,fieldCounts:c,showLooped:w,statusFilter:O,viewMode:N,objectLabels:A,direction:f,showJoinFields:M,fieldsByAliasPath:P,onOpenExternal:j}),[i,e,l,m,d,g,y,x,c,w,O,N,A,f,M,P,j]),[Z,W]=r.useState(null),[R,L]=r.useState(null),t=r.useMemo(()=>At(h),[h]),a=r.useMemo(()=>Xe(h.nodes),[h.nodes]),D=r.useRef(t),b=r.useMemo(()=>Et(a,C,I,se),[a,C,I]),K=r.useMemo(()=>jt((b==null?void 0:b.zoom)??Number.NaN),[b]);r.useEffect(()=>{D.current!==t&&(D.current=t,H.current=!1,L(n=>n!==null&&h.nodes.some(o=>o.id===n)?n:null),W(n=>n!==null&&h.edges.some(o=>o.id===n)?n:null))},[t,h]);const S=r.useMemo(()=>Ue(h.nodes,_,n=>n.id,n=>n.data.label),[h.nodes,_]),V=r.useMemo(()=>h.nodes.map(n=>{const o=S.get(n.id)??Je,p=n.id===R;return n.data.highlighted===o.highlighted&&n.data.dimmed===o.dimmed&&(n.selected??!1)===p?n:{...n,selected:p,data:{...n.data,...o}}}),[h.nodes,S,R]),Ee=r.useMemo(()=>h.edges.map(n=>{var ce,de;const o=(((ce=S.get(n.source))==null?void 0:ce.dimmed)??!1)&&(((de=S.get(n.target))==null?void 0:de.dimmed)??!1),p=n.id===Z||R!==null&&(n.source===R||n.target===R);return n.data.dimmed===o&&(n.selected??!1)===p?n:{...n,selected:p,data:{...n.data,dimmed:o}}}),[h.edges,S,Z,R]),je=r.useCallback((n,o)=>{W(p=>p===o.id?null:o.id),L(null)},[]),we=r.useCallback((n,o)=>{L(p=>p===o.id?null:o.id),W(null)},[]),Ie=r.useCallback(()=>{W(null),L(null)},[]),ae=r.useRef(S);ae.current=S;const X=r.useCallback(()=>{const n=[...ae.current.entries()].filter(([,o])=>o.highlighted).map(([o])=>o);n.length!==0&&u.fitView({nodes:n.map(o=>({id:o})),duration:300,padding:se})},[u]),B=r.useCallback(()=>u.fitView({minZoom:Ne,maxZoom:$,padding:se}),[u]),oe=r.useRef(b);oe.current=b;const re=r.useCallback(()=>{const n=oe.current;return n?u.setViewport(n):B()},[B,u]),z=r.useCallback(()=>{H.current=!0},[]);r.useEffect(()=>{C===0||I===0||H.current||re().then(()=>{T.current=!0,X()})},[C,I,t,re,X]),r.useEffect(()=>{T.current&&X()},[S,X]);const le=r.useCallback(n=>{z();const o=u.getZoom();if(!Number.isFinite(o)||o<=0){B();return}const p=wt(o,n,K);p&&u.zoomTo(p.zoom,{duration:150})},[B,z,u,K]),De=r.useCallback((n,o)=>{if(C===0||I===0||!Number.isFinite(o.zoom))return;const p=qe(o,a,C,I,Dt);p.x===o.x&&p.y===o.y||u.setViewport(p)},[a,I,C,u]);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:()=>{z(),B()},"aria-label":"Fit to view",children:s.jsx(Qe,{className:"h-6 w-6"})}),s.jsx(U,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:()=>{le(.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:()=>{le(-.25)},"aria-label":"Zoom out",children:s.jsx(tt,{className:"h-6 w-6"})}),E&&s.jsx(U,{variant:"outline",size:"icon",className:"h-12 w-12",onClick:E,"aria-label":"Expand diagram",children:s.jsx(Pe,{className:"h-6 w-6"})}),s.jsx(st,{viewMode:N,onViewModeChange:k,direction:f,onDirectionChange:F,showJoinFields:M,onShowJoinFieldsChange:v,objectLabels:A,onObjectLabelsChange:G})]})}),s.jsxs("div",{className:"h-full w-full",onPointerDownCapture:z,onWheelCapture:z,children:[s.jsx(it,{nodes:V,edges:Ee,nodeTypes:_t,edgeTypes:kt,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,edgesFocusable:!1,zoomOnDoubleClick:!1,minZoom:K.min,maxZoom:K.max,onEdgeClick:je,onNodeClick:we,onPaneClick:Ie,deleteKeyCode:null,panActivationKeyCode:null,onMove:De,onMoveStart:n=>{n&&z()},proOptions:{hideAttribution:!0},style:{width:"100%",height:"100%"},children:s.jsx(nt,{pannable:!0,zoomable:!0,style:{width:140,height:100},nodeColor:n=>xe(n.data.definitionType)})}),h.nodes.length===1&&h.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 Lt({dataMartId:i,dataMartTitle:e,dataMartDescription:l,dataMartStatus:m,dataMartDefinitionType:d,definitionTypes:g,relationships:y,relationshipGraph:x,connectedFieldCounts:c,searchQuery:_,onRequestFullscreen:E,showLooped:j,statusFilter:w,viewMode:O,onViewModeChange:N,direction:k,onDirectionChange:f,showJoinFields:F,onShowJoinFieldsChange:M,objectLabels:v,onObjectLabelsChange:A,fieldsByAliasPath:G,className:P,style:u}){const{scope:C}=Se(),I=r.useCallback(T=>{window.open(C(`/data-marts/${T}/data-setup`),"_blank","noopener,noreferrer")},[C]);return y.length===0?null:s.jsxs("div",{className:`relative overflow-hidden rounded-lg border ${P??""}`,style:u??{height:480},children:[s.jsx("style",{children:ze}),s.jsx(Be,{children:s.jsx(Tt,{dataMartId:i,dataMartTitle:e,dataMartDescription:l,dataMartStatus:m,dataMartDefinitionType:d,definitionTypes:g,relationships:y,relationshipGraph:x,connectedFieldCounts:c,searchQuery:_,onRequestFullscreen:E,onOpenExternal:I,showLooped:j,statusFilter:w,viewMode:O,onViewModeChange:N,direction:k,onDirectionChange:f,showJoinFields:F,onShowJoinFieldsChange:M,objectLabels:v,onObjectLabelsChange:A,fieldsByAliasPath:G})})]})}export{Lt as RelationshipCanvas,Ot as RelationshipFlowNode};
|