@memnest/ui-core 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/layout-worker.ts","../../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/add.js","../../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/cover.js","../../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/data.js","../../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/extent.js","../../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/quad.js","../../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/find.js","../../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/remove.js","../../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/root.js","../../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/size.js","../../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/visit.js","../../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/visitAfter.js","../../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/x.js","../../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/y.js","../../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/quadtree.js","../../../node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/constant.js","../../../node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/jiggle.js","../../../node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/collide.js","../../../node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/link.js","../../../node_modules/.pnpm/d3-dispatch@3.0.1/node_modules/d3-dispatch/src/dispatch.js","../../../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timer.js","../../../node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/lcg.js","../../../node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/simulation.js","../../../node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/manyBody.js","../../../node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/x.js","../../../node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/y.js","../src/layout/force.ts","../src/layout/layered.ts","../src/layout/index.ts","../src/layout/runner.ts"],"sourcesContent":["/**\n * Worker entry: `new Worker(new URL('@memnest/ui-core/layout-worker', import.meta.url), { type: 'module' })`,\n * then `createWorkerLayoutRunner(worker)`.\n */\nimport { serveLayoutRequests, type MessagePortLike } from './layout/runner';\n\ndeclare const self: MessagePortLike | undefined;\n\nif (typeof self !== 'undefined' && typeof self.postMessage === 'function') serveLayoutRequests(self);\n\nexport { serveLayoutRequests };\n","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n","import { forceCollide, forceLink, forceManyBody, forceSimulation, forceX, forceY, type SimulationLinkDatum, type SimulationNodeDatum } from 'd3-force';\nimport type { Point } from '../geometry';\nimport type { LayoutEdge, LayoutNode } from './types';\n\nexport interface ForceOptions {\n /** Simulation ticks. Default 300, fewer for large graphs. */\n iterations?: number;\n /** Seed for the simulation's randomness. Same seed, same input, same output. Default 1. */\n seed?: number;\n /** Starting positions, e.g. the previous layout, so nodes stay where the user saw them. */\n initial?: ReadonlyMap<string, Point> | ReadonlyArray<[string, Point]>;\n /** Default 36. */\n linkDistance?: number;\n /** Many-body strength per node. Default -40. */\n charge?: number;\n /** Extra space kept around each node. Default 2. */\n collidePadding?: number;\n /** Collision passes per tick; more keeps large circles apart. Default 1. */\n collideIterations?: number;\n}\n\ninterface SimNode extends SimulationNodeDatum {\n id: string;\n r: number;\n}\n\n/**\n * A seeded generator in [0, 1) (mulberry32). Not a plain LCG: consecutive LCG outputs are correlated,\n * so (angle, radius) pairs fall on lattice lines and a scatter comes out as visible spiral arms.\n */\nexport function seededRandom(seed: number): () => number {\n let state = seed >>> 0;\n return () => {\n state = (state + 0x6d2b79f5) >>> 0;\n let t = state;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\n/** d3-force layout run to completion off-screen: link, many-body, collision and weak centring. */\nexport function forceLayout(nodes: readonly LayoutNode[], edges: readonly LayoutEdge[], options: ForceOptions = {}): Map<string, Point> {\n const initial = options.initial instanceof Map ? options.initial : new Map(options.initial ?? []);\n // Unplaced nodes start scattered in a disk sized for their count. d3's default spiral leaves visible rings\n // when most nodes are unconnected, because nothing pulls them out of it.\n const scatter = seededRandom((options.seed ?? 1) * 7919);\n const disk = Math.sqrt(nodes.length) * ((options.linkDistance ?? 36) * 0.9);\n const simNodes: SimNode[] = nodes.map((n) => {\n const start = initial.get(n.id);\n if (start) return { id: n.id, r: n.r ?? 6, x: start.x, y: start.y };\n const angle = scatter() * Math.PI * 2;\n const radius = Math.sqrt(scatter()) * disk;\n return { id: n.id, r: n.r ?? 6, x: Math.cos(angle) * radius, y: Math.sin(angle) * radius };\n });\n const ids = new Set(simNodes.map((n) => n.id));\n const links: Array<SimulationLinkDatum<SimNode>> = edges\n .filter((e) => ids.has(e.from) && ids.has(e.to) && e.from !== e.to)\n .map((e) => ({ source: e.from, target: e.to }));\n\n const n = simNodes.length;\n const iterations = options.iterations ?? (n > 1000 ? 240 : 300);\n const simulation = forceSimulation<SimNode>(simNodes)\n .randomSource(seededRandom(options.seed ?? 1))\n .alphaDecay(1 - Math.pow(0.001, 1 / iterations))\n .force(\n 'link',\n forceLink<SimNode, SimulationLinkDatum<SimNode>>(links)\n .id((d) => d.id)\n .distance(options.linkDistance ?? 36)\n .strength(0.6),\n )\n // No distanceMax: a cutoff leaves circular seams at that radius (rings of nodes) in large, sparse graphs.\n .force('charge', forceManyBody<SimNode>().strength(options.charge ?? -40).theta(0.9))\n .force('collide', forceCollide<SimNode>((d) => d.r + (options.collidePadding ?? 2)).iterations(options.collideIterations ?? 1))\n .force('x', forceX<SimNode>(0).strength(0.04))\n .force('y', forceY<SimNode>(0).strength(0.04))\n .stop();\n for (let i = 0; i < iterations; i++) simulation.tick();\n\n const positions = new Map<string, Point>();\n for (const node of simNodes) positions.set(node.id, { x: Math.round(node.x! * 10) / 10, y: Math.round(node.y! * 10) / 10 });\n return positions;\n}\n","import type { Point } from '../geometry';\nimport type { LayoutEdge, LayoutNode } from './types';\n\nexport interface LayeredOptions {\n /** Distance between layers (x). Default 220. */\n layerGap?: number;\n /** Distance between nodes in a layer (y). Default 84. */\n nodeGap?: number;\n /** Barycentre ordering passes. Default 6. */\n sweeps?: number;\n}\n\n/**\n * A Sugiyama-style layered layout for small DAGs (lineage): longest-path layering, so every edge\n * points to a later layer; barycentre sweeps to reduce crossings; even spacing within a layer.\n * Deterministic: the same input always yields the same positions. Edges run left → right,\n * `from` in an earlier layer than `to`. Edges that would close a cycle are ignored.\n */\nexport function layeredLayout(nodes: readonly LayoutNode[], edges: readonly LayoutEdge[], options: LayeredOptions = {}): Map<string, Point> {\n const layerGap = options.layerGap ?? 220;\n const nodeGap = options.nodeGap ?? 84;\n const sweeps = options.sweeps ?? 6;\n\n const ids = nodes.map((n) => n.id);\n const known = new Set(ids);\n const out = new Map<string, string[]>(ids.map((id) => [id, []]));\n const incoming = new Map<string, string[]>(ids.map((id) => [id, []]));\n for (const { from, to } of edges) {\n if (!known.has(from) || !known.has(to) || from === to) continue;\n out.get(from)!.push(to);\n incoming.get(to)!.push(from);\n }\n\n // Longest-path layering over a topological order (Kahn). Nodes left in a cycle keep layer 0.\n const layer = new Map<string, number>(ids.map((id) => [id, 0]));\n const remaining = new Map(ids.map((id) => [id, incoming.get(id)!.length]));\n const queue = ids.filter((id) => remaining.get(id) === 0);\n const acyclicOut = new Map<string, string[]>(ids.map((id) => [id, []]));\n for (let i = 0; i < queue.length; i++) {\n const id = queue[i]!;\n for (const to of out.get(id)!) {\n layer.set(to, Math.max(layer.get(to)!, layer.get(id)! + 1));\n acyclicOut.get(id)!.push(to);\n remaining.set(to, remaining.get(to)! - 1);\n if (remaining.get(to) === 0) queue.push(to);\n }\n }\n\n const layers: string[][] = [];\n for (const id of ids) {\n const l = layer.get(id)!;\n (layers[l] ??= []).push(id);\n }\n const predecessors = new Map<string, string[]>(ids.map((id) => [id, []]));\n for (const [from, tos] of acyclicOut) for (const to of tos) predecessors.get(to)!.push(from);\n\n const position = new Map<string, number>();\n const index = () => layers.forEach((members) => members.forEach((id, i) => position.set(id, i)));\n index();\n const barycentre = (neighbours: string[], fallback: number) =>\n neighbours.length === 0 ? fallback : neighbours.reduce((sum, n) => sum + position.get(n)!, 0) / neighbours.length;\n for (let sweep = 0; sweep < sweeps; sweep++) {\n const down = sweep % 2 === 0;\n const order = down ? layers.slice(1) : layers.slice(0, -1).reverse();\n for (const members of order) {\n const keyed = members.map((id, i) => ({\n id,\n i,\n key: barycentre(down ? predecessors.get(id)! : acyclicOut.get(id)!, position.get(id)!),\n }));\n keyed.sort((a, z) => a.key - z.key || a.i - z.i);\n members.splice(0, members.length, ...keyed.map((k) => k.id));\n members.forEach((id, i) => position.set(id, i));\n }\n }\n\n const positions = new Map<string, Point>();\n layers.forEach((members, l) => {\n members.forEach((id, i) => positions.set(id, { x: l * layerGap, y: (i - (members.length - 1) / 2) * nodeGap }));\n });\n return positions;\n}\n","import type { Point } from '../geometry';\nimport { forceLayout, type ForceOptions } from './force';\nimport { layeredLayout, type LayeredOptions } from './layered';\nimport type { LayoutEdge, LayoutNode } from './types';\n\nexport type LayoutRequest =\n | { algorithm: 'force'; nodes: LayoutNode[]; edges: LayoutEdge[]; options?: Omit<ForceOptions, 'initial'> & { initial?: Array<[string, Point]> } }\n | { algorithm: 'layered'; nodes: LayoutNode[]; edges: LayoutEdge[]; options?: LayeredOptions };\n\n/** d3-force for the global graph, a layered (Sugiyama-style) layout for lineage DAGs. */\nexport function computeLayout(nodes: readonly LayoutNode[], edges: readonly LayoutEdge[], opts: { algorithm: 'force' } & ForceOptions): Map<string, Point>;\nexport function computeLayout(nodes: readonly LayoutNode[], edges: readonly LayoutEdge[], opts: { algorithm: 'layered' } & LayeredOptions): Map<string, Point>;\nexport function computeLayout(\n nodes: readonly LayoutNode[],\n edges: readonly LayoutEdge[],\n opts: ({ algorithm: 'force' } & ForceOptions) | ({ algorithm: 'layered' } & LayeredOptions),\n): Map<string, Point> {\n return opts.algorithm === 'layered' ? layeredLayout(nodes, edges, opts) : forceLayout(nodes, edges, opts);\n}\n\nexport function runLayoutRequest(request: LayoutRequest): Map<string, Point> {\n return request.algorithm === 'layered'\n ? layeredLayout(request.nodes, request.edges, request.options)\n : forceLayout(request.nodes, request.edges, request.options);\n}\n\nexport { forceLayout, seededRandom, type ForceOptions } from './force';\nexport { layeredLayout, type LayeredOptions } from './layered';\nexport type { LayoutEdge, LayoutNode } from './types';\n","import type { Point } from '../geometry';\nimport { runLayoutRequest, type LayoutRequest } from './index';\n\n/** Above this many nodes, layout runs off the main thread when a worker is available. */\nexport const WORKER_LAYOUT_THRESHOLD = 500;\n\nexport interface LayoutRunner {\n run(request: LayoutRequest): Promise<Map<string, Point>>;\n dispose?(): void;\n}\n\n/**\n * Runs layout on the calling thread, after yielding once so the caller's \"laying out\" state can\n * render first. The default, and what tests use; browsers should use a worker for large graphs.\n */\nexport const inlineLayoutRunner: LayoutRunner = {\n run: async (request) => {\n await new Promise<void>((resolve) => setTimeout(resolve, 0));\n return runLayoutRequest(request);\n },\n};\n\n/** The subset of Worker (main side) or the worker global (worker side) the protocol needs. */\nexport interface MessagePortLike {\n postMessage(message: unknown): void;\n addEventListener(type: 'message', listener: (event: { data: unknown }) => void): void;\n removeEventListener(type: 'message', listener: (event: { data: unknown }) => void): void;\n terminate?(): void;\n}\n\nexport interface LayoutMessage {\n id: number;\n request: LayoutRequest;\n}\n\nexport type LayoutReply = { id: number; ids: string[]; coords: Float64Array } | { id: number; error: string };\n\nexport function encodePositions(positions: Map<string, Point>): { ids: string[]; coords: Float64Array } {\n const ids = [...positions.keys()];\n const coords = new Float64Array(ids.length * 2);\n ids.forEach((id, i) => {\n const p = positions.get(id)!;\n coords[i * 2] = p.x;\n coords[i * 2 + 1] = p.y;\n });\n return { ids, coords };\n}\n\nexport function decodePositions(ids: string[], coords: Float64Array): Map<string, Point> {\n const positions = new Map<string, Point>();\n ids.forEach((id, i) => positions.set(id, { x: coords[i * 2]!, y: coords[i * 2 + 1]! }));\n return positions;\n}\n\n/** Worker side: answers layout requests. `@memnest/ui-core/layout-worker` calls this on the worker global. */\nexport function serveLayoutRequests(port: MessagePortLike): () => void {\n const listener = (event: { data: unknown }) => {\n const { id, request } = event.data as LayoutMessage;\n try {\n const { ids, coords } = encodePositions(runLayoutRequest(request));\n port.postMessage({ id, ids, coords } satisfies LayoutReply);\n } catch (error) {\n port.postMessage({ id, error: error instanceof Error ? error.message : String(error) } satisfies LayoutReply);\n }\n };\n port.addEventListener('message', listener);\n return () => port.removeEventListener('message', listener);\n}\n\n/**\n * Main side: small layouts run inline (posting would cost more than it saves); large ones are\n * sent to the worker, so a 2,000-node force layout never blocks input or painting.\n */\nexport function createWorkerLayoutRunner(port: MessagePortLike, options: { threshold?: number } = {}): LayoutRunner {\n const threshold = options.threshold ?? WORKER_LAYOUT_THRESHOLD;\n const pending = new Map<number, { resolve: (p: Map<string, Point>) => void; reject: (e: Error) => void }>();\n let nextId = 0;\n const listener = (event: { data: unknown }) => {\n const reply = event.data as LayoutReply;\n const waiter = pending.get(reply.id);\n if (!waiter) return;\n pending.delete(reply.id);\n if ('error' in reply) waiter.reject(new Error(reply.error));\n else waiter.resolve(decodePositions(reply.ids, reply.coords));\n };\n port.addEventListener('message', listener);\n return {\n run(request) {\n if (request.nodes.length < threshold) return inlineLayoutRunner.run(request);\n const id = ++nextId;\n return new Promise((resolve, reject) => {\n pending.set(id, { resolve, reject });\n port.postMessage({ id, request } satisfies LayoutMessage);\n });\n },\n dispose() {\n port.removeEventListener('message', listener);\n for (const waiter of pending.values()) waiter.reject(new Error('layout runner disposed'));\n pending.clear();\n port.terminate?.();\n },\n };\n}\n"],"mappings":"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","names":["x","y","x","y","x","y","x2","y2","x3","y3","x","y","x","y","x","x","y","x","y","m","i","c","now","x","y","x","y","node","strength","c","x2","x_default","x","y_default","y","n","x_default","y_default","index","a"]}
@@ -0,0 +1 @@
1
+ export { m as serveLayoutRequests } from './layout-worker-CLScIQSu.cjs';
@@ -0,0 +1 @@
1
+ export { m as serveLayoutRequests } from './layout-worker-CLScIQSu.js';
@@ -0,0 +1,10 @@
1
+ import {
2
+ serveLayoutRequests
3
+ } from "./chunk-JCMPD6YF.js";
4
+
5
+ // src/layout-worker.ts
6
+ if (typeof self !== "undefined" && typeof self.postMessage === "function") serveLayoutRequests(self);
7
+ export {
8
+ serveLayoutRequests
9
+ };
10
+ //# sourceMappingURL=layout-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/layout-worker.ts"],"sourcesContent":["/**\n * Worker entry: `new Worker(new URL('@memnest/ui-core/layout-worker', import.meta.url), { type: 'module' })`,\n * then `createWorkerLayoutRunner(worker)`.\n */\nimport { serveLayoutRequests, type MessagePortLike } from './layout/runner';\n\ndeclare const self: MessagePortLike | undefined;\n\nif (typeof self !== 'undefined' && typeof self.postMessage === 'function') serveLayoutRequests(self);\n\nexport { serveLayoutRequests };\n"],"mappings":";;;;;AAQA,IAAI,OAAO,SAAS,eAAe,OAAO,KAAK,gBAAgB,WAAY,qBAAoB,IAAI;","names":[]}
package/package.json ADDED
@@ -0,0 +1,81 @@
1
+ {
2
+ "name": "@memnest/ui-core",
3
+ "version": "0.0.0",
4
+ "description": "Framework-free UI logic for Memnest: controllers, graph layout, clustering, viewport math and canvas drawing.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/anidoesdev/MemNest.git",
9
+ "directory": "packages/ui-core"
10
+ },
11
+ "homepage": "https://github.com/anidoesdev/MemNest/tree/main/packages/ui-core#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/anidoesdev/MemNest/issues"
14
+ },
15
+ "keywords": [
16
+ "memnest",
17
+ "memory",
18
+ "ai-agents",
19
+ "llm",
20
+ "ui",
21
+ "graph",
22
+ "visualization"
23
+ ],
24
+ "publishConfig": {
25
+ "access": "public"
26
+ },
27
+ "type": "module",
28
+ "sideEffects": [
29
+ "./dist/layout-worker.js",
30
+ "./dist/layout-worker.cjs"
31
+ ],
32
+ "engines": {
33
+ "node": ">=20"
34
+ },
35
+ "main": "./dist/index.cjs",
36
+ "module": "./dist/index.js",
37
+ "types": "./dist/index.d.ts",
38
+ "exports": {
39
+ ".": {
40
+ "import": {
41
+ "types": "./dist/index.d.ts",
42
+ "default": "./dist/index.js"
43
+ },
44
+ "require": {
45
+ "types": "./dist/index.d.cts",
46
+ "default": "./dist/index.cjs"
47
+ }
48
+ },
49
+ "./layout-worker": {
50
+ "import": {
51
+ "types": "./dist/layout-worker.d.ts",
52
+ "default": "./dist/layout-worker.js"
53
+ },
54
+ "require": {
55
+ "types": "./dist/layout-worker.d.cts",
56
+ "default": "./dist/layout-worker.cjs"
57
+ }
58
+ },
59
+ "./package.json": "./package.json"
60
+ },
61
+ "files": [
62
+ "dist"
63
+ ],
64
+ "dependencies": {
65
+ "@memnest/core": "^0.1.0"
66
+ },
67
+ "devDependencies": {
68
+ "@types/d3-force": "^3.0.10",
69
+ "@types/d3-quadtree": "^3.0.6",
70
+ "d3-force": "^3.0.0",
71
+ "d3-quadtree": "^3.0.1",
72
+ "@memnest/cli": "0.1.0",
73
+ "@memnest/store-sqlite": "0.1.0"
74
+ },
75
+ "scripts": {
76
+ "build": "tsup",
77
+ "typecheck": "tsc -p tsconfig.json && tsc -p tsconfig.test.json",
78
+ "test": "vitest run",
79
+ "lint:pkg": "publint && attw --pack . --profile node16"
80
+ }
81
+ }