@next-bricks/diagram 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/bricks.json +1 -1
  2. package/dist/chunks/2624.011771ea.js +2 -0
  3. package/dist/chunks/2624.011771ea.js.map +1 -0
  4. package/dist/chunks/{7312.73a6c3bb.js → 7312.3688d673.js} +3 -3
  5. package/dist/chunks/{7312.73a6c3bb.js.map → 7312.3688d673.js.map} +1 -1
  6. package/dist/chunks/9393.f495fc69.js +2 -0
  7. package/dist/chunks/9393.f495fc69.js.map +1 -0
  8. package/dist/chunks/eo-diagram.9a3dc4a2.js +2 -0
  9. package/dist/chunks/eo-diagram.9a3dc4a2.js.map +1 -0
  10. package/dist/chunks/main.568ac27d.js +2 -0
  11. package/dist/chunks/{main.cc81c286.js.map → main.568ac27d.js.map} +1 -1
  12. package/dist/examples.json +1 -1
  13. package/dist/index.d1cc256a.js +2 -0
  14. package/dist/{index.cf4aa49d.js.map → index.d1cc256a.js.map} +1 -1
  15. package/dist/manifest.json +11 -0
  16. package/dist/types.json +188 -0
  17. package/dist-types/diagram/ClipPathComponent.d.ts +8 -0
  18. package/dist-types/diagram/ConnectLineComponent.d.ts +8 -0
  19. package/dist-types/diagram/LineComponent.d.ts +11 -0
  20. package/dist-types/diagram/MarkerComponent.d.ts +6 -0
  21. package/dist-types/diagram/index.d.ts +5 -2
  22. package/dist-types/diagram/interfaces.d.ts +18 -1
  23. package/dist-types/diagram/processors/getCenterOffsets.d.ts +2 -2
  24. package/dist-types/diagram/processors/getClipPathList.d.ts +2 -0
  25. package/dist-types/diagram/processors/getDagreGraph.d.ts +3 -0
  26. package/dist-types/diagram/processors/getRenderedDiagram.d.ts +11 -0
  27. package/dist-types/diagram/processors/getRenderedLineLabels.d.ts +2 -0
  28. package/dist-types/diagram/processors/handleDiagramMouseDown.d.ts +11 -0
  29. package/dist-types/diagram/processors/handleDiagramMouseDown.spec.d.ts +1 -0
  30. package/docs/eo-diagram.md +60 -12
  31. package/package.json +2 -2
  32. package/dist/chunks/4922.d504ca2a.js +0 -2
  33. package/dist/chunks/4922.d504ca2a.js.map +0 -1
  34. package/dist/chunks/eo-diagram.fa73c8ae.js +0 -2
  35. package/dist/chunks/eo-diagram.fa73c8ae.js.map +0 -1
  36. package/dist/chunks/main.cc81c286.js +0 -2
  37. package/dist/index.cf4aa49d.js +0 -2
  38. /package/dist/chunks/{7312.73a6c3bb.js.LICENSE.txt → 7312.3688d673.js.LICENSE.txt} +0 -0
package/dist/bricks.json CHANGED
@@ -8,5 +8,5 @@
8
8
  ],
9
9
  "processors": [],
10
10
  "dependencies": {},
11
- "filePath": "bricks/diagram/dist/index.cf4aa49d.js"
11
+ "filePath": "bricks/diagram/dist/index.d1cc256a.js"
12
12
  }
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_next_bricks_diagram=self.webpackChunk_next_bricks_diagram||[]).push([[2624],{2260:(e,t,n)=>{n.d(t,{K:()=>a});var r=n(8657),o=n.n(r);function a(e){var{clipPath:t,clipPathPrefix:n,renderedLineLabels:r}=e,{x0:a,y0:i,w:l,h:c,id:d}=t,s=r.find((e=>e.id===d));if(!s)return null;var{left:u,top:f,right:v,bottom:h}=s.lineRect;return o().createElement("clipPath",{key:d,id:"".concat(n).concat(d)},o().createElement("polygon",{points:["".concat(a,",").concat(i+c),"".concat(a+l,",").concat(i+c),"".concat(a+l,",").concat(i),"".concat(a,",").concat(i),"".concat(a,",").concat(f),"".concat(v,",").concat(f),"".concat(v,",").concat(h),"".concat(u,",").concat(h),"".concat(u,",").concat(f),"".concat(a,",").concat(f)].join(" ")}))}},7587:(e,t,n)=>{n.d(t,{f:()=>c});var r=n(8657),o=n.n(r),a=n(2779),i=n.n(a),l=n(9575);function c(e){var{connectLineState:t,connectLineTo:n,markerPrefix:r}=e;return o().createElement("svg",{width:"100%",height:"100%",className:i()("connect-line",{connecting:!!t})},o().createElement("defs",null,o().createElement(l.C,{id:"".concat(r,"connect-line"),strokeColor:null==t?void 0:t.options.strokeColor})),o().createElement("path",{d:t?"M".concat(t.from.join(" "),"L").concat(n.join(" ")):"",fill:"none",stroke:null==t?void 0:t.options.strokeColor,strokeWidth:null==t?void 0:t.options.strokeWidth,markerEnd:null!=t&&t.options.arrow?"url(#".concat(r,"connect-line)"):void 0}))}},6462:(e,t,n)=>{n.d(t,{y:()=>l});var r=n(8657),o=n.n(r),a=n(2779),i=n.n(a);function l(e){var{line:{line:t,d:n,markerIndex:r,edge:a},linePaths:l,clipPathList:c,markerPrefix:d,clipPathPrefix:s,onLineDoubleClick:u}=e;return o().createElement("g",{className:i()("line",{interactable:t.interactable}),onDoubleClick:t.interactable?e=>(e.preventDefault(),e.stopPropagation(),null==u?void 0:u({id:t.$id,edge:a})):void 0,style:{cursor:t.cursor}},o().createElement("path",{ref:e=>l.set(t.$id,e),stroke:t.strokeColor,strokeWidth:t.strokeWidth,d:n,fill:"none",markerEnd:void 0===r?void 0:"url(#".concat(d).concat(r,")"),clipPath:c.some((e=>e.id===t.$id))?"url(#".concat(s).concat(t.$id,")"):void 0}),t.interactable&&o().createElement("path",{d:n,fill:"none",stroke:"transparent",strokeWidth:t.interactStrokeWidth}))}},7853:(e,t,n)=>{n.d(t,{L8:()=>c});var r=n(3028),o=n(8657),a=n.n(o),i=n(9494),l=n(9464);function c(e){var{labels:t,onRendered:n}=e,[r,i]=(0,o.useState)(!1),[l,c]=(0,o.useState)([]),u=(0,o.useMemo)((()=>new Map),[]),f=(0,o.useCallback)(((e,t)=>{t&&u.set(e,t),c((t=>t.includes(e)?t:t.concat(e)))}),[u]),v=(0,o.useCallback)((e=>{c((t=>{var n=t.indexOf(e);return-1===n?t:t.slice(0,n).concat(t.slice(n+1))})),u.delete(e)}),[u]);return(0,o.useEffect)((()=>{i(!(null!=t&&t.some((e=>!l.includes(e.id)))))}),[t,l]),(0,o.useEffect)((()=>{null==n||n(r?u:null)}),[u,r]),a().createElement(a().Fragment,null,null==t?void 0:t.map((e=>{var{text:t,label:n,position:r,id:o,edge:i}=e;return n?a().createElement("div",{key:o,className:"line-label",style:{left:r[0],top:r[1]}},a().createElement(s,{id:o,edge:i,label:n,onRendered:f,onUnmount:v})):a().createElement(d,{key:o,id:o,text:t,position:r,onRendered:f})})))}function d(e){var{id:t,text:n,position:i,onRendered:l}=e,c=(0,o.useCallback)((e=>{null==l||l(t,e)}),[t,l]);return a().createElement("div",{className:"line-label",ref:c,style:(0,r.Z)({left:i[0],top:i[1]},n.style)},n.content)}function s(e){var{id:t,edge:n,label:r,onRendered:c,onUnmount:d}=e,s=(0,o.useMemo)((()=>(0,l.checkIfByTransform)(r,{edge:n})?r.useBrick:null),[n,r]),u=(0,o.useMemo)((()=>({edge:n})),[n]);(0,o.useEffect)((()=>{s||setTimeout((()=>{null==c||c(t,null)}))}),[t,c,s]),(0,o.useEffect)((()=>()=>{null==d||d(t)}),[]);var f=(0,o.useCallback)((e=>{e&&setTimeout((()=>{null==c||c(t,e.parentElement)}))}),[t,c]),v=(0,o.useCallback)((()=>{setTimeout((()=>{null==c||c(t,null)}))}),[t,c]);return s?a().createElement(i.ReactUseBrick,{refCallback:f,ignoredCallback:v,useBrick:s,data:u}):null}},9575:(e,t,n)=>{n.d(t,{C:()=>a});var r=n(8657),o=n.n(r);function a(e){var{id:t,strokeColor:n}=e;return o().createElement("marker",{id:t,viewBox:"0 0 6 6",refX:3,refY:3,markerWidth:6,markerHeight:6,orient:"auto"},o().createElement("path",{d:"M 0.5 0.5 L 5.5 3 L 0.5 5.5 z",stroke:n,strokeWidth:1,fill:n}))}},2370:(e,t,n)=>{n.d(t,{n:()=>l});var r=n(8657),o=n.n(r),a=n(9494),i=n(9464);function l(e){var{nodes:t,nodeBricks:n,onRendered:a}=e,[i,l]=(0,r.useState)(!1),[d,s]=(0,r.useState)([]),u=(0,r.useMemo)((()=>new Map),[]),f=(0,r.useCallback)(((e,t)=>{t&&u.set(e,t),s((t=>t.includes(e)?t:t.concat(e)))}),[u]),v=(0,r.useCallback)((e=>{s((t=>{var n=t.indexOf(e);return-1===n?t:t.slice(0,n).concat(t.slice(n+1))})),u.delete(e)}),[u]);return(0,r.useEffect)((()=>{l(!(null!=t&&t.some((e=>!d.includes(e.id)))))}),[t,d]),(0,r.useEffect)((()=>{null==a||a(i?u:null)}),[u,i]),o().createElement(o().Fragment,null,null==t?void 0:t.map((e=>o().createElement("div",{key:e.id,className:"node"},o().createElement(c,{nodeBricks:n,node:e,onRendered:f,onUnmount:v})))))}function c(e){var{node:t,nodeBricks:n,onRendered:l,onUnmount:c}=e,d=(0,r.useMemo)((()=>{var e;return null===(e=function(e,t){return null==t?void 0:t.find((t=>t.nodeType?[].concat(t.nodeType).includes(e.type):(0,i.checkIfByTransform)(t,{node:e})))}(t,n))||void 0===e?void 0:e.useBrick}),[t,n]),s=(0,r.useMemo)((()=>({node:t})),[t]);(0,r.useEffect)((()=>{d||setTimeout((()=>{null==l||l(t.id,null)}))}),[t.id,l,d]),(0,r.useEffect)((()=>()=>{null==c||c(t.id)}),[]);var u=(0,r.useCallback)((e=>{e&&setTimeout((()=>{null==l||l(t.id,e)}))}),[t.id,l]),f=(0,r.useCallback)((()=>{setTimeout((()=>{null==l||l(t.id,null)}))}),[t.id,l]);return d?o().createElement(a.ReactUseBrick,{refCallback:u,ignoredCallback:f,useBrick:d,data:s}):null}},5318:(e,t,n)=>{n.d(t,{IC:()=>r,_w:()=>o,no:()=>a,wl:()=>i});var r="var(--palette-gray-5)",o=1,a="curveBasis",i=20},6365:(e,t,n)=>{function r(e,t){var[n,r]=t,o=1/0,a=1/0,i=-1/0,l=-1/0;for(var c of e){var d=c.width/2,s=c.height/2,u=c.x-d,f=c.x+d,v=c.y-s,h=c.y+s;u<o&&(o=u),f>i&&(i=f),v<a&&(a=v),h>l&&(l=h)}return[(n-(i-o))/2-a,(r-(l-a))/2-o]}n.d(t,{i:()=>r})},1251:(e,t,n)=>{function r(e,t){return e.map((e=>{var{id:n}=e,r=null==t?void 0:t.get(n);if(r){var{offsetWidth:o,offsetHeight:a}=r;if(0!==o&&0!==a)return{x0:r.offsetLeft-o/2-3,y0:r.offsetTop-a/2-3,w:o+6,h:a+6,id:n}}})).filter(Boolean)}n.d(t,{i:()=>r})},5173:(e,t,n)=>{n.d(t,{T:()=>a});var r=n(908),o=n.n(r);function a(e,t,n,r){var a=new(o().graphlib.Graph);for(var i of(a.setGraph(r),a.setDefaultEdgeLabel((function(){return{}})),null!=t?t:[])){var l=null==e?void 0:e.node(i.id);a.setNode(i.id,(null==l?void 0:l.data)===i?l:{id:i.id,data:i})}for(var c of null!=n?n:[])a.setEdge(c.source,c.target,{data:c});return a}},8696:(e,t,n)=>{n.d(t,{E:()=>a});var r=n(908),o=n.n(r);function a(e){var{graph:t,nodesRefRepository:n,nodePadding:r}=e;if(!t||!n||0===t.nodeCount())return null;for(var a of t.nodes()){var i,l,c=t.node(a);if(c){var d=n.get(a);c.width=(null!==(i=null==d?void 0:d.offsetWidth)&&void 0!==i?i:10)+2*r,c.height=(null!==(l=null==d?void 0:d.offsetHeight)&&void 0!==l?l:10)+2*r}else console.error("Diagram node not found: %s",a)}o().layout(t);var s=[];for(var u of t.nodes()){var f,v=t.node(u);if(v){s.push(v);var h=v.x-v.width/2+r,m=v.y-v.height/2+r,p=null===(f=n.get(u))||void 0===f?void 0:f.parentElement;p&&(p.style.left="".concat(h,"px"),p.style.top="".concat(m,"px"),p.style.visibility="visible")}}return{nodes:s,edges:t.edges().map((e=>t.edge(e)))}}},4126:(e,t,n)=>{function r(e,t,n){return 0===e.length&&0===t.length?e:t.map((e=>{var{line:{text:t,label:r,$id:o},edge:a}=e,i=n.get(o);if((t||r)&&i&&i.getAttribute("d")){var{x:l,y:c,width:d,height:s}=i.getBBox(),u=1e3,f=l-u,v=c-u,h=l+d+u,m=c+s+u,p=i.getPointAtLength(i.getTotalLength()/2);return{text:t,label:r,edge:a,position:[p.x,p.y],lineRect:{left:f,top:v,right:h,bottom:m},id:o}}})).filter(Boolean)}n.d(t,{K:()=>r})},5731:(e,t,n)=>{n.d(t,{b:()=>p});var r=n(3028),o=n(2159),a=n(1211),i=n(9464),l=n(5318),c=n(3698),d=n(1479),s=n(6481),u=n(9389),f=n(8282),v=n(5004);function h(e,t,n){if(!Array.isArray(e))return"";var r;switch(n){case"curveBasis":r=c.ZP;break;case"curveBumpX":r=d.sj;break;case"curveBumpY":r=d.BW;break;case"curveMonotoneX":r=s.Z;break;case"curveMonotoneY":r=s.s;break;case"curveNatural":r=u.Z;break;default:r=f.Z}var o=0,a=0;if(t){var{x:i,y:l}=e[e.length-2],{x:h,y:m}=e[e.length-1],p=t/Math.sqrt(Math.pow(h-i,2)+Math.pow(m-l,2));o=(i-h)*p,a=(l-m)*p}var g=e;return(0,v.Z)().x(((t,n)=>t.x-(n===e.length-1?o:0))).y(((t,n)=>t.y-(n===e.length-1?a:0))).curve(r)(g)}var m=["label"];function p(e,t){var n=[],c=[],d=function(e){var d,s=null!==(d=null==t?void 0:t.find((t=>{return n=e,!!(r=t)&&(r.edgeType?[].concat(r.edgeType).includes(n.type):(0,i.checkIfByTransform)(r,{edge:n}));var n,r})))&&void 0!==d?d:{},{label:f}=s,v=(0,o.Z)(s,m),p=i.__secret_internals.legacyDoTransform({edge:e},v);if(!1===(null==p?void 0:p.draw))return 1;var g,k=(0,r.Z)((0,r.Z)({strokeColor:l.IC,strokeWidth:l._w,curveType:l.no,interactStrokeWidth:l.wl},p),{},{label:f,$id:(0,a.uniqueId)("line-")});if(k.arrow){var b={strokeColor:k.strokeColor};-1===(g=(0,a.findIndex)(c,b))&&(g=c.push(b)-1)}var y=h(u,k.arrow?-5:0,k.curveType);n.push({line:k,d:y,markerIndex:g,edge:e})};for(var{data:s,points:u}of e)d(s);return{renderedLines:n,markers:c}}},4510:(e,t,n)=>{n.d(t,{k:()=>i});var r=n(3028),o=n(9464),a=n(5318);function i(e,t){var{nodes:n,nodesRefRepository:i,nodesConnect:l,setConnectLineState:c,setConnectLineTo:d,onSwitchActiveNode:s,onNodesConnect:u}=t;function f(e){if(i){var t,r=function(t){if(e(a))return{v:null==n?void 0:n.find((e=>e.id===t))}};for(var[o,a]of i)if(t=r(o))return t.v}}if(l){var v=f((t=>t.contains(e.target)));if(v){if(l.sourceType){if(![].concat(l.sourceType).includes(v.type))return}else if(!(0,o.checkIfByTransform)(l,{source:v}))return;c({from:[e.clientX,e.clientY],options:(0,r.Z)({strokeColor:a.IC,strokeWidth:a._w},o.__secret_internals.legacyDoTransform({source:v},l))}),d([e.clientX,e.clientY]),null==s||s(v.id);var h=e=>{d([e.clientX,e.clientY])},m=e=>{document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",m),c(null);var t=e.composedPath(),n=f((e=>t.includes(e)));n&&v!==n&&(null==u||u({source:v,target:n}))};document.addEventListener("mousemove",h),document.addEventListener("mouseup",m)}}}},5702:(e,t,n)=>{n.d(t,{p:()=>o});var r=n(1211);function o(e,t){var{renderedNodes:n,renderedEdges:r,activeNodeId:o}=t,l=o?n.find((e=>e.id===o)):void 0;if(l){var c,d,s;switch(e.key||e.keyCode||e.which){case"ArrowLeft":case 37:d=a(n,l,-1),c="switch-active-node";break;case"ArrowUp":case 38:d=i(n,r,l,-1),c="switch-active-node";break;case"ArrowRight":case 39:d=a(n,l,1),c="switch-active-node";break;case"ArrowDown":case 40:d=i(n,r,l,1),c="switch-active-node";break;case"Backspace":case 8:case"Delete":case 46:c="delete-node",d=l}if(c)return e.preventDefault(),e.stopPropagation(),{action:c,node:null===(s=d)||void 0===s?void 0:s.data}}}function a(e,t,n){var o,a=e.filter((e=>e!==t&&(o=(e.x-t.x)*n)>0&&o>Math.abs(t.y-e.y)));return(0,r.minBy)(a,(e=>(t.y-e.y)**2+(t.x-e.x)**2))}function i(e,t,n,o){var a=1===o?"source":"target",i=1===o?"target":"source",l=t.filter((e=>{var{data:t}=e;return t[a]===n.id&&t[i]!==n.id})).map((t=>{var{data:n}=t;return e.find((e=>e.id===n[i]))})).filter((e=>e&&(e.y-n.y)*o>0));return(0,r.minBy)(l,(e=>(n.y-e.y)**2+(n.x-e.x)**2))}},6436:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(9601),o=n.n(r),a=n(2609),i=n.n(a)()(o());i.push([e.id,":host{display:block;width:100%;height:100%;overflow:hidden}:host([hidden]){display:none}*{box-sizing:border-box}.diagram{width:100%;height:100%;position:relative;opacity:0}.diagram:focus{outline:none}.ready{opacity:1}.dragger,\n.lines,\n.line-labels,\n.nodes{position:absolute;top:0;left:0}.node{position:absolute;visibility:hidden}.dragger{width:100%;height:100%;cursor:-webkit-grab;cursor:grab}.grabbing{cursor:-webkit-grabbing;cursor:grabbing}.line-label{position:absolute;transform:translate(-50%,-50%);white-space:pre-line;width:-webkit-max-content;width:-moz-max-content;width:max-content;text-align:center}.lines{pointer-events:none}.line.interactable{pointer-events:auto}.connect-line{position:fixed;top:0;left:0;right:0;bottom:0;pointer-events:none}.connect-line:not(.connecting){display:none}",""]);const l=i.toString()}}]);
2
+ //# sourceMappingURL=2624.011771ea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunks/2624.011771ea.js","mappings":"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","sources":["webpack:///./src/diagram/ClipPathComponent.tsx","webpack:///./src/diagram/ConnectLineComponent.tsx","webpack:///./src/diagram/LineComponent.tsx","webpack:///./src/diagram/LineLabelComponent.tsx","webpack:///./src/diagram/MarkerComponent.tsx","webpack:///./src/diagram/NodeComponent.tsx","webpack:///./src/diagram/processors/findNodeBrick.ts","webpack:///./src/diagram/constants.ts","webpack:///./src/diagram/processors/getCenterOffsets.ts","webpack:///./src/diagram/processors/getClipPathList.ts","webpack:///./src/diagram/processors/getDagreGraph.ts","webpack:///./src/diagram/processors/getRenderedDiagram.ts","webpack:///./src/diagram/processors/getRenderedLineLabels.ts","webpack:///./src/diagram/lines/curveLine.ts","webpack:///./src/diagram/processors/getRenderedLinesAndMarkers.ts","webpack:///./src/diagram/processors/matchEdgeByFilter.ts","webpack:///./src/diagram/processors/handleDiagramMouseDown.ts","webpack:///./src/diagram/processors/handleKeyboard.ts","webpack:///./src/diagram/styles.shadow.css"],"sourcesContent":["import React from \"react\";\nimport type { LineTextClipPath, RenderedLineLabel } from \"./interfaces\";\n\nexport interface ClipPathComponentProps {\n clipPathPrefix: string;\n clipPath: LineTextClipPath;\n renderedLineLabels: RenderedLineLabel[];\n}\n\nexport function ClipPathComponent({\n clipPath,\n clipPathPrefix,\n renderedLineLabels,\n}: ClipPathComponentProps): JSX.Element | null {\n const { x0, y0, w, h, id } = clipPath;\n const lineText = renderedLineLabels.find((item) => item.id === id);\n if (!lineText) {\n return null;\n }\n const { left, top, right, bottom } = lineText.lineRect;\n // https://css-tricks.com/cutting-inner-part-element-using-clip-path/\n return (\n <clipPath key={id} id={`${clipPathPrefix}${id}`}>\n <polygon\n points={[\n `${x0},${y0 + h}`,\n `${x0 + w},${y0 + h}`,\n `${x0 + w},${y0}`,\n `${x0},${y0}`,\n `${x0},${top}`,\n `${right},${top}`,\n `${right},${bottom}`,\n `${left},${bottom}`,\n `${left},${top}`,\n `${x0},${top}`,\n ].join(\" \")}\n />\n </clipPath>\n );\n}\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport type { ConnectLineState, PositionTuple } from \"./interfaces\";\nimport { MarkerComponent } from \"./MarkerComponent\";\n\nexport interface ConnectLineComponentProps {\n connectLineState: ConnectLineState | null;\n connectLineTo: PositionTuple;\n markerPrefix: string;\n}\n\nexport function ConnectLineComponent({\n connectLineState,\n connectLineTo,\n markerPrefix,\n}: ConnectLineComponentProps): JSX.Element {\n return (\n <svg\n width=\"100%\"\n height=\"100%\"\n className={classNames(\"connect-line\", { connecting: !!connectLineState })}\n >\n <defs>\n <MarkerComponent\n id={`${markerPrefix}connect-line`}\n strokeColor={connectLineState?.options.strokeColor}\n />\n </defs>\n <path\n d={\n connectLineState\n ? `M${connectLineState.from.join(\" \")}L${connectLineTo.join(\" \")}`\n : \"\"\n }\n fill=\"none\"\n stroke={connectLineState?.options.strokeColor}\n strokeWidth={connectLineState?.options.strokeWidth}\n markerEnd={\n connectLineState?.options.arrow\n ? `url(#${markerPrefix}connect-line)`\n : undefined\n }\n />\n </svg>\n );\n}\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport type { LineTarget, LineTextClipPath, RenderedLine } from \"./interfaces\";\n\nexport interface LineComponentProps {\n line: RenderedLine;\n linePaths: Map<string, SVGPathElement | null>;\n clipPathList: LineTextClipPath[];\n markerPrefix: string;\n clipPathPrefix: string;\n onLineDoubleClick?(line: LineTarget): void;\n}\n\nexport function LineComponent({\n line: { line, d, markerIndex, edge },\n linePaths,\n clipPathList,\n markerPrefix,\n clipPathPrefix,\n onLineDoubleClick,\n}: LineComponentProps): JSX.Element {\n return (\n <g\n className={classNames(\"line\", {\n interactable: line.interactable,\n // active: activeEdge && (edge.source === activeEdge.source && edge.target === activeEdge.target),\n })}\n onDoubleClick={\n line.interactable\n ? (e) => (\n e.preventDefault(),\n e.stopPropagation(),\n onLineDoubleClick?.({ id: line.$id, edge })\n )\n : undefined\n }\n style={{ cursor: line.cursor }}\n >\n {/* <path\n stroke=\"rgba(0,95,204,0.5)\"\n strokeWidth={line.strokeWidth+11}\n strokeLinecap=\"square\"\n d={d}\n fill=\"none\"\n className=\"active-bg\"\n />\n <path\n stroke=\"white\"\n strokeWidth={line.strokeWidth+9}\n strokeLinecap=\"square\"\n d={d}\n fill=\"none\"\n className=\"active-bg\"\n /> */}\n <path\n ref={(element) => linePaths.set(line.$id, element)}\n stroke={line.strokeColor}\n strokeWidth={line.strokeWidth}\n d={d}\n fill=\"none\"\n markerEnd={\n markerIndex === undefined\n ? undefined\n : `url(#${markerPrefix}${markerIndex})`\n }\n clipPath={\n clipPathList.some((clip) => clip.id === line.$id)\n ? `url(#${clipPathPrefix}${line.$id})`\n : undefined\n }\n />\n {line.interactable && (\n <path\n // This `path` is made for expanding interaction area of graph lines.\n d={d}\n fill=\"none\"\n stroke=\"transparent\"\n strokeWidth={line.interactStrokeWidth}\n />\n )}\n </g>\n );\n}\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { ReactUseBrick } from \"@next-core/react-runtime\";\nimport { checkIfByTransform } from \"@next-core/runtime\";\nimport type {\n DiagramEdge,\n LineLabelConf,\n PositionTuple,\n RefRepository,\n RenderedLineLabel,\n TextOptions,\n} from \"./interfaces\";\n\nexport interface LineLabelComponentGroupProps {\n labels?: RenderedLineLabel[];\n onRendered?: (refRepository: RefRepository | null) => void;\n}\n\nexport function LineLabelComponentGroup({\n labels,\n onRendered,\n}: LineLabelComponentGroupProps): JSX.Element {\n const [rendered, setRendered] = useState(false);\n const [renderedIds, setRenderedIds] = useState<string[]>([]);\n const refRepository = useMemo<RefRepository>(() => new Map(), []);\n\n const handleRenderer = useCallback(\n (id: string, element: HTMLElement | null) => {\n if (element) {\n refRepository.set(id, element);\n }\n setRenderedIds((previous) =>\n previous.includes(id) ? previous : previous.concat(id)\n );\n },\n [refRepository]\n );\n\n const handleUnmount = useCallback(\n (id: string) => {\n setRenderedIds((previous) => {\n const index = previous.indexOf(id);\n return index === -1\n ? previous\n : previous.slice(0, index).concat(previous.slice(index + 1));\n });\n refRepository.delete(id);\n },\n [refRepository]\n );\n\n useEffect(() => {\n // All nodes have been rendered.\n setRendered(!labels?.some((label) => !renderedIds.includes(label.id)));\n }, [labels, renderedIds]);\n\n useEffect(\n () => {\n onRendered?.(rendered ? refRepository : null);\n },\n // Dot not re-run effect when `onRendered` changed.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [/* onRendered, */ refRepository, rendered]\n );\n\n return (\n <React.Fragment>\n {labels?.map(({ text, label, position, id, edge }) =>\n label ? (\n <div\n key={id}\n className=\"line-label\"\n style={{\n left: position[0],\n top: position[1],\n }}\n >\n <LineLabelComponent\n id={id}\n edge={edge}\n label={label}\n onRendered={handleRenderer}\n onUnmount={handleUnmount}\n />\n </div>\n ) : (\n <LineTextComponent\n key={id}\n id={id}\n text={text!}\n position={position}\n onRendered={handleRenderer}\n />\n )\n )}\n </React.Fragment>\n );\n}\n\nexport interface LineTextComponentProps {\n id: string;\n text: TextOptions;\n position: PositionTuple;\n onRendered?: (id: string, element: HTMLElement | null) => void;\n // onUnmount?: (id: string) => void;\n}\n\nexport function LineTextComponent({\n id,\n text,\n position,\n onRendered /* , onUnmount */,\n}: LineTextComponentProps): JSX.Element {\n const refCallback = useCallback(\n (element: HTMLDivElement) => {\n onRendered?.(id, element);\n },\n [id, onRendered]\n );\n\n return (\n <div\n className=\"line-label\"\n ref={refCallback}\n style={{\n left: position[0],\n top: position[1],\n ...text!.style,\n }}\n >\n {text!.content}\n </div>\n );\n}\n\n// export const LineLabelComponentGroup = React.memo(LegacyLineLabelComponentGroup);\n\nexport interface LineLabelComponentProps {\n id: string;\n edge: DiagramEdge;\n label: LineLabelConf;\n onRendered?: (id: string, element: HTMLElement | null) => void;\n onUnmount?: (id: string) => void;\n}\n\nexport function LineLabelComponent({\n id,\n edge,\n label,\n onRendered,\n onUnmount,\n}: LineLabelComponentProps): JSX.Element | null {\n const useBrick = useMemo(\n () => (checkIfByTransform(label, { edge }) ? label.useBrick : null),\n [edge, label]\n );\n\n const memoizedData = useMemo(() => ({ edge }), [edge]);\n\n useEffect(() => {\n if (!useBrick) {\n // Keep the same time delay for reporting rendered.\n setTimeout(() => {\n onRendered?.(id, null);\n });\n }\n }, [id, onRendered, useBrick]);\n\n useEffect(\n () => {\n return () => {\n onUnmount?.(id);\n };\n },\n // Only unmount once\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const refCallback = useCallback(\n (element: HTMLElement | null) => {\n if (element) {\n // Todo: correctly wait for `useBrick` in v3 to be rendered (after layout)\n // Wait a macro task to let `useBrick` to be rendered.\n setTimeout(() => {\n onRendered?.(id, element.parentElement);\n });\n }\n },\n [id, onRendered]\n );\n\n const ignoredCallback = useCallback(() => {\n setTimeout(() => {\n onRendered?.(id, null);\n });\n }, [id, onRendered]);\n\n if (!useBrick) {\n return null;\n }\n\n return (\n <ReactUseBrick\n refCallback={refCallback}\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore For v3 only\n ignoredCallback={ignoredCallback}\n useBrick={useBrick}\n data={memoizedData}\n />\n );\n}\n","import React from \"react\";\n\nexport interface MarkerComponentProps {\n id: string;\n strokeColor?: string;\n}\n\nexport function MarkerComponent({\n id,\n strokeColor,\n}: MarkerComponentProps): JSX.Element {\n return (\n <marker\n id={id}\n viewBox=\"0 0 6 6\"\n refX={3}\n refY={3}\n markerWidth={6}\n markerHeight={6}\n orient=\"auto\"\n >\n <path\n d=\"M 0.5 0.5 L 5.5 3 L 0.5 5.5 z\"\n stroke={strokeColor}\n strokeWidth={1}\n fill={strokeColor}\n />\n </marker>\n );\n}\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { ReactUseBrick } from \"@next-core/react-runtime\";\nimport type {\n DiagramNode,\n DiagramNodeId,\n NodeBrickConf,\n RefRepository,\n} from \"./interfaces\";\nimport { findNodeBrick } from \"./processors/findNodeBrick\";\n\nexport interface NodeComponentGroupProps {\n nodes?: DiagramNode[];\n nodeBricks?: NodeBrickConf[];\n onRendered?: (refRepository: RefRepository | null) => void;\n}\n\nexport function NodeComponentGroup({\n nodes,\n nodeBricks,\n onRendered,\n}: NodeComponentGroupProps): JSX.Element {\n const [rendered, setRendered] = useState(false);\n const [renderedIds, setRenderedIds] = useState<DiagramNodeId[]>([]);\n const refRepository = useMemo<RefRepository>(() => new Map(), []);\n\n const handleRenderer = useCallback(\n (id: DiagramNodeId, element: HTMLElement | null) => {\n if (element) {\n refRepository.set(id, element);\n }\n setRenderedIds((previous) =>\n previous.includes(id) ? previous : previous.concat(id)\n );\n },\n [refRepository]\n );\n\n const handleUnmount = useCallback(\n (id: DiagramNodeId) => {\n setRenderedIds((previous) => {\n const index = previous.indexOf(id);\n return index === -1\n ? previous\n : previous.slice(0, index).concat(previous.slice(index + 1));\n });\n refRepository.delete(id);\n },\n [refRepository]\n );\n\n useEffect(() => {\n // All nodes have been rendered.\n setRendered(!nodes?.some((node) => !renderedIds.includes(node.id)));\n }, [nodes, renderedIds]);\n\n useEffect(\n () => {\n onRendered?.(rendered ? refRepository : null);\n },\n // Dot not re-run effect when `onRendered` changed.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [/* onRendered, */ refRepository, rendered]\n );\n\n return (\n <React.Fragment>\n {nodes?.map((node) => (\n <div key={node.id} className=\"node\">\n <NodeComponent\n nodeBricks={nodeBricks}\n node={node}\n onRendered={handleRenderer}\n onUnmount={handleUnmount}\n />\n </div>\n ))}\n </React.Fragment>\n );\n}\n\nexport interface NodeComponentProps {\n node: DiagramNode;\n nodeBricks?: NodeBrickConf[];\n onRendered?: (id: DiagramNodeId, element: HTMLElement | null) => void;\n onUnmount?: (id: DiagramNodeId) => void;\n}\n\nexport function NodeComponent({\n node,\n nodeBricks,\n onRendered,\n onUnmount,\n}: NodeComponentProps): JSX.Element | null {\n const useBrick = useMemo(\n () => findNodeBrick(node, nodeBricks)?.useBrick,\n [node, nodeBricks]\n );\n const memoizedData = useMemo(() => ({ node }), [node]);\n\n useEffect(() => {\n if (!useBrick) {\n // Keep the same time delay for reporting rendered.\n setTimeout(() => {\n onRendered?.(node.id, null);\n });\n }\n }, [node.id, onRendered, useBrick]);\n\n useEffect(\n () => {\n return () => {\n onUnmount?.(node.id);\n };\n },\n // Only unmount once\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const refCallback = useCallback(\n (element: HTMLElement | null) => {\n if (element) {\n // Todo: correctly wait for `useBrick` in v3 to be rendered (after layout)\n // Wait a macro task to let `useBrick` to be rendered.\n setTimeout(() => {\n onRendered?.(node.id, element);\n });\n }\n },\n [node.id, onRendered]\n );\n\n const ignoredCallback = useCallback(() => {\n setTimeout(() => {\n onRendered?.(node.id, null);\n });\n }, [node.id, onRendered]);\n\n if (!useBrick) {\n return null;\n }\n\n return (\n <ReactUseBrick\n refCallback={refCallback}\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore For v3 only\n ignoredCallback={ignoredCallback}\n useBrick={useBrick}\n data={memoizedData}\n />\n );\n}\n","import { checkIfByTransform } from \"@next-core/runtime\";\nimport { NodeBrickConf, DiagramNode } from \"../interfaces\";\n\nexport function findNodeBrick(\n node: DiagramNode,\n nodeBricks: NodeBrickConf[] | undefined\n): NodeBrickConf | undefined {\n return nodeBricks?.find((item) => {\n if (item.nodeType) {\n return ([] as unknown[]).concat(item.nodeType).includes(node.type);\n }\n return checkIfByTransform(item, { node });\n });\n}\n","export const DEFAULT_LINE_STROKE_COLOR = \"var(--palette-gray-5)\";\nexport const DEFAULT_LINE_STROKE_WIDTH = 1;\nexport const DEFAULT_LINE_CURVE_TYPE = \"curveBasis\";\nexport const DEFAULT_LINE_INTERACT_STROKE_WIDTH = 20;\n","import type { PositionTuple, RenderedNode } from \"../interfaces\";\n\nexport function getCenterOffsets(\n renderedNodes: RenderedNode[],\n [canvasWidth, canvasHeight]: [canvasWidth: number, canvasHeight: number]\n): PositionTuple {\n let left = Infinity;\n let top = Infinity;\n let right = -Infinity;\n let bottom = -Infinity;\n for (const node of renderedNodes) {\n const hw = node.width / 2;\n const hh = node.height / 2;\n const l = node.x - hw;\n const r = node.x + hw;\n const t = node.y - hh;\n const b = node.y + hh;\n if (l < left) {\n left = l;\n }\n if (r > right) {\n right = r;\n }\n if (t < top) {\n top = t;\n }\n if (b > bottom) {\n bottom = b;\n }\n }\n\n const width = right - left;\n const height = bottom - top;\n\n return [(canvasWidth - width) / 2 - top, (canvasHeight - height) / 2 - left];\n}\n","import type {\n LineTextClipPath,\n RefRepository,\n RenderedLineLabel,\n} from \"../interfaces\";\n\nexport function getClipPathList(\n renderedLineLabels: RenderedLineLabel[],\n lineLabelsRefRepository: RefRepository\n) {\n return renderedLineLabels\n .map(({ id }) => {\n const element = lineLabelsRefRepository?.get(id);\n if (!element) {\n return;\n }\n const { offsetWidth, offsetHeight } = element;\n // Do not clip when the label takes no space.\n if (\n process.env.NODE_ENV !== \"test\" &&\n (offsetWidth === 0 || offsetHeight === 0)\n ) {\n return;\n }\n const padding = 3;\n return {\n x0: element.offsetLeft - offsetWidth / 2 - padding,\n y0: element.offsetTop - offsetHeight / 2 - padding,\n w: offsetWidth + padding * 2,\n h: offsetHeight + padding * 2,\n id,\n };\n })\n .filter(Boolean) as LineTextClipPath[];\n}\n","import dagre from \"@dagrejs/dagre\";\nimport type { DiagramEdge, DiagramNode, RenderedNode } from \"../interfaces\";\n\nexport function getDagreGraph(\n previousGraph: dagre.graphlib.Graph<RenderedNode> | null,\n nodes: DiagramNode[] | undefined,\n edges: DiagramEdge[] | undefined,\n dagreGraphOptions: dagre.GraphLabel\n) {\n // Create a new directed graph\n const newGraph = new dagre.graphlib.Graph<RenderedNode>();\n\n // Set an object for the graph label\n newGraph.setGraph(dagreGraphOptions);\n\n // Default to assigning a new object as a label for each new edge.\n newGraph.setDefaultEdgeLabel(function () {\n return {};\n });\n\n for (const node of nodes ?? []) {\n const previousNode = previousGraph?.node(node.id);\n newGraph.setNode(\n node.id,\n previousNode?.data === node\n ? previousNode\n : {\n id: node.id,\n data: node,\n }\n );\n }\n\n for (const edge of edges ?? []) {\n newGraph.setEdge(edge.source, edge.target, { data: edge });\n }\n\n return newGraph;\n}\n","import dagre from \"@dagrejs/dagre\";\nimport type { RefRepository, RenderedEdge, RenderedNode } from \"../interfaces\";\n\nexport interface RenderedDiagram {\n nodes: RenderedNode[];\n edges: RenderedEdge[];\n}\n\nexport function getRenderedDiagram({\n graph,\n nodesRefRepository,\n nodePadding,\n}: {\n graph: dagre.graphlib.Graph<RenderedNode> | null;\n nodesRefRepository: RefRepository | null;\n nodePadding: number;\n}): RenderedDiagram | null {\n if (!graph || !nodesRefRepository || graph.nodeCount() === 0) {\n return null;\n }\n\n for (const id of graph.nodes()) {\n const node = graph.node(id);\n if (!node) {\n // eslint-disable-next-line no-console\n console.error(\"Diagram node not found: %s\", id);\n continue;\n }\n const element = nodesRefRepository.get(id);\n node.width = (element?.offsetWidth ?? 10) + nodePadding * 2;\n node.height = (element?.offsetHeight ?? 10) + nodePadding * 2;\n }\n\n dagre.layout(graph);\n\n // const positions = new Map<DiagramNodeId, NodePosition>();\n const renderedNodes: RenderedNode[] = [];\n\n for (const v of graph.nodes()) {\n const node = graph.node(v);\n if (!node) {\n continue;\n }\n renderedNodes.push(node);\n const x = node.x - node.width / 2 + nodePadding;\n const y = node.y - node.height / 2 + nodePadding;\n // positions.set(v, { x, y });\n\n const nodeContainer = nodesRefRepository.get(v)?.parentElement;\n if (nodeContainer) {\n nodeContainer.style.left = `${x}px`;\n nodeContainer.style.top = `${y}px`;\n nodeContainer.style.visibility = \"visible\";\n }\n }\n\n return {\n nodes: renderedNodes,\n edges: graph.edges().map((e) => graph.edge(e) as RenderedEdge),\n };\n}\n","import type { RenderedLine, RenderedLineLabel } from \"../interfaces\";\n\nexport function getRenderedLineLabels(\n previous: RenderedLineLabel[],\n renderedLines: RenderedLine[],\n linePaths: Map<string, SVGPathElement | null>\n) {\n if (previous.length === 0 && renderedLines.length === 0) {\n return previous;\n }\n return renderedLines\n .map(({ line: { text, label, $id }, edge }) => {\n const path = linePaths.get($id);\n if ((!text && !label) || !path || !path.getAttribute(\"d\")) {\n return;\n }\n\n // istanbul ignore next\n const { x, y, width, height } =\n process.env.NODE_ENV === \"test\"\n ? { x: 10, y: 20, width: 300, height: 400 }\n : path.getBBox();\n // Make redundant extra padding.\n const padding = 1000;\n const left = x - padding;\n const top = y - padding;\n const right = x + width + padding;\n const bottom = y + height + padding;\n\n // istanbul ignore next\n const point =\n process.env.NODE_ENV === \"test\"\n ? { x: 50, y: 50 }\n : path.getPointAtLength(path.getTotalLength() / 2);\n return {\n text,\n label,\n edge,\n position: [point.x, point.y],\n lineRect: { left, top, right, bottom },\n id: $id,\n };\n })\n .filter(Boolean) as RenderedLineLabel[];\n}\n","import {\n curveLinear,\n line,\n curveBasis,\n curveBumpX,\n curveBumpY,\n type CurveFactory,\n curveMonotoneX,\n curveNatural,\n curveMonotoneY,\n} from \"d3-shape\";\nimport type { CurveType, NodePosition } from \"../interfaces\";\n\n/**\n * Generate Line from points\n */\nexport function curveLine(\n points: Array<NodePosition>,\n arrowOffset: number,\n curveType?: CurveType\n): string {\n if (!Array.isArray(points)) {\n return \"\";\n }\n let curveFactory: CurveFactory;\n switch (curveType) {\n case \"curveBasis\":\n curveFactory = curveBasis;\n break;\n case \"curveBumpX\":\n curveFactory = curveBumpX;\n break;\n case \"curveBumpY\":\n curveFactory = curveBumpY;\n break;\n case \"curveMonotoneX\":\n curveFactory = curveMonotoneX;\n break;\n case \"curveMonotoneY\":\n curveFactory = curveMonotoneY;\n break;\n case \"curveNatural\":\n curveFactory = curveNatural;\n break;\n default:\n curveFactory = curveLinear;\n }\n let arrowOffsetX = 0;\n let arrowOffsetY = 0;\n if (arrowOffset) {\n const { x: x0, y: y0 } = points[points.length - 2];\n const { x: x1, y: y1 } = points[points.length - 1];\n const distance = Math.sqrt(Math.pow(x1 - x0, 2) + Math.pow(y1 - y0, 2));\n const ratio = arrowOffset / distance;\n arrowOffsetX = (x0 - x1) * ratio;\n arrowOffsetY = (y0 - y1) * ratio;\n }\n const transformPoints = points;\n const lineFunction = line()\n .x(\n (d, index) =>\n (d as unknown as { x: number }).x -\n (index === points.length - 1 ? arrowOffsetX : 0)\n )\n .y(\n (d, index) =>\n (d as unknown as { y: number }).y -\n (index === points.length - 1 ? arrowOffsetY : 0)\n )\n .curve(curveFactory);\n return lineFunction(transformPoints as unknown as Array<[number, number]>)!;\n}\n","import { findIndex, uniqueId } from \"lodash\";\nimport { __secret_internals } from \"@next-core/runtime\";\nimport type {\n LineConf,\n LineMarker,\n RenderedEdge,\n RenderedLine,\n} from \"../interfaces\";\nimport { matchEdgeByFilter } from \"./matchEdgeByFilter\";\nimport {\n DEFAULT_LINE_CURVE_TYPE,\n DEFAULT_LINE_INTERACT_STROKE_WIDTH,\n DEFAULT_LINE_STROKE_COLOR,\n DEFAULT_LINE_STROKE_WIDTH,\n} from \"../constants\";\nimport { curveLine } from \"../lines/curveLine\";\n\nexport function getRenderedLinesAndMarkers(\n renderedEdges: RenderedEdge[],\n lines: LineConf[] | undefined\n) {\n const renderedLines: RenderedLine[] = [];\n const markers: LineMarker[] = [];\n for (const { data, points } of renderedEdges) {\n const { label, ...restLineConf } =\n lines?.find((line) => matchEdgeByFilter(data, line)) ?? {};\n\n const computedLineConf = __secret_internals.legacyDoTransform(\n { edge: data },\n restLineConf\n ) as LineConf | undefined;\n if (computedLineConf?.draw === false) {\n continue;\n }\n const line: RenderedLine[\"line\"] = {\n strokeColor: DEFAULT_LINE_STROKE_COLOR,\n strokeWidth: DEFAULT_LINE_STROKE_WIDTH,\n curveType: DEFAULT_LINE_CURVE_TYPE,\n interactStrokeWidth: DEFAULT_LINE_INTERACT_STROKE_WIDTH,\n ...computedLineConf,\n label,\n $id: uniqueId(\"line-\"),\n };\n\n let markerIndex: number | undefined;\n if (line.arrow) {\n const marker: LineMarker = {\n strokeColor: line.strokeColor,\n };\n markerIndex = findIndex(markers, marker);\n if (markerIndex === -1) {\n markerIndex = markers.push(marker) - 1;\n }\n }\n\n const d = curveLine(points, line.arrow ? -5 : 0, line.curveType);\n\n renderedLines.push({\n line,\n d,\n markerIndex,\n edge: data,\n });\n }\n return {\n renderedLines,\n markers,\n };\n}\n","import { checkIfByTransform } from \"@next-core/runtime\";\nimport type { DiagramEdge, LineConf } from \"../interfaces\";\n\nexport function matchEdgeByFilter(\n edge: DiagramEdge,\n filter: LineConf\n): boolean {\n if (!filter) {\n return false;\n }\n if (filter.edgeType) {\n return ([] as string[]).concat(filter.edgeType).includes(edge.type!);\n }\n return checkIfByTransform(filter, { edge });\n}\n","import { checkIfByTransform, __secret_internals } from \"@next-core/runtime\";\nimport type React from \"react\";\nimport {\n DEFAULT_LINE_STROKE_COLOR,\n DEFAULT_LINE_STROKE_WIDTH,\n} from \"../constants\";\nimport type {\n ConnectLineState,\n DiagramNode,\n ConnectLineDetail,\n NodesConnectOptions,\n PositionTuple,\n RefRepository,\n} from \"../interfaces\";\n\nexport function handleDiagramMouseDown(\n event: React.MouseEvent,\n {\n nodes,\n nodesRefRepository,\n nodesConnect,\n setConnectLineState,\n setConnectLineTo,\n onSwitchActiveNode,\n onNodesConnect,\n }: {\n nodes: DiagramNode[] | undefined;\n nodesConnect: NodesConnectOptions | undefined;\n nodesRefRepository: RefRepository | null;\n setConnectLineState: (\n value: React.SetStateAction<ConnectLineState | null>\n ) => void;\n setConnectLineTo: (value: React.SetStateAction<PositionTuple>) => void;\n onSwitchActiveNode?(id: string | undefined): void;\n onNodesConnect?(detail: ConnectLineDetail): void;\n }\n) {\n function findNode(match: (element: HTMLElement) => boolean) {\n if (nodesRefRepository) {\n for (const [id, element] of nodesRefRepository) {\n if (match(element)) {\n return nodes?.find((node) => node.id === id);\n }\n }\n }\n }\n\n if (!nodesConnect) {\n return;\n }\n\n const source = findNode((element) =>\n element.contains(event.target as Node | null)\n );\n\n if (!source) {\n return;\n }\n\n if (nodesConnect.sourceType) {\n if (\n !([] as unknown[]).concat(nodesConnect.sourceType).includes(source.type)\n ) {\n return;\n }\n } else if (!checkIfByTransform(nodesConnect, { source })) {\n return;\n }\n\n setConnectLineState({\n from: [event.clientX, event.clientY],\n options: {\n strokeColor: DEFAULT_LINE_STROKE_COLOR,\n strokeWidth: DEFAULT_LINE_STROKE_WIDTH,\n ...(__secret_internals.legacyDoTransform(\n { source },\n nodesConnect\n ) as NodesConnectOptions),\n },\n });\n setConnectLineTo([event.clientX, event.clientY]);\n onSwitchActiveNode?.(source.id);\n const onMouseMove = (e: MouseEvent) => {\n setConnectLineTo([e.clientX, e.clientY]);\n };\n const onMouseUp = (e: MouseEvent) => {\n document.removeEventListener(\"mousemove\", onMouseMove);\n document.removeEventListener(\"mouseup\", onMouseUp);\n setConnectLineState(null);\n const eventTargets = e.composedPath();\n const target = findNode((element) => eventTargets.includes(element));\n if (target && source !== target) {\n onNodesConnect?.({ source, target });\n }\n };\n document.addEventListener(\"mousemove\", onMouseMove);\n document.addEventListener(\"mouseup\", onMouseUp);\n}\n","import { minBy } from \"lodash\";\nimport type { DiagramNode, RenderedEdge, RenderedNode } from \"../interfaces\";\n\nexport type KeyboardAction =\n | KeyboardActionSwitchActiveNode\n | KeyboardActionDeleteNode;\n\nexport interface KeyboardActionSwitchActiveNode {\n action: \"switch-active-node\";\n node?: DiagramNode;\n}\n\nexport interface KeyboardActionDeleteNode {\n action: \"delete-node\";\n node: DiagramNode;\n}\n\nexport function handleKeyboard(\n event: KeyboardEvent,\n {\n renderedNodes,\n renderedEdges,\n activeNodeId,\n }: {\n renderedNodes: RenderedNode[];\n renderedEdges: RenderedEdge[];\n activeNodeId: string | undefined;\n }\n): KeyboardAction | undefined {\n const activeNode = activeNodeId\n ? renderedNodes.find((node) => node.id === activeNodeId)\n : undefined;\n\n if (!activeNode) {\n return;\n }\n\n const key =\n event.key ||\n /* istanbul ignore next: compatibility */ event.keyCode ||\n /* istanbul ignore next: compatibility */ event.which;\n let action: KeyboardAction[\"action\"] | undefined;\n let node: RenderedNode | undefined;\n switch (key) {\n case \"ArrowLeft\":\n case 37: {\n node = moveOnX(renderedNodes, activeNode, -1);\n action = \"switch-active-node\";\n break;\n }\n case \"ArrowUp\":\n case 38: {\n node = moveOnY(renderedNodes, renderedEdges, activeNode, -1);\n action = \"switch-active-node\";\n break;\n }\n case \"ArrowRight\":\n case 39: {\n node = moveOnX(renderedNodes, activeNode, 1);\n action = \"switch-active-node\";\n break;\n }\n case \"ArrowDown\":\n case 40: {\n node = moveOnY(renderedNodes, renderedEdges, activeNode, 1);\n action = \"switch-active-node\";\n break;\n }\n case \"Backspace\":\n case 8:\n case \"Delete\":\n case 46: {\n action = \"delete-node\";\n node = activeNode;\n break;\n }\n }\n if (action) {\n event.preventDefault();\n event.stopPropagation();\n return { action, node: node?.data } as KeyboardAction;\n }\n}\n\nfunction moveOnX(\n renderedNodes: RenderedNode[],\n activeNode: RenderedNode,\n direction: 1 | -1\n) {\n let diff: number;\n const candidates = renderedNodes.filter(\n (node) =>\n node !== activeNode &&\n ((diff = (node.x - activeNode.x) * direction), diff > 0) &&\n diff > Math.abs(activeNode.y - node.y)\n );\n return minBy(\n candidates,\n (node) => (activeNode.y - node.y) ** 2 + (activeNode.x - node.x) ** 2\n );\n}\n\nfunction moveOnY(\n renderedNodes: RenderedNode[],\n renderedEdges: RenderedEdge[],\n activeNode: RenderedNode,\n direction: 1 | -1\n) {\n const from = direction === 1 ? \"source\" : \"target\";\n const to = direction === 1 ? \"target\" : \"source\";\n const candidateEdges = renderedEdges.filter(\n ({ data }) => data[from] === activeNode.id && data[to] !== activeNode.id\n );\n const candidates = candidateEdges\n .map(({ data }) => renderedNodes.find((node) => node.id === data[to]))\n .filter(\n (node) => node && (node.y - activeNode.y) * direction > 0\n ) as RenderedNode[];\n return minBy(\n candidates,\n (node) => (activeNode.y - node.y) ** 2 + (activeNode.x - node.x) ** 2\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `:host{display:block;width:100%;height:100%;overflow:hidden}:host([hidden]){display:none}*{box-sizing:border-box}.diagram{width:100%;height:100%;position:relative;opacity:0}.diagram:focus{outline:none}.ready{opacity:1}.dragger,\n.lines,\n.line-labels,\n.nodes{position:absolute;top:0;left:0}.node{position:absolute;visibility:hidden}.dragger{width:100%;height:100%;cursor:-webkit-grab;cursor:grab}.grabbing{cursor:-webkit-grabbing;cursor:grabbing}.line-label{position:absolute;transform:translate(-50%,-50%);white-space:pre-line;width:-webkit-max-content;width:-moz-max-content;width:max-content;text-align:center}.lines{pointer-events:none}.line.interactable{pointer-events:auto}.connect-line{position:fixed;top:0;left:0;right:0;bottom:0;pointer-events:none}.connect-line:not(.connecting){display:none}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n"],"names":["ClipPathComponent","_ref","clipPath","clipPathPrefix","renderedLineLabels","x0","y0","w","h","id","lineText","find","item","left","top","right","bottom","lineRect","React","key","concat","points","join","ConnectLineComponent","connectLineState","connectLineTo","markerPrefix","width","height","className","classNames","connecting","MarkerComponent","strokeColor","options","d","from","fill","stroke","strokeWidth","markerEnd","arrow","undefined","LineComponent","line","markerIndex","edge","linePaths","clipPathList","onLineDoubleClick","interactable","onDoubleClick","e","preventDefault","stopPropagation","$id","style","cursor","ref","element","set","some","clip","interactStrokeWidth","LineLabelComponentGroup","labels","onRendered","rendered","setRendered","useState","renderedIds","setRenderedIds","refRepository","useMemo","Map","handleRenderer","useCallback","previous","includes","handleUnmount","index","indexOf","slice","delete","useEffect","label","map","_ref2","text","position","LineLabelComponent","onUnmount","LineTextComponent","_ref3","refCallback","_objectSpread","content","_ref4","useBrick","checkIfByTransform","memoizedData","setTimeout","parentElement","ignoredCallback","ReactUseBrick","data","viewBox","refX","refY","markerWidth","markerHeight","orient","NodeComponentGroup","nodes","nodeBricks","node","NodeComponent","_findNodeBrick","nodeType","type","findNodeBrick","DEFAULT_LINE_STROKE_COLOR","DEFAULT_LINE_STROKE_WIDTH","DEFAULT_LINE_CURVE_TYPE","DEFAULT_LINE_INTERACT_STROKE_WIDTH","getCenterOffsets","renderedNodes","canvasWidth","canvasHeight","Infinity","hw","hh","l","x","r","t","y","b","getClipPathList","lineLabelsRefRepository","get","offsetWidth","offsetHeight","offsetLeft","offsetTop","padding","filter","Boolean","getDagreGraph","previousGraph","edges","dagreGraphOptions","newGraph","dagre","Graph","setGraph","setDefaultEdgeLabel","previousNode","setNode","setEdge","source","target","getRenderedDiagram","graph","nodesRefRepository","nodePadding","nodeCount","_element$offsetWidth","_element$offsetHeight","console","error","v","_nodesRefRepository$g","push","nodeContainer","visibility","getRenderedLineLabels","renderedLines","length","path","getAttribute","getBBox","point","getPointAtLength","getTotalLength","curveLine","arrowOffset","curveType","Array","isArray","curveFactory","curveBasis","curveBumpX","curveBumpY","curveMonotoneX","curveMonotoneY","curveNatural","curveLinear","arrowOffsetX","arrowOffsetY","x1","y1","ratio","Math","sqrt","pow","transformPoints","curve","lineFunction","getRenderedLinesAndMarkers","renderedEdges","lines","markers","_loop","_lines$find","matchEdgeByFilter","edgeType","restLineConf","_objectWithoutProperties","_excluded","computedLineConf","__secret_internals","legacyDoTransform","draw","uniqueId","marker","findIndex","handleDiagramMouseDown","event","nodesConnect","setConnectLineState","setConnectLineTo","onSwitchActiveNode","onNodesConnect","findNode","match","_ret","_id","contains","sourceType","clientX","clientY","onMouseMove","onMouseUp","document","removeEventListener","eventTargets","composedPath","addEventListener","handleKeyboard","activeNodeId","activeNode","action","_node","keyCode","which","moveOnX","moveOnY","direction","diff","candidates","abs","minBy","to","___CSS_LOADER_EXPORT___","module","toString"],"sourceRoot":""}