UNPKG

@react-sigma/core

Version:
3 lines (2 loc) 11 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("graphology"),require("sigma")):"function"==typeof define&&define.amd?define(["exports","react","graphology","sigma"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@react-sigma/core"]={},e.React,e.Graph,e.sigma)}(this,(function(e,t,n,a){"use strict";function r(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var a=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,a.get?a:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var c=r(t);const s=t.createContext(null),o=s.Provider;function l(){const e=t.useContext(s);if(null==e)throw new Error("No context provided: useSigmaContext() can only be used in a descendant of <SigmaContainer>");return e}function i(){return l().sigma}function u(){const{sigma:e}=l();return t.useCallback((t=>{e&&Object.keys(t).forEach((n=>{e.setSetting(n,t[n])}))}),[e])}function g(e){return new Set(Object.keys(e))}const m=g({clickNode:!0,rightClickNode:!0,downNode:!0,enterNode:!0,leaveNode:!0,doubleClickNode:!0,wheelNode:!0,clickEdge:!0,rightClickEdge:!0,downEdge:!0,enterEdge:!0,leaveEdge:!0,doubleClickEdge:!0,wheelEdge:!0,clickStage:!0,rightClickStage:!0,downStage:!0,doubleClickStage:!0,wheelStage:!0,beforeRender:!0,afterRender:!0,kill:!0,upStage:!0,upEdge:!0,upNode:!0,enterStage:!0,leaveStage:!0,resize:!0,afterClear:!0,afterProcess:!0,beforeClear:!0,beforeProcess:!0,moveBody:!0}),d=g({click:!0,rightClick:!0,doubleClick:!0,mouseup:!0,mousedown:!0,mousemove:!0,mousemovebody:!0,mouseleave:!0,mouseenter:!0,wheel:!0}),f=g({touchup:!0,touchdown:!0,touchmove:!0,touchmovebody:!0,tap:!0,doubletap:!0}),h=g({updated:!0});function v(e,t){if(e===t)return!0;if("object"==typeof e&&null!=e&&"object"==typeof t&&null!=t){if(Object.keys(e).length!=Object.keys(t).length)return!1;for(const n in e){if(!Object.hasOwn(t,n))return!1;if(!v(e[n],t[n]))return!1}return!0}return!1}function p(e){const n=i(),[a,r]=t.useState(e||{});t.useEffect((()=>{r((t=>v(t,e||{})?t:e||{}))}),[e]);const c=t.useCallback((e=>{n.getCamera().animatedZoom(Object.assign(Object.assign({},a),e))}),[n,a]),s=t.useCallback((e=>{n.getCamera().animatedUnzoom(Object.assign(Object.assign({},a),e))}),[n,a]),o=t.useCallback((e=>{n.getCamera().animatedReset(Object.assign(Object.assign({},a),e))}),[n,a]),l=t.useCallback(((e,t)=>{n.getCamera().animate(e,Object.assign(Object.assign({},a),t))}),[n,a]),u=t.useCallback(((e,t)=>{const r=n.getNodeDisplayData(e);r?n.getCamera().animate(r,Object.assign(Object.assign({},a),t)):console.warn(`Node ${e} not found`)}),[n,a]);return{zoomIn:c,zoomOut:s,reset:o,goto:l,gotoNode:u}}function b(e){const n=l(),[a,r]=t.useState(!1),[c,s]=t.useState(e||n.container),o=t.useCallback((()=>r((e=>!e))),[]);t.useEffect((()=>(document.addEventListener("fullscreenchange",o),()=>document.removeEventListener("fullscreenchange",o))),[o]),t.useEffect((()=>{s(e||n.container)}),[e,n.container]);return{toggle:t.useCallback((()=>{var e;e=c,document.fullscreenElement!==e?e.requestFullscreen():document.exitFullscreen&&document.exitFullscreen()}),[c]),isFullScreen:a}}const w=(E=({graph:e,id:r,className:c,style:s,settings:l={},children:i},u)=>{const g=t.useRef(null),m=t.useRef(null),d={className:`react-sigma ${c||""}`,id:r,style:s},[f,h]=t.useState(null),[p,b]=t.useState(l);t.useEffect((()=>{b((e=>v(e,l)?e:l))}),[l]),t.useEffect((()=>{h((t=>{let r=null;if(null!==m.current){let c=new n;e&&(c="function"==typeof e?new e:e);let s=null;t&&(s=t.getCamera().getState(),t.kill()),r=new a.Sigma(c,m.current,p),s&&r.getCamera().setState(s)}return r}))}),[m,e,p]),t.useImperativeHandle(u,(()=>f),[f]);const w=t.useMemo((()=>f&&g.current?{sigma:f,container:g.current}:null),[f,g]),E=null!==w?t.createElement(o,{value:w},i):null;return t.createElement("div",Object.assign({},d,{ref:g}),t.createElement("div",{className:"sigma-container",ref:m}),E)},t.forwardRef(E));var E;var C;function O(){return O=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},O.apply(null,arguments)}var y,_=function(e){return c.createElement("svg",O({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",className:"dot-circle-regular_svg__svg-inline--fa dot-circle-regular_svg__fa-dot-circle dot-circle-regular_svg__fa-w-16","data-icon":"dot-circle","data-prefix":"far",viewBox:"0 0 512 512",width:"1em",height:"1em"},e),C||(C=c.createElement("path",{fill:"currentColor",d:"M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8m0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80"})))};function j(){return j=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},j.apply(null,arguments)}var S,k=function(e){return c.createElement("svg",j({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",className:"minus-solid_svg__svg-inline--fa minus-solid_svg__fa-minus minus-solid_svg__fa-w-14","data-icon":"minus","data-prefix":"fas",viewBox:"0 0 448 512",width:"1em",height:"1em"},e),y||(y=c.createElement("path",{fill:"currentColor",d:"M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32"})))};function x(){return x=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},x.apply(null,arguments)}var N=function(e){return c.createElement("svg",x({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",className:"plus-solid_svg__svg-inline--fa plus-solid_svg__fa-plus plus-solid_svg__fa-w-14","data-icon":"plus","data-prefix":"fas",viewBox:"0 0 448 512",width:"1em",height:"1em"},e),S||(S=c.createElement("path",{fill:"currentColor",d:"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32"})))};var H;function P(){return P=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},P.apply(null,arguments)}var M,z=function(e){return c.createElement("svg",P({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",className:"compress-solid_svg__svg-inline--fa compress-solid_svg__fa-compress compress-solid_svg__fa-w-14","data-icon":"compress","data-prefix":"fas",viewBox:"0 0 448 512",width:"1em",height:"1em"},e),H||(H=c.createElement("path",{fill:"currentColor",d:"M436 192H312c-13.3 0-24-10.7-24-24V44c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v84h84c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12m-276-24V44c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v84H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24m0 300V344c0-13.3-10.7-24-24-24H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12m192 0v-84h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H312c-13.3 0-24 10.7-24 24v124c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12"})))};function F(){return F=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},F.apply(null,arguments)}var R=function(e){return c.createElement("svg",F({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",className:"expand-solid_svg__svg-inline--fa expand-solid_svg__fa-expand expand-solid_svg__fa-w-14","data-icon":"expand","data-prefix":"fas",viewBox:"0 0 448 512",width:"1em",height:"1em"},e),M||(M=c.createElement("path",{fill:"currentColor",d:"M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12M288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12m148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12M160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12"})))};e.ControlsContainer=({id:e,className:n,style:a,children:r,position:c="bottom-left"})=>{const s={className:`react-sigma-controls ${n||""} ${c}`,id:e,style:a};return t.createElement("div",Object.assign({},s),r)},e.FullScreenControl=({id:e,className:n,style:a,container:r,children:c,labels:s={}})=>{const{isFullScreen:o,toggle:l}=b(null==r?void 0:r.current),i={className:`react-sigma-control ${n||""}`,id:e,style:a};return document.fullscreenEnabled?t.createElement("div",Object.assign({},i),t.createElement("button",{onClick:l,title:o?s.exit||"Exit fullscreen":s.enter||"Enter fullscreen"},c&&!o&&c[0],c&&o&&c[1],!c&&!o&&t.createElement(R,{style:{width:"1em"}}),!c&&o&&t.createElement(z,{style:{width:"1em"}}))):null},e.SigmaContainer=w,e.SigmaContext=s,e.SigmaProvider=o,e.ZoomControl=({className:e,style:n,animationDuration:a=200,children:r,labels:c={}})=>{const{zoomIn:s,zoomOut:o,reset:l}=p({duration:a,factor:1.5}),i={style:n,className:`react-sigma-control ${e||""}`};return t.createElement(t.Fragment,null,t.createElement("div",Object.assign({},i),t.createElement("button",{onClick:()=>s(),title:c.zoomIn||"Zoom In"},r?r[0]:t.createElement(N,{style:{width:"1em"}}))),t.createElement("div",Object.assign({},i),t.createElement("button",{onClick:()=>o(),title:c.zoomOut||"Zoom Out"},r?r[1]:t.createElement(k,{style:{width:"1em"}}))),t.createElement("div",Object.assign({},i),t.createElement("button",{onClick:()=>l(),title:c.reset||"See whole graph"},r?r[2]:t.createElement(_,{style:{width:"1em"}}))))},e.debounce=function(e,t){let n;return a=>new Promise((r=>{n&&clearTimeout(n),n=setTimeout((()=>{r(e(a))}),t)}))},e.isEqual=v,e.useCamera=p,e.useFullScreen=b,e.useLoadGraph=function(){const e=i();return t.useCallback(((t,n=!0)=>{e&&t&&(n&&e.getGraph().order>0&&e.getGraph().clear(),e.getGraph().import(t),e.refresh())}),[e])},e.useRegisterEvents=function(){const e=i(),n=u(),[a,r]=t.useState({});return t.useEffect((()=>{if(!e||!a)return;const t=a,n=Object.keys(t);return n.forEach((n=>{const a=t[n];m.has(n)&&e.on(n,a),d.has(n)&&e.getMouseCaptor().on(n,a),f.has(n)&&e.getTouchCaptor().on(n,a),h.has(n)&&e.getCamera().on(n,a)})),()=>{e&&n.forEach((n=>{const a=t[n];m.has(n)&&e.off(n,a),d.has(n)&&e.getMouseCaptor().off(n,a),f.has(n)&&e.getTouchCaptor().off(n,a),h.has(n)&&e.getCamera().off(n,a)}))}}),[e,a,n]),r},e.useSetSettings=u,e.useSigma=i,e.useSigmaContext=l})); //# sourceMappingURL=react-sigma_core.umd.min.js.map