{"version":3,"file":"netviz.mjs","sources":["../node_modules/force-in-a-box/dist/forceInABox.esm.js","../node_modules/d3-force-boundary/dist/d3-force-boundary.esm.js","../src/forces/forceTransport.js","../src/forces/forceExtent.js","../src/forces/edgeBundling.js","../src/utils/sample.js","../src/utils/drag.js","../src/utils/computeAutoFit.js","../src/utils/applyTransform.js","../node_modules/smart-labels/dist/smartLabels.es.js","../src/renderers/renderCanvas.js","../src/renderers/renderSVG.js","../src/defaults.js","../src/forceGraph.js","../src/utils/filterNetwork.js","../src/utils/nodesFromLinks.js","../src/utils/mapProperties.js","../src/utils/resolveIndexLinks.js","../src/utils/computeNodeGroups.js","../src/utils/prepareNetwork.js","../src/index.js"],"sourcesContent":["// https://github.com/john-guerra/forceInABox#readme v1.0.2 Copyright 2024 undefined\nimport * as d3 from 'd3';\n\nfunction forceInABox() {\n  // d3 style\n  function constant(_) {\n    return () => _;\n  }\n\n  function index(d) {\n    return d.index;\n  }\n\n  let id = index,\n    nodes = [],\n    links = [], //needed for the force version\n    tree,\n    size = [100, 100],\n    forceNodeSize = constant(1), // The expected node size used for computing the cluster node\n    forceCharge = constant(-1),\n    forceLinkDistance = constant(100),\n    forceLinkStrength = constant(0.1),\n    foci = {},\n    // oldStart = force.start,\n    linkStrengthIntraCluster = 0.1,\n    linkStrengthInterCluster = 0.001,\n    // oldGravity = force.gravity(),\n    templateNodes = [],\n    offset = [0, 0],\n    templateForce,\n    groupBy = function (d) {\n      return d.cluster;\n    },\n    template = \"treemap\",\n    enableGrouping = true,\n    strength = 0.1;\n  // showingTemplate = false;\n\n  function force(alpha) {\n    if (!enableGrouping) {\n      return force;\n    }\n    if (template === \"force\") {\n      //Do the tick of the template force and get the new focis\n      templateForce.tick();\n      getFocisFromTemplate();\n    }\n\n    for (let i = 0, n = nodes.length, node, k = alpha * strength; i < n; ++i) {\n      node = nodes[i];\n      node.vx += (foci[groupBy(node)].x - node.x) * k;\n      node.vy += (foci[groupBy(node)].y - node.y) * k;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n\n    // let i,\n    //     n = nodes.length,\n    //     m = links.length,\n    //     nodeById = map(nodes, id),\n    //     link;\n\n    if (template === \"treemap\") {\n      initializeWithTreemap();\n    } else {\n      initializeWithForce();\n    }\n  }\n\n  force.initialize = function (_) {\n    nodes = _;\n    initialize();\n  };\n\n  function getLinkKey(l) {\n    let sourceID = groupBy(l.source),\n      targetID = groupBy(l.target);\n\n    return sourceID <= targetID\n      ? sourceID + \"~\" + targetID\n      : targetID + \"~\" + sourceID;\n  }\n\n  function computeClustersNodeCounts(nodes) {\n    let clustersCounts = new Map(),\n      tmpCount = {};\n\n    nodes.forEach(function (d) {\n      if (!clustersCounts.has(groupBy(d))) {\n        clustersCounts.set(groupBy(d), { count: 0, sumforceNodeSize: 0 });\n      }\n    });\n\n    nodes.forEach(function (d) {\n      // if (!d.show) { return; }\n      tmpCount = clustersCounts.get(groupBy(d));\n      tmpCount.count = tmpCount.count + 1;\n      tmpCount.sumforceNodeSize =\n        tmpCount.sumforceNodeSize +\n        Math.PI * (forceNodeSize(d) * forceNodeSize(d)) * 1.3;\n      clustersCounts.set(groupBy(d), tmpCount);\n    });\n\n    return clustersCounts;\n  }\n\n  //Returns\n  function computeClustersLinkCounts(links) {\n    let dClusterLinks = new Map(),\n      clusterLinks = [];\n\n    links.forEach(function (l) {\n      let key = getLinkKey(l),\n        count;\n      if (dClusterLinks.has(key)) {\n        count = dClusterLinks.get(key);\n      } else {\n        count = 0;\n      }\n      count += 1;\n      dClusterLinks.set(key, count);\n    });\n\n    dClusterLinks.forEach(function (value, key) {\n      let source, target;\n      source = key.split(\"~\")[0];\n      target = key.split(\"~\")[1];\n      if (source !== undefined && target !== undefined) {\n        clusterLinks.push({\n          source: source,\n          target: target,\n          count: value,\n        });\n      }\n    });\n    return clusterLinks;\n  }\n\n  //Returns the metagraph of the clusters\n  function getGroupsGraph() {\n    let gnodes = [],\n      glinks = [],\n      // edges = [],\n      dNodes = new Map(),\n      // totalSize = 0,\n      c,\n      i,\n      cc,\n      clustersCounts,\n      clustersLinks;\n\n    clustersCounts = computeClustersNodeCounts(nodes);\n    clustersLinks = computeClustersLinkCounts(links);\n\n    for (c of clustersCounts.keys()) {\n      cc = clustersCounts.get(c);\n      gnodes.push({\n        id: c,\n        size: cc.count,\n        r: Math.sqrt(cc.sumforceNodeSize / Math.PI),\n      }); // Uses approx meta-node size\n      dNodes.set(c, i);\n      // totalSize += size;\n    }\n\n    clustersLinks.forEach(function (l) {\n      let source = dNodes.get(l.source),\n        target = dNodes.get(l.target);\n      if (source !== undefined && target !== undefined) {\n        glinks.push({\n          source: source,\n          target: target,\n          count: l.count,\n        });\n      }\n    });\n\n    return { nodes: gnodes, links: glinks };\n  }\n\n  function getGroupsTree() {\n    let children = [],\n      c,\n      cc,\n      clustersCounts;\n\n    clustersCounts = computeClustersNodeCounts(force.nodes());\n\n    for (c of clustersCounts.keys()) {\n      cc = clustersCounts.get(c);\n      children.push({ id: c, size: cc.count });\n    }\n    return { id: \"clustersTree\", children: children };\n  }\n\n  function getFocisFromTemplate() {\n    //compute foci\n    foci.none = { x: 0, y: 0 };\n    templateNodes.forEach(function (d) {\n      if (template === \"treemap\") {\n        foci[d.data.id] = {\n          x: d.x0 + (d.x1 - d.x0) / 2 - offset[0],\n          y: d.y0 + (d.y1 - d.y0) / 2 - offset[1],\n        };\n      } else {\n        foci[d.id] = {\n          x: d.x - offset[0],\n          y: d.y - offset[1],\n        };\n      }\n    });\n    return foci;\n  }\n\n  function initializeWithTreemap() {\n    let treemap = d3.treemap().size(force.size());\n\n    tree = d3\n      .hierarchy(getGroupsTree())\n      .sum(function (d) {\n        return d.size;\n      })\n      .sort(function (a, b) {\n        return b.height - a.height || b.value - a.value;\n      });\n\n    templateNodes = treemap(tree).leaves();\n    getFocisFromTemplate();\n  }\n\n  function checkLinksAsObjects() {\n    // Check if links come in the format of indexes instead of objects\n    let linkCount = 0;\n    if (nodes.length === 0) return;\n\n    links.forEach(function (link) {\n      let source, target;\n      if (!nodes) return;\n      source = link.source;\n      target = link.target;\n      if (typeof link.source !== \"object\") source = nodes[link.source];\n      if (typeof link.target !== \"object\") target = nodes[link.target];\n      if (source === undefined || target === undefined) {\n        // console.error(link);\n        throw Error(\n          \"Error setting links, couldnt find nodes for a link (see it on the console)\"\n        );\n      }\n      link.source = source;\n      link.target = target;\n      link.index = linkCount++;\n    });\n  }\n\n  function initializeWithForce() {\n    let net;\n\n    if (!nodes || !nodes.length) {\n      return;\n    }\n\n    if (nodes && nodes.length > 0) {\n      if (groupBy(nodes[0]) === undefined) {\n        throw Error(\n          \"Couldnt find the grouping attribute for the nodes. Make sure to set it up with forceInABox.groupBy('clusterAttr') before calling .links()\"\n        );\n      }\n    }\n\n    checkLinksAsObjects();\n\n    net = getGroupsGraph();\n    templateForce = d3\n      .forceSimulation(net.nodes)\n      .force(\"x\", d3.forceX(size[0] / 2).strength(0.1))\n      .force(\"y\", d3.forceY(size[1] / 2).strength(0.1))\n      .force(\n        \"collide\",\n        d3\n          .forceCollide(function (d) {\n            return d.r;\n          })\n          .iterations(4)\n      )\n      .force(\"charge\", d3.forceManyBody().strength(forceCharge))\n      .force(\n        \"links\",\n        d3\n          .forceLink(net.nodes.length ? net.links : [])\n          .distance(forceLinkDistance)\n          .strength(forceLinkStrength)\n      );\n\n    // console.log(\"Initialize with force \", templateForce.nodes().length, \" \", templateForce.force(\"links\").links().length);\n\n    // let i = 0;\n    // while (i++ < 500) templateForce.tick();\n\n    templateNodes = templateForce.nodes();\n\n    getFocisFromTemplate();\n  }\n\n  function drawTreemap(container) {\n    // Delete the circle Template if it exists\n    container.selectAll(\"circle.cell\").remove();\n    container.selectAll(\"line.cell\").remove();\n    container\n      .selectAll(\"rect.cell\")\n      .data(templateNodes)\n      .enter()\n      .append(\"svg:rect\")\n      .attr(\"class\", \"cell\")\n      .attr(\"x\", function (d) {\n        return d.x0;\n      })\n      .attr(\"y\", function (d) {\n        return d.y0;\n      })\n      .attr(\"width\", function (d) {\n        return d.x1 - d.x0;\n      })\n      .attr(\"height\", function (d) {\n        return d.y1 - d.y0;\n      });\n  }\n\n  function drawGraph(container) {\n    // Delete the treemap if any\n    container.selectAll(\"rect.cell\").remove();\n    let templateLinksSel = container\n      .selectAll(\"line.cell\")\n      .data(templateForce.force(\"links\").links());\n    templateLinksSel\n      .enter()\n      .append(\"line\")\n      .attr(\"class\", \"cell\")\n      .merge(templateLinksSel)\n      .attr(\"x2\", function (d) {\n        return d.source.x;\n      })\n      .attr(\"y2\", function (d) {\n        return d.source.y;\n      })\n      .attr(\"x1\", function (d) {\n        return d.target.x;\n      })\n      .attr(\"y1\", function (d) {\n        return d.target.y;\n      })\n      .style(\"stroke-width\", \"1px\")\n      .style(\"stroke-opacity\", \"0.5\");\n\n    let templateNodesSel = container\n      .selectAll(\"circle.cell\")\n      .data(templateForce.nodes());\n    templateNodesSel\n      .enter()\n      .append(\"svg:circle\")\n      .attr(\"class\", \"cell\")\n      .merge(templateNodesSel)\n      .attr(\"cx\", function (d) {\n        return d.x;\n      })\n      .attr(\"cy\", function (d) {\n        return d.y;\n      })\n      .attr(\"r\", function (d) {\n        return d.r;\n      });\n\n    templateForce\n      .on(\"tick\", () => {\n        // console.log(\"tick\");\n        drawGraph(container);\n      })\n      .restart();\n\n    templateNodesSel.exit().remove();\n    templateLinksSel.exit().remove();\n  }\n\n  force.drawTemplate = function (container) {\n    // showingTemplate = true;\n    if (template === \"treemap\") {\n      drawTreemap(container);\n    } else {\n      drawGraph(container);\n    }\n    return force;\n  };\n\n  //Backwards compatibility\n  force.drawTreemap = force.drawTemplate;\n\n  force.deleteTemplate = function (container) {\n    // showingTemplate = false;\n    container.selectAll(\".cell\").remove();\n\n    if (templateForce) {\n      templateForce.on(\"tick\", null).restart();\n    }\n\n    return force;\n  };\n\n  force.template = function (x) {\n    if (!arguments.length) return template;\n    template = x;\n    initialize();\n    return force;\n  };\n\n  force.groupBy = function (x) {\n    if (!arguments.length) return groupBy;\n    if (typeof x === \"string\") {\n      groupBy = function (d) {\n        return d[x];\n      };\n      return force;\n    }\n    groupBy = x;\n    return force;\n  };\n\n  force.enableGrouping = function (x) {\n    if (!arguments.length) return enableGrouping;\n    enableGrouping = x;\n    // update();\n    return force;\n  };\n\n  force.strength = function (x) {\n    if (!arguments.length) return strength;\n    strength = x;\n    return force;\n  };\n\n  force.getLinkStrength = function (e) {\n    if (enableGrouping) {\n      if (groupBy(e.source) === groupBy(e.target)) {\n        if (typeof linkStrengthIntraCluster === \"function\") {\n          return linkStrengthIntraCluster(e);\n        } else {\n          return linkStrengthIntraCluster;\n        }\n      } else {\n        if (typeof linkStrengthInterCluster === \"function\") {\n          return linkStrengthInterCluster(e);\n        } else {\n          return linkStrengthInterCluster;\n        }\n      }\n    } else {\n      // Not grouping return the intracluster\n      if (typeof linkStrengthIntraCluster === \"function\") {\n        return linkStrengthIntraCluster(e);\n      } else {\n        return linkStrengthIntraCluster;\n      }\n    }\n  };\n\n  force.id = function (_) {\n    return arguments.length ? ((id = _), force) : id;\n  };\n\n  force.size = function (_) {\n    return arguments.length ? ((size = _), force) : size;\n  };\n\n  force.linkStrengthInterCluster = function (_) {\n    return arguments.length\n      ? ((linkStrengthInterCluster = _), force)\n      : linkStrengthInterCluster;\n  };\n\n  force.linkStrengthIntraCluster = function (_) {\n    return arguments.length\n      ? ((linkStrengthIntraCluster = _), force)\n      : linkStrengthIntraCluster;\n  };\n\n  force.nodes = function (_) {\n    return arguments.length ? ((nodes = _), force) : nodes;\n  };\n\n  force.links = function (_) {\n    if (!arguments.length) return links;\n    if (_ === null) links = [];\n    else links = _;\n    initialize();\n    return force;\n  };\n\n  force.forceNodeSize = function (_) {\n    return arguments.length\n      ? ((forceNodeSize = typeof _ === \"function\" ? _ : constant(+_)),\n        initialize(),\n        force)\n      : forceNodeSize;\n  };\n\n  // Legacy support\n  force.nodeSize = force.forceNodeSize;\n\n  force.forceCharge = function (_) {\n    return arguments.length\n      ? ((forceCharge = typeof _ === \"function\" ? _ : constant(+_)),\n        initialize(),\n        force)\n      : forceCharge;\n  };\n\n  force.forceLinkDistance = function (_) {\n    return arguments.length\n      ? ((forceLinkDistance = typeof _ === \"function\" ? _ : constant(+_)),\n        initialize(),\n        force)\n      : forceLinkDistance;\n  };\n\n  force.forceLinkStrength = function (_) {\n    return arguments.length\n      ? ((forceLinkStrength = typeof _ === \"function\" ? _ : constant(+_)),\n        initialize(),\n        force)\n      : forceLinkStrength;\n  };\n\n  force.offset = function (_) {\n    return arguments.length\n      ? ((offset = typeof _ === \"function\" ? _ : constant(+_)), force)\n      : offset;\n  };\n\n  force.getFocis = getFocisFromTemplate;\n\n  return force;\n}\n\n// module.exports = forceInABox;\n\nexport { forceInABox as default };\n","// https://observablehq.com/@john-guerra/d3-force-boundary v0.0.2 Copyright 2022 John Alexis Guerra Gómez\nfunction constant(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction forceBoundary(x0, y0, x1, y1) {\n  var strength = constant(0.1),\n      hardBoundary = true,\n      border = constant( Math.min((x1 - x0)/2, (y1 - y0)/2) ),\n      nodes,\n      strengthsX,\n      strengthsY,\n      x0z, x1z,\n      y0z, y1z,\n      borderz,\n      halfX, halfY;\n\n  if (typeof x0 !== \"function\") x0 = constant(x0 == null ? -100 : +x0);\n  if (typeof x1 !== \"function\") x1 = constant(x1 == null ? 100 : +x1);\n  if (typeof y0 !== \"function\") y0 = constant(y0 == null ? -100 : +y0);\n  if (typeof y1 !== \"function\") y1 = constant(y1 == null ? 100 : +y1);\n\n  function getVx(halfX, x, strengthX, border, alpha) {\n    return (halfX - x) *  Math.min(2, Math.abs( halfX - x) / halfX) * strengthX * alpha;\n  }\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i];\n      // debugger;\n      if ((node.x < (x0z[i] + borderz[i]) || node.x > (x1z[i] - borderz[i])) ||\n        (node.y < (y0z[i] + borderz[i]) || node.y > (y1z[i] - borderz[i]))) {\n        node.vx += getVx(halfX[i], node.x, strengthsX[i], borderz[i], alpha);\n        node.vy += getVx(halfY[i], node.y, strengthsY[i], borderz[i], alpha);\n      } else if (node.y < (y0z[i] + borderz[i]) || node.y > (y1z[i] - borderz[i])) ;\n\n      if (hardBoundary) {\n        if (node.x >= x1z[i]) node.vx += x1z[i] - node.x;\n        if (node.x <= x0z[i]) node.vx += x0z[i] - node.x;\n        if (node.y >= y1z[i]) node.vy += y1z[i] - node.y;\n        if (node.y <= y0z[i]) node.vy += y0z[i] - node.y;\n      }\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengthsX = new Array(n);\n    strengthsY = new Array(n);\n    x0z = new Array(n);\n    y0z = new Array(n);\n    x1z = new Array(n);\n    y1z = new Array(n);\n    halfY = new Array(n);\n    halfX = new Array(n);\n    borderz = new Array(n);\n\n    for (i = 0; i < n; ++i) {\n      strengthsX[i] = (isNaN(x0z[i] = +x0(nodes[i], i, nodes)) ||\n        isNaN(x1z[i] = +x1(nodes[i], i, nodes))) ? 0 : +strength(nodes[i], i, nodes);\n      strengthsY[i] = (isNaN(y0z[i] = +y0(nodes[i], i, nodes)) ||\n        isNaN(y1z[i] = +y1(nodes[i], i, nodes))) ? 0 : +strength(nodes[i], i, nodes);\n      halfX[i] = x0z[i] + (x1z[i] - x0z[i])/2,\n      halfY[i] = y0z[i] + (y1z[i] - y0z[i])/2;\n      borderz[i] = +border(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.x0 = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x0;\n  };\n\n  force.x1 = function(_) {\n    return arguments.length ? (x1 = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x1;\n  };\n\n  force.y0 = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y0;\n  };\n\n  force.y1 = function(_) {\n    return arguments.length ? (y1 = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y1;\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.border = function(_) {\n    return arguments.length ? (border = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : border;\n  };\n\n  force.hardBoundary = function(_) {\n    return arguments.length ? (hardBoundary = _, force) : hardBoundary;\n  };\n\n  return force;\n}\n\nexport default forceBoundary;\n","import * as d3 from \"d3\";\n\n/**\n * forceTransport - A D3 force that transports nodes to stay within bounds\n * by sorting them and distributing them evenly within the extent.\n *\n * Original source: https://observablehq.com/d/21d2053b3bc85bce\n * Implementation discussion: https://github.com/d3/d3-force/issues/89\n *\n * @param {Array} extent - [[x0, y0], [x1, y1]] bounding box\n * @param {number} margin - Margin from the extent edges (default: 0)\n * @param {number} strength - Force strength multiplier (default: 1)\n * @returns {Function} D3 force function\n */\nexport function forceTransport(extent, margin, strength) {\n  let nodes;\n\n  if (extent === undefined)\n    extent = [\n      [0, 0],\n      [960, 500],\n    ];\n  if (margin === undefined) margin = 0;\n  if (strength === undefined) strength = 1;\n\n  const X = d3\n    .scaleLinear()\n    .range([extent[0][0] + margin, extent[1][0] - margin]);\n  const Y = d3\n    .scaleLinear()\n    .range([extent[0][1] + margin, extent[1][1] - margin]);\n\n  let indices = [];\n\n  function force(alpha) {\n    if (indices.length !== nodes.length) {\n      indices = Uint32Array.from(d3.range(nodes.length));\n      X.domain([-1, nodes.length]);\n      Y.domain([-1, nodes.length]);\n    }\n\n    // Sort nodes by x position and distribute them evenly\n    indices.sort((i, j) => nodes[i].x - nodes[j].x);\n    for (let i = 0; i < nodes.length; ++i) {\n      const node = nodes[indices[i]];\n      const target = X(i);\n      node.vx += (target - node.x) * strength;\n    }\n\n    // Sort nodes by y position and distribute them evenly\n    indices.sort((i, j) => nodes[i].y - nodes[j].y);\n    for (let i = 0; i < nodes.length; ++i) {\n      const node = nodes[indices[i]];\n      const target = Y(i);\n      node.vy += (target - node.y) * strength * alpha;\n    }\n  }\n\n  force.initialize = function (_) {\n    nodes = _;\n  };\n\n  force.extent = function (_) {\n    return arguments.length ? ((extent = _), force) : extent;\n  };\n\n  force.margin = function (_) {\n    return arguments.length ? ((margin = +_), force) : margin;\n  };\n\n  force.strength = function (_) {\n    return arguments.length ? ((strength = +_), force) : strength;\n  };\n\n  return force;\n}\n","/**\n * forceExtent - A D3 force that clamps nodes to stay within bounds\n *\n * Original source: https://observablehq.com/d/21d2053b3bc85bce\n * Implementation discussion: https://github.com/d3/d3-force/issues/89\n *\n * @param {Array} extent - [[x0, y0], [x1, y1]] bounding box\n * @returns {Function} D3 force function\n */\nexport function forceExtent(extent) {\n  let nodes;\n\n  if (extent === undefined)\n    extent = [\n      [0, 0],\n      [960, 500],\n    ];\n\n  function clamp(x, min, max) {\n    return Math.max(min, Math.min(max, x));\n  }\n\n  function force() {\n    for (let i = 0; i < nodes.length; ++i) {\n      const node = nodes[i];\n      const r = node.radius || 0;\n      node.x = clamp(node.x, extent[0][0] - r, extent[1][0] + r);\n      node.y = clamp(node.y, extent[0][1] - r, extent[1][1] + r);\n    }\n  }\n\n  force.initialize = function (_) {\n    nodes = _;\n  };\n\n  force.extent = function (_) {\n    return arguments.length ? ((extent = _), force) : extent;\n  };\n\n  return force;\n}\n","/**\n * Force Edge Bundling\n *\n * Bundles edges together using a force simulation.\n *\n * Original source: https://observablehq.com/@john-guerra/force-edge-bundling\n * Adapted from: https://github.com/upphiminn/d3.ForceBundle\n *\n * LICENSE: GNU General Public License v2\n * Copyright (C) John Alexis Guerra Gómez\n *\n * This is an adaptation of the Force Directed Edge Bundling d3 plugin to work\n * with ES6 and modern D3, with bug fixes from:\n * https://github.com/upphiminn/d3.ForceBundle/pull/11\n *\n * Note: Make sure no two nodes have the same x,y coordinates\n */\n\n/**\n * ForceEdgeBundling - Core edge bundling algorithm\n * @returns {Function} Edge bundling force function\n */\nexport function ForceEdgeBundling() {\n  let data_nodes = {}, // {'nodeid':{'x':,'y':},..}\n    data_edges = [], // [{'source':'nodeid1', 'target':'nodeid2'},..]\n    compatibility_list_for_edge = [],\n    subdivision_points_for_edge = [],\n    K = 0.1, // global bundling constant controlling edge stiffness\n    S_initial = 0.1, // init. distance to move points\n    P_initial = 1, // init. subdivision number\n    P_rate = 2, // subdivision rate increase\n    C = 6, // number of cycles to perform\n    I_initial = 90, // init. number of iterations for cycle\n    I_rate = 0.6666667, // rate at which iteration number decreases i.e. 2/3\n    compatibility_threshold = 0.6,\n    eps = 1e-6,\n    P = null;\n\n  /*** Geometry Helper Methods ***/\n  function vector_dot_product(p, q) {\n    return p.x * q.x + p.y * q.y;\n  }\n\n  function edge_as_vector(P) {\n    return {\n      x: data_nodes[P.target].x - data_nodes[P.source].x,\n      y: data_nodes[P.target].y - data_nodes[P.source].y,\n    };\n  }\n\n  function edge_length(e) {\n    // handling nodes that are on the same location, so that K/edge_length != Inf\n    if (\n      Math.abs(data_nodes[e.source].x - data_nodes[e.target].x) < eps &&\n      Math.abs(data_nodes[e.source].y - data_nodes[e.target].y) < eps\n    ) {\n      return eps;\n    }\n\n    return Math.sqrt(\n      Math.pow(data_nodes[e.source].x - data_nodes[e.target].x, 2) +\n        Math.pow(data_nodes[e.source].y - data_nodes[e.target].y, 2)\n    );\n  }\n\n  function custom_edge_length(e) {\n    return Math.sqrt(\n      Math.pow(e.source.x - e.target.x, 2) +\n        Math.pow(e.source.y - e.target.y, 2)\n    );\n  }\n\n  function edge_midpoint(e) {\n    let middle_x = (data_nodes[e.source].x + data_nodes[e.target].x) / 2.0;\n    let middle_y = (data_nodes[e.source].y + data_nodes[e.target].y) / 2.0;\n\n    return {\n      x: middle_x,\n      y: middle_y,\n    };\n  }\n\n  function compute_divided_edge_length(e_idx) {\n    let length = 0;\n\n    for (let i = 1; i < subdivision_points_for_edge[e_idx].length; i++) {\n      let segment_length = euclidean_distance(\n        subdivision_points_for_edge[e_idx][i],\n        subdivision_points_for_edge[e_idx][i - 1]\n      );\n      length += segment_length;\n    }\n\n    return length;\n  }\n\n  function euclidean_distance(p, q) {\n    return Math.sqrt(Math.pow(p.x - q.x, 2) + Math.pow(p.y - q.y, 2));\n  }\n\n  function project_point_on_line(p, Q) {\n    let L = Math.sqrt(\n      (Q.target.x - Q.source.x) * (Q.target.x - Q.source.x) +\n        (Q.target.y - Q.source.y) * (Q.target.y - Q.source.y)\n    );\n    let r =\n      ((Q.source.y - p.y) * (Q.source.y - Q.target.y) -\n        (Q.source.x - p.x) * (Q.target.x - Q.source.x)) /\n      (L * L);\n\n    return {\n      x: Q.source.x + r * (Q.target.x - Q.source.x),\n      y: Q.source.y + r * (Q.target.y - Q.source.y),\n    };\n  }\n\n  /*** Initialization Methods ***/\n  function initialize_edge_subdivisions() {\n    for (let i = 0; i < data_edges.length; i++) {\n      if (P_initial === 1) {\n        subdivision_points_for_edge[i] = []; //0 subdivisions\n      } else {\n        subdivision_points_for_edge[i] = [];\n        subdivision_points_for_edge[i].push(data_nodes[data_edges[i].source]);\n        subdivision_points_for_edge[i].push(data_nodes[data_edges[i].target]);\n      }\n    }\n  }\n\n  function initialize_compatibility_lists() {\n    for (let i = 0; i < data_edges.length; i++) {\n      compatibility_list_for_edge[i] = []; //0 compatible edges.\n    }\n  }\n\n  function filter_self_loops(edgelist) {\n    let filtered_edge_list = [];\n\n    for (let e = 0; e < edgelist.length; e++) {\n      if (\n        data_nodes[edgelist[e].source].x != data_nodes[edgelist[e].target].x ||\n        data_nodes[edgelist[e].source].y != data_nodes[edgelist[e].target].y\n      ) {\n        //or smaller than eps\n        filtered_edge_list.push(edgelist[e]);\n      }\n    }\n\n    return filtered_edge_list;\n  }\n\n  /*** Force Calculation Methods ***/\n  function apply_spring_force(e_idx, i, kP) {\n    let prev = subdivision_points_for_edge[e_idx][i - 1];\n    let next = subdivision_points_for_edge[e_idx][i + 1];\n    let crnt = subdivision_points_for_edge[e_idx][i];\n    let x = prev.x - crnt.x + next.x - crnt.x;\n    let y = prev.y - crnt.y + next.y - crnt.y;\n\n    x *= kP;\n    y *= kP;\n\n    return {\n      x: x,\n      y: y,\n    };\n  }\n\n  function apply_electrostatic_force(e_idx, i) {\n    let sum_of_forces = {\n      x: 0,\n      y: 0,\n    };\n    let compatible_edges_list = compatibility_list_for_edge[e_idx];\n\n    for (let oe = 0; oe < compatible_edges_list.length; oe++) {\n      let force = {\n        x:\n          subdivision_points_for_edge[compatible_edges_list[oe]][i].x -\n          subdivision_points_for_edge[e_idx][i].x,\n        y:\n          subdivision_points_for_edge[compatible_edges_list[oe]][i].y -\n          subdivision_points_for_edge[e_idx][i].y,\n      };\n\n      if (Math.abs(force.x) > eps || Math.abs(force.y) > eps) {\n        let diff =\n          1 /\n          Math.pow(\n            custom_edge_length({\n              source: subdivision_points_for_edge[compatible_edges_list[oe]][i],\n              target: subdivision_points_for_edge[e_idx][i],\n            }),\n            1\n          );\n\n        sum_of_forces.x += force.x * diff;\n        sum_of_forces.y += force.y * diff;\n      }\n    }\n\n    return sum_of_forces;\n  }\n\n  function apply_resulting_forces_on_subdivision_points(e_idx, P, S) {\n    let kP = K / (edge_length(data_edges[e_idx]) * (P + 1)); // kP=K/|P|(number of segments), where |P| is the initial length of edge P.\n    // (length * (num of sub division pts - 1))\n    let resulting_forces_for_subdivision_points = [\n      {\n        x: 0,\n        y: 0,\n      },\n    ];\n\n    for (let i = 1; i < P + 1; i++) {\n      // exclude initial end points of the edge 0 and P+1\n      let resulting_force = {\n        x: 0,\n        y: 0,\n      };\n\n      let spring_force = apply_spring_force(e_idx, i, kP);\n      let electrostatic_force = apply_electrostatic_force(e_idx, i, S);\n\n      resulting_force.x = S * (spring_force.x + electrostatic_force.x);\n      resulting_force.y = S * (spring_force.y + electrostatic_force.y);\n\n      resulting_forces_for_subdivision_points.push(resulting_force);\n    }\n\n    resulting_forces_for_subdivision_points.push({\n      x: 0,\n      y: 0,\n    });\n\n    return resulting_forces_for_subdivision_points;\n  }\n\n  /*** Edge Division Calculation Methods ***/\n  function update_edge_divisions(P) {\n    for (let e_idx = 0; e_idx < data_edges.length; e_idx++) {\n      if (P === 1) {\n        subdivision_points_for_edge[e_idx].push(\n          data_nodes[data_edges[e_idx].source]\n        ); // source\n        subdivision_points_for_edge[e_idx].push(\n          edge_midpoint(data_edges[e_idx])\n        ); // mid point\n        subdivision_points_for_edge[e_idx].push(\n          data_nodes[data_edges[e_idx].target]\n        ); // target\n      } else {\n        let divided_edge_length = compute_divided_edge_length(e_idx);\n        let segment_length = divided_edge_length / (P + 1);\n        let current_segment_length = segment_length;\n        let new_subdivision_points = [];\n        new_subdivision_points.push(data_nodes[data_edges[e_idx].source]); //source\n\n        for (let i = 1; i < subdivision_points_for_edge[e_idx].length; i++) {\n          let old_segment_length = euclidean_distance(\n            subdivision_points_for_edge[e_idx][i],\n            subdivision_points_for_edge[e_idx][i - 1]\n          );\n\n          while (old_segment_length > current_segment_length) {\n            let percent_position = current_segment_length / old_segment_length;\n            let new_subdivision_point_x =\n              subdivision_points_for_edge[e_idx][i - 1].x;\n            let new_subdivision_point_y =\n              subdivision_points_for_edge[e_idx][i - 1].y;\n\n            new_subdivision_point_x +=\n              percent_position *\n              (subdivision_points_for_edge[e_idx][i].x -\n                subdivision_points_for_edge[e_idx][i - 1].x);\n            new_subdivision_point_y +=\n              percent_position *\n              (subdivision_points_for_edge[e_idx][i].y -\n                subdivision_points_for_edge[e_idx][i - 1].y);\n            new_subdivision_points.push({\n              x: new_subdivision_point_x,\n              y: new_subdivision_point_y,\n            });\n\n            old_segment_length -= current_segment_length;\n            current_segment_length = segment_length;\n          }\n          current_segment_length -= old_segment_length;\n        }\n        new_subdivision_points.push(data_nodes[data_edges[e_idx].target]); //target\n        subdivision_points_for_edge[e_idx] = new_subdivision_points;\n      }\n    }\n  }\n\n  /*** Edge compatibility measures ***/\n  function angle_compatibility(P, Q) {\n    return Math.abs(\n      vector_dot_product(edge_as_vector(P), edge_as_vector(Q)) /\n        (edge_length(P) * edge_length(Q))\n    );\n  }\n\n  function scale_compatibility(P, Q) {\n    let lavg = (edge_length(P) + edge_length(Q)) / 2.0;\n    return (\n      2.0 /\n      (lavg / Math.min(edge_length(P), edge_length(Q)) +\n        Math.max(edge_length(P), edge_length(Q)) / lavg)\n    );\n  }\n\n  function position_compatibility(P, Q) {\n    let lavg = (edge_length(P) + edge_length(Q)) / 2.0;\n    let midP = {\n      x: (data_nodes[P.source].x + data_nodes[P.target].x) / 2.0,\n      y: (data_nodes[P.source].y + data_nodes[P.target].y) / 2.0,\n    };\n    let midQ = {\n      x: (data_nodes[Q.source].x + data_nodes[Q.target].x) / 2.0,\n      y: (data_nodes[Q.source].y + data_nodes[Q.target].y) / 2.0,\n    };\n\n    return lavg / (lavg + euclidean_distance(midP, midQ));\n  }\n\n  function edge_visibility(P, Q) {\n    let I0 = project_point_on_line(data_nodes[Q.source], {\n      source: data_nodes[P.source],\n      target: data_nodes[P.target],\n    });\n    let I1 = project_point_on_line(data_nodes[Q.target], {\n      source: data_nodes[P.source],\n      target: data_nodes[P.target],\n    }); //send actual edge points positions\n    let midI = {\n      x: (I0.x + I1.x) / 2.0,\n      y: (I0.y + I1.y) / 2.0,\n    };\n    let midP = {\n      x: (data_nodes[P.source].x + data_nodes[P.target].x) / 2.0,\n      y: (data_nodes[P.source].y + data_nodes[P.target].y) / 2.0,\n    };\n\n    return Math.max(\n      0,\n      1 - (2 * euclidean_distance(midP, midI)) / euclidean_distance(I0, I1)\n    );\n  }\n\n  function visibility_compatibility(P, Q) {\n    return Math.min(edge_visibility(P, Q), edge_visibility(Q, P));\n  }\n\n  function compatibility_score(P, Q) {\n    return (\n      angle_compatibility(P, Q) *\n      scale_compatibility(P, Q) *\n      position_compatibility(P, Q) *\n      visibility_compatibility(P, Q)\n    );\n  }\n\n  function are_compatible(P, Q) {\n    return compatibility_score(P, Q) >= compatibility_threshold;\n  }\n\n  function compute_compatibility_lists() {\n    for (let e = 0; e < data_edges.length - 1; e++) {\n      for (let oe = e + 1; oe < data_edges.length; oe++) {\n        // don't want any duplicates\n        if (are_compatible(data_edges[e], data_edges[oe])) {\n          compatibility_list_for_edge[e].push(oe);\n          compatibility_list_for_edge[oe].push(e);\n        }\n      }\n    }\n  }\n\n  /*** Main Bundling Loop Methods ***/\n  let forcebundle = function () {\n    let S = S_initial;\n    let I = I_initial;\n    let P = P_initial;\n\n    initialize_edge_subdivisions();\n    initialize_compatibility_lists();\n    update_edge_divisions(P);\n    compute_compatibility_lists();\n\n    for (let cycle = 0; cycle < C; cycle++) {\n      for (let iteration = 0; iteration < I; iteration++) {\n        let forces = [];\n        for (let edge = 0; edge < data_edges.length; edge++) {\n          forces[edge] = apply_resulting_forces_on_subdivision_points(\n            edge,\n            P,\n            S\n          );\n        }\n        for (let e = 0; e < data_edges.length; e++) {\n          for (let i = 0; i < P + 1; i++) {\n            subdivision_points_for_edge[e][i].x += forces[e][i].x;\n            subdivision_points_for_edge[e][i].y += forces[e][i].y;\n          }\n        }\n      }\n      // prepare for next cycle\n      S = S / 2;\n      P = P * P_rate;\n      I = I_rate * I;\n\n      update_edge_divisions(P);\n    }\n    return subdivision_points_for_edge;\n  };\n\n  /*** Getters/Setters Methods ***/\n  forcebundle.nodes = function (nl) {\n    if (arguments.length === 0) {\n      return data_nodes;\n    } else {\n      data_nodes = nl;\n    }\n\n    return forcebundle;\n  };\n\n  forcebundle.edges = function (ll) {\n    if (arguments.length === 0) {\n      return data_edges;\n    } else {\n      data_edges = filter_self_loops(ll); //remove edges to from to the same point\n    }\n\n    return forcebundle;\n  };\n\n  forcebundle.bundling_stiffness = function (k) {\n    if (arguments.length === 0) {\n      return K;\n    } else {\n      K = k;\n    }\n\n    return forcebundle;\n  };\n\n  forcebundle.step_size = function (step) {\n    if (arguments.length === 0) {\n      return S_initial;\n    } else {\n      S_initial = step;\n    }\n\n    return forcebundle;\n  };\n\n  forcebundle.cycles = function (c) {\n    if (arguments.length === 0) {\n      return C;\n    } else {\n      C = c;\n    }\n\n    return forcebundle;\n  };\n\n  forcebundle.iterations = function (i) {\n    if (arguments.length === 0) {\n      return I_initial;\n    } else {\n      I_initial = i;\n    }\n\n    return forcebundle;\n  };\n\n  forcebundle.iterations_rate = function (i) {\n    if (arguments.length === 0) {\n      return I_rate;\n    } else {\n      I_rate = i;\n    }\n\n    return forcebundle;\n  };\n\n  forcebundle.subdivision_points_seed = function (p) {\n    if (arguments.length == 0) {\n      return P;\n    } else {\n      P = p;\n    }\n\n    return forcebundle;\n  };\n\n  forcebundle.subdivision_rate = function (r) {\n    if (arguments.length === 0) {\n      return P_rate;\n    } else {\n      P_rate = r;\n    }\n\n    return forcebundle;\n  };\n\n  forcebundle.compatibility_threshold = function (t) {\n    if (arguments.length === 0) {\n      return compatibility_threshold;\n    } else {\n      compatibility_threshold = t;\n    }\n\n    return forcebundle;\n  };\n\n  return forcebundle;\n}\n\n/**\n * edgeBundling - Convenience wrapper for ForceEdgeBundling\n *\n * @param {Object} data - {nodes, links} where nodes have x,y coords\n * @param {Object} options - Configuration options\n * @returns {Object} Edge bundling instance with update() method\n */\nexport function edgeBundling(\n  {\n    nodes, // Array of nodes including x and y coords e.g. [{id: \"a\", x: 10, y:10}, ...]\n    links, // Array of links in D3 forceSimulation format e.g. [{source: \"a\", target: \"b\"}, ...]\n  },\n  {\n    id = (d) => d.id,\n    pathAttr = \"path\", // name of the attribute to save the paths\n    bundling_stiffness = 0.1, // global bundling constant controlling edge stiffness\n    step_size = 0.1, // init. distance to move points\n    subdivision_rate = 2, // subdivision rate increase\n    cycles = 6, // number of cycles to perform\n    iterations = 90, // init. number of iterations for cycle\n    iterations_rate = 0.6666667, // rate at which iteration number decreases i.e. 2/3\n    compatibility_threshold = 0.6, //  \"which pairs of edges should be considered compatible (default is set to 0.6, 60% compatiblity)\"\n  } = {}\n) {\n  // The library wants the links as the index positions in the nodes array\n  const dNodes = new Map(nodes.map((d, i) => [id(d), i]));\n  const linksIs = links.map((l) => ({\n    source: dNodes.get(typeof l.source === \"object\" ? id(l.source) : l.source),\n    target: dNodes.get(typeof l.target === \"object\" ? id(l.target) : l.target),\n  }));\n\n  const edgeBundling = ForceEdgeBundling()\n    .nodes(nodes)\n    .edges(linksIs)\n    .bundling_stiffness(bundling_stiffness)\n    .step_size(step_size)\n    .subdivision_rate(subdivision_rate)\n    .cycles(cycles)\n    .iterations(iterations)\n    .iterations_rate(iterations_rate)\n    .compatibility_threshold(compatibility_threshold);\n\n  edgeBundling.update = () => {\n    const paths = edgeBundling();\n    links.map((l, i) => (l[pathAttr] = paths[i]));\n  };\n\n  edgeBundling.update();\n\n  return edgeBundling;\n}\n","/**\n * sample - Samples an array to limit the number of elements\n * Used for edge bundling to limit the number of links processed\n *\n * Original source: https://observablehq.com/@john-guerra/force-directed-graph\n * From 89207a2280891f15@1859.js lines 885-890\n *\n * @param {Array} array - Array to sample\n * @param {number} n - Maximum number of elements to return\n * @returns {Array} Sampled array\n */\nexport function sample(array, n) {\n  if (n >= array.length) return array;\n\n  return array.filter((d, i) => i % Math.floor(array.length / n) === 0);\n}\n","import * as d3 from \"d3\";\n\n/**\n * drag - Custom drag behavior that works with zoom transforms\n *\n * Original source: https://observablehq.com/@john-guerra/force-directed-graph\n * From 89207a2280891f15@1859.js lines 830-875\n *\n * @param {Object} simulation - D3 force simulation\n * @param {HTMLElement} node - DOM node (SVG or Canvas element)\n * @param {Object} opts - Options object with x, y scales and minDistanceForDrag\n * @returns {Function} D3 drag behavior\n */\nexport function drag(simulation, node, opts) {\n  function dragsubject(event) {\n    const transform = d3.zoomTransform(node);\n    let [x, y] = transform.invert([event.x, event.y]);\n    x = opts.x.invert(x);\n    y = opts.y.invert(y);\n    let subject = simulation.find(x, y);\n\n    let d = Math.hypot(x - subject.x, y - subject.y);\n\n    return d < opts.minDistanceForDrag\n      ? {\n          circle: subject,\n          x: transform.applyX(opts.x(subject.x)),\n          y: transform.applyY(opts.y(subject.y)),\n        }\n      : null;\n  }\n\n  function dragstarted(event) {\n    if (!event.active) simulation.alphaTarget(0.3).restart();\n    event.subject.circle.fx = event.subject.circle.x;\n    event.subject.circle.fy = event.subject.circle.y;\n  }\n\n  function dragged(event) {\n    const transform = d3.zoomTransform(node);\n    event.subject.circle.fx = opts.x.invert(transform.invertX(event.x));\n    event.subject.circle.fy = opts.y.invert(transform.invertY(event.y));\n  }\n\n  function dragended(event) {\n    if (!event.active) simulation.alphaTarget(0);\n    event.subject.circle.fx = null;\n    event.subject.circle.fy = null;\n  }\n\n  return d3\n    .drag()\n    .subject(dragsubject)\n    .on(\"start\", dragstarted)\n    .on(\"drag\", dragged)\n    .on(\"end\", dragended);\n}\n","import * as d3 from \"d3\";\n\n/**\n * computeAutoFit - Adjusts x/y scales to fit nodes in viewport\n * with optional aspect ratio preservation\n *\n * Original source: https://observablehq.com/@john-guerra/force-directed-graph\n * From 89207a2280891f15@1859.js lines 979-1022\n *\n * @param {Object} opts - Options object with nodes, x, y scales, width, height, autoFit, keepAspectRatio\n */\nexport function computeAutoFit(opts) {\n  if (opts.autoFit) {\n    const yExtent = d3.extent(opts.nodes, (d) => d.y);\n    const xExtent = d3.extent(opts.nodes, (d) => d.x);\n\n    opts.x.domain(d3.extent(opts.nodes, (d) => d.x));\n    opts.y.domain(d3.extent(opts.nodes, (d) => d.y));\n\n    if (opts.keepAspectRatio) {\n      const ratio = opts.width / opts.height;\n      const newRatio = (xExtent[1] - xExtent[0]) / (yExtent[1] - yExtent[0]);\n\n      if (newRatio < ratio) {\n        // Adjust x axis to fit\n        const d =\n          (opts.width / opts.height) * (yExtent[1] - yExtent[0]) -\n          (xExtent[1] - xExtent[0]);\n\n        opts.x.domain([xExtent[0] - d / 2, xExtent[1] + d / 2]);\n        opts.y.domain(yExtent);\n      } else {\n        // Adjust y axis to fit\n        const d =\n          (opts.height / opts.width) * (xExtent[1] - xExtent[0]) -\n          (yExtent[1] - yExtent[0]);\n\n        opts.y.domain([yExtent[0] - d / 2, yExtent[1] + d / 2]);\n        opts.x.domain(xExtent);\n      }\n    }\n  }\n}\n","/**\n * applyTransform - Applies zoom transform to node/link coordinates\n *\n * Original source: https://observablehq.com/@john-guerra/force-directed-graph\n * From 89207a2280891f15@1859.js lines 823-828\n *\n * @param {Object} d - Node or point with x, y coordinates\n * @param {Object} transform - D3 zoom transform\n * @param {Object} opts - Options object with x, y scales\n * @returns {Object} Transformed point with x, y\n */\nexport function applyTransform(d, transform, opts) {\n  const [x, y] = transform.apply([opts.x(d.x), opts.y(d.y)]);\n  return { ...d, x, y };\n}\n","// smart-labels v0.0.11 Copyright (c) 2024 John Alexis Guerra Gómez\nimport * as d3 from 'd3';\n\n// Based on https://observablehq.com/@d3/voronoi-labels by Mike Bostock\n\n// ISC License\n\n// Copyright 2018–2023 Observable, Inc.\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\nfunction smartLabels(\n  data,\n  {\n    x = (d) => d[0], // x coordinate accessor, expected to be in pixels\n    y = (d) => d[1], // y coordinate accessor, expected to be in pixels\n    r = () => 3, // radius accessor, expected to be in pixels\n    label = (d, i) => i, // Accessor for the label\n    fill = \"#333\", // label fill color\n    stroke = \"white\", // label stroke color\n    width = null,\n    height = null,\n    target = null, // Where do you want it to draw\n    renderer = \"svg\", // canvas or svg\n    font = () => \"10pt sans-serif\",\n    hover = true, // Show label of the hovered point\n    onHover = (i) => i, // callback when hovered, will pass the index of the selected element\n    hoverFont = () => \"bolder 12pt sans-serif\",\n    labelsInCentroids = true,\n    threshold = 2000, // Areas over this size would get labels\n    alwaysShow = (d) => false, // If returns true for the node, it will always show the label\n    showLabel = (d, cell) => alwaysShow(d) || -d3.polygonArea(cell) > threshold, // If true, show the label\n\n    backgroundFill = \"#fefefe01\", // What to paint the bg rect of the labels. Needed for the onHover\n    strokeWidth = 5,\n\n    showVoronoi = false,\n    voronoiStroke = \"#ccc\",\n\n    showAnchors = false,\n    anchorsStroke = \"orange\",\n    anchorsFill = \"none\",\n\n    useOcclusion = true,\n    occludedStyle = \"opacity: 0.2\", // css style rules to be used on occluded labels\n\n    // For debugging\n    showPoints = false,\n    pointsFill = \"#ccc\",\n    pointsSelectedFill = \"firebrick\",\n    pointsStroke = \"#ccc\",\n    debug = false,\n    selected = null,\n    padding = 3, // label padding in pixels\n  } = {}\n) {\n  if (!data || data?.length === 0) {\n    console.log(\"smartLabels: No data to render\");\n    return target;\n  }\n\n  data = data.filter(\n    (d, index) =>\n      x(d, index) !== undefined &&\n      x(d, index) !== null &&\n      y(d, index) !== undefined &&\n      y(d, index) !== null\n  );\n\n  if (typeof font === \"string\") font = () => font;\n  if (typeof hoverFont === \"string\") hoverFont = () => hoverFont;\n\n  let xExtent = d3.extent(data, x),\n    yExtent = d3.extent(data, y);\n  width = width || xExtent[1] - xExtent[0];\n  height = height || yExtent[1] - yExtent[0];\n\n  if (debug) console.log(\"✅ smartLabels renderer\", renderer);\n\n  function checkIfTargetMatchesRenderer(target, renderer) {\n    if (target && target.node) {\n      target = target.node();\n    }\n    if (renderer.toLocaleLowerCase() === \"canvas\") {\n      return target instanceof HTMLCanvasElement;\n    } else {\n      return target instanceof SVGElement;\n    }\n  }\n\n  if (target && !checkIfTargetMatchesRenderer(target, renderer)) {\n    if (debug)\n      console.log(\n        \"❌ smartLabels Target doesn't match the renderer\",\n        target,\n        renderer\n      );\n    throw new Error(\n      \"Smartlabels Target doesn't match the renderer\",\n      target,\n      renderer\n    );\n  }\n\n  // Try to reuse the target\n  if (renderer.toLocaleLowerCase() === \"canvas\") {\n    if (target) {\n      target = d3.select(target.node ? target.node() : target);\n    } else {\n      target = d3.create(\"canvas\").attr(\"width\", width).attr(\"height\", height);\n    }\n    useOcclusion = false;\n  } else {\n    if (target) {\n      target = d3.select(target.node ? target.node() : target);\n    } else {\n      target = d3.create(\"svg\").attr(\"viewBox\", [0, 0, width, height]);\n    }\n    target = target || d3.create(\"svg\").attr(\"viewBox\", [0, 0, width, height]);\n  }\n\n  const delaunay = d3.Delaunay.from(data, x, y);\n  const voronoi = delaunay.voronoi([\n    xExtent[0] - 1,\n    yExtent[0] - 1,\n    xExtent[1] + 1,\n    yExtent[1] + 1,\n  ]);\n\n  let cells = data.map((d, i) => [d, voronoi.cellPolygon(i)]);\n  // Replace null cells with the nearest one\n  cells = cells\n    .map(([d, cell], index) => [d, getNearestCell(d, cell, index)])\n    .map(([d, cell]) => ({ d, cell, show: showLabel(d, cell) }));\n\n  // cells can be null when we have duplicated coords\n  // https://github.com/d3/d3-delaunay/issues/106\n  function getNearestCell(d, cell, index) {\n    if (!cell) {\n      const i = delaunay.find(x(d, index), y(d, index));\n      if (i === -1) {\n        console.log(\"couldn't find cell\", i, d, x(d, index), y(d, index));\n        return null;\n      }\n      cell = cells[i][1];\n    }\n    return cell;\n  }\n\n  function renderSVG() {\n    let anchors = null;\n    if (useOcclusion) {\n      target\n        .selectAll(\"style.smartLabels\")\n        .data([0])\n        .join(\"style\")\n        .attr(\"class\", \"smartLabels\").html(`\n        svg g.labels > text.occluded:not(.selected) { ${occludedStyle} }\n    `);\n    }\n\n    const mouseRect = target\n      .selectAll(\"rect.smartLabels\")\n      .data([0])\n      .join(\"rect\")\n      .attr(\"class\", \"smartLabels\")\n      .attr(\"width\", width)\n      .attr(\"height\", height)\n      .attr(\"fill\", backgroundFill)\n      .attr(\"stroke\", \"none\");\n\n    const orient = {\n      top: (text) =>\n        text\n          .attr(\"text-anchor\", \"middle\")\n          .attr(\"y\", (d, i) => -(r(d, i) + padding)),\n      right: (text) =>\n        text\n          .attr(\"text-anchor\", \"start\")\n          .attr(\"dy\", \"0.35em\")\n          .attr(\"x\", (d, i) => r(d, i) + padding),\n      bottom: (text) =>\n        text\n          .attr(\"text-anchor\", \"middle\")\n          .attr(\"dy\", \"0.71em\")\n          .attr(\"y\", (d, i) => r(d, i) + padding),\n      left: (text) =>\n        text\n          .attr(\"text-anchor\", \"end\")\n          .attr(\"dy\", \"0.35em\")\n          .attr(\"x\", (d, i) => -(r(d, i) + padding)),\n    };\n\n    if (showAnchors || labelsInCentroids) {\n      anchors = target\n        .selectAll(\"g#anchors\")\n        .data([cells])\n        .join(\"g\")\n        .attr(\"pointer-events\", \"none\")\n        .attr(\"id\", \"anchors\")\n        .attr(\"stroke\", anchorsStroke)\n        .attr(\"fill\", anchorsFill)\n        .selectAll(\"path.anchor\")\n        .data((d) => d)\n        .join(\"path\")\n        .attr(\"class\", \"anchor\")\n        .attr(\"display\", ({ show }) => (show ? null : \"none\"))\n        .attr(\"d\", ({ d, cell }, index) =>\n          cell\n            ? `M${d3.polygonCentroid(cell)}L${x(d, index)},${y(d, index)}`\n            : null\n        );\n    }\n\n    if (showVoronoi) {\n      target\n        .selectAll(\"path#voronoi\")\n        .data([1])\n        .join(\"path\")\n        .attr(\"id\", \"voronoi\")\n        .attr(\"stroke\", voronoiStroke)\n        .attr(\"pointer-events\", \"none\")\n        .attr(\"d\", voronoi.render());\n    }\n\n    let points;\n    if (showPoints) {\n      points = target\n        .selectAll(\"circle#points\")\n        .data([1])\n        .join(\"path\")\n        .attr(\"id\", \"points\")\n        .attr(\"pointer-events\", \"none\")\n        .attr(\"stroke\", pointsStroke)\n        .attr(\"fill\", pointsFill)\n        .attr(\"d\", delaunay.renderPoints(null, 2));\n    }\n\n    const labels = target\n      .selectAll(\"g.labels\")\n      .data([cells])\n      .join(\"g\")\n      .attr(\"class\", \"labels\")\n      .attr(\"fill\", fill)\n\n      .attr(\"stroke\", stroke)\n      .attr(\"stroke-width\", strokeWidth)\n      .attr(\"paint-order\", \"stroke\")\n      .attr(\"pointer-events\", \"none\")\n      .selectAll(\"text\")\n      .data((d) => d)\n      .join(\"text\")\n      .style(\"font\", ({d}, i) => font(d, i))\n      .each(function ({ d, cell }, index) {\n        if (!cell) return;\n        const [cx, cy] = d3.polygonCentroid(cell);\n        const angle =\n          (Math.round(\n            (Math.atan2(cy - y(d, index), cx - x(d, index)) / Math.PI) * 2\n          ) +\n            4) %\n          4;\n\n        d3.select(this).call(\n          angle === 0\n            ? orient.right\n            : angle === 3\n              ? orient.top\n              : angle === 1\n                ? orient.bottom\n                : orient.left\n        );\n      })\n      .attr(\"transform\", ({ d, cell }, index) => {\n        if (labelsInCentroids) {\n          const [cx, cy] = d3.polygonCentroid(cell);\n\n          return `translate(${cx}, ${cy})`;\n        } else {\n          return `translate(${x(d, index)}, ${y(d, index)})`;\n        }\n      })\n      .attr(\"display\", ({ show }) => (show ? null : \"none\"))\n      .text(({ d }, i, all) => label(d, i, all));\n\n    let selected = null;\n    if (hover) {\n      mouseRect.on(\"mousemove\", (event) => {\n        // Find the selected point\n        const i = delaunay.find(...d3.pointer(event));\n        if (i === selected) return;\n        selected = i;\n\n        // Update labels\n        labels\n          .attr(\"display\", ({ show }, i) =>\n            i === selected || show ? null : \"none\"\n          )\n          .style(\"font\", ({d}, i) =>\n            i === selected ? hoverFont(d, i) : font(d, i)\n          )\n          .classed(\"selected\", (_, i) => i === selected)\n          .filter((_, i) => i === selected)\n          .raise();\n\n        anchors &&\n          anchors.attr(\"display\", ({ show }, i) =>\n            show || i === selected ? null : \"none\"\n          );\n\n        if (showPoints) {\n          points\n            .attr(\"fill\", (_, i) =>\n              i === selected ? pointsSelectedFill : pointsSelectedFill\n            )\n            .classed(\"selected\", (_, i) => i === selected);\n        }\n\n        if (onHover && typeof onHover === \"function\") onHover(i);\n      });\n    }\n\n    // Setup a MutationObserver to wait for the element to be rendered\n    // https://stackoverflow.com/questions/15875128/is-there-element-rendered-event\n    if (useOcclusion) {\n      const observer = new MutationObserver(function () {\n        if (document.contains(target.node())) {\n          target.call(occlusion, \"g.labels > text\");\n          observer.disconnect();\n        }\n      });\n\n      observer.observe(document, {\n        attributes: false,\n        childList: true,\n        characterData: false,\n        subtree: true,\n      });\n    }\n  } // renderSVG\n\n  function renderCanvasAnchorsVoronoiPoints(context) {\n    if (debug)\n      console.log(\n        \"renderCanvasAnchorsVoronoiPoints\",\n        \"showAnchors\",\n        showAnchors,\n        \"labelsInCentroids\",\n        labelsInCentroids,\n        \"showVoronoi\",\n        showVoronoi,\n        \"showPoints\",\n        showPoints\n      );\n    if (showAnchors || labelsInCentroids) {\n      cells.forEach(({ d, cell, show }, index) => {\n        if (!show) return;\n        const [cx, cy] = d3.polygonCentroid(cell);\n        context.beginPath();\n        context.moveTo(cx, cy);\n        context.lineTo(x(d, index), y(d, index));\n        context.strokeStyle = anchorsStroke;\n        context.stroke();\n      });\n    }\n\n    if (showVoronoi) {\n      context.beginPath();\n      voronoi.render(context);\n      context.strokeStyle = voronoiStroke;\n      context.stroke();\n    }\n\n    if (showPoints) {\n      context.beginPath();\n      // delaunay.renderPoints(context, 2);\n      context.save();\n      context.globalAlpha = 0.7;\n      context.fillStyle = \"black\";\n      data.forEach((d, i) => {\n        context.beginPath();\n        context.arc(x(d, i), y(d, i), r(d, i), 0, 2 * Math.PI);\n      });\n      context.restore();\n      context.fillStyle = pointsFill;\n      context.fill();\n      context.strokeStyle = pointsStroke;\n      context.stroke();\n    }\n  } // renderCanvasAnchorsVoronoiPoints\n\n  function renderCanvasLabels(context, selected) {\n    cells.forEach(({ d, cell, show }, index) => {\n      if (!show && index !== selected) return;\n      const [cx, cy] = d3.polygonCentroid(cell);\n      const angle =\n        (Math.round(\n          (Math.atan2(cy - y(d, index), cx - x(d, index)) / Math.PI) * 2\n        ) +\n          4) %\n        4;\n\n      context.save();\n      const dr = r(d, index) + padding;\n      const dx = angle === 0 ? dr : angle === 2 ? -dr : dr;\n      const dy = angle === 1 ? dr : angle === 3 ? -dr : dr;\n      context.translate(\n        labelsInCentroids ? cx : x(d, index) + dx,\n        labelsInCentroids ? cy : y(d, index) + dy\n      );\n      context.textAlign =\n        angle === 0\n          ? \"left\"\n          : angle === 1\n            ? \"center\"\n            : angle === 2\n              ? \"right\"\n              : \"center\";\n      context.textBaseline =\n        angle === 0\n          ? \"middle\"\n          : angle === 1\n            ? \"top\"\n            : angle === 2\n              ? \"middle\"\n              : \"bottom\";\n      context.font = index === selected ? hoverFont(d, index) : font(d, index);\n      context.fillStyle = fill;\n      context.strokeStyle = stroke;\n      context.lineWidth = strokeWidth;\n      // if (debug) console.log(index, dx, dy, angle);\n      context.strokeText(label(d, index), 0, 0);\n      context.fillText(label(d, index), 0, 0);\n      context.restore();\n    });\n  } // renderCanvasLabels\n\n  function renderCanvas() {\n    const context = target.node().getContext(\"2d\");\n\n    renderCanvasAnchorsVoronoiPoints(context);\n    renderCanvasLabels(context, selected);\n\n    if (hover) {\n      if (debug) console.log(\"setting onmousemove\", target);\n\n      target.on(\"mousemove\", (event) => {\n        const [mx, my] = d3.pointer(event);\n        const i = delaunay.find(mx, my);\n        if (i === selected) return;\n        selected = i;\n\n        context.clearRect(0, 0, width, height);\n        renderCanvasAnchorsVoronoiPoints(context);\n        if (onHover && typeof onHover === \"function\") onHover(i);\n        renderCanvasLabels(context, selected);\n      });\n    }\n  } // renderCanvas\n\n  if (renderer.toLocaleLowerCase() === \"canvas\") {\n    renderCanvas();\n  } else {\n    renderSVG();\n  }\n\n  return Object.assign(target.node(), { delaunay, voronoi, cells });\n}\n\n// https://observablehq.com/@d3/occlusion\n// ISC License\n\n// Copyright 2020-2023 Philippe Rivière\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\nfunction occlusion(svg, against = \"text\") {\n  const nodes = d3\n    .sort(svg.selectAll(against), (node) => +node.getAttribute(\"data-priority\"))\n    .reverse()\n    .map((node) => {\n      const { x, y, width, height } = node.getBoundingClientRect();\n      return { node, x, y, width, height };\n    });\n\n  const visible = [];\n  for (const d of nodes) {\n    const occluded = visible.some((e) => intersectRect(d, e));\n    d3.select(d.node).classed(\"occluded\", occluded);\n    if (!occluded) visible.push(d);\n  }\n  return visible;\n}\n\n// This intersection function works for rect and text, but not so much for circles.\nfunction intersectRect(a, b) {\n  return !(\n    a.x + a.width < b.x ||\n    b.x + b.width < a.x ||\n    a.y + a.height < b.y ||\n    b.y + b.height < a.y\n  );\n}\n\nexport { smartLabels as default };\n","import * as d3 from \"d3\";\nimport { computeAutoFit } from \"../utils/computeAutoFit.js\";\nimport { applyTransform } from \"../utils/applyTransform.js\";\nimport smartLabels from \"smart-labels\";\n\n/**\n * renderCanvas - Canvas renderer for force-directed graph\n *\n * Original source: https://observablehq.com/@john-guerra/force-directed-graph\n * From 89207a2280891f15@1859.js lines 490-651\n *\n * @param {Object} opts - Options object with all configuration\n * @returns {Object} {target: canvas element, ticked: render function}\n */\nexport function renderCanvas(opts) {\n  let context;\n\n  try {\n    if (opts._this?.tagName !== \"CANVAS\") {\n      throw new Error(\"recreating canvas\");\n    }\n    context = opts._this?.getContext(\"2d\");\n  } catch (_e) {\n    // Create new canvas\n    const canvas = document.createElement(\"canvas\");\n    canvas.width = opts.width;\n    canvas.height = opts.height;\n    context = canvas.getContext(\"2d\");\n  }\n\n  const line = d3\n    .line()\n    .curve(opts.linkCurve)\n    .x((d) => d.x)\n    .y((d) => d.y)\n    .context(context);\n\n  const zoom = d3\n    .zoom()\n    .extent([\n      [0, 0],\n      [opts.width, opts.height],\n    ])\n    .scaleExtent(opts.zoomScaleExtent)\n    .on(\"zoom\", ({ transform }) => ticked(transform));\n\n  function drawNodesAndLinks(transform = d3.zoomTransform(context.canvas)) {\n    if (\n      opts.drawLinksWhenAlphaIs === null ||\n      opts.simulation.alpha() < opts.drawLinksWhenAlphaIs\n    ) {\n      context.save();\n      // constant opacity\n      if (!opts.LO) {\n        context.globalAlpha = opts.linkStrokeOpacity;\n      }\n\n      for (const [i, link] of opts.links.entries()) {\n        context.beginPath();\n        drawLink(link, transform);\n\n        // Dynamic opacity\n        if (opts.LO) context.globalAlpha = opts.LO[i];\n        context.strokeStyle = opts.L ? opts.L[i] : opts.linkStroke;\n        context.lineWidth = opts.W ? opts.W[i] : opts.linkStrokeWidth;\n        context.stroke();\n      }\n      context.restore();\n    }\n\n    context.save();\n    context.globalAlpha = opts.nodeStrokeOpacity;\n    for (const [i, node] of opts.nodes.entries()) {\n      context.beginPath();\n      drawNode(node, i, transform);\n      context.fillStyle = opts.G ? opts.color(opts.G[i]) : opts.nodeFill;\n      context.strokeStyle = opts.NS ? opts.NS[i] : opts.nodeStroke;\n      context.fill();\n      context.stroke();\n    }\n    context.restore();\n  }\n\n  function ticked(transform = d3.zoomTransform(context.canvas)) {\n    context.save();\n\n    computeAutoFit(opts);\n\n    if (opts.useEdgeBundling && opts.bundling) {\n      for (let l of opts.links) {\n        delete l.path;\n      }\n      if (\n        (!opts.edgeBundling.min_alpha_to_bundle &&\n          opts.edgeBundling.min_alpha_to_bundle !== 0) ||\n        opts.simulation.alpha() < opts.edgeBundling.min_alpha_to_bundle\n      ) {\n        opts.bundling.update();\n      }\n    }\n\n    context.clearRect(0, 0, opts.width, opts.height);\n    drawNodesAndLinks(transform);\n\n    if (opts.nodeLabel) {\n      // Draw Labels\n      context.save();\n      context.fillStyle = opts.nodeLabelFill;\n      context.textAlign = opts.nodeLabelTextAlign;\n      context.textAnchor = opts.nodeLabelTextAnchor;\n      if (opts.T) {\n        context.font = opts.nodeLabelFont;\n        context.beginPath();\n\n        if (opts.useSmartLabels) {\n          smartLabels(opts.nodes, {\n            ...opts.smartLabels,\n            target: context.canvas,\n            label: (_, i) => opts.T[i],\n            x: (d) => transform.applyX(opts.x(d.x)),\n            y: (d) => transform.applyY(opts.y(d.y)),\n            width: opts.width,\n            height: opts.height,\n            renderer: opts.renderer,\n            onHover: () => drawNodesAndLinks(transform),\n          });\n        } else {\n          for (const [i, node] of opts.nodes.entries()) {\n            drawLabel(node, i, transform);\n          }\n        }\n        context.stroke();\n      }\n      context.restore();\n    }\n\n    context.restore();\n  }\n\n  function drawLink(l, transform) {\n    line(\n      opts.useEdgeBundling && l.path\n        ? l.path.map((d) => applyTransform(d, transform, opts))\n        : [\n            applyTransform(l.source, transform, opts),\n            applyTransform(l.target, transform, opts),\n          ]\n    );\n  }\n\n  function drawNode(d, i, transform) {\n    d = applyTransform(d, transform, opts);\n    context.moveTo(d.x + opts.R[i], d.y);\n    context.arc(d.x, d.y, opts.R[i], 0, 2 * Math.PI);\n  }\n\n  function drawLabel(d, i, transform) {\n    d = applyTransform(d, transform, opts);\n    context.fillText(opts.T[i], d.x, d.y - opts.R[i] - 2);\n  }\n\n  return {\n    target: d3\n      .select(context.canvas)\n      .call(\n        opts\n          .drag(opts.simulation, context.canvas, opts)\n          .on(\"start.render drag.render end.render\", () => {\n            return ticked(d3.zoomTransform(context.canvas));\n          })\n      )\n      .call(\n        opts.useZoom ? zoom : () => {} // do not use zoom\n      )\n      .node(),\n    ticked,\n  };\n}\n","import * as d3 from \"d3\";\nimport { computeAutoFit } from \"../utils/computeAutoFit.js\";\nimport { applyTransform } from \"../utils/applyTransform.js\";\nimport smartLabels from \"smart-labels\";\n\n/**\n * renderSVG - SVG renderer for force-directed graph\n *\n * Original source: https://observablehq.com/@john-guerra/force-directed-graph\n * From 89207a2280891f15@1859.js lines 653-821\n *\n * @param {Object} opts - Options object with all configuration\n * @returns {Object} {target: SVG element, ticked: render function}\n */\nexport function renderSVG(opts) {\n  let svg;\n\n  try {\n    if (opts._this?.tagName !== \"svg\") {\n      throw new Error(\"recreating svg\");\n    }\n    svg = d3.select(opts._this);\n  } catch {\n    svg = d3.create(\"svg\");\n  }\n\n  const line = d3\n    .line()\n    .curve(opts.linkCurve)\n    .x((d) => d.x)\n    .y((d) => d.y);\n\n  svg\n    .attr(\"width\", opts.width)\n    .attr(\"height\", opts.height)\n    .attr(\"viewBox\", [0, 0, opts.width, opts.height])\n    .attr(\"style\", \"max-width: 100%; height: auto; height: intrinsic;\");\n\n  const linkG = svg\n    .selectAll(\"g#gLinks\")\n    .data([0])\n    .join(\"g\")\n    .attr(\"id\", \"gLinks\");\n\n  const link = linkG\n    .attr(\n      \"stroke\",\n      typeof opts.linkStroke !== \"function\" ? opts.linkStroke : null\n    )\n    .attr(\"fill\", \"none\")\n    .attr(\"stroke-opacity\", (_, i) =>\n      opts.LO ? opts.LO[i] : opts.linkStrokeOpacity\n    )\n    .attr(\n      \"stroke-width\",\n      typeof opts.linkStrokeWidth !== \"function\" ? opts.linkStrokeWidth : null\n    )\n    .attr(\"stroke-linecap\", opts.linkStrokeLinecap)\n    .selectAll(\"path\")\n    .data(opts.links)\n    .join(\"path\");\n\n  const nodeG = svg\n    .selectAll(\"g#gNodes\")\n    .data([0])\n    .join(\"g\")\n    .attr(\"id\", \"gNodes\");\n\n  const node = nodeG\n    .attr(\"fill\", opts.nodeFill)\n    .attr(\"stroke-opacity\", opts.nodeStrokeOpacity)\n    .attr(\"stroke-width\", opts.nodeStrokeWidth)\n    .selectAll(\"circle.node\")\n    .data(opts.nodes)\n    .join(\"circle\")\n    .attr(\"class\", \"node\")\n    .attr(\"stroke\", (_, i) => (opts.NS ? opts.NS[i] : opts.nodeStroke))\n    .attr(\"r\", (_, i) => opts.R[i]);\n\n  let label = null;\n\n  if (!opts.useSmartLabels) {\n    label = nodeG\n      .selectAll(\"text.label\")\n      .data(opts.nodes)\n      .join(\"text\")\n      .attr(\"fill\", opts.nodeLabelFill)\n      .attr(\"stroke\", opts.nodeLabelStroke || \"none\")\n      .style(\"text-anchor\", opts.nodeLabelAlign)\n      .style(\"text-anchor\", opts.nodeLabelTextAnchor)\n      .style(\"font\", opts.nodeLabelFont)\n      .attr(\"class\", \"label\")\n      .text((_, i) => opts.T[i]);\n  }\n\n  node.call(opts.drag(opts.simulation, svg.node(), opts));\n\n  const zoom = d3\n    .zoom()\n    .extent([\n      [0, 0],\n      [opts.width, opts.height],\n    ])\n    .scaleExtent(opts.zoomScaleExtent)\n    .on(\"zoom\", ({ transform }) => ticked(transform));\n\n  svg.call(\n    opts.useZoom ? zoom : () => {} // do not use zoom\n  );\n\n  if (opts.W) link.attr(\"stroke-width\", ({ index: i }) => opts.W[i]);\n  if (opts.L) link.attr(\"stroke\", ({ index: i }) => opts.L[i]);\n  if (opts.G) node.attr(\"fill\", ({ index: i }) => opts.color(opts.G[i]));\n  if (opts.T) node.append(\"title\").text(({ index: i }) => opts.T[i]);\n\n  function ticked(transform = d3.zoomTransform(svg.node())) {\n    computeAutoFit(opts);\n\n    if (opts.useEdgeBundling && opts.bundling) {\n      for (let l of opts.links) {\n        delete l.path;\n      }\n      if (\n        (!opts.edgeBundling.min_alpha_to_bundle &&\n          opts.edgeBundling.min_alpha_to_bundle !== 0) ||\n        opts.simulation.alpha() < opts.edgeBundling.min_alpha_to_bundle\n      ) {\n        opts.bundling.update();\n      }\n    }\n\n    link\n      .attr(\n        \"display\",\n        opts.drawLinksWhenAlphaIs === null ||\n          opts.simulation.alpha() <= opts.drawLinksWhenAlphaIs\n          ? \"block\"\n          : \"none\"\n      )\n      .attr(\"d\", (l) => {\n        return line(\n          opts.useEdgeBundling && l.path\n            ? l.path.map((d) => applyTransform(d, transform, opts))\n            : [\n                applyTransform(l.source, transform, opts),\n                applyTransform(l.target, transform, opts),\n              ]\n        );\n      });\n\n    node\n      .attr(\"cx\", (d) => applyTransform(d, transform, opts).x)\n      .attr(\"cy\", (d) => applyTransform(d, transform, opts).y);\n\n    if (opts.useSmartLabels && opts.T) {\n      smartLabels(opts.nodes, {\n        ...opts.smartLabels,\n        target: nodeG,\n        label: (_, i) => opts.T[i],\n        x: (d) => transform.applyX(opts.x(d.x)),\n        y: (d) => transform.applyY(opts.y(d.y)),\n        width: opts.width,\n        height: opts.height,\n      });\n    } else if (label) {\n      label\n        .attr(\n          \"x\",\n          (d) => applyTransform(d, transform, opts).x + opts.nodeLabelDx\n        )\n        .attr(\n          \"y\",\n          (d) => applyTransform(d, transform, opts).y + opts.nodeLabelDy\n        );\n    }\n  }\n\n  return { target: svg.node(), ticked };\n}\n","import * as d3 from \"d3\";\n\n/**\n * Default options for forceGraph\n *\n * Original source: https://observablehq.com/@john-guerra/force-directed-graph\n * From 89207a2280891f15@1859.js lines 125-223\n *\n * @param {Object} userOpts - User-provided options to merge\n * @returns {Object} Complete options object with defaults\n */\nexport function getDefaultOpts(userOpts = {}) {\n  const { width = 800, height = 600, invalidation = null } = userOpts;\n\n  return {\n    nodeId: (d) => d?.id, // given d in nodes, returns a unique identifier (string)\n    nodeGroup: undefined, // given d in nodes, returns an (ordinal) value for color\n    nodeGroups: undefined, // an array of ordinal values representing the node groups\n    nodeFill: \"currentColor\", // node stroke fill (if not using a group color encoding)\n    nodeStroke: () => \"#fff\", // node stroke color\n    nodeStrokeWidth: 1.5, // node stroke width, in pixels\n    nodeStrokeOpacity: 1, // node stroke opacity\n    nodeRadius: 3, // node radius, in pixels or a function\n    nodeLabel: undefined, // given d in nodes, a title string\n    nodeLabelFill: \"#333\", // node legend color\n    nodeLabelStroke: null, // node legend stroke color\n    nodeLabelTextAlign: \"center\", // node legend align used in canvas\n    nodeLabelTextAnchor: \"middle\", // used in svg\n    nodeLabelFont: \"8pt sans-serif\",\n    nodeLabelDy: -8, // label dy distance to node center\n    nodeLabelDx: 0, // label dx distance to node center\n    nodeStrength: undefined, // nodeCharge strength\n    linkSource: undefined, // given d in links, returns a node identifier string\n    linkTarget: undefined, // given d in links, returns a node identifier string\n    linkStroke: \"#999\", // link stroke color\n    linkStrokeOpacity: 0.6, // link stroke opacity\n    linkStrokeWidth: 1.5, // given d in links, returns a stroke width in pixels\n    linkStrokeLinecap: \"round\", // link stroke linecap\n    linkStrength: undefined,\n    linkDistance: 10,\n    linkCurve: d3.curveBasis,\n    colors: d3.schemeTableau10, // an array of color strings, for the node groups\n    color: null, // you can provide your own custom d3.scaleOrdinal color scale\n    width, // outer width, in pixels\n    height, // outer height, in pixels\n    invalidation, // when this promise resolves, stop the simulation\n    renderer: \"canvas\", // either \"svg\" or \"canvas\"\n    drawLinksWhenAlphaIs: null, // if set to a number [0,1] will only draw links if alpha is below this number\n    _this: undefined,\n    extent: null, // set to [[0, 0], [width, height]] for a border to avoid nodes leaving the canvas\n    extentForce: \"forceBoundary\", // one of [\"forceBoundary\", \"forceTransport\", \"forceExtent\"]\n    extentBorder: 20, // Size of the border\n    extentStrength: 0.1, // Strength of the border\n    simulationRestartAlpha: 1, // What alpha to set when redrawing\n    forceXStrength: undefined, // if not provided will try to fit in the width height\n    forceYStrength: undefined, // if not provided will try to fit in the width height\n    centeringStrength: 0.01,\n    collide: true,\n    collidePadding: 1,\n    collideIterations: 4,\n    forces: null, // You can pass your own forces using an object {\"forceName\": d3.forceManyBody()}\n    disjoint: true, // Set to false if your network is heavily connected\n    useEdgeBundling: false, // true to use edge bundling\n    edgeBundling: {\n      bundling_stiffness: 0.1, // global bundling constant controlling edge stiffness\n      step_size: 0.1, // init. distance to move points\n      subdivision_rate: 2, // subdivision rate increase\n      cycles: 2, // number of cycles to perform\n      iterations: 90, // init. number of iterations for cycle\n      iterations_rate: 0.6666667, // rate at which iteration number decreases i.e. 2/3\n      compatibility_threshold: 0.2, // which pairs of edges should be considered compatible\n      max_links: 1000, // If your network is large, edgebundling will only apply to these many links\n      min_alpha_to_bundle: 0.6,\n    },\n    useForceInABox: false, // will group by nodeGroup\n    forceInABox: {\n      template: \"force\", // Either treemap or force\n      strength: 0.3, // Strength to foci\n      linkStrengthInterCluster: 0.001, // linkStrength between nodes of different clusters\n      linkStrengthIntraCluster: 0.1, // linkStrength between nodes of the same cluster\n      forceLinkDistance: 100, // linkDistance between meta-nodes on the template (Force template only)\n      forceLinkStrength: 0.1, // linkStrength between meta-nodes of the template (Force template only)\n      forceCharge: -1, // Charge between the meta-nodes (Force template only)\n      forceNodeSize: 10, // Used to compute the template force nodes size (Force template only)\n    },\n    useZoom: true,\n    zoomScaleExtent: [0.1, 20],\n    minDistanceForDrag: 10,\n    autoFit: true, // keep nodes in view using scales\n    keepAspectRatio: false,\n    useSmartLabels: true,\n    smartLabels: {\n      stroke: \"white\", // label stroke color\n      threshold: 2000, // Areas over this size would get labels\n      font: (_d) => \"8pt sans-serif\",\n      hover: true, // Show label of the hovered point\n      onHover: (i) => i, // callback when hovered, will pass the index of the selected element\n      hoverFont: (_d) => \"bolder 8pt sans-serif\",\n      labelsInCentroids: false,\n      backgroundFill: \"#fefefe01\", // What to paint the bg rect of the labels\n      strokeWidth: 5,\n      showVoronoi: false,\n      voronoiStroke: \"#ccc\",\n      showAnchors: false,\n      anchorsStroke: \"orange\",\n      anchorsFill: \"none\",\n      useOcclusion: true,\n      occludedStyle: \"opacity: 0.2\", // css style rules to be used on occluded labels\n    },\n    alphaTarget: 0,\n    debug: false,\n  };\n}\n","import * as d3 from \"d3\";\nimport forceInABox from \"force-in-a-box\";\nimport forceBoundary from \"d3-force-boundary\";\nimport { forceTransport } from \"./forces/forceTransport.js\";\nimport { forceExtent } from \"./forces/forceExtent.js\";\nimport { edgeBundling } from \"./forces/edgeBundling.js\";\nimport { sample } from \"./utils/sample.js\";\nimport { drag } from \"./utils/drag.js\";\nimport { renderCanvas } from \"./renderers/renderCanvas.js\";\nimport { renderSVG } from \"./renderers/renderSVG.js\";\nimport { getDefaultOpts } from \"./defaults.js\";\n\n/**\n * ForceGraph - Core force-directed graph function\n *\n * Original source: https://observablehq.com/@john-guerra/force-directed-graph\n * From 89207a2280891f15@1859.js lines 230-488\n *\n * @param {Object} data - {nodes, links} graph data\n * @param {Object} _opts - User options\n * @returns {HTMLElement} DOM element (SVG or Canvas) with additional properties\n */\nexport function ForceGraph(\n  { nodes, links = [] }, // an iterable of node and link objects\n  _opts = {}\n) {\n  // Validation: Check for required data\n  if (!nodes) {\n    throw new Error(\n      \"netviz: Missing required 'nodes' array in data. \" +\n        \"Expected: ForceGraph({ nodes: [...], links: [...] }, options)\"\n    );\n  }\n\n  if (!Array.isArray(nodes)) {\n    throw new Error(\n      `netviz: 'nodes' must be an array, received ${typeof nodes}. ` +\n        \"Expected: ForceGraph({ nodes: [...], links: [...] }, options)\"\n    );\n  }\n\n  if (nodes.length === 0) {\n    console.warn(\n      \"netviz: Empty 'nodes' array provided. The graph will be empty.\"\n    );\n  }\n\n  if (!Array.isArray(links)) {\n    throw new Error(\n      `netviz: 'links' must be an array, received ${typeof links}. ` +\n        \"Expected: ForceGraph({ nodes: [...], links: [...] }, options)\"\n    );\n  }\n\n  // Validate that nodes have IDs\n  const nodeIdAccessor = _opts.nodeId || ((d) => d?.id);\n  const invalidNodes = nodes.filter((node) => {\n    const id = nodeIdAccessor(node);\n    return id === undefined || id === null;\n  });\n\n  if (invalidNodes.length > 0) {\n    throw new Error(\n      `netviz: ${invalidNodes.length} node(s) are missing an 'id' property. ` +\n        \"All nodes must have an 'id' field. \" +\n        \"Example: { id: 'nodeA', ...otherProps }. \" +\n        \"Or provide a custom nodeId function in options.\"\n    );\n  }\n\n  let opts = {\n    ...getDefaultOpts(_opts),\n    ..._opts,\n    edgeBundling: {\n      ...getDefaultOpts(_opts).edgeBundling,\n      ..._opts.edgeBundling,\n    },\n    forceInABox: {\n      ...getDefaultOpts(_opts).forceInABox,\n      ..._opts.forceInABox,\n    },\n    smartLabels: {\n      ...getDefaultOpts(_opts).smartLabels,\n      ..._opts.smartLabels,\n    },\n  };\n\n  if (opts.nodeRadius && typeof opts.nodeRadius !== \"function\") {\n    const numberNodeRadius = opts.nodeRadius;\n    opts.nodeRadius = () => numberNodeRadius;\n  }\n  if (opts.nodeStroke && typeof opts.nodeStroke !== \"function\") {\n    const nodeStroke = opts.nodeStroke;\n    opts.nodeStroke = () => nodeStroke;\n  }\n\n  // Handle both object references and numeric indices in links\n  opts.linkSource =\n    opts.linkSource ||\n    (({ source }) => {\n      // If source is a number, it's an index into the nodes array\n      if (typeof source === \"number\") {\n        return opts.nodeId(nodes[source]);\n      }\n      // If source is a string, it's already the ID\n      if (typeof source === \"string\") {\n        return source;\n      }\n      // If source is an object, get its ID\n      return opts.nodeId(source) || source;\n    });\n  opts.linkTarget =\n    opts.linkTarget ||\n    (({ target }) => {\n      // If target is a number, it's an index into the nodes array\n      if (typeof target === \"number\") {\n        return opts.nodeId(nodes[target]);\n      }\n      // If target is a string, it's already the ID\n      if (typeof target === \"string\") {\n        return target;\n      }\n      // If target is an object, get its ID\n      return opts.nodeId(target) || target;\n    });\n\n  // Compute values\n  const N = d3.map(nodes, opts.nodeId).map(intern);\n  const LS = d3.map(links, opts.linkSource).map(intern);\n  const LT = d3.map(links, opts.linkTarget).map(intern);\n  const T = opts.nodeLabel == null ? null : d3.map(nodes, opts.nodeLabel);\n  const R = opts.nodeRadius == null ? null : d3.map(nodes, opts.nodeRadius);\n  const G =\n    opts.nodeGroup == null ? null : d3.map(nodes, opts.nodeGroup).map(intern);\n  const NS =\n    opts.nodeStroke == null ? null : d3.map(nodes, opts.nodeStroke).map(intern);\n  const W =\n    typeof opts.linkStrokeWidth !== \"function\"\n      ? null\n      : d3.map(links, opts.linkStrokeWidth);\n  const L =\n    typeof opts.linkStroke !== \"function\"\n      ? null\n      : d3.map(links, opts.linkStroke);\n  const LO =\n    typeof opts.linkStrokeOpacity !== \"function\"\n      ? null\n      : d3.map(links, opts.linkStrokeOpacity);\n\n  opts.x = d3.scaleLinear().domain([0, opts.width]).range([0, opts.width]);\n  opts.y = d3.scaleLinear().domain([0, opts.height]).range([0, opts.height]);\n\n  // Copy nodes\n  if (opts._this?.nodes) {\n    // Make a shallow copy to protect against mutation, while\n    // recycling old nodes to preserve position and velocity\n    const oldNodes = new Map(opts._this?.nodes.map((d) => [d.id, d]));\n    nodes = nodes.map((n, i) =>\n      Object.assign(\n        oldNodes.get(opts.nodeId(n)) || { ...n, id: N[i], groupBy: G && G[i] }\n      )\n    );\n  } else {\n    // Replace the input nodes and links with mutable objects for the simulation\n    nodes = d3.map(nodes, (n, i) => ({\n      ...n,\n      id: N[i],\n      groupBy: G && G[i], // we need the groupBy for forceInABox\n    }));\n  }\n  links = d3.map(links, (_, i) => ({ source: LS[i], target: LT[i] }));\n\n  // Initialize towards the middle\n  for (let n of nodes) {\n    const randomFactor = 3; // how far from the center should nodes be initialized\n    n.x =\n      n.x !== undefined\n        ? n.x\n        : (Math.random() - 0.5) * (opts.width / randomFactor) + opts.width / 2;\n    n.y =\n      n.y !== undefined\n        ? n.y\n        : (Math.random() - 0.5) * (opts.height / randomFactor) +\n          opts.height / 2;\n  }\n\n  // Compute default domains\n  if (G && opts.nodeGroups === undefined) opts.nodeGroups = d3.sort(G);\n\n  // Construct the scales\n  const color = opts.color\n    ? opts.color\n    : opts.nodeGroup == null\n      ? null\n      : d3.scaleOrdinal(opts.nodeGroups, opts.colors);\n\n  let simulation =\n    opts._this?.simulation?.alpha(opts.simulationRestartAlpha)?.restart() ||\n    d3.forceSimulation();\n\n  simulation.nodes(nodes);\n\n  if (opts.forces) {\n    for (let k in opts.forces) {\n      simulation.force(k, opts.forces[k]({ nodes, links }));\n    }\n  } else {\n    // Construct the forces\n    const forceNode = d3.forceManyBody();\n    const forceLink = d3.forceLink(links).id(({ index: i }) => N[i]);\n    if (opts.nodeStrength !== undefined) forceNode.strength(opts.nodeStrength);\n    if (opts.linkStrength !== undefined) forceLink.strength(opts.linkStrength);\n\n    if (opts.forceXStrength === undefined) {\n      opts.forceXStrength = (opts.height / opts.width) * opts.centeringStrength;\n    }\n    if (opts.forceYStrength === undefined) {\n      opts.forceYStrength = (opts.width / opts.height) * opts.centeringStrength;\n    }\n\n    const forceCollide = opts.collide\n      ? d3\n          .forceCollide((_, i) => R[i] + opts.collidePadding)\n          .iterations(opts.collideIterations)\n      : null;\n\n    const forceX = d3.forceX(opts.width / 2).strength(opts.forceXStrength);\n    const forceY = d3.forceY(opts.height / 2).strength(opts.forceYStrength);\n\n    let groupingForce;\n    if (opts.useForceInABox) {\n      groupingForce = forceInABox()\n        .size([opts.width, opts.height - 100])\n        .template(opts.forceInABox.template)\n        .groupBy(\"groupBy\")\n        .strength(opts.forceInABox.strength)\n        .links(links)\n        .linkStrengthInterCluster(opts.forceInABox.linkStrengthInterCluster)\n        .linkStrengthIntraCluster(opts.forceInABox.linkStrengthIntraCluster)\n        .forceLinkDistance(opts.forceInABox.forceLinkDistance)\n        .forceLinkStrength(opts.forceInABox.forceLinkStrength)\n        .forceCharge(opts.forceInABox.forceCharge)\n        .forceNodeSize(opts.forceInABox.forceNodeSize);\n    }\n\n    simulation\n      .force(\n        \"link\",\n        forceLink\n          .distance(opts.linkDistance)\n          .strength(\n            opts.useForceInABox\n              ? groupingForce.getLinkStrength\n              : opts.linkStrength || 0.1\n          )\n      )\n      .force(\"charge\", forceNode)\n      .force(\"x\", opts.useForceInABox ? null : opts.disjoint ? forceX : null)\n      .force(\"y\", opts.useForceInABox ? null : opts.disjoint ? forceY : null)\n      .force(\n        \"center\",\n        opts.useForceInABox\n          ? null\n          : !opts.disjoint\n            ? d3.forceCenter(opts.width / 2, opts.height / 2)\n            : null\n      )\n      .force(\"collide\", forceCollide)\n      .force(\"forceInABox\", opts.useForceInABox ? groupingForce : null);\n  }\n\n  // Edge bundling\n  opts.bundling =\n    opts.useEdgeBundling &&\n    edgeBundling(\n      { nodes, links: sample(links, opts.edgeBundling.max_links) },\n      {\n        ...opts.edgeBundling,\n      }\n    );\n\n  simulation.alphaTarget(opts.alphaTarget).restart();\n\n  if (opts.extent) {\n    simulation.force(\n      \"boundary\",\n      opts.extentForce === \"forceBoundary\"\n        ? forceBoundary(...opts.extent.flat(2))\n            .border(opts.extentBorder)\n            .hardBoundary(true)\n            .strength(opts.extentStrength)\n        : opts.extentForce === \"forceExtent\"\n          ? forceExtent(opts.extent)\n          : forceTransport(opts.extent, 5, opts.extentStrength * 10)\n    );\n  }\n\n  opts = {\n    ...opts,\n    nodes,\n    links,\n    N,\n    LS,\n    LT,\n    T,\n    G,\n    W,\n    L,\n    LO,\n    R,\n    NS,\n    drag,\n    simulation,\n    color,\n  };\n\n  const { target, ticked } =\n    opts.renderer === \"canvas\" ? renderCanvas(opts) : renderSVG(opts);\n\n  simulation.on(\"tick\", ticked);\n\n  if (opts.invalidation) {\n    opts.invalidation.then(() => {\n      simulation.stop();\n    });\n  }\n\n  function intern(value) {\n    return value !== null && typeof value === \"object\"\n      ? value.valueOf()\n      : value;\n  }\n\n  ticked();\n\n  return Object.assign(target, {\n    scales: { color },\n    simulation,\n    nodes,\n    links,\n  });\n}\n","/**\n * filterNetwork - Utility to filter network by nodes/links with ego-network support\n *\n * Original source: https://observablehq.com/@john-guerra/force-directed-graph\n * From 89207a2280891f15@1859.js lines 893-977\n *\n * @param {Object} network - {nodes, links} network data\n * @param {Object} options - Filtering options\n * @returns {Object} Filtered {nodes, links}\n */\nexport function filterNetwork(\n  network,\n  {\n    nodeId = (d) => d.id,\n    byNodes = null,\n    byLinks = null,\n    edgelessNodes = false, // Should we allow nodes without edges?\n    nodesMap,\n    egoDistance = 1,\n    filterSource = true,\n    filterTarget = true,\n  } = {}\n) {\n  nodesMap = nodesMap\n    ? nodesMap\n    : new Map(network.nodes.map((d, i, all) => [nodeId(d, i, all), d]));\n  let res = {\n    nodes: [...network.nodes],\n    links: [...network.links],\n  };\n\n  function filterNodesFromLinks(res) {\n    const ids = [...new Set(res.links.map((l) => [l.source, l.target]).flat())];\n    res.nodes = ids.map((id) => nodesMap.get(id)).filter((d) => d); // undefined when the node is not visible anymore\n\n    return res;\n  }\n\n  function filterLinksFromNodes(\n    { nodes, links },\n    { filterSource = true, filterTarget = true } = {}\n  ) {\n    const ids = new Set(nodes.map(nodeId));\n\n    links = links\n      .filter(\n        ({ source, target }) =>\n          (!filterSource || ids.has(source)) &&\n          (!filterTarget || ids.has(target))\n      )\n      .map((l) => ({ ...l }));\n\n    return { nodes, links };\n  }\n\n  // Filter nodes\n  if (byNodes) {\n    res.nodes = res.nodes.filter(byNodes).map((n) => ({ ...n }));\n  }\n\n  res = filterLinksFromNodes(res, { filterSource, filterTarget });\n\n  // Then links\n  if (byLinks) {\n    res.links = res.links.filter(byLinks).map((l) => ({\n      ...l,\n    }));\n    // Remove edgeless nodes\n    if (!edgelessNodes) {\n      res = filterNodesFromLinks(res, { filterSource, filterTarget });\n    }\n  }\n\n  for (\n    let currentDistance = 1;\n    currentDistance < egoDistance;\n    currentDistance += 1\n  ) {\n    res = filterLinksFromNodes(\n      { nodes: res.nodes, links: network.links },\n      { filterSource, filterTarget: false }\n    );\n\n    res = filterNodesFromLinks(res, { filterSource, filterTarget });\n  }\n\n  return res;\n}\n","/**\n * nodesFromLinks - Creates nodes array from links-only data\n *\n * Useful when data only contains links (like flare-dependencies.json from vega-datasets)\n * and nodes need to be inferred from source/target references.\n *\n * @param {Array<Object>} links - Array of link objects with source/target\n * @param {Object} options - Configuration options\n * @param {function} [options.linkSource] - Extract source from link (default: d => d.source)\n * @param {function} [options.linkTarget] - Extract target from link (default: d => d.target)\n * @param {function} [options.nodeId] - Create node ID from extracted value (default: identity)\n * @param {function} [options.nodeProps] - Additional node properties (receives id, returns object)\n * @returns {Object} { nodes: [...], links: [...] } - Ready for ForceGraph\n *\n * @example\n * // Edge-list only data (like flare-dependencies.json)\n * const edgeData = [{ source: 35, target: 4 }, { source: 190, target: 4 }];\n * const graph = nodesFromLinks(edgeData);\n * // => { nodes: [{ id: 4 }, { id: 35 }, { id: 190 }], links: [...] }\n *\n * @example\n * // With custom node properties\n * const graph = nodesFromLinks(edgeData, {\n *   nodeProps: (id) => ({ id, label: `Node ${id}` })\n * });\n */\nexport function nodesFromLinks(\n  links,\n  {\n    linkSource = (d) => d.source,\n    linkTarget = (d) => d.target,\n    nodeId = (v) => v,\n    nodeProps = (id) => ({ id }),\n  } = {}\n) {\n  if (!Array.isArray(links)) {\n    throw new Error(\"nodesFromLinks: links must be an array\");\n  }\n\n  // Extract unique node identifiers from links\n  const nodeSet = new Set();\n  for (const link of links) {\n    const sourceId = nodeId(linkSource(link));\n    const targetId = nodeId(linkTarget(link));\n    if (sourceId !== undefined && sourceId !== null) nodeSet.add(sourceId);\n    if (targetId !== undefined && targetId !== null) nodeSet.add(targetId);\n  }\n\n  // Create nodes array with optional properties\n  const nodes = Array.from(nodeSet).map(nodeProps);\n\n  return { nodes, links: [...links] };\n}\n","/**\n * mapProperties - Maps property names in nodes and/or links\n *\n * Useful when data uses different property names than netviz expects\n * (e.g., 'name' instead of 'id', 'weight' instead of 'value').\n *\n * @param {Object} network - { nodes, links } network data\n * @param {Object} options - Mapping configuration\n * @param {Object} [options.nodes] - Node property mappings { to: from } or { to: accessor }\n * @param {Object} [options.links] - Link property mappings { to: from } or { to: accessor }\n * @returns {Object} { nodes, links } with mapped properties\n *\n * @example\n * // Simple property rename (value is the source property name)\n * const mapped = mapProperties(data, {\n *   nodes: { id: 'name', group: 'country' }\n * });\n *\n * @example\n * // With accessor functions\n * const mapped = mapProperties(data, {\n *   nodes: {\n *     id: d => d.name,\n *     label: d => d.fullName || d.name,\n *     group: d => d.category\n *   },\n *   links: {\n *     value: d => d.weight || 1\n *   }\n * });\n */\nexport function mapProperties(\n  network,\n  { nodes: nodeMapping = {}, links: linkMapping = {} } = {}\n) {\n  if (!network || !network.nodes) {\n    throw new Error(\"mapProperties: network must have a nodes array\");\n  }\n\n  function applyMapping(item, mapping) {\n    const result = { ...item };\n    for (const [to, from] of Object.entries(mapping)) {\n      if (typeof from === \"function\") {\n        result[to] = from(item);\n      } else if (typeof from === \"string\" && from in item) {\n        result[to] = item[from];\n        // Remove old property if renamed (but not if mapping to same name)\n        if (to !== from) delete result[from];\n      }\n    }\n    return result;\n  }\n\n  return {\n    nodes: network.nodes.map((n) => applyMapping(n, nodeMapping)),\n    links: (network.links || []).map((l) => applyMapping(l, linkMapping)),\n  };\n}\n","/**\n * resolveIndexLinks - Resolves numeric array indices in links to node IDs\n *\n * Useful when links reference nodes by their array position (index)\n * rather than by ID. Converts to ID-based references for consistency.\n *\n * Note: ForceGraph already handles numeric indices internally, so this\n * utility is mainly for users who want to pre-process data or chain\n * with other transformations.\n *\n * @param {Object} network - { nodes, links } network data\n * @param {Object} options - Configuration options\n * @param {function} [options.nodeId] - Extract ID from node (default: d => d.id)\n * @param {function} [options.linkSource] - Extract source from link (default: d => d.source)\n * @param {function} [options.linkTarget] - Extract target from link (default: d => d.target)\n * @returns {Object} { nodes, links } with resolved references\n *\n * @example\n * const data = {\n *   nodes: [{ id: 'A' }, { id: 'B' }, { id: 'C' }],\n *   links: [{ source: 0, target: 1 }, { source: 1, target: 2 }]\n * };\n * const resolved = resolveIndexLinks(data);\n * // => { nodes: [...], links: [{ source: 'A', target: 'B' }, { source: 'B', target: 'C' }] }\n */\nexport function resolveIndexLinks(\n  network,\n  {\n    nodeId = (d) => d.id,\n    linkSource = (d) => d.source,\n    linkTarget = (d) => d.target,\n  } = {}\n) {\n  if (!network || !network.nodes) {\n    throw new Error(\"resolveIndexLinks: network must have a nodes array\");\n  }\n\n  const nodes = network.nodes;\n\n  const links = (network.links || []).map((link) => {\n    const source = linkSource(link);\n    const target = linkTarget(link);\n\n    return {\n      ...link,\n      source: typeof source === \"number\" ? nodeId(nodes[source]) : source,\n      target: typeof target === \"number\" ? nodeId(nodes[target]) : target,\n    };\n  });\n\n  return { nodes: [...nodes], links };\n}\n","/**\n * computeNodeGroups - Computes node groups/clusters from network topology\n *\n * Useful when nodes lack group/cluster information. Can compute groups using:\n * - 'connected': Connected component membership\n * - 'degree': Degree-based binning (low/medium/high connectivity)\n * - custom function\n *\n * @param {Object} network - { nodes, links } network data\n * @param {Object} options - Configuration options\n * @param {string|function} [options.method='connected'] - Grouping method\n * @param {string} [options.groupProperty='group'] - Property name to add\n * @param {function} [options.nodeId] - Extract ID from node (default: d => d.id)\n * @param {function} [options.linkSource] - Extract source from link (default: d => d.source)\n * @param {function} [options.linkTarget] - Extract target from link (default: d => d.target)\n * @returns {Object} { nodes, links } with group property added to nodes\n *\n * @example\n * // Group by connected components\n * const grouped = computeNodeGroups(data);\n * // => nodes now have { id: 'A', group: 0 }, { id: 'B', group: 0 }, { id: 'C', group: 1 }\n *\n * @example\n * // Group by node degree\n * const grouped = computeNodeGroups(data, { method: 'degree' });\n *\n * @example\n * // Custom grouping function\n * const grouped = computeNodeGroups(data, {\n *   method: (node, index, nodes, links, degrees) => {\n *     return degrees.get(node.id) > 5 ? 'hub' : 'leaf';\n *   }\n * });\n */\nexport function computeNodeGroups(\n  network,\n  {\n    method = \"connected\",\n    groupProperty = \"group\",\n    nodeId = (d) => d.id,\n    linkSource = (d) => (typeof d.source === \"object\" ? d.source.id : d.source),\n    linkTarget = (d) => (typeof d.target === \"object\" ? d.target.id : d.target),\n  } = {}\n) {\n  if (!network || !network.nodes) {\n    throw new Error(\"computeNodeGroups: network must have a nodes array\");\n  }\n\n  const { nodes, links = [] } = network;\n\n  // Build node ID list and index map\n  const nodeIds = nodes.map(nodeId);\n  const idToIndex = new Map(nodeIds.map((id, i) => [id, i]));\n\n  // Compute degrees (useful for multiple methods)\n  const degrees = new Map(nodeIds.map((id) => [id, 0]));\n  for (const link of links) {\n    const src = linkSource(link);\n    const tgt = linkTarget(link);\n    if (degrees.has(src)) degrees.set(src, degrees.get(src) + 1);\n    if (degrees.has(tgt)) degrees.set(tgt, degrees.get(tgt) + 1);\n  }\n\n  let groupFn;\n\n  if (typeof method === \"function\") {\n    // Custom function receives node, index, all nodes, all links, and degrees map\n    groupFn = (node, i) => method(node, i, nodes, links, degrees);\n  } else if (method === \"connected\") {\n    // Union-Find for connected components\n    const parent = nodeIds.map((_, i) => i);\n    const find = (i) => (parent[i] === i ? i : (parent[i] = find(parent[i])));\n    const union = (a, b) => {\n      parent[find(a)] = find(b);\n    };\n\n    for (const link of links) {\n      const si = idToIndex.get(linkSource(link));\n      const ti = idToIndex.get(linkTarget(link));\n      if (si !== undefined && ti !== undefined) union(si, ti);\n    }\n\n    // Normalize component IDs to 0, 1, 2...\n    const componentMap = new Map();\n    let nextGroup = 0;\n    groupFn = (node, i) => {\n      const root = find(i);\n      if (!componentMap.has(root)) {\n        componentMap.set(root, nextGroup++);\n      }\n      return componentMap.get(root);\n    };\n  } else if (method === \"degree\") {\n    // Bin nodes by degree into low/medium/high\n    const maxDegree = Math.max(...degrees.values(), 1);\n    groupFn = (node) => {\n      const degree = degrees.get(nodeId(node)) || 0;\n      // Create 4 bins: 0, 1, 2, 3\n      return Math.min(3, Math.floor((degree / maxDegree) * 4));\n    };\n  } else {\n    throw new Error(\n      `computeNodeGroups: unknown method \"${method}\". Use \"connected\", \"degree\", or a function.`\n    );\n  }\n\n  const groupedNodes = nodes.map((node, i) => ({\n    ...node,\n    [groupProperty]: groupFn(node, i),\n  }));\n\n  return { nodes: groupedNodes, links: [...links] };\n}\n","/**\n * prepareNetwork - Convenience function that auto-detects and applies transformations\n *\n * Intelligently prepares network data for ForceGraph by:\n * 1. Creating nodes from links if nodes array is missing\n * 2. Applying property mappings\n * 3. Computing groups if requested\n *\n * @param {Object|Array} data - Network data or links-only array\n * @param {Object} options - Transformation options\n * @param {Object} [options.nodeMapping] - Property mappings for nodes { to: from }\n * @param {Object} [options.linkMapping] - Property mappings for links { to: from }\n * @param {string|function} [options.groupMethod] - Method for computing groups ('connected', 'degree', or function)\n * @param {string} [options.groupProperty='group'] - Property name for computed groups\n * @param {function} [options.nodeId] - Node ID accessor (default: d => d.id)\n * @param {function} [options.nodeProps] - Create node properties from ID (for edge-only data)\n * @param {function} [options.linkSource] - Extract source from link (default: d => d.source)\n * @param {function} [options.linkTarget] - Extract target from link (default: d => d.target)\n * @returns {Object} { nodes, links } ready for ForceGraph\n *\n * @example\n * // Auto-detect and prepare edge-only data\n * const data = [{ source: 0, target: 1 }, { source: 1, target: 2 }];\n * const graph = prepareNetwork(data);\n *\n * @example\n * // Prepare with property mappings\n * const graph = prepareNetwork(rawData, {\n *   nodeMapping: { id: 'name', group: 'country' },\n *   groupMethod: 'connected'\n * });\n *\n * @example\n * // Full transformation pipeline\n * const graph = prepareNetwork(edgeData, {\n *   nodeProps: (id) => ({ id, label: `Node ${id}` }),\n *   groupMethod: 'degree',\n *   groupProperty: 'cluster'\n * });\n */\nimport { nodesFromLinks } from \"./nodesFromLinks.js\";\nimport { mapProperties } from \"./mapProperties.js\";\nimport { computeNodeGroups } from \"./computeNodeGroups.js\";\n\nexport function prepareNetwork(\n  data,\n  {\n    nodeMapping,\n    linkMapping,\n    groupMethod,\n    groupProperty = \"group\",\n    nodeId = (d) => d.id,\n    nodeProps,\n    linkSource = (d) => d.source,\n    linkTarget = (d) => d.target,\n  } = {}\n) {\n  let network;\n\n  // Step 1: Handle edge-only data (array input or missing nodes)\n  if (Array.isArray(data)) {\n    // Data is just an array of links\n    network = nodesFromLinks(data, {\n      linkSource,\n      linkTarget,\n      nodeProps: nodeProps || ((id) => ({ id })),\n    });\n  } else if (!data.nodes || data.nodes.length === 0) {\n    // Data has links property but no nodes\n    network = nodesFromLinks(data.links || [], {\n      linkSource,\n      linkTarget,\n      nodeProps: nodeProps || ((id) => ({ id })),\n    });\n  } else {\n    // Data already has nodes and links\n    network = {\n      nodes: [...data.nodes],\n      links: [...(data.links || [])],\n    };\n  }\n\n  // Step 2: Apply property mappings if provided\n  if (nodeMapping || linkMapping) {\n    network = mapProperties(network, {\n      nodes: nodeMapping,\n      links: linkMapping,\n    });\n  }\n\n  // Step 3: Compute groups if requested\n  if (groupMethod) {\n    network = computeNodeGroups(network, {\n      method: groupMethod,\n      groupProperty,\n      nodeId,\n      linkSource,\n      linkTarget,\n    });\n  }\n\n  return network;\n}\n","/**\n * netviz - Network Visualization Library\n *\n * A collection of network visualization widgets supporting multiple rendering modes\n * and layout algorithms. Currently includes force-directed graphs with SVG and Canvas\n * rendering, edge bundling, grouping layouts, and reactive widgets integration.\n *\n * Based on: https://observablehq.com/@john-guerra/force-directed-graph\n * Follows reactive widgets pattern from: https://reactivewidgets.org\n */\n\nimport { ForceGraph as ForceGraphCore } from \"./forceGraph.js\";\n\n/**\n * ForceGraph - Force-directed graph visualization widget\n *\n * @param {Object} data - {nodes, links} graph data\n * @param {Object} options - Configuration options\n * @returns {HTMLElement} DOM element with .value property, .update(), .destroy() methods\n *\n * @example\n * const graph = ForceGraph(data, {\n *   width: 800,\n *   height: 600,\n *   renderer: \"svg\" // or \"canvas\"\n * });\n * document.body.appendChild(graph);\n *\n * // Update later\n * graph.update(newData);\n *\n * // Cleanup\n * graph.destroy();\n *\n * // Observable compatibility\n * ForceGraph(data, { invalidation, _this });\n */\nexport function ForceGraph(data, options = {}) {\n  // Create the graph using the core ForceGraph function\n  const element = ForceGraphCore(data, options);\n\n  // Add reactive widgets properties and methods\n\n  // .value property for selected nodes/edges (TODO: implement selection)\n  element.value = null;\n\n  /**\n   * update - Update the graph with new data or options\n   * @param {Object} newData - New {nodes, links} data\n   * @param {Object} newOptions - New options to merge\n   */\n  element.update = function (newData, newOptions = {}) {\n    // Preserve the current element and simulation by passing _this\n    const mergedOptions = {\n      ...options,\n      ...newOptions,\n      _this: element,\n    };\n\n    // Re-create the graph with preserved state\n    const updated = ForceGraphCore(newData, mergedOptions);\n\n    // Update the element's properties\n    element.simulation = updated.simulation;\n    element.nodes = updated.nodes;\n    element.links = updated.links;\n    element.scales = updated.scales;\n\n    return element;\n  };\n\n  /**\n   * destroy - Cleanup and stop the simulation\n   */\n  element.destroy = function () {\n    if (element.simulation) {\n      element.simulation.stop();\n    }\n    // Remove event listeners if any\n    // (TODO: add event listeners and clean them up here)\n  };\n\n  // Emit input events when user interacts\n  // (TODO: implement selection and event emission)\n\n  return element;\n}\n\n/**\n * NodeLink - Alias for ForceGraph (node-link diagrams)\n * Provides a semantic name for force-directed node-link visualizations\n */\nexport const NodeLink = ForceGraph;\n\n// Re-export utility functions for advanced usage\nexport { ForceGraph as ForceGraphCore } from \"./forceGraph.js\";\nexport { forceTransport } from \"./forces/forceTransport.js\";\nexport { forceExtent } from \"./forces/forceExtent.js\";\nexport { edgeBundling, ForceEdgeBundling } from \"./forces/edgeBundling.js\";\nexport { filterNetwork } from \"./utils/filterNetwork.js\";\n\n// Data transformation utilities\nexport { nodesFromLinks } from \"./utils/nodesFromLinks.js\";\nexport { mapProperties } from \"./utils/mapProperties.js\";\nexport { resolveIndexLinks } from \"./utils/resolveIndexLinks.js\";\nexport { computeNodeGroups } from \"./utils/computeNodeGroups.js\";\nexport { prepareNetwork } from \"./utils/prepareNetwork.js\";\n"],"names":["ForceGraph","ForceGraphCore"],"mappings":"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","x_google_ignoreList":[0,1,9]}