@graphty/cytoscape-extensions 0.0.28 → 0.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/algorithm-options.d.ts +5 -0
  2. package/dist/algorithm-options.d.ts.map +1 -0
  3. package/dist/algorithm-options.js +285 -0
  4. package/dist/algorithm-options.js.map +1 -0
  5. package/dist/algorithms.d.ts +489 -0
  6. package/dist/algorithms.d.ts.map +1 -0
  7. package/dist/algorithms.js +1184 -0
  8. package/dist/algorithms.js.map +1 -0
  9. package/dist/cdn/chunks/elements-DIunzJUl.js +1 -0
  10. package/dist/cdn/chunks/gpu-platform-browser-DnQwf3s0.js +2825 -0
  11. package/dist/cdn/chunks/index-C-jUF_Ve.js +1 -0
  12. package/dist/cdn/chunks/index-C4RZkds_.js +10 -0
  13. package/dist/cdn/chunks/io-D-Vr0j3W.js +269 -0
  14. package/dist/cdn/chunks/preload-helper-Crt_PPe8.js +1 -0
  15. package/dist/cdn/chunks/samples-Dja23zzq.js +1 -0
  16. package/dist/cdn/chunks/sigv4-BXwVbza3-DZCCNyQA.js +3 -0
  17. package/dist/cdn/chunks/sources-cypher-oj3S6pKb.js +5 -0
  18. package/dist/cdn/chunks/sources-ndex-BgZhxHsL.js +1 -0
  19. package/dist/cdn/chunks/sources-rest-E6On5P3z.js +1 -0
  20. package/dist/cdn/chunks/sources-sparql-BAxh1dw-.js +5 -0
  21. package/dist/cdn/cytoscape-extensions.js +1 -0
  22. package/dist/cdn/io.js +1 -0
  23. package/dist/cytoscape-extensions.bundle.js +2825 -0
  24. package/dist/elements.d.ts +69 -0
  25. package/dist/elements.d.ts.map +1 -0
  26. package/dist/elements.js +343 -0
  27. package/dist/elements.js.map +1 -0
  28. package/dist/gpu-platform-browser.d.ts +11 -0
  29. package/dist/gpu-platform-browser.d.ts.map +1 -0
  30. package/dist/gpu-platform-browser.js +22 -0
  31. package/dist/gpu-platform-browser.js.map +1 -0
  32. package/dist/gpu-platform-node.d.ts +15 -0
  33. package/dist/gpu-platform-node.d.ts.map +1 -0
  34. package/dist/gpu-platform-node.js +27 -0
  35. package/dist/gpu-platform-node.js.map +1 -0
  36. package/dist/gpu.d.ts +149 -0
  37. package/dist/gpu.d.ts.map +1 -0
  38. package/dist/gpu.js +312 -0
  39. package/dist/gpu.js.map +1 -0
  40. package/dist/graph-data.d.ts +101 -0
  41. package/dist/graph-data.d.ts.map +1 -0
  42. package/dist/graph-data.js +147 -0
  43. package/dist/graph-data.js.map +1 -0
  44. package/dist/index.d.ts +36 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +48 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/io.d.ts +111 -0
  49. package/dist/io.d.ts.map +1 -0
  50. package/dist/io.js +258 -0
  51. package/dist/io.js.map +1 -0
  52. package/dist/layouts.d.ts +207 -0
  53. package/dist/layouts.d.ts.map +1 -0
  54. package/dist/layouts.js +615 -0
  55. package/dist/layouts.js.map +1 -0
  56. package/dist/lazy.d.ts +21 -0
  57. package/dist/lazy.d.ts.map +1 -0
  58. package/dist/lazy.js +32 -0
  59. package/dist/lazy.js.map +1 -0
  60. package/dist/samples.d.ts +115 -0
  61. package/dist/samples.d.ts.map +1 -0
  62. package/dist/samples.js +237 -0
  63. package/dist/samples.js.map +1 -0
  64. package/dist/snapshot.d.ts +81 -0
  65. package/dist/snapshot.d.ts.map +1 -0
  66. package/dist/snapshot.js +225 -0
  67. package/dist/snapshot.js.map +1 -0
  68. package/dist/webgpu-provider.d.ts +25 -0
  69. package/dist/webgpu-provider.d.ts.map +1 -0
  70. package/dist/webgpu-provider.js +53 -0
  71. package/dist/webgpu-provider.js.map +1 -0
  72. package/package.json +13 -9
@@ -0,0 +1,615 @@
1
+ /**
2
+ * Every @graphty/layout layout as a Cytoscape.js 3.x layout extension, named "graphty-<name>".
3
+ *
4
+ * Two kinds:
5
+ * - static layouts compute once and hand their positions to Cytoscape's `layoutPositions`, which supplies the
6
+ * events, `fit`, `spacingFactor`, `transform` and the tween for any truthy `animate`;
7
+ * - the force simulations (ForceAtlas2, Fruchterman-Reingold, spring-electrical) step a `LayoutSimulation`. With
8
+ * `animate: true` they draw every frame and own their events; otherwise they run to the end and finish through
9
+ * `layoutPositions` like a static layout.
10
+ *
11
+ * Positions are 2D. A 3D run (`dim: 3`) is projected onto the x-y plane.
12
+ */
13
+ import { makeMask, maskSet, maskTest } from "@graphty/graph-format";
14
+ import { arf, bfs, bipartite, circular, createSimulation, grid, kamadaKawai, Lcg, multipartite, planar, radial, random, rescaleInPlace, shell, spectral, spiral, } from "@graphty/layout";
15
+ import { backendOf, checkGpuMode, coreDestroyedError, cpuWithoutAsking, gpuFor, warnIfFixable, } from "./gpu.js";
16
+ import { hold, indexOf, indicesOf, toSnapshot } from "./snapshot.js";
17
+ export const DEFAULTS = {
18
+ animate: false,
19
+ animationDuration: 500,
20
+ fit: true,
21
+ padding: 30,
22
+ randomize: true,
23
+ refresh: 1,
24
+ };
25
+ /**
26
+ * Groups the nodes by the value of a data field, in ascending value order; nodes without the field are left out.
27
+ * @param cs - the layout's snapshot
28
+ * @param field - the node data field
29
+ * @returns node indices per value
30
+ */
31
+ function groupsByData(cs, field) {
32
+ const groups = new Map();
33
+ cs.nodes.forEach((node, i) => {
34
+ const v = node.data(field);
35
+ if (typeof v === "number" || typeof v === "string") {
36
+ const g = groups.get(v);
37
+ if (g === undefined) {
38
+ groups.set(v, [i]);
39
+ }
40
+ else {
41
+ g.push(i);
42
+ }
43
+ }
44
+ });
45
+ const keys = [...groups.keys()].sort((a, b) => typeof a === "number" && typeof b === "number" ? a - b : String(a).localeCompare(String(b)));
46
+ return keys.map((k) => groups.get(k) ?? []);
47
+ }
48
+ // The @graphty/layout one-shot functions take index arrays, masks and column names where Cytoscape users hold
49
+ // selectors and collections; these entries translate the few options that differ and pass the rest through.
50
+ const STATIC = {
51
+ random: (s, o) => random(s, o),
52
+ circular: (s, o) => circular(s, o),
53
+ spiral: (s, o) => spiral(s, o),
54
+ grid: (s, o) => grid(s, o),
55
+ spectral: (s, o) => spectral(s, o),
56
+ planar: (s, o) => planar(s, o),
57
+ arf: (s, o) => arf(s, o),
58
+ "kamada-kawai": (s, o) => kamadaKawai(s, o),
59
+ shell: (s, o, cs) => {
60
+ const nlist = o.nlist;
61
+ return shell(s, { ...o, nlist: nlist?.map((sel) => indicesOf(cs, sel)) });
62
+ },
63
+ multipartite: (s, o, cs) => {
64
+ const subsets = (o.subsets ?? "subset");
65
+ const layers = typeof subsets === "string" ? groupsByData(cs, subsets) : subsets.map((x) => indicesOf(cs, x));
66
+ return multipartite(s, { ...o, subsets: layers });
67
+ },
68
+ bipartite: (s, o, cs) => {
69
+ if (o.top === undefined) {
70
+ return bipartite(s, o);
71
+ }
72
+ const mask = makeMask(s.nodeCount);
73
+ for (const i of indicesOf(cs, o.top)) {
74
+ maskSet(mask, i, true);
75
+ }
76
+ return bipartite(s, { ...o, top: mask });
77
+ },
78
+ bfs: (s, { root, ...o }, cs) => bfs(s, { ...o, start: indexOf(cs, root, "graphty layout: root") }),
79
+ radial: (s, o, cs) => radial(s, { ...o, root: indexOf(cs, o.root, "graphty layout: root") }),
80
+ };
81
+ // This package's own iteration budgets for the simulations, passed explicitly so a change of a @graphty/layout
82
+ // default does not change what a Cytoscape user gets; the caller's option overrides them.
83
+ export const SIMULATION_DEFAULTS = {
84
+ forceatlas2: { maxIter: 100 },
85
+ fruchtermanReingold: { iterations: 50 },
86
+ };
87
+ /** Registered name suffix -> @graphty/layout simulation type. */
88
+ export const SIMULATIONS = {
89
+ forceatlas2: "forceatlas2",
90
+ "fruchterman-reingold": "fruchtermanReingold",
91
+ "spring-electrical": "spring-electrical",
92
+ };
93
+ /** Every layout name this package registers, without the "graphty-" prefix. */
94
+ export const LAYOUT_NAMES = [...Object.keys(STATIC), ...Object.keys(SIMULATIONS)];
95
+ /**
96
+ * The bounding box in x1/y1/w/h form; default the viewport.
97
+ * @param bb - the option
98
+ * @param cy - the core
99
+ * @returns the box
100
+ */
101
+ function box(bb, cy) {
102
+ if (bb === undefined) {
103
+ // a container detached from the page reads NaN (its computed padding is empty); use Cytoscape's own size
104
+ // for a core without a container, 1 x 1
105
+ const finite = (v) => (Number.isFinite(v) ? v : 1);
106
+ return { x1: 0, y1: 0, w: finite(cy.width()), h: finite(cy.height()) };
107
+ }
108
+ return "w" in bb ? bb : { x1: bb.x1, y1: bb.y1, w: bb.x2 - bb.x1, h: bb.y2 - bb.y1 };
109
+ }
110
+ /**
111
+ * The radius and centre the layout fills inside a box.
112
+ * @param b - the box
113
+ * @returns half the shorter side (at least 1) and the centre
114
+ */
115
+ function frame(b) {
116
+ return { radius: Math.max(Math.min(b.w, b.h) / 2, 1), center: [b.x1 + b.w / 2, b.y1 + b.h / 2, 0] };
117
+ }
118
+ /**
119
+ * The x-y pairs of `n` rows of `stride` values, rescaled so the farthest placed node is `radius` from the centre. NaN
120
+ * rows (unplaced nodes) stay NaN.
121
+ * @param rows - the rows
122
+ * @param stride - values per row (2 or 3)
123
+ * @param n - row count
124
+ * @param b - the target box
125
+ * @returns 2n values
126
+ */
127
+ function fitRows(rows, stride, n, b) {
128
+ const xy = new Float64Array(2 * n);
129
+ for (let i = 0; i < n; i++) {
130
+ xy[2 * i] = rows[stride * i];
131
+ xy[2 * i + 1] = rows[stride * i + 1];
132
+ }
133
+ const { radius, center } = frame(b);
134
+ return rescaleInPlace(xy, 2, radius, center);
135
+ }
136
+ /**
137
+ * The x-y pairs of a simulation with locked nodes: each locked node where it stands, each free node scaled about
138
+ * the locked nodes' centroid by the largest factor that keeps every free node inside the box (by the factor that
139
+ * puts the farthest at half the box's shorter side when the centroid is outside the box).
140
+ * @param pos - the stride-3 positions, in pixels
141
+ * @param locked - the locked nodes' mask
142
+ * @param n - node count
143
+ * @param b - the target box
144
+ * @returns 2n values
145
+ */
146
+ function fitAroundLocked(pos, locked, n, b) {
147
+ let cx = 0;
148
+ let cy = 0;
149
+ let count = 0;
150
+ for (let i = 0; i < n; i++) {
151
+ if (maskTest(locked, i)) {
152
+ cx += pos[3 * i];
153
+ cy += pos[3 * i + 1];
154
+ count++;
155
+ }
156
+ }
157
+ cx /= count;
158
+ cy /= count;
159
+ const inside = cx >= b.x1 && cx <= b.x1 + b.w && cy >= b.y1 && cy <= b.y1 + b.h;
160
+ // the largest factor keeping one coordinate inside [lo, hi], seen from c
161
+ const limit = (c, d, lo, hi) => {
162
+ if (d === 0) {
163
+ return Infinity;
164
+ }
165
+ return ((d > 0 ? hi : lo) - c) / d;
166
+ };
167
+ let scale = Infinity;
168
+ let farthest = 0;
169
+ for (let i = 0; i < n; i++) {
170
+ if (!maskTest(locked, i)) {
171
+ const dx = pos[3 * i] - cx;
172
+ const dy = pos[3 * i + 1] - cy;
173
+ scale = Math.min(scale, limit(cx, dx, b.x1, b.x1 + b.w), limit(cy, dy, b.y1, b.y1 + b.h));
174
+ farthest = Math.max(farthest, Math.hypot(dx, dy));
175
+ }
176
+ }
177
+ if (!inside) {
178
+ scale = farthest > 0 ? frame(b).radius / farthest : 1;
179
+ }
180
+ else if (!Number.isFinite(scale)) {
181
+ scale = 1;
182
+ }
183
+ const xy = new Float64Array(2 * n);
184
+ for (let i = 0; i < n; i++) {
185
+ const s = maskTest(locked, i) ? 1 : scale;
186
+ xy[2 * i] = cx + s * (pos[3 * i] - cx);
187
+ xy[2 * i + 1] = cy + s * (pos[3 * i + 1] - cy);
188
+ }
189
+ return xy;
190
+ }
191
+ /**
192
+ * The per-node options as @graphty/layout takes them: a node data field (`nodeMass: "mass"`) becomes an id-keyed
193
+ * record, where a node whose field is missing or not a finite number gets the layout's default; an array or a typed
194
+ * array other than a Float32Array becomes a Float32Array in node order (@graphty/layout would read a plain array as
195
+ * an object keyed by id, so `[2, 5]` would set nodes "0" and "1").
196
+ * @param cs - the layout's snapshot
197
+ * @param o - the layout options
198
+ * @returns the converted options
199
+ */
200
+ function nodeFields(cs, o) {
201
+ const out = {};
202
+ for (const key of ["nodeMass", "nodeSize"]) {
203
+ const field = o[key];
204
+ if (Array.isArray(field) || (ArrayBuffer.isView(field) && !(field instanceof Float32Array))) {
205
+ out[key] = Float32Array.from(field);
206
+ }
207
+ else if (typeof field === "string") {
208
+ const values = {};
209
+ cs.nodes.forEach((node) => {
210
+ const v = node.data(field);
211
+ if (typeof v === "number" && Number.isFinite(v)) {
212
+ values[node.id()] = v;
213
+ }
214
+ });
215
+ out[key] = values;
216
+ }
217
+ }
218
+ return out;
219
+ }
220
+ /**
221
+ * The position function `layoutPositions` and `positions()` take: an unplaced node keeps its position.
222
+ * @param xy - 2n values by node index
223
+ * @returns the position of node i
224
+ */
225
+ function positionOf(xy) {
226
+ return (node, i) => (Number.isNaN(xy[2 * i]) ? node.position() : { x: xy[2 * i], y: xy[2 * i + 1] });
227
+ }
228
+ /**
229
+ * Ends a discrete run through Cytoscape's `layoutPositions` (events, fit, spacing, transform, tween).
230
+ * @param layout - the layout
231
+ * @param nodes - the nodes in index order
232
+ * @param xy - 2n values by node index
233
+ */
234
+ function finishDiscrete(layout, nodes, xy) {
235
+ // layoutPositions memoizes by node id and calls back with ITS index (non-parent nodes in collection order),
236
+ // which is ours because the snapshot was built from the same non-parent nodes
237
+ const at = positionOf(xy);
238
+ // Cytoscape's typings declare the first parameter a string; it is the layout object (index.d.ts defect)
239
+ nodes.layoutPositions(layout, layout.options, at);
240
+ }
241
+ /**
242
+ * The options handed to a @graphty/layout function: the caller's, with the layout's own frame and weight flag.
243
+ * @param o - the layout options
244
+ * @returns the options
245
+ */
246
+ function graphtyOptions(o) {
247
+ return { ...o, dim: o.dim ?? 2, scale: 1, center: undefined, seed: o.seed ?? null, weight: o.weight !== undefined };
248
+ }
249
+ /**
250
+ * The snapshot of the layout's nodes (compound parents are positioned by Cytoscape from their children).
251
+ * @param o - the layout options
252
+ * @returns the snapshot
253
+ */
254
+ function layoutSnapshot(o) {
255
+ return toSnapshot(o.eles.not(":parent"), { weight: o.weight });
256
+ }
257
+ /**
258
+ * Throws when the run would tween on a core that cannot: a headless core without `styleEnabled: true`, where
259
+ * Cytoscape's own tween fails with "ani.play is not a function".
260
+ * @param o - the layout options
261
+ * @param simulation - whether the layout is a simulation, which draws `animate: true` frame by frame instead
262
+ */
263
+ function checkTween(o, simulation) {
264
+ const tweens = simulation ? o.animate !== true && Boolean(o.animate) : Boolean(o.animate);
265
+ // styleEnabled() is public Cytoscape API that its typings leave out
266
+ if (tweens && !o.cy.styleEnabled()) {
267
+ throw new Error(`${o.name}: animate needs a core that renders; create a headless core with styleEnabled: true, or pass animate: false`);
268
+ }
269
+ }
270
+ /**
271
+ * Runs a static layout.
272
+ * @param layout - the layout
273
+ * @param fn - the layout function
274
+ */
275
+ function runStatic(layout, fn) {
276
+ const o = layout.options;
277
+ checkTween(o, false);
278
+ const cs = layoutSnapshot(o);
279
+ const r = fn(cs.snapshot, graphtyOptions(o), cs);
280
+ finishDiscrete(layout, cs.nodes, fitRows(r.positions, r.dim, r.n, box(o.boundingBox, o.cy)));
281
+ }
282
+ /**
283
+ * Steps until settled or stopped. Synchronous for a CPU simulation; a GPU simulation's step is a promise, and then
284
+ * so is this.
285
+ * @param sim - the simulation
286
+ * @param layout - the layout (its `stopped` flag ends the run)
287
+ * @returns a promise only when the simulation is asynchronous
288
+ */
289
+ function stepToEnd(sim, layout) {
290
+ while (!sim.settled && !layout.stopped && !layout.options.cy.destroyed()) {
291
+ const r = sim.step(50);
292
+ if (r instanceof Promise) {
293
+ return r.then(() => stepToEnd(sim, layout));
294
+ }
295
+ }
296
+ return undefined;
297
+ }
298
+ /**
299
+ * Runs a simulation layout: on the caller's accelerator, on the CPU when no GPU is enabled (synchronously), or on
300
+ * the core's GPU once one is acquired. The decision is made before the simulation starts; a GPU failure after that
301
+ * is reported as layouterror, never finished on the CPU.
302
+ * @param layout - the layout
303
+ * @param type - the simulation type
304
+ */
305
+ function runSimulation(layout, type) {
306
+ const o = layout.options;
307
+ checkTween(o, true);
308
+ checkGpuMode(o.name, o.gpu);
309
+ layout.stopped = false;
310
+ if (o.accelerator !== undefined) {
311
+ layout.backend =
312
+ o.accelerator === null
313
+ ? { ran: "cpu", reason: "accelerator: null was passed", device: null }
314
+ : { ran: "gpu", reason: null, device: o.accelerator.kind };
315
+ simulate(layout, type, o.accelerator);
316
+ return;
317
+ }
318
+ // "require" goes through gpuFor, which turns a known CPU decision into the error layouterror reports
319
+ const known = o.gpu === "require" ? null : cpuWithoutAsking(o.gpu);
320
+ if (known !== null) {
321
+ layout.backend = backendOf(known, false, "");
322
+ warnIfFixable(known, o.eles.nodes().length);
323
+ simulate(layout, type, null);
324
+ return;
325
+ }
326
+ layout.looping = true;
327
+ gpuFor(o.cy, o.gpu)
328
+ .then((d) => {
329
+ layout.looping = false;
330
+ layout.backend = backendOf(d, d.gpu !== null, "");
331
+ warnIfFixable(d, o.eles.nodes().length);
332
+ if (layout.stopped || o.cy.destroyed()) {
333
+ layout.emit({ type: "layoutstop", layout });
334
+ return;
335
+ }
336
+ simulate(layout, type, d.gpu?.accelerator ?? null);
337
+ })
338
+ .catch((error) => {
339
+ layout.looping = false;
340
+ // the core destroyed meanwhile ends the run as stop() would
341
+ if (!o.cy.destroyed()) {
342
+ layout.emit("layouterror", [error]);
343
+ }
344
+ layout.emit({ type: "layoutstop", layout });
345
+ });
346
+ }
347
+ /** Per core and simulation: pixels per simulation unit of its last run, which a randomize: false run continues. */
348
+ const DRAWN_SCALE = new WeakMap();
349
+ /**
350
+ * The x-y centroid of stride-3 rows.
351
+ * @param pos - the rows
352
+ * @param n - row count
353
+ * @returns the centroid, z 0
354
+ */
355
+ function centroidOf(pos, n) {
356
+ let x = 0;
357
+ let y = 0;
358
+ for (let i = 0; i < n; i++) {
359
+ x += pos[3 * i];
360
+ y += pos[3 * i + 1];
361
+ }
362
+ return n === 0 ? [0, 0, 0] : [x / n, y / n, 0];
363
+ }
364
+ /**
365
+ * Runs a simulation on an accelerator (null: the CPU).
366
+ * @param layout - the layout
367
+ * @param type - the simulation type
368
+ * @param accelerator - the accelerator
369
+ */
370
+ function simulate(layout, type, accelerator) {
371
+ const o = layout.options;
372
+ if (accelerator === null && type === "spring-electrical") {
373
+ const reason = layout.backend?.reason ?? "none was available";
374
+ // nothing ran, so no backend: "cpu" would say the layout ran there (as with gpu: "require")
375
+ layout.backend = undefined;
376
+ const error = new Error(`graphty-spring-electrical has no CPU simulation and runs only on the GPU; no GPU ran because ${reason}`);
377
+ // reported as gpu: "require" reports it, after run() returns, whether or not the GPU was asked for
378
+ failLater(layout, error);
379
+ return;
380
+ }
381
+ const cs = layoutSnapshot(o);
382
+ const s = cs.snapshot;
383
+ const n = s.nodeCount;
384
+ const b = box(o.boundingBox, o.cy);
385
+ const { radius, center } = frame(b);
386
+ const dim = o.dim ?? 2;
387
+ // The simulation reads and writes this stride-3 array in "scene" units; scene units are pixels here, so a
388
+ // locked node is pinned exactly where it stands. A randomized node starts anywhere in the box (Cytoscape's
389
+ // convention). Not left NaN for @graphty/layout's seedPositions to fill: with exactly one finite row (one locked
390
+ // node) its draw box has zero width and every seeded node lands on the locked one; Fruchterman-Reingold then
391
+ // never separates them, and ForceAtlas2Simulation.load does not seed NaN rows at all.
392
+ const pos = new Float32Array(3 * n);
393
+ const fixed = makeMask(n);
394
+ const rng = new Lcg(o.seed ?? null);
395
+ let anyLocked = false;
396
+ cs.nodes.forEach((node, i) => {
397
+ const locked = node.locked();
398
+ anyLocked || (anyLocked = locked);
399
+ maskSet(fixed, i, locked);
400
+ const p = node.position();
401
+ const keep = locked || o.randomize === false;
402
+ pos[3 * i] = keep ? p.x : b.x1 + rng.next() * b.w;
403
+ pos[3 * i + 1] = keep ? p.y : b.y1 + rng.next() * b.h;
404
+ pos[3 * i + 2] = keep || dim === 2 ? 0 : (rng.next() * 2 - 1) * radius;
405
+ });
406
+ // A continuation (randomize: false) reads the positions at the scale the last run of this simulation on this core
407
+ // drew them at, about their centroid. Read at the box's scale instead, the graph would start far smaller than the
408
+ // simulation's own size, and the first steps would jolt it back out.
409
+ const drawn = o.randomize === false && !anyLocked ? DRAWN_SCALE.get(o.cy)?.get(type) : undefined;
410
+ const scale = drawn ?? radius;
411
+ const sim = createSimulation(type, {
412
+ ...SIMULATION_DEFAULTS[type],
413
+ ...graphtyOptions(o),
414
+ ...nodeFields(cs, o),
415
+ scale,
416
+ center: drawn === undefined ? center : centroidOf(pos, n),
417
+ iterationsPerStep: 1,
418
+ }, accelerator);
419
+ sim.load(s, pos);
420
+ if (anyLocked) {
421
+ sim.setFixed(fixed);
422
+ }
423
+ // a data change while the simulation runs must not release the snapshot its device upload came from
424
+ const unhold = hold(s);
425
+ const dispose = () => {
426
+ sim.dispose();
427
+ unhold();
428
+ if (!anyLocked) {
429
+ // pixels per simulation unit once fitted to the box: fitRows scales the farthest node to `radius`
430
+ const [cx, cy] = centroidOf(pos, n);
431
+ let farthest = 0;
432
+ for (let i = 0; i < n; i++) {
433
+ farthest = Math.max(farthest, Math.hypot(pos[3 * i] - cx, pos[3 * i + 1] - cy));
434
+ }
435
+ if (farthest > 0) {
436
+ const scales = DRAWN_SCALE.get(o.cy) ?? new Map();
437
+ scales.set(type, (scale * radius) / farthest);
438
+ DRAWN_SCALE.set(o.cy, scales);
439
+ }
440
+ }
441
+ };
442
+ // Fitted to the box as a static result is; with a locked node, the free nodes are scaled about the locked ones
443
+ const xy = () => (anyLocked ? fitAroundLocked(pos, fixed, n, b) : fitRows(pos, 3, n, b));
444
+ // A core destroyed mid-run ends the run as stop() would: its device is gone with it ("GpuContext is disposed"),
445
+ // and a write to it fails in Cytoscape ("reading 'notify'" of its null renderer).
446
+ const fail = (error) => {
447
+ layout.looping = false;
448
+ dispose();
449
+ if (!o.cy.destroyed()) {
450
+ layout.emit("layouterror", [error]);
451
+ }
452
+ layout.emit({ type: "layoutstop", layout });
453
+ };
454
+ if (o.animate !== true) {
455
+ const done = () => {
456
+ layout.looping = false;
457
+ dispose();
458
+ if (o.cy.destroyed()) {
459
+ layout.emit({ type: "layoutstop", layout });
460
+ }
461
+ else {
462
+ finishDiscrete(layout, cs.nodes, xy());
463
+ }
464
+ };
465
+ const r = stepToEnd(sim, layout);
466
+ if (r === undefined) {
467
+ done();
468
+ }
469
+ else {
470
+ layout.looping = true;
471
+ r.then(done, fail);
472
+ }
473
+ return;
474
+ }
475
+ // Continuous: one frame per animation frame, `refresh` iterations each
476
+ layout.looping = true;
477
+ layout.emit({ type: "layoutstart", layout });
478
+ let first = true;
479
+ const schedule = typeof requestAnimationFrame === "function"
480
+ ? requestAnimationFrame
481
+ : (f) => setTimeout(f, 16);
482
+ const end = () => {
483
+ layout.looping = false;
484
+ dispose();
485
+ if (o.stop !== undefined) {
486
+ layout.one("layoutstop", o.stop);
487
+ }
488
+ layout.emit({ type: "layoutstop", layout });
489
+ };
490
+ const draw = () => {
491
+ if (o.cy.destroyed()) {
492
+ end();
493
+ return;
494
+ }
495
+ cs.nodes.positions(positionOf(xy()));
496
+ if (o.fit !== false) {
497
+ o.cy.fit(o.eles, o.padding);
498
+ }
499
+ if (first) {
500
+ first = false;
501
+ if (o.ready !== undefined) {
502
+ layout.one("layoutready", o.ready);
503
+ }
504
+ layout.emit({ type: "layoutready", layout });
505
+ }
506
+ if (sim.settled || layout.stopped) {
507
+ end();
508
+ }
509
+ else {
510
+ schedule(tick);
511
+ }
512
+ };
513
+ const tick = () => {
514
+ if (layout.stopped || o.cy.destroyed()) {
515
+ draw();
516
+ return;
517
+ }
518
+ let r;
519
+ try {
520
+ r = sim.step(o.refresh ?? 1);
521
+ }
522
+ catch (error) {
523
+ fail(error);
524
+ return;
525
+ }
526
+ if (r instanceof Promise) {
527
+ r.then(draw, fail);
528
+ }
529
+ else {
530
+ draw();
531
+ }
532
+ };
533
+ tick();
534
+ }
535
+ /**
536
+ * Ends a run that never started: layouterror with the error, then layoutstop, after run() returns.
537
+ * @param layout - the layout
538
+ * @param error - the error
539
+ */
540
+ function failLater(layout, error) {
541
+ layout.looping = true;
542
+ void Promise.resolve().then(() => {
543
+ layout.looping = false;
544
+ layout.emit("layouterror", [error]);
545
+ layout.emit({ type: "layoutstop", layout });
546
+ });
547
+ }
548
+ /** Each layout object's run body, set by its registrant's constructor. */
549
+ const RUN_BODIES = new WeakMap();
550
+ /**
551
+ * A registrant's run(): runs the layout's body, or refuses a destroyed core with E_CORE_DESTROYED.
552
+ * @returns the layout
553
+ */
554
+ function runLayout() {
555
+ if (this.options.cy.destroyed()) {
556
+ failLater(this, coreDestroyedError());
557
+ }
558
+ else {
559
+ RUN_BODIES.get(this)?.(this);
560
+ }
561
+ return this;
562
+ }
563
+ /**
564
+ * A simulation registrant's stop(). A running loop ends itself on its next frame and emits layoutstop; otherwise
565
+ * act as the registry would.
566
+ * @returns the layout
567
+ */
568
+ function stopLayout() {
569
+ if (this.looping) {
570
+ this.stopped = true;
571
+ }
572
+ else {
573
+ this.emit({ type: "layoutstop", layout: this });
574
+ }
575
+ return this;
576
+ }
577
+ /**
578
+ * A Cytoscape layout registrant. It must be a function constructor: the registry calls it as
579
+ * `registrant.call(this, options)`, which a native class rejects.
580
+ * @param run - the run body
581
+ * @param withStop - whether the registrant defines stop(); without one the registry emits layoutstop itself
582
+ * @returns the registrant
583
+ */
584
+ function registrant(run, withStop) {
585
+ function GraphtyLayout(options) {
586
+ this.options = { ...DEFAULTS, ...options };
587
+ this.stopped = false;
588
+ this.looping = false;
589
+ RUN_BODIES.set(this, run);
590
+ }
591
+ const methods = { run: runLayout };
592
+ if (withStop) {
593
+ methods.stop = stopLayout;
594
+ }
595
+ // A function's prototype is typed any; assigning through Object.assign keeps the methods typed.
596
+ Object.assign(GraphtyLayout.prototype, methods);
597
+ return GraphtyLayout;
598
+ }
599
+ /**
600
+ * Registers every graphty layout as "graphty-<name>": `cytoscape.use(graphtyCytoscape)`.
601
+ * @param cytoscape - the cytoscape function
602
+ */
603
+ export function registerLayouts(cytoscape) {
604
+ for (const [name, fn] of Object.entries(STATIC)) {
605
+ cytoscape("layout", `graphty-${name}`, registrant((l) => {
606
+ runStatic(l, fn);
607
+ }, false));
608
+ }
609
+ for (const [name, type] of Object.entries(SIMULATIONS)) {
610
+ cytoscape("layout", `graphty-${name}`, registrant((l) => {
611
+ runSimulation(l, type);
612
+ }, true));
613
+ }
614
+ }
615
+ //# sourceMappingURL=layouts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layouts.js","sourceRoot":"","sources":["../src/layouts.ts"],"names":[],"mappings":"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"}
package/dist/lazy.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Loading the parts of the package that are fetched on first use (the generators and datasets, the file formats, the
3
+ * WebGPU code), with a warning when one never arrives.
4
+ */
5
+ /** How long a part may take to load before the call warns that it may never load. */
6
+ export declare const STALL_MS = 5000;
7
+ /**
8
+ * A part of the package loaded on first use, warning on the console when it has not loaded after STALL_MS.
9
+ *
10
+ * In a Vite 6 or 7 (Rollup) production build, the part's chunk imports the chunk that holds the consumer's entry
11
+ * module, because both use @graphty/graph-format and Rollup puts shared code in the chunk that loads first. When that
12
+ * entry module awaits the call at its top level, the entry chunk is still evaluating, so the part can never run and
13
+ * the await never settles. ES modules report nothing, and no package layout avoids it (the package's synchronous
14
+ * methods need @graphty/graph-format up front), so the warning names the cause. A slow network shows it too; the
15
+ * call then carries on.
16
+ * @param load - the dynamic import
17
+ * @param call - what is waiting, as the reader wrote it ("graphtyDataset")
18
+ * @returns the import
19
+ */
20
+ export declare function loadPart<T>(load: Promise<T>, call: string): Promise<T>;
21
+ //# sourceMappingURL=lazy.d.ts.map