{"version":3,"file":"nivo-network.mjs","sources":["../src/NetworkNode.tsx","../src/NetworkLink.tsx","../src/defaults.ts","../src/NetworkNodeTooltip.tsx","../src/renderCanvasNode.ts","../src/renderCanvasLink.ts","../src/hooks.ts","../src/NetworkLinks.tsx","../src/NetworkNodes.tsx","../src/NetworkNodeAnnotations.tsx","../src/Network.tsx","../src/ResponsiveNetwork.tsx","../src/NetworkCanvas.tsx","../src/ResponsiveNetworkCanvas.tsx"],"sourcesContent":["import { memo } from 'react'\nimport { animated, to } from '@react-spring/web'\nimport { InputNode, NodeProps } from './types'\n\nconst NonMemoizedNetworkNode = <Node extends InputNode>({\n    node,\n    animated: animatedProps,\n    onClick,\n    onMouseEnter,\n    onMouseMove,\n    onMouseLeave,\n}: NodeProps<Node>) => (\n    <animated.circle\n        data-testid={`node.${node.id}`}\n        transform={to([animatedProps.x, animatedProps.y, animatedProps.scale], (x, y, scale) => {\n            return `translate(${x},${y}) scale(${scale})`\n        })}\n        r={to([animatedProps.size], size => size / 2)}\n        fill={animatedProps.color}\n        strokeWidth={animatedProps.borderWidth}\n        stroke={animatedProps.borderColor}\n        opacity={animatedProps.opacity}\n        onClick={onClick ? event => onClick(node, event) : undefined}\n        onMouseEnter={onMouseEnter ? event => onMouseEnter(node, event) : undefined}\n        onMouseMove={onMouseMove ? event => onMouseMove(node, event) : undefined}\n        onMouseLeave={onMouseLeave ? event => onMouseLeave(node, event) : undefined}\n    />\n)\n\nexport const NetworkNode = memo(NonMemoizedNetworkNode) as typeof NonMemoizedNetworkNode\n","import { animated } from '@react-spring/web'\nimport { InputLink, InputNode, LinkProps } from './types'\nimport { memo } from 'react'\n\nconst NonMemoizedNetworkLink = <Node extends InputNode, Link extends InputLink>({\n    link,\n    animated: animatedProps,\n    blendMode,\n}: LinkProps<Node, Link>) => (\n    <animated.line\n        data-testid={`link.${link.id}`}\n        stroke={animatedProps.color}\n        style={{ mixBlendMode: blendMode }}\n        strokeWidth={link.thickness}\n        strokeLinecap=\"round\"\n        opacity={animatedProps.opacity}\n        x1={animatedProps.x1}\n        y1={animatedProps.y1}\n        x2={animatedProps.x2}\n        y2={animatedProps.y2}\n    />\n)\n\nexport const NetworkLink = memo(NonMemoizedNetworkLink) as typeof NonMemoizedNetworkLink\n","import { NetworkCommonProps, InputNode, LayerId, NetworkSvgProps, InputLink } from './types'\nimport { NetworkNode } from './NetworkNode'\nimport { renderCanvasNode } from './renderCanvasNode'\nimport { NetworkLink } from './NetworkLink'\nimport { renderCanvasLink } from './renderCanvasLink'\nimport { NetworkNodeTooltip } from './NetworkNodeTooltip'\n\nexport const commonDefaultProps: Omit<\n    NetworkCommonProps<InputNode, InputLink>,\n    | 'margin'\n    | 'theme'\n    | 'onClick'\n    | 'renderWrapper'\n    | 'ariaLabel'\n    | 'ariaLabelledBy'\n    | 'ariaDescribedBy'\n> & {\n    layers: LayerId[]\n} = {\n    layers: ['links', 'nodes', 'annotations'],\n\n    linkDistance: 30,\n    centeringStrength: 1,\n    repulsivity: 10,\n    distanceMin: 1,\n    distanceMax: Infinity,\n    iterations: 120,\n\n    nodeSize: 12,\n    activeNodeSize: 18,\n    inactiveNodeSize: 8,\n    nodeColor: '#000000',\n    nodeBorderWidth: 0,\n    nodeBorderColor: { from: 'color' },\n\n    linkThickness: 1,\n    linkColor: { from: 'source.color' },\n\n    isInteractive: true,\n    defaultActiveNodeIds: [],\n    nodeTooltip: NetworkNodeTooltip,\n\n    annotations: [],\n\n    animate: true,\n    motionConfig: 'gentle' as const,\n\n    role: 'img',\n}\n\nexport const svgDefaultProps = {\n    ...commonDefaultProps,\n    nodeComponent: NetworkNode as NonNullable<\n        NetworkSvgProps<InputNode, InputLink>['nodeComponent']\n    >,\n    linkComponent: NetworkLink as NonNullable<\n        NetworkSvgProps<InputNode, InputLink>['linkComponent']\n    >,\n    linkBlendMode: 'normal' as NonNullable<NetworkSvgProps<InputNode, InputLink>['linkBlendMode']>,\n}\n\nexport const canvasDefaultProps = {\n    ...commonDefaultProps,\n    renderNode: renderCanvasNode,\n    renderLink: renderCanvasLink,\n    pixelRatio: typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1,\n}\n","import { BasicTooltip } from '@nivo/tooltip'\nimport { InputNode, NodeTooltipProps } from './types'\n\nexport const NetworkNodeTooltip = <Node extends InputNode>({ node }: NodeTooltipProps<Node>) => (\n    <BasicTooltip id={node.id} enableChip={true} color={node.color} />\n)\n","import { ComputedNode, InputNode } from './types'\n\nexport const renderCanvasNode = <Node extends InputNode>(\n    ctx: CanvasRenderingContext2D,\n    node: ComputedNode<Node>\n) => {\n    ctx.fillStyle = node.color\n    ctx.beginPath()\n    ctx.arc(node.x, node.y, node.size / 2, 0, 2 * Math.PI)\n    ctx.fill()\n\n    if (node.borderWidth > 0) {\n        ctx.strokeStyle = node.borderColor\n        ctx.lineWidth = node.borderWidth\n        ctx.stroke()\n    }\n}\n","import { InputNode, ComputedLink, InputLink } from './types'\n\nexport const renderCanvasLink = <Node extends InputNode, Link extends InputLink>(\n    ctx: CanvasRenderingContext2D,\n    link: ComputedLink<Node, Link>\n) => {\n    ctx.strokeStyle = link.color\n    ctx.lineWidth = link.thickness\n\n    ctx.beginPath()\n    ctx.moveTo(link.source.x, link.source.y)\n    ctx.lineTo(link.target.x, link.target.y)\n    ctx.stroke()\n}\n","import { useState, useEffect, useMemo, useCallback } from 'react'\nimport { forceSimulation, forceManyBody, forceCenter, forceLink } from 'd3-force'\nimport { useTheme } from '@nivo/theming'\nimport { useInheritedColor } from '@nivo/colors'\nimport { AnnotationMatcher, useAnnotations } from '@nivo/annotations'\nimport { commonDefaultProps } from './defaults'\nimport {\n    InputLink,\n    InputNode,\n    NetworkCommonProps,\n    DerivedProp,\n    ComputedNode,\n    ComputedLink,\n    TransientNode,\n    TransientLink,\n} from './types'\n\nconst useDerivedProp = <Target, Output extends string | number>(\n    instruction: DerivedProp<Target, Output>\n) =>\n    useMemo(() => {\n        if (typeof instruction === 'function') return instruction\n        return () => instruction\n    }, [instruction])\n\nconst useComputeForces = <Node extends InputNode, Link extends InputLink>({\n    linkDistance,\n    centeringStrength,\n    repulsivity,\n    distanceMin,\n    distanceMax,\n    center,\n}: {\n    linkDistance: NetworkCommonProps<Node, Link>['linkDistance']\n    centeringStrength: NetworkCommonProps<Node, Link>['centeringStrength']\n    repulsivity: NetworkCommonProps<Node, Link>['repulsivity']\n    distanceMin: NetworkCommonProps<Node, Link>['distanceMin']\n    distanceMax: NetworkCommonProps<Node, Link>['distanceMax']\n    center: [number, number]\n}) => {\n    const getLinkDistance = useDerivedProp<Link, number>(linkDistance)\n\n    const centerX = center[0]\n    const centerY = center[1]\n\n    return useMemo(() => {\n        const linkForce = forceLink<TransientNode<Node>, TransientLink<Node, Link>>()\n            .distance(link => getLinkDistance(link.data))\n            .strength(centeringStrength)\n\n        const chargeForce = forceManyBody()\n            .strength(-repulsivity)\n            .distanceMin(distanceMin)\n            .distanceMax(distanceMax)\n\n        const centerForce = forceCenter(centerX, centerY)\n\n        return { link: linkForce, charge: chargeForce, center: centerForce }\n    }, [\n        getLinkDistance,\n        centeringStrength,\n        repulsivity,\n        distanceMin,\n        distanceMax,\n        centerX,\n        centerY,\n    ])\n}\n\nconst useNodeStyle = <Node extends InputNode, Link extends InputLink>({\n    size,\n    activeSize,\n    inactiveSize,\n    color,\n    borderWidth,\n    borderColor,\n    isInteractive,\n    activeNodeIds,\n}: {\n    size: NetworkCommonProps<Node, Link>['nodeSize']\n    activeSize: NetworkCommonProps<Node, Link>['activeNodeSize']\n    inactiveSize: NetworkCommonProps<Node, Link>['inactiveNodeSize']\n    color: NetworkCommonProps<Node, Link>['nodeColor']\n    borderWidth: NetworkCommonProps<Node, Link>['nodeBorderWidth']\n    borderColor: NetworkCommonProps<Node, Link>['nodeBorderColor']\n    isInteractive: NetworkCommonProps<Node, Link>['isInteractive']\n    activeNodeIds: string[]\n}) => {\n    const theme = useTheme()\n\n    const getSize = useDerivedProp(size)\n    const getColor = useDerivedProp(color)\n    const getBorderWidth = useDerivedProp(borderWidth)\n    const getBorderColor = useInheritedColor(borderColor, theme)\n    const getNormalStyle = useCallback(\n        (node: TransientNode<Node>) => {\n            const color = getColor(node.data)\n\n            return {\n                size: getSize(node.data),\n                color,\n                borderWidth: getBorderWidth(node.data),\n                borderColor: getBorderColor({ ...node, color }),\n            }\n        },\n        [getSize, getColor, getBorderWidth, getBorderColor]\n    )\n\n    const getActiveSize = useDerivedProp(activeSize)\n    const getActiveStyle = useCallback(\n        (node: TransientNode<Node>) => {\n            const color = getColor(node.data)\n\n            return {\n                size: getActiveSize(node.data),\n                color,\n                borderWidth: getBorderWidth(node.data),\n                borderColor: getBorderColor({ ...node, color }),\n            }\n        },\n        [getActiveSize, getColor, getBorderWidth, getBorderColor]\n    )\n\n    const getInactiveSize = useDerivedProp(inactiveSize)\n    const getInactiveStyle = useCallback(\n        (node: TransientNode<Node>) => {\n            const color = getColor(node.data)\n\n            return {\n                size: getInactiveSize(node.data),\n                color,\n                borderWidth: getBorderWidth(node.data),\n                borderColor: getBorderColor({ ...node, color }),\n            }\n        },\n        [getInactiveSize, getColor, getBorderWidth, getBorderColor]\n    )\n\n    return useCallback(\n        (node: TransientNode<Node>) => {\n            if (!isInteractive || activeNodeIds.length === 0) return getNormalStyle(node)\n            if (activeNodeIds.includes(node.id)) return getActiveStyle(node)\n            return getInactiveStyle(node)\n        },\n        [getNormalStyle, getActiveStyle, getInactiveStyle, isInteractive, activeNodeIds]\n    )\n}\n\nexport const useNetwork = <Node extends InputNode = InputNode, Link extends InputLink = InputLink>({\n    center,\n    nodes,\n    links,\n    linkDistance = commonDefaultProps.linkDistance,\n    centeringStrength = commonDefaultProps.centeringStrength,\n    repulsivity = commonDefaultProps.repulsivity,\n    distanceMin = commonDefaultProps.distanceMin,\n    distanceMax = commonDefaultProps.distanceMax,\n    iterations = commonDefaultProps.iterations,\n    nodeSize = commonDefaultProps.nodeSize,\n    activeNodeSize = commonDefaultProps.activeNodeSize,\n    inactiveNodeSize = commonDefaultProps.inactiveNodeSize,\n    nodeColor = commonDefaultProps.nodeColor,\n    nodeBorderWidth = commonDefaultProps.nodeBorderWidth,\n    nodeBorderColor = commonDefaultProps.nodeBorderColor,\n    linkThickness = commonDefaultProps.linkThickness,\n    linkColor = commonDefaultProps.linkColor,\n    isInteractive = commonDefaultProps.isInteractive,\n    defaultActiveNodeIds = commonDefaultProps.defaultActiveNodeIds,\n}: {\n    center: [number, number]\n    nodes: Node[]\n    links: Link[]\n    linkDistance?: NetworkCommonProps<Node, Link>['linkDistance']\n    centeringStrength?: NetworkCommonProps<Node, Link>['centeringStrength']\n    repulsivity?: NetworkCommonProps<Node, Link>['repulsivity']\n    distanceMin?: NetworkCommonProps<Node, Link>['distanceMin']\n    distanceMax?: NetworkCommonProps<Node, Link>['distanceMax']\n    iterations?: NetworkCommonProps<Node, Link>['iterations']\n    nodeSize?: NetworkCommonProps<Node, Link>['nodeSize']\n    activeNodeSize?: NetworkCommonProps<Node, Link>['activeNodeSize']\n    inactiveNodeSize?: NetworkCommonProps<Node, Link>['inactiveNodeSize']\n    nodeColor?: NetworkCommonProps<Node, Link>['nodeColor']\n    nodeBorderWidth?: NetworkCommonProps<Node, Link>['nodeBorderWidth']\n    nodeBorderColor?: NetworkCommonProps<Node, Link>['nodeBorderColor']\n    linkThickness?: NetworkCommonProps<Node, Link>['linkThickness']\n    linkColor?: NetworkCommonProps<Node, Link>['linkColor']\n    isInteractive?: NetworkCommonProps<Node, Link>['isInteractive']\n    defaultActiveNodeIds?: NetworkCommonProps<Node, Link>['defaultActiveNodeIds']\n}) => {\n    // we're using `null` instead of empty array so that we can dissociate\n    // initial rendering from updates when using transitions.\n    const [transientNodes, setTransientNodes] = useState<null | TransientNode<Node>[]>(null)\n    const [transientLinks, setTransientLinks] = useState<null | TransientLink<Node, Link>[]>(null)\n\n    const forces = useComputeForces<Node, Link>({\n        linkDistance,\n        centeringStrength,\n        repulsivity,\n        distanceMin,\n        distanceMax,\n        center,\n    })\n\n    useEffect(() => {\n        // copy the nodes & links to avoid mutating the original ones.\n        const _transientNodes: TransientNode<Node>[] = nodes.map(node => ({\n            id: node.id,\n            data: { ...node },\n            // the properties below are populated by D3, via mutations\n            index: 0,\n            x: 0,\n            y: 0,\n            vx: 0,\n            vy: 0,\n        }))\n        const _transientLinks: TransientLink<Node, Link>[] = links.map(link => ({\n            data: { ...link },\n            // populated by D3, via mutation\n            index: 0,\n            // replace ids with objects, otherwise D3 does this automatically\n            // which is a bit annoying with typings because then `source` & `target`\n            // can be either strings (before the simulation) or an objects (after).\n            source: _transientNodes.find(node => node.id === link.source)!,\n            target: _transientNodes.find(node => node.id === link.target)!,\n        }))\n\n        const simulation = forceSimulation(_transientNodes)\n            .force('link', forces.link.links(_transientLinks))\n            .force('charge', forces.charge)\n            .force('center', forces.center)\n            .stop()\n\n        // this will set `index`, `x`, `y`, `vx`, `vy` for each node.\n        simulation.tick(iterations)\n\n        setTransientNodes(_transientNodes)\n        setTransientLinks(_transientLinks)\n\n        return () => {\n            simulation.stop()\n        }\n    }, [nodes, links, forces, iterations, setTransientNodes, setTransientLinks])\n\n    const [activeNodeIds, setActiveNodeIds] = useState<string[]>(defaultActiveNodeIds)\n\n    const getNodeStyle = useNodeStyle<Node, Link>({\n        size: nodeSize,\n        activeSize: activeNodeSize,\n        inactiveSize: inactiveNodeSize,\n        color: nodeColor,\n        borderWidth: nodeBorderWidth,\n        borderColor: nodeBorderColor,\n        isInteractive,\n        activeNodeIds,\n    })\n    const computedNodes: ComputedNode<Node>[] | null = useMemo(() => {\n        if (transientNodes === null) return null\n\n        return transientNodes.map(node => ({\n            ...node,\n            ...getNodeStyle(node),\n        }))\n    }, [transientNodes, getNodeStyle])\n\n    const theme = useTheme()\n    const getLinkThickness = useDerivedProp(linkThickness)\n    const getLinkColor = useInheritedColor(linkColor, theme)\n\n    const computedLinks: ComputedLink<Node, Link>[] | null = useMemo(() => {\n        if (transientLinks === null || computedNodes === null) return null\n\n        return transientLinks.map(({ index, ...link }) => {\n            const linkWithComputedNodes: Omit<ComputedLink<Node, Link>, 'color' | 'thickness'> = {\n                id: `${link.source.id}.${link.target.id}`,\n                data: link.data,\n                index,\n                source: computedNodes.find(node => node.id === link.source.id)!,\n                target: computedNodes.find(node => node.id === link.target.id)!,\n            }\n\n            return {\n                ...linkWithComputedNodes,\n                thickness: getLinkThickness(linkWithComputedNodes),\n                color: getLinkColor(linkWithComputedNodes),\n            }\n        })\n    }, [transientLinks, computedNodes, getLinkThickness, getLinkColor])\n\n    return {\n        nodes: computedNodes,\n        links: computedLinks,\n        activeNodeIds,\n        setActiveNodeIds,\n    }\n}\n\nconst getNodeAnnotationPosition = <Node extends InputNode>(node: ComputedNode<Node>) => ({\n    x: node.x,\n    y: node.y,\n})\n\nconst getNodeAnnotationDimensions = <Node extends InputNode>(node: ComputedNode<Node>) => ({\n    size: node.size,\n    width: node.size,\n    height: node.size,\n})\n\nexport const useNodeAnnotations = <Node extends InputNode>(\n    nodes: ComputedNode<Node>[],\n    annotations: AnnotationMatcher<ComputedNode<Node>>[]\n) =>\n    useAnnotations<ComputedNode<Node>>({\n        data: nodes,\n        annotations,\n        getPosition: getNodeAnnotationPosition,\n        getDimensions: getNodeAnnotationDimensions,\n    })\n","import { createElement, useMemo } from 'react'\nimport { useTransition } from '@react-spring/web'\nimport { useMotionConfig } from '@nivo/core'\nimport { ComputedLink, InputLink, InputNode, LinkComponent, NetworkSvgProps } from './types'\n\ninterface NetworkLinksProps<Node extends InputNode, Link extends InputLink> {\n    links: ComputedLink<Node, Link>[]\n    linkComponent: LinkComponent<Node, Link>\n    blendMode: NonNullable<NetworkSvgProps<Node, Link>['linkBlendMode']>\n}\n\nconst getEnterTransition =\n    <Node extends InputNode, Link extends InputLink>() =>\n    (link: ComputedLink<Node, Link>) => ({\n        x1: link.source.x,\n        y1: link.source.y,\n        x2: link.source.x,\n        y2: link.source.y,\n        color: link.color,\n        opacity: 0,\n    })\n\nconst getRegularTransition =\n    <Node extends InputNode, Link extends InputLink>() =>\n    (link: ComputedLink<Node, Link>) => ({\n        x1: link.source.x,\n        y1: link.source.y,\n        x2: link.target.x,\n        y2: link.target.y,\n        color: link.color,\n        opacity: 1,\n    })\n\nexport const NetworkLinks = <Node extends InputNode, Link extends InputLink>({\n    links,\n    linkComponent,\n    blendMode,\n}: NetworkLinksProps<Node, Link>) => {\n    const { animate, config: springConfig } = useMotionConfig()\n\n    const [enterTransition, regularTransition] = useMemo(\n        () => [getEnterTransition<Node, Link>(), getRegularTransition<Node, Link>()],\n        []\n    )\n\n    const transition = useTransition<\n        ComputedLink<Node, Link>,\n        {\n            x1: number\n            y1: number\n            x2: number\n            y2: number\n            color: string\n            opacity: number\n        }\n    >(links, {\n        keys: link => link.id,\n        initial: regularTransition,\n        from: enterTransition,\n        enter: regularTransition,\n        update: regularTransition,\n        expires: true,\n        config: springConfig,\n        immediate: !animate,\n    })\n\n    return (\n        <>\n            {transition((transitionProps, link) => {\n                return createElement(linkComponent, {\n                    key: link.id,\n                    link,\n                    animated: transitionProps,\n                    blendMode,\n                })\n            })}\n        </>\n    )\n}\n","import { createElement, useCallback, useMemo, MouseEvent } from 'react'\nimport { useTransition } from '@react-spring/web'\nimport { useMotionConfig } from '@nivo/core'\nimport { useTooltip } from '@nivo/tooltip'\nimport { InputNode, ComputedNode, NodeAnimatedProps, NetworkSvgProps, InputLink } from './types'\n\ninterface NetworkNodesProps<Node extends InputNode, Link extends InputLink> {\n    nodes: ComputedNode<Node>[]\n    nodeComponent: NonNullable<NetworkSvgProps<Node, Link>['nodeComponent']>\n    onMouseEnter: NetworkSvgProps<Node, Link>['onMouseEnter']\n    onMouseMove: NetworkSvgProps<Node, Link>['onMouseMove']\n    onMouseLeave: NetworkSvgProps<Node, Link>['onMouseLeave']\n    onClick: NetworkSvgProps<Node, Link>['onClick']\n    tooltip: NonNullable<NetworkSvgProps<Node, Link>['nodeTooltip']>\n    setActiveNodeIds: (nodeIds: string[]) => void\n    isInteractive: NonNullable<NetworkSvgProps<Node, Link>['isInteractive']>\n}\n\nconst getEnterTransition =\n    <Node extends InputNode>() =>\n    (node: ComputedNode<Node>) => ({\n        x: node.x,\n        y: node.y,\n        size: node.size,\n        color: node.color,\n        borderWidth: node.borderWidth,\n        borderColor: node.borderColor,\n        scale: 0,\n        opacity: 0,\n    })\n\nconst getRegularTransition =\n    <N extends InputNode>() =>\n    (node: ComputedNode<N>) => ({\n        x: node.x,\n        y: node.y,\n        size: node.size,\n        color: node.color,\n        borderWidth: node.borderWidth,\n        borderColor: node.borderColor,\n        scale: 1,\n        opacity: 1,\n    })\n\nconst getExitTransition =\n    <Node extends InputNode>() =>\n    (node: ComputedNode<Node>) => ({\n        x: node.x,\n        y: node.y,\n        size: node.size,\n        color: node.color,\n        borderWidth: node.borderWidth,\n        borderColor: node.borderColor,\n        scale: 0,\n        opacity: 0,\n    })\n\nexport const NetworkNodes = <Node extends InputNode, Link extends InputLink>({\n    nodes,\n    nodeComponent,\n    onMouseEnter,\n    onMouseMove,\n    onMouseLeave,\n    onClick,\n    tooltip,\n    setActiveNodeIds,\n    isInteractive,\n}: NetworkNodesProps<Node, Link>) => {\n    const { animate, config: springConfig } = useMotionConfig()\n\n    const [enterTransition, regularTransition, exitTransition] = useMemo(\n        () => [getEnterTransition<Node>(), getRegularTransition<Node>(), getExitTransition<Node>()],\n        []\n    )\n\n    const transition = useTransition<ComputedNode<Node>, NodeAnimatedProps>(nodes, {\n        keys: node => node.id,\n        initial: regularTransition,\n        from: enterTransition,\n        enter: regularTransition,\n        update: regularTransition,\n        leave: exitTransition,\n        config: springConfig,\n        immediate: !animate,\n    })\n\n    const { showTooltipFromEvent, hideTooltip } = useTooltip()\n\n    const handleMouseEnter = useCallback(\n        (node: ComputedNode<Node>, event: MouseEvent) => {\n            showTooltipFromEvent(createElement(tooltip, { node }), event)\n            setActiveNodeIds([node.id])\n            onMouseEnter?.(node, event)\n        },\n        [showTooltipFromEvent, tooltip, setActiveNodeIds, onMouseEnter]\n    )\n\n    const handleMouseMove = useCallback(\n        (node: ComputedNode<Node>, event: MouseEvent) => {\n            showTooltipFromEvent(createElement(tooltip, { node }), event)\n            onMouseMove?.(node, event)\n        },\n        [showTooltipFromEvent, tooltip, onMouseMove]\n    )\n\n    const handleMouseLeave = useCallback(\n        (node: ComputedNode<Node>, event: MouseEvent) => {\n            hideTooltip()\n            setActiveNodeIds([])\n            onMouseLeave?.(node, event)\n        },\n        [hideTooltip, setActiveNodeIds, onMouseLeave]\n    )\n\n    return (\n        <>\n            {transition((transitionProps, node) =>\n                createElement(nodeComponent, {\n                    key: node.id,\n                    node,\n                    animated: transitionProps,\n                    onMouseEnter: isInteractive ? handleMouseEnter : undefined,\n                    onMouseMove: isInteractive ? handleMouseMove : undefined,\n                    onMouseLeave: isInteractive ? handleMouseLeave : undefined,\n                    onClick: isInteractive ? onClick : undefined,\n                })\n            )}\n        </>\n    )\n}\n","import { Annotation } from '@nivo/annotations'\nimport { ComputedNode, InputLink, InputNode, NetworkSvgProps } from './types'\nimport { useNodeAnnotations } from './hooks'\n\ninterface NetworkNodeAnnotationsProps<Node extends InputNode, Link extends InputLink> {\n    nodes: ComputedNode<Node>[]\n    annotations: NonNullable<NetworkSvgProps<Node, Link>['annotations']>\n}\n\nexport const NetworkNodeAnnotations = <Node extends InputNode, Link extends InputLink>({\n    nodes,\n    annotations,\n}: NetworkNodeAnnotationsProps<Node, Link>) => {\n    const boundAnnotations = useNodeAnnotations<Node>(nodes, annotations)\n\n    return (\n        <>\n            {boundAnnotations.map((annotation, i) => (\n                <Annotation key={i} {...annotation} />\n            ))}\n        </>\n    )\n}\n","import { Fragment, ReactNode, createElement, useMemo, forwardRef, Ref, ReactElement } from 'react'\nimport { Container, useDimensions, SvgWrapper, WithChartRef } from '@nivo/core'\nimport { svgDefaultProps } from './defaults'\nimport { useNetwork } from './hooks'\nimport { NetworkLinks } from './NetworkLinks'\nimport { NetworkNodes } from './NetworkNodes'\nimport { NetworkNodeAnnotations } from './NetworkNodeAnnotations'\nimport {\n    InputNode,\n    LayerId,\n    NodeTooltip,\n    NetworkSvgProps,\n    InputLink,\n    CustomLayerProps,\n} from './types'\n\ntype InnerNetworkProps<Node extends InputNode, Link extends InputLink> = Omit<\n    NetworkSvgProps<Node, Link>,\n    'animate' | 'motionConfig' | 'renderWrapper' | 'theme'\n> & {\n    forwardedRef: Ref<SVGSVGElement>\n}\n\nconst InnerNetwork = <Node extends InputNode, Link extends InputLink>({\n    width,\n    height,\n    margin: partialMargin,\n    data: { nodes: rawNodes, links: rawLinks },\n    linkDistance = svgDefaultProps.linkDistance,\n    centeringStrength = svgDefaultProps.centeringStrength,\n    repulsivity = svgDefaultProps.repulsivity,\n    distanceMin = svgDefaultProps.distanceMin,\n    distanceMax = svgDefaultProps.distanceMax,\n    iterations = svgDefaultProps.iterations,\n    layers = svgDefaultProps.layers,\n    nodeComponent = svgDefaultProps.nodeComponent as unknown as NonNullable<\n        NetworkSvgProps<Node, Link>['nodeComponent']\n    >,\n    nodeSize = svgDefaultProps.nodeSize,\n    activeNodeSize = svgDefaultProps.activeNodeSize,\n    inactiveNodeSize = svgDefaultProps.inactiveNodeSize,\n    nodeColor = svgDefaultProps.nodeColor,\n    nodeBorderWidth = svgDefaultProps.nodeBorderWidth,\n    nodeBorderColor = svgDefaultProps.nodeBorderColor,\n    linkComponent = svgDefaultProps.linkComponent as NonNullable<\n        NetworkSvgProps<Node, Link>['linkComponent']\n    >,\n    linkThickness = svgDefaultProps.linkThickness,\n    linkColor = svgDefaultProps.linkColor,\n    linkBlendMode = svgDefaultProps.linkBlendMode,\n    annotations = svgDefaultProps.annotations as NonNullable<\n        NetworkSvgProps<Node, Link>['annotations']\n    >,\n    isInteractive = svgDefaultProps.isInteractive,\n    defaultActiveNodeIds = svgDefaultProps.defaultActiveNodeIds,\n    nodeTooltip = svgDefaultProps.nodeTooltip as NodeTooltip<Node>,\n    onMouseEnter,\n    onMouseMove,\n    onMouseLeave,\n    onClick,\n    role = svgDefaultProps.role,\n    ariaLabel,\n    ariaLabelledBy,\n    ariaDescribedBy,\n    forwardedRef,\n}: InnerNetworkProps<Node, Link>) => {\n    const { margin, innerWidth, innerHeight, outerWidth, outerHeight } = useDimensions(\n        width,\n        height,\n        partialMargin\n    )\n\n    const { nodes, links, activeNodeIds, setActiveNodeIds } = useNetwork<Node, Link>({\n        center: [innerWidth / 2, innerHeight / 2],\n        nodes: rawNodes,\n        links: rawLinks,\n        linkDistance,\n        centeringStrength,\n        repulsivity,\n        distanceMin,\n        distanceMax,\n        iterations,\n        nodeSize,\n        activeNodeSize,\n        inactiveNodeSize,\n        nodeColor,\n        nodeBorderWidth,\n        nodeBorderColor,\n        linkThickness,\n        linkColor,\n        isInteractive,\n        defaultActiveNodeIds,\n    })\n\n    const layerById: Record<LayerId, ReactNode> = {\n        links: null,\n        nodes: null,\n        annotations: null,\n    }\n\n    if (layers.includes('links') && links !== null) {\n        layerById.links = (\n            <NetworkLinks<Node, Link>\n                key=\"links\"\n                links={links}\n                linkComponent={linkComponent}\n                blendMode={linkBlendMode}\n            />\n        )\n    }\n\n    if (layers.includes('nodes') && nodes !== null) {\n        layerById.nodes = (\n            <NetworkNodes<Node, Link>\n                key=\"nodes\"\n                nodes={nodes}\n                nodeComponent={nodeComponent}\n                onMouseEnter={onMouseEnter}\n                onMouseMove={onMouseMove}\n                onMouseLeave={onMouseLeave}\n                onClick={onClick}\n                tooltip={nodeTooltip}\n                setActiveNodeIds={setActiveNodeIds}\n                isInteractive={isInteractive}\n            />\n        )\n    }\n\n    if (layers.includes('annotations') && nodes !== null) {\n        layerById.annotations = (\n            <NetworkNodeAnnotations<Node, Link>\n                key=\"annotations\"\n                nodes={nodes}\n                annotations={annotations}\n            />\n        )\n    }\n\n    const customLayerProps: CustomLayerProps<Node, Link> = useMemo(\n        () => ({\n            nodes: nodes || [],\n            links: links || [],\n            activeNodeIds,\n            setActiveNodeIds,\n        }),\n        [nodes, links, activeNodeIds, setActiveNodeIds]\n    )\n\n    return (\n        <SvgWrapper\n            width={outerWidth}\n            height={outerHeight}\n            margin={margin}\n            role={role}\n            ariaLabel={ariaLabel}\n            ariaLabelledBy={ariaLabelledBy}\n            ariaDescribedBy={ariaDescribedBy}\n            ref={forwardedRef}\n        >\n            {layers.map((layer, i) => {\n                if (typeof layer === 'function') {\n                    return <Fragment key={i}>{createElement(layer, customLayerProps)}</Fragment>\n                }\n\n                return layerById?.[layer] ?? null\n            })}\n        </SvgWrapper>\n    )\n}\n\nexport const Network = forwardRef(\n    <Node extends InputNode = InputNode, Link extends InputLink = InputLink>(\n        {\n            isInteractive = svgDefaultProps.isInteractive,\n            animate = svgDefaultProps.animate,\n            motionConfig = svgDefaultProps.motionConfig,\n            theme,\n            renderWrapper,\n            ...props\n        }: NetworkSvgProps<Node, Link>,\n        ref: Ref<SVGSVGElement>\n    ) => (\n        <Container\n            animate={animate}\n            isInteractive={isInteractive}\n            motionConfig={motionConfig}\n            renderWrapper={renderWrapper}\n            theme={theme}\n        >\n            <InnerNetwork<Node, Link> {...props} isInteractive={isInteractive} forwardedRef={ref} />\n        </Container>\n    )\n) as <Node extends InputNode = InputNode, Link extends InputLink = InputLink>(\n    props: WithChartRef<NetworkSvgProps<Node, Link>, SVGSVGElement>\n) => ReactElement\n","import { forwardRef, Ref, ReactElement } from 'react'\nimport { ResponsiveWrapper, ResponsiveProps, WithChartRef } from '@nivo/core'\nimport { InputLink, InputNode, NetworkSvgProps } from './types'\nimport { Network } from './Network'\n\nexport const ResponsiveNetwork = forwardRef(\n    <Node extends InputNode = InputNode, Link extends InputLink = InputLink>(\n        {\n            defaultWidth,\n            defaultHeight,\n            onResize,\n            debounceResize,\n            ...props\n        }: ResponsiveProps<NetworkSvgProps<Node, Link>>,\n        ref: Ref<SVGSVGElement>\n    ) => (\n        <ResponsiveWrapper\n            defaultWidth={defaultWidth}\n            defaultHeight={defaultHeight}\n            onResize={onResize}\n            debounceResize={debounceResize}\n        >\n            {({ width, height }) => (\n                <Network<Node, Link> {...props} width={width} height={height} ref={ref} />\n            )}\n        </ResponsiveWrapper>\n    )\n) as <Node extends InputNode = InputNode, Link extends InputLink = InputLink>(\n    props: WithChartRef<ResponsiveProps<NetworkSvgProps<Node, Link>>, SVGSVGElement>\n) => ReactElement\n","import {\n    forwardRef,\n    useCallback,\n    useRef,\n    useEffect,\n    createElement,\n    MouseEvent,\n    useMemo,\n    Ref,\n    ReactElement,\n} from 'react'\nimport {\n    getDistance,\n    getRelativeCursor,\n    Container,\n    useDimensions,\n    WithChartRef,\n    mergeRefs,\n} from '@nivo/core'\nimport { useTheme } from '@nivo/theming'\nimport { useTooltip } from '@nivo/tooltip'\nimport { useComputedAnnotations, renderAnnotationsToCanvas } from '@nivo/annotations'\nimport { canvasDefaultProps } from './defaults'\nimport { useNetwork, useNodeAnnotations } from './hooks'\nimport {\n    NetworkCanvasProps,\n    InputNode,\n    ComputedNode,\n    NodeTooltip,\n    InputLink,\n    NetworkSvgProps,\n    CustomLayerProps,\n} from './types'\n\ntype InnerNetworkCanvasProps<Node extends InputNode, Link extends InputLink> = Omit<\n    NetworkCanvasProps<Node, Link>,\n    'renderWrapper' | 'theme'\n> & {\n    forwardedRef: Ref<HTMLCanvasElement>\n}\n\nconst InnerNetworkCanvas = <Node extends InputNode, Link extends InputLink>({\n    width,\n    height,\n    margin: partialMargin,\n    pixelRatio = canvasDefaultProps.pixelRatio,\n    data: { nodes: rawNodes, links: rawLinks },\n    linkDistance = canvasDefaultProps.linkDistance,\n    centeringStrength = canvasDefaultProps.centeringStrength,\n    repulsivity = canvasDefaultProps.repulsivity,\n    distanceMin = canvasDefaultProps.distanceMin,\n    distanceMax = canvasDefaultProps.distanceMax,\n    iterations = canvasDefaultProps.iterations,\n    layers = canvasDefaultProps.layers,\n    renderNode = canvasDefaultProps.renderNode,\n    nodeSize = canvasDefaultProps.nodeSize,\n    activeNodeSize = canvasDefaultProps.activeNodeSize,\n    inactiveNodeSize = canvasDefaultProps.inactiveNodeSize,\n    nodeColor = canvasDefaultProps.nodeColor,\n    nodeBorderWidth = canvasDefaultProps.nodeBorderWidth,\n    nodeBorderColor = canvasDefaultProps.nodeBorderColor,\n    renderLink = canvasDefaultProps.renderLink,\n    linkThickness = canvasDefaultProps.linkThickness,\n    linkColor = canvasDefaultProps.linkColor,\n    annotations = canvasDefaultProps.annotations as NonNullable<\n        NetworkSvgProps<Node, Link>['annotations']\n    >,\n    isInteractive = canvasDefaultProps.isInteractive,\n    defaultActiveNodeIds = canvasDefaultProps.defaultActiveNodeIds,\n    nodeTooltip = canvasDefaultProps.nodeTooltip as NodeTooltip<Node>,\n    onClick,\n    role,\n    forwardedRef,\n}: InnerNetworkCanvasProps<Node, Link>) => {\n    const canvasEl = useRef<HTMLCanvasElement | null>(null)\n    const { margin, innerWidth, innerHeight, outerWidth, outerHeight } = useDimensions(\n        width,\n        height,\n        partialMargin\n    )\n\n    const { nodes, links, activeNodeIds, setActiveNodeIds } = useNetwork<Node, Link>({\n        center: [innerWidth / 2, innerHeight / 2],\n        nodes: rawNodes,\n        links: rawLinks,\n        linkDistance,\n        centeringStrength,\n        repulsivity,\n        distanceMin,\n        distanceMax,\n        iterations,\n        nodeSize,\n        activeNodeSize,\n        inactiveNodeSize,\n        nodeColor,\n        nodeBorderWidth,\n        nodeBorderColor,\n        linkThickness,\n        linkColor,\n        isInteractive,\n        defaultActiveNodeIds,\n    })\n\n    const boundAnnotations = useNodeAnnotations<Node>(nodes!, annotations)\n    const computedAnnotations = useComputedAnnotations<ComputedNode<Node>>({\n        annotations: boundAnnotations,\n    })\n\n    const customLayerProps: CustomLayerProps<Node, Link> = useMemo(\n        () => ({\n            nodes: nodes || [],\n            links: links || [],\n            activeNodeIds,\n            setActiveNodeIds,\n        }),\n        [nodes, links, activeNodeIds, setActiveNodeIds]\n    )\n\n    const theme = useTheme()\n\n    useEffect(() => {\n        if (canvasEl.current === null) return\n\n        canvasEl.current.width = outerWidth * pixelRatio\n        canvasEl.current.height = outerHeight * pixelRatio\n\n        const ctx = canvasEl.current.getContext('2d')!\n\n        ctx.scale(pixelRatio, pixelRatio)\n\n        ctx.fillStyle = theme.background\n        ctx.fillRect(0, 0, outerWidth, outerHeight)\n        ctx.translate(margin.left, margin.top)\n\n        layers.forEach(layer => {\n            if (layer === 'links' && links !== null) {\n                links.forEach(link => renderLink(ctx, link))\n            } else if (layer === 'nodes' && nodes !== null) {\n                nodes.forEach(node => renderNode(ctx, node))\n            } else if (layer === 'annotations') {\n                renderAnnotationsToCanvas<ComputedNode<Node>>(ctx, {\n                    annotations: computedAnnotations as any,\n                    theme,\n                })\n            } else if (typeof layer === 'function' && nodes !== null && links !== null) {\n                layer(ctx, customLayerProps)\n            }\n        })\n    }, [\n        canvasEl,\n        outerWidth,\n        outerHeight,\n        margin.left,\n        margin.top,\n        pixelRatio,\n        layers,\n        theme,\n        nodes,\n        links,\n        renderNode,\n        renderLink,\n        computedAnnotations,\n        customLayerProps,\n    ])\n\n    const getNodeFromMouseEvent = useCallback(\n        (event: MouseEvent) => {\n            if (!canvasEl.current || nodes === null) return undefined\n\n            const [x, y] = getRelativeCursor(canvasEl.current, event)\n\n            return nodes.find(node => {\n                const distanceFromNode = getDistance(\n                    node.x,\n                    node.y,\n                    x - margin.left,\n                    y - margin.top\n                )\n                return distanceFromNode <= node.size / 2\n            })\n        },\n        [canvasEl, margin, nodes]\n    )\n\n    const { showTooltipFromEvent, hideTooltip } = useTooltip()\n\n    const handleMouseHover = useCallback(\n        (event: MouseEvent) => {\n            const node = getNodeFromMouseEvent(event)\n            if (node) {\n                showTooltipFromEvent(createElement(nodeTooltip, { node }), event)\n                setActiveNodeIds([node.id])\n            } else {\n                hideTooltip()\n                setActiveNodeIds([])\n            }\n        },\n        [getNodeFromMouseEvent, showTooltipFromEvent, nodeTooltip, hideTooltip, setActiveNodeIds]\n    )\n\n    const handleMouseLeave = useCallback(() => {\n        hideTooltip()\n        setActiveNodeIds([])\n    }, [hideTooltip, setActiveNodeIds])\n\n    const handleClick = useCallback(\n        (event: MouseEvent) => {\n            if (!onClick) return\n\n            const node = getNodeFromMouseEvent(event)\n            if (node) {\n                onClick(node, event)\n            }\n        },\n        [getNodeFromMouseEvent, onClick]\n    )\n\n    return (\n        <canvas\n            ref={mergeRefs(canvasEl, forwardedRef)}\n            width={outerWidth * pixelRatio}\n            height={outerHeight * pixelRatio}\n            style={{\n                width: outerWidth,\n                height: outerHeight,\n                cursor: isInteractive ? 'auto' : 'normal',\n            }}\n            onClick={isInteractive ? handleClick : undefined}\n            onMouseEnter={isInteractive ? handleMouseHover : undefined}\n            onMouseLeave={isInteractive ? handleMouseLeave : undefined}\n            onMouseMove={isInteractive ? handleMouseHover : undefined}\n            role={role}\n        />\n    )\n}\n\nexport const NetworkCanvas = forwardRef(\n    <Node extends InputNode = InputNode, Link extends InputLink = InputLink>(\n        {\n            theme,\n            isInteractive = canvasDefaultProps.isInteractive,\n            animate = canvasDefaultProps.animate,\n            motionConfig = canvasDefaultProps.motionConfig,\n            renderWrapper,\n            ...props\n        }: NetworkCanvasProps<Node, Link>,\n        ref: Ref<HTMLCanvasElement>\n    ) => (\n        <Container\n            isInteractive={isInteractive}\n            animate={animate}\n            motionConfig={motionConfig}\n            theme={theme}\n            renderWrapper={renderWrapper}\n        >\n            <InnerNetworkCanvas<Node, Link>\n                {...props}\n                isInteractive={isInteractive}\n                forwardedRef={ref}\n            />\n        </Container>\n    )\n) as <Node extends InputNode = InputNode, Link extends InputLink = InputLink>(\n    props: WithChartRef<NetworkCanvasProps<Node, Link>, HTMLCanvasElement>\n) => ReactElement\n","import { Ref, forwardRef, ReactElement } from 'react'\nimport { ResponsiveWrapper, ResponsiveProps, WithChartRef } from '@nivo/core'\nimport { NetworkCanvasProps, InputNode, InputLink } from './types'\nimport { NetworkCanvas } from './NetworkCanvas'\n\nexport const ResponsiveNetworkCanvas = forwardRef(\n    <Node extends InputNode = InputNode, Link extends InputLink = InputLink>(\n        {\n            defaultWidth,\n            defaultHeight,\n            onResize,\n            debounceResize,\n            ...props\n        }: ResponsiveProps<NetworkCanvasProps<Node, Link>>,\n        ref: Ref<HTMLCanvasElement>\n    ) => (\n        <ResponsiveWrapper\n            defaultWidth={defaultWidth}\n            defaultHeight={defaultHeight}\n            onResize={onResize}\n            debounceResize={debounceResize}\n        >\n            {({ width, height }) => (\n                <NetworkCanvas {...props} width={width} height={height} ref={ref} />\n            )}\n        </ResponsiveWrapper>\n    )\n) as <Node extends InputNode = InputNode, Link extends InputLink = InputLink>(\n    props: WithChartRef<ResponsiveProps<NetworkCanvasProps<Node, Link>>, HTMLCanvasElement>\n) => ReactElement\n"],"names":["NetworkNode","memo","_ref","node","animatedProps","animated","onClick","onMouseEnter","onMouseMove","onMouseLeave","_jsx","circle","id","transform","to","x","y","scale","r","size","fill","color","strokeWidth","borderWidth","stroke","borderColor","opacity","event","undefined","NetworkLink","link","blendMode","line","style","mixBlendMode","thickness","strokeLinecap","x1","y1","x2","y2","commonDefaultProps","layers","linkDistance","centeringStrength","repulsivity","distanceMin","distanceMax","Infinity","iterations","nodeSize","activeNodeSize","inactiveNodeSize","nodeColor","nodeBorderWidth","nodeBorderColor","from","linkThickness","linkColor","isInteractive","defaultActiveNodeIds","nodeTooltip","BasicTooltip","enableChip","annotations","animate","motionConfig","role","svgDefaultProps","_extends","nodeComponent","linkComponent","linkBlendMode","canvasDefaultProps","renderNode","ctx","fillStyle","beginPath","arc","Math","PI","strokeStyle","lineWidth","renderLink","moveTo","source","lineTo","target","pixelRatio","window","devicePixelRatio","useDerivedProp","instruction","useMemo","useNetwork","_ref3","center","nodes","links","_ref3$linkDistance","_ref3$centeringStreng","_ref3$repulsivity","_ref3$distanceMin","_ref3$distanceMax","_ref3$iterations","_ref3$nodeSize","_ref3$activeNodeSize","_ref3$inactiveNodeSiz","_ref3$nodeColor","_ref3$nodeBorderWidth","_ref3$nodeBorderColor","_ref3$linkThickness","_ref3$linkColor","_ref3$isInteractive","_ref3$defaultActiveNo","_useState","useState","transientNodes","setTransientNodes","_useState2","transientLinks","setTransientLinks","forces","getLinkDistance","centerX","centerY","forceLink","distance","data","strength","charge","forceManyBody","forceCenter","useComputeForces","useEffect","_transientNodes","map","index","vx","vy","_transientLinks","find","simulation","forceSimulation","force","stop","tick","_useState3","activeNodeIds","setActiveNodeIds","getNodeStyle","_ref2","activeSize","inactiveSize","theme","useTheme","getSize","getColor","getBorderWidth","getBorderColor","useInheritedColor","getNormalStyle","useCallback","getActiveSize","getActiveStyle","getInactiveSize","getInactiveStyle","length","includes","useNodeStyle","computedNodes","getLinkThickness","getLinkColor","computedLinks","_ref4","_objectWithoutPropertiesLoose","_excluded","linkWithComputedNodes","getNodeAnnotationPosition","getNodeAnnotationDimensions","width","height","useNodeAnnotations","useAnnotations","getPosition","getDimensions","NetworkLinks","_useMotionConfig","useMotionConfig","springConfig","config","_useMemo","enterTransition","regularTransition","transition","useTransition","keys","initial","enter","update","expires","immediate","_Fragment","children","transitionProps","createElement","key","NetworkNodes","tooltip","exitTransition","leave","_useTooltip","useTooltip","showTooltipFromEvent","hideTooltip","handleMouseEnter","handleMouseMove","handleMouseLeave","NetworkNodeAnnotations","boundAnnotations","annotation","i","Annotation","InnerNetwork","partialMargin","margin","_ref$data","rawNodes","rawLinks","_ref$linkDistance","_ref$centeringStrengt","_ref$repulsivity","_ref$distanceMin","_ref$distanceMax","_ref$iterations","_ref$layers","_ref$nodeComponent","_ref$nodeSize","_ref$activeNodeSize","_ref$inactiveNodeSize","_ref$nodeColor","_ref$nodeBorderWidth","_ref$nodeBorderColor","_ref$linkComponent","_ref$linkThickness","_ref$linkColor","_ref$linkBlendMode","_ref$annotations","_ref$isInteractive","_ref$defaultActiveNod","_ref$nodeTooltip","_ref$role","ariaLabel","ariaLabelledBy","ariaDescribedBy","forwardedRef","_useDimensions","useDimensions","innerWidth","innerHeight","outerWidth","outerHeight","_useNetwork","layerById","customLayerProps","SvgWrapper","ref","layer","_layerById$layer","Fragment","Network","forwardRef","_ref2$isInteractive","_ref2$animate","_ref2$motionConfig","renderWrapper","props","Container","ResponsiveNetwork","defaultWidth","defaultHeight","onResize","debounceResize","ResponsiveWrapper","InnerNetworkCanvas","_ref$pixelRatio","_ref$renderNode","_ref$renderLink","canvasEl","useRef","computedAnnotations","useComputedAnnotations","current","getContext","background","fillRect","translate","left","top","forEach","renderAnnotationsToCanvas","getNodeFromMouseEvent","_getRelativeCursor","getRelativeCursor","getDistance","handleMouseHover","handleClick","mergeRefs","cursor","NetworkCanvas","ResponsiveNetworkCanvas"],"mappings":"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"}