@graphty/graphty-element 2.4.0 → 2.4.1

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 (46) hide show
  1. package/dist/ai.js +3 -3
  2. package/dist/catalog.js +6 -6
  3. package/dist/chunks/{AiManager-BD9XK30e.js → AiManager-DNJCoeTO.js} +5 -5
  4. package/dist/chunks/{DataSource-B8vf2uhW.js → DataSource-xL3Yn0Pa.js} +72 -61
  5. package/dist/chunks/{GraphSession-dcwOjGJh.js → GraphSession-PFm2tJ_j.js} +1483 -1441
  6. package/dist/chunks/{GraphtyLogger-CqOVV13Y.js → GraphtyLogger-kbOx2zq3.js} +169 -221
  7. package/dist/chunks/{VoiceInputAdapter-D0tHHi9G.js → VoiceInputAdapter-CDNKQgUK.js} +1 -1
  8. package/dist/chunks/{XRPivotCameraController-DTfhvhHz.js → XRPivotCameraController-JdlLBcD7.js} +146 -134
  9. package/dist/chunks/{algorithms-BF0X6RPw.js → algorithms-B87OPYw4.js} +2 -2
  10. package/dist/chunks/{capability-check-BJzlK4oL.js → capability-check-B2oYf_30.js} +1 -1
  11. package/dist/chunks/{detect-vJxK7n0D.js → detect-tuYQLJbT.js} +2 -2
  12. package/dist/chunks/{format-detection-C80TLQ2e.js → format-detection-BG6CMwPO.js} +1 -1
  13. package/dist/chunks/{index-2xkq7wyD.js → index-6GDfNfwJ.js} +2928 -2856
  14. package/dist/chunks/{optionsFromZod-BuTOFgVM.js → optionsFromZod-DHLLiX_8.js} +237 -236
  15. package/dist/chunks/{paletteRegistry-A63C71Gn.js → paletteRegistry-jg9uS7wo.js} +66 -66
  16. package/dist/chunks/pluginRegistry-MaTIDh6l.js +238 -0
  17. package/dist/chunks/{registry-jB46Gmeb.js → registry-DQeq4B2K.js} +8 -8
  18. package/dist/chunks/{scales-B2d-7Bf0.js → scales-BXHmwPXC.js} +4 -4
  19. package/dist/extend.js +7 -7
  20. package/dist/graphty-catalog.json +1 -1
  21. package/dist/graphty.bundle.js +25128 -24837
  22. package/dist/graphty.js +67 -63
  23. package/dist/index.d.ts +3 -0
  24. package/dist/logging.js +2 -2
  25. package/dist/session.js +5 -5
  26. package/dist/src/Edge.d.ts +4 -4
  27. package/dist/src/acceleration/AccelerationController.d.ts +6 -0
  28. package/dist/src/acceleration/registry.d.ts +3 -0
  29. package/dist/src/acceleration/types.d.ts +7 -0
  30. package/dist/src/algorithms/Algorithm.d.ts +13 -0
  31. package/dist/src/cameras/InputUtils.d.ts +67 -0
  32. package/dist/src/cameras/XRInputHandler.d.ts +0 -8
  33. package/dist/src/catalog/pluginRegistry.d.ts +62 -0
  34. package/dist/src/catalog/registry.d.ts +7 -0
  35. package/dist/src/data/DataSource.d.ts +1 -1
  36. package/dist/src/errors/codes.d.ts +2 -1
  37. package/dist/src/meshes/CustomLineRenderer.d.ts +11 -9
  38. package/dist/src/meshes/EdgeMesh.d.ts +18 -9
  39. package/dist/src/meshes/FilledArrowRenderer.d.ts +61 -23
  40. package/dist/src/meshes/PatternedLineRenderer.d.ts +5 -37
  41. package/dist/src/meshes/PerSceneMaterials.d.ts +49 -0
  42. package/dist/src/xr/XRSessionManager.d.ts +1 -1
  43. package/dist/webgpu.d.ts +8 -0
  44. package/dist/webgpu.js +2 -2
  45. package/package.json +6 -6
  46. package/dist/chunks/GraphtyError-B93WRH3e.js +0 -134
@@ -1,7 +1,7 @@
1
- import { q as he, b as Ie } from "./GraphtyLogger-CqOVV13Y.js";
1
+ import { c as he, G as y, S as Ie } from "./pluginRegistry-MaTIDh6l.js";
2
2
  import { K as Te, f as Me } from "./types-C_c53VgR.js";
3
- import { G as y } from "./GraphtyError-B93WRH3e.js";
4
- import { Graph as _e, accelerated as X } from "@graphty/algorithms";
3
+ import { b as _e } from "./GraphtyLogger-kbOx2zq3.js";
4
+ import { Graph as ze, accelerated as X } from "@graphty/algorithms";
5
5
  import { INVALID_INDEX as L } from "@graphty/graph-format";
6
6
  import { z as me } from "zod/v4";
7
7
  const _ = he({
@@ -11,7 +11,7 @@ const _ = he({
11
11
  implementationOf: (e) => e.compute,
12
12
  builtInIds: () => Te
13
13
  });
14
- function yn(e, t) {
14
+ function bn(e, t) {
15
15
  const n = e.descriptor;
16
16
  if (n === void 0 || typeof n != "object")
17
17
  throw new y({
@@ -43,16 +43,16 @@ function yn(e, t) {
43
43
  });
44
44
  _.register(e, t);
45
45
  }
46
- function bn() {
46
+ function wn() {
47
47
  return _.descriptors();
48
48
  }
49
- function wn(e) {
49
+ function vn(e) {
50
50
  return _.byId(e);
51
51
  }
52
- function vn() {
52
+ function On() {
53
53
  _.clearForTesting();
54
54
  }
55
- const ze = ["forceAtlas2", "fruchtermanReingold", "springElectrical", "release"], Ce = [
55
+ const Ce = ["forceAtlas2", "fruchtermanReingold", "springElectrical", "release"], xe = [
56
56
  "pageRank",
57
57
  "sssp",
58
58
  "breadthFirstSearch",
@@ -60,31 +60,31 @@ const ze = ["forceAtlas2", "fruchtermanReingold", "springElectrical", "release"]
60
60
  "weaklyConnectedComponents",
61
61
  "minimumSpanningTree"
62
62
  ];
63
- function On(e) {
63
+ function kn(e) {
64
64
  const t = {
65
65
  kind: e.backend
66
66
  };
67
- for (const n of ze) {
67
+ for (const n of Ce) {
68
68
  const r = e[n];
69
69
  typeof r == "function" && (t[n] = r.bind(e));
70
70
  }
71
71
  return t;
72
72
  }
73
- function xe(e) {
73
+ function je(e) {
74
74
  const t = {
75
75
  kind: e.backend
76
76
  };
77
- for (const n of Ce) {
77
+ for (const n of xe) {
78
78
  const r = e[n];
79
79
  typeof r == "function" && (t[n] = r.bind(e));
80
80
  }
81
81
  return t;
82
82
  }
83
- const je = ["auto", "off", "required"], kn = "auto";
84
- function Nn(e) {
85
- return typeof e == "string" && je.includes(e);
83
+ const Pe = ["auto", "off", "required"], Nn = "auto";
84
+ function Sn(e) {
85
+ return typeof e == "string" && Pe.includes(e);
86
86
  }
87
- const Pe = "f64", Sn = "f32", An = "acceleration.minNodes", $n = 0, Rn = "RTX 4070 SUPER, headless Chromium, 2026-09-25", En = Object.freeze({
87
+ const Le = "f64", An = "f32", $n = "acceleration.minNodes", Rn = 0, En = "RTX 4070 SUPER, headless Chromium, 2026-09-25", Fn = Object.freeze({
88
88
  breadthFirstSearch: 3e5,
89
89
  sssp: 3e5,
90
90
  pageRank: 5e3,
@@ -96,7 +96,7 @@ const Pe = "f64", Sn = "f32", An = "acceleration.minNodes", $n = 0, Rn = "RTX 40
96
96
  implementationOf: (e) => e.descriptor,
97
97
  builtInIds: () => Me
98
98
  });
99
- function Le(e, t) {
99
+ function De(e, t) {
100
100
  if (e.descriptor.key !== e.type)
101
101
  throw new y({
102
102
  code: "E_BAD_COMMAND",
@@ -112,13 +112,13 @@ function Le(e, t) {
112
112
  });
113
113
  z.register(e, t);
114
114
  }
115
- function Fn() {
115
+ function In() {
116
116
  return z.descriptors();
117
117
  }
118
- function In(e) {
118
+ function Tn(e) {
119
119
  return z.byId(e);
120
120
  }
121
- function Tn() {
121
+ function Mn() {
122
122
  z.clearForTesting();
123
123
  }
124
124
  class b extends Error {
@@ -131,7 +131,7 @@ class b extends Error {
131
131
  super(`Option '${t}': ${n}`), this.optionKey = t, this.name = "OptionValidationError";
132
132
  }
133
133
  }
134
- function De(e, t, n) {
134
+ function Ge(e, t, n) {
135
135
  if (t == null) {
136
136
  if (n.required)
137
137
  throw new b(e, "is required but was not provided");
@@ -153,7 +153,7 @@ function De(e, t, n) {
153
153
  throw new b(e, `must be a string, got ${typeof t}`);
154
154
  break;
155
155
  case "select":
156
- Ge(e, t, n);
156
+ Ue(e, t, n);
157
157
  break;
158
158
  case "nodeId":
159
159
  if (typeof t != "string" && typeof t != "number")
@@ -177,7 +177,7 @@ function Q(e, t, n, r) {
177
177
  if (n.max !== void 0 && t > n.max)
178
178
  throw new b(e, `must be <= ${n.max}, got ${t}`);
179
179
  }
180
- function Ge(e, t, n) {
180
+ function Ue(e, t, n) {
181
181
  if (!n.options || n.options.length === 0)
182
182
  throw new b(e, "is a select type but has no options defined");
183
183
  if (!n.options.map((i) => i.value).includes(t)) {
@@ -185,27 +185,27 @@ function Ge(e, t, n) {
185
185
  throw new b(e, `must be one of [${i}], got '${String(t)}'`);
186
186
  }
187
187
  }
188
- function Ue(e, t) {
188
+ function He(e, t) {
189
189
  const n = {};
190
190
  for (const [r, i] of Object.entries(e)) {
191
191
  const o = t?.[r] ?? i.default;
192
- De(r, o, i), n[r] = o;
192
+ Ge(r, o, i), n[r] = o;
193
193
  }
194
194
  return n;
195
195
  }
196
- function Mn(e) {
196
+ function _n(e) {
197
197
  return e;
198
198
  }
199
- function He(e, t) {
199
+ function Be(e, t) {
200
200
  const n = e.getSnapshot(), r = t === "directed" ? n : e.undirected(n).snapshot, i = r.flags.multigraph ? r.simplified({ weights: "sum" }).snapshot : r;
201
- return Be(i, t);
201
+ return Ve(i, t);
202
202
  }
203
- function _n(e) {
203
+ function zn(e) {
204
204
  const t = e.getSnapshot();
205
205
  return t.flags.multigraph ? t.edgeCount - t.simplified({ weights: "sum" }).snapshot.edgeCount : 0;
206
206
  }
207
- function Be(e, t) {
208
- const n = new _e({
207
+ function Ve(e, t) {
208
+ const n = new ze({
209
209
  directed: t !== "undirected"
210
210
  }), { ids: r } = e;
211
211
  for (let a = 0; a < e.nodeCount; a++)
@@ -217,8 +217,8 @@ function Be(e, t) {
217
217
  }
218
218
  return n;
219
219
  }
220
- const E = /* @__PURE__ */ new Map();
221
- function Ve(e, t) {
220
+ const E = new Ie("algorithm");
221
+ function Je(e, t) {
222
222
  if (t === null)
223
223
  return e;
224
224
  if (e === null)
@@ -260,7 +260,7 @@ const Z = class Z {
260
260
  * @returns a freshly built Graph for the algorithm package
261
261
  */
262
262
  algorithmGraph(t) {
263
- return He(this.graph.getDataManager(), t);
263
+ return Be(this.graph.getDataManager(), t);
264
264
  }
265
265
  /**
266
266
  * The route an algorithm with an accelerated implementation takes.
@@ -292,13 +292,13 @@ const Z = class Z {
292
292
  const r = this.graph.getDataManager(), i = r.getSnapshot(), s = n === "undirected" ? r.undirected(i) : null, o = s === null ? i : s.snapshot, a = o.flags.multigraph ? o.simplified({ weights: "sum" }) : null, u = a === null ? o : a.snapshot, c = this.graph.acceleration, h = { capability: t, nodeCount: u.nodeCount };
293
293
  return {
294
294
  snapshot: u,
295
- edgeRemap: Ve(s?.edgeRemap ?? null, a?.edgeRemap ?? null),
295
+ edgeRemap: Je(s?.edgeRemap ?? null, a?.edgeRemap ?? null),
296
296
  run: async (p) => {
297
297
  const l = await c.run(
298
298
  h,
299
- (d) => p(X(xe(d)), u)
299
+ (d) => p(X(je(d)), u)
300
300
  );
301
- return l.accelerated ? { value: l.value, precision: l.precision } : { value: await p(X(null), u), precision: Pe };
301
+ return l.accelerated ? { value: l.value, precision: l.precision } : { value: await p(X(null), u), precision: Le };
302
302
  }
303
303
  };
304
304
  }
@@ -333,7 +333,7 @@ const Z = class Z {
333
333
  */
334
334
  resolveOptions(t) {
335
335
  const n = this.constructor.optionsSchema;
336
- return Object.keys(n).length === 0 ? {} : Ue(n, t);
336
+ return Object.keys(n).length === 0 ? {} : He(n, t);
337
337
  }
338
338
  /**
339
339
  * Gets the algorithm type
@@ -386,13 +386,14 @@ const Z = class Z {
386
386
  * @returns The registered algorithm class
387
387
  */
388
388
  static register(t) {
389
- const n = t, r = String(n.type), i = String(n.namespace), { descriptor: s, cost: o, version: a } = n;
390
- return s !== void 0 && Le({
389
+ const n = t, r = String(n.type), i = String(n.namespace), { descriptor: s, cost: o, costUnits: a, version: u } = n;
390
+ return s !== void 0 && De({
391
391
  descriptor: s,
392
392
  namespace: i,
393
393
  type: r,
394
394
  ...o === void 0 ? {} : { cost: o },
395
- ...a === void 0 ? {} : { version: a }
395
+ ...a === void 0 ? {} : { costUnits: a },
396
+ ...u === void 0 ? {} : { version: u }
396
397
  }), E.set(`${i}:${r}`, t), t;
397
398
  }
398
399
  /**
@@ -479,7 +480,7 @@ const ee = 3, qe = 0.1;
479
480
  function m(e, t) {
480
481
  return Number.isInteger(e) ? e.toLocaleString(t) : Number(e.toFixed(ee)).toLocaleString(t, { maximumFractionDigits: ee });
481
482
  }
482
- function Je(e, t, n) {
483
+ function Ye(e, t, n) {
483
484
  const r = e.fields.find((i) => i.name === t);
484
485
  return r === void 0 ? t : n === "technical" ? r.technicalName : r.plainName.toLowerCase();
485
486
  }
@@ -491,11 +492,11 @@ function R(e, t) {
491
492
  const n = e.graph[t];
492
493
  return typeof n == "number" && Number.isFinite(n) ? n : void 0;
493
494
  }
494
- function Ye(e) {
495
+ function We(e) {
495
496
  return e[0];
496
497
  }
497
- function We(e, t, n) {
498
- const { locale: r, audience: i } = n, s = Je(e, "value", i), o = Ye(t.top);
498
+ function Ke(e, t, n) {
499
+ const { locale: r, audience: i } = n, s = Ye(e, "value", i), o = We(t.top);
499
500
  if (o === void 0 || t.median === null)
500
501
  return `Nothing was measured, so there is no ${s} to report.`;
501
502
  const a = [
@@ -506,7 +507,7 @@ function We(e, t, n) {
506
507
  `${m(t.tiedAtMin, r)} of ${m(t.measured, r)} sit at the lowest value, ${m(t.min, r)}${C(e, "value", t.min)}.`
507
508
  ), t.count > t.measured && a.push(`${m(t.count - t.measured, r)} were not measured.`), a.join(" ");
508
509
  }
509
- function Ke(e, t, n) {
510
+ function Ze(e, t, n) {
510
511
  const { locale: r } = n, i = t.groups ?? [];
511
512
  if (i.length === 0)
512
513
  return "Nothing was grouped, so there are no groups to report.";
@@ -516,62 +517,62 @@ function Ke(e, t, n) {
516
517
  ], a = R(e, "modularity");
517
518
  return a !== void 0 && o.push(`Modularity is ${m(a, r)}.`), o.join(" ");
518
519
  }
519
- function Ze(e, t) {
520
+ function Xe(e, t) {
520
521
  const { locale: n } = t, r = R(e, "hops"), i = R(e, "cost");
521
522
  if (r === void 0 && i === void 0)
522
523
  return "No route was found.";
523
524
  const s = [];
524
525
  return r !== void 0 && s.push(`The route runs ${m(r, n)} ${r === 1 ? "hop" : "hops"}.`), i !== void 0 && s.push(`Its total cost is ${m(i, n)}.`), s.join(" ");
525
526
  }
526
- function Xe(e, t, n) {
527
+ function Qe(e, t, n) {
527
528
  const { locale: r } = n, i = R(e, "count") ?? t.measured, s = e.shape === "edge-set" ? "edge" : "node";
528
529
  return i === 0 ? `No ${s}s were selected.` : `${m(i, r)} ${i === 1 ? s : `${s}s`} were selected.`;
529
530
  }
530
- function Qe(e, t) {
531
+ function et(e, t) {
531
532
  const { pairs: n } = e.graph, r = Array.isArray(n) ? n.length : 0;
532
533
  return r === 0 ? "No pairs were found." : `${m(r, t.locale)} ${r === 1 ? "pair was" : "pairs were"} found.`;
533
534
  }
534
- function et(e, t) {
535
+ function tt(e, t) {
535
536
  const n = R(e, "steps");
536
537
  return n === void 0 || n === 0 ? "The series is empty." : `The series covers ${m(n, t.locale)} ${n === 1 ? "step" : "steps"}.`;
537
538
  }
538
539
  function te(e, t) {
539
540
  return e.measured === 0 ? "The run produced no values." : `The run covered ${m(e.measured, t.locale)} of ${m(e.count, t.locale)}.`;
540
541
  }
541
- function tt(e, t) {
542
+ function nt(e, t) {
542
543
  const n = e.summary(), { shape: r } = e;
543
544
  switch (r) {
544
545
  case "node-metric":
545
546
  case "edge-metric":
546
- return We(e, n, t);
547
+ return Ke(e, n, t);
547
548
  case "community":
548
549
  case "layered-grouping":
549
550
  case "category-table":
550
- return Ke(e, n, t);
551
+ return Ze(e, n, t);
551
552
  case "path":
552
- return Ze(e, t);
553
+ return Xe(e, t);
553
554
  case "node-set":
554
555
  case "edge-set":
555
- return Xe(e, n, t);
556
+ return Qe(e, n, t);
556
557
  case "pair-list":
557
- return Qe(e, t);
558
- case "temporal":
559
558
  return et(e, t);
559
+ case "temporal":
560
+ return tt(e, t);
560
561
  case "fact":
561
562
  return te(n, t);
562
563
  default:
563
564
  return te(n, t);
564
565
  }
565
566
  }
566
- function zn(e, t) {
567
+ function Cn(e, t) {
567
568
  const n = t === "node", r = n ? e.nodeValue : e.edgeValue, i = n ? e.nodeHas : e.edgeHas, s = n ? e.nodeIdOf : e.edgeIdOf;
568
569
  return {
569
570
  value: r,
570
- has: i ?? ((o, a) => nt(r(o, a))),
571
+ has: i ?? ((o, a) => rt(r(o, a))),
571
572
  idOf: s ?? null
572
573
  };
573
574
  }
574
- function nt(e) {
575
+ function rt(e) {
575
576
  return e != null;
576
577
  }
577
578
  function I(e) {
@@ -599,7 +600,7 @@ function f(e, t, n, r = {}) {
599
600
  details: { ...r, position: n, where: t }
600
601
  });
601
602
  }
602
- const rt = Object.freeze({
603
+ const it = Object.freeze({
603
604
  "[": "index, slice, wildcard and filter expressions",
604
605
  "]": "index, slice, wildcard and filter expressions",
605
606
  "{": "multi-select hashes",
@@ -608,7 +609,7 @@ const rt = Object.freeze({
608
609
  "*": "wildcards",
609
610
  "@": "the current-node reference",
610
611
  ":": "slices"
611
- }), it = ["&&", "||", "==", "!=", "<=", ">=", "!", "<", ">", ".", "(", ")"];
612
+ }), st = ["&&", "||", "==", "!=", "<=", ">=", "!", "<", ">", ".", "(", ")"];
612
613
  function fe(e) {
613
614
  return /[A-Za-z_]/.test(e);
614
615
  }
@@ -626,7 +627,7 @@ function x(e, t, n) {
626
627
  }
627
628
  throw f(`A ${n} is opened and never closed`, e, t, { delimiter: n });
628
629
  }
629
- function st(e) {
630
+ function ot(e) {
630
631
  let t = "";
631
632
  for (let n = 0; n < e.length; n++) {
632
633
  if (e[n] === "\\" && (e[n + 1] === "'" || e[n + 1] === "\\")) {
@@ -637,7 +638,7 @@ function st(e) {
637
638
  }
638
639
  return t;
639
640
  }
640
- function ot(e, t, n) {
641
+ function at(e, t, n) {
641
642
  const r = n.replace(/\\`/g, "`");
642
643
  try {
643
644
  return JSON.parse(r);
@@ -650,7 +651,7 @@ function ot(e, t, n) {
650
651
  );
651
652
  }
652
653
  }
653
- function at(e, t, n) {
654
+ function ct(e, t, n) {
654
655
  try {
655
656
  const r = JSON.parse(n);
656
657
  if (typeof r == "string")
@@ -664,7 +665,7 @@ function at(e, t, n) {
664
665
  { name: n }
665
666
  );
666
667
  }
667
- function ct(e) {
668
+ function ut(e) {
668
669
  const t = [];
669
670
  let n = 0;
670
671
  for (; n < e.length; ) {
@@ -673,7 +674,7 @@ function ct(e) {
673
674
  n++;
674
675
  continue;
675
676
  }
676
- const i = rt[r];
677
+ const i = it[r];
677
678
  if (i !== void 0)
678
679
  throw f(`A selector does not support ${i}`, e, n, { construct: i });
679
680
  if (r === "|" && e.charAt(n + 1) !== "|")
@@ -682,24 +683,24 @@ function ct(e) {
682
683
  throw f("A selector does not support expression references", e, n, {
683
684
  construct: "expression references"
684
685
  });
685
- const s = it.find((o) => e.startsWith(o, n));
686
+ const s = st.find((o) => e.startsWith(o, n));
686
687
  if (s !== void 0) {
687
688
  t.push({ kind: "operator", text: s, at: n }), n += s.length;
688
689
  continue;
689
690
  }
690
691
  if (r === "`") {
691
692
  const o = x(e, n, "`");
692
- t.push({ kind: "literal", text: "", value: ot(e, n, e.slice(n + 1, o)), at: n }), n = o + 1;
693
+ t.push({ kind: "literal", text: "", value: at(e, n, e.slice(n + 1, o)), at: n }), n = o + 1;
693
694
  continue;
694
695
  }
695
696
  if (r === "'") {
696
697
  const o = x(e, n, "'");
697
- t.push({ kind: "literal", text: "", value: st(e.slice(n + 1, o)), at: n }), n = o + 1;
698
+ t.push({ kind: "literal", text: "", value: ot(e.slice(n + 1, o)), at: n }), n = o + 1;
698
699
  continue;
699
700
  }
700
701
  if (r === '"') {
701
702
  const o = x(e, n, '"');
702
- t.push({ kind: "identifier", text: at(e, n, e.slice(n, o + 1)), at: n }), n = o + 1;
703
+ t.push({ kind: "identifier", text: ct(e, n, e.slice(n, o + 1)), at: n }), n = o + 1;
703
704
  continue;
704
705
  }
705
706
  if (fe(r)) {
@@ -720,7 +721,7 @@ function ct(e) {
720
721
  }
721
722
  return t.push({ kind: "end", text: "", at: e.length }), t;
722
723
  }
723
- const ut = Object.freeze({
724
+ const lt = Object.freeze({
724
725
  "!=": "!=",
725
726
  "<": "<",
726
727
  "<=": "<=",
@@ -735,7 +736,7 @@ function S(e, t) {
735
736
  const n = N(e);
736
737
  return n.kind === "operator" && n.text === t;
737
738
  }
738
- function lt(e) {
739
+ function dt(e) {
739
740
  const t = N(e), n = [];
740
741
  for (; ; ) {
741
742
  const r = N(e);
@@ -760,12 +761,12 @@ function lt(e) {
760
761
  e.index++;
761
762
  }
762
763
  }
763
- function dt(e) {
764
+ function pt(e) {
764
765
  const t = N(e);
765
766
  if (t.kind === "literal")
766
767
  return e.index++, { kind: "literal", value: t.value };
767
768
  if (t.kind === "identifier")
768
- return lt(e);
769
+ return dt(e);
769
770
  if (S(e, "(")) {
770
771
  e.index++;
771
772
  const n = ye(e);
@@ -781,7 +782,7 @@ function dt(e) {
781
782
  }
782
783
  function U(e) {
783
784
  if (!S(e, "!"))
784
- return dt(e);
785
+ return pt(e);
785
786
  const t = N(e);
786
787
  e.index++;
787
788
  const n = U(e);
@@ -795,7 +796,7 @@ function U(e) {
795
796
  return { kind: "not", operand: n };
796
797
  }
797
798
  function re(e) {
798
- const t = U(e), n = N(e), r = n.kind === "operator" ? ut[n.text] : void 0;
799
+ const t = U(e), n = N(e), r = n.kind === "operator" ? lt[n.text] : void 0;
799
800
  return r === void 0 ? t : (e.index++, { kind: "compare", operator: r, left: t, right: U(e) });
800
801
  }
801
802
  function ie(e) {
@@ -810,8 +811,8 @@ function ye(e) {
810
811
  e.index++, t = { kind: "or", left: t, right: ie(e) };
811
812
  return t;
812
813
  }
813
- function pt(e) {
814
- const t = { where: e, tokens: ct(e), index: 0 }, n = ye(t), r = N(t);
814
+ function ht(e) {
815
+ const t = { where: e, tokens: ut(e), index: 0 }, n = ye(t), r = N(t);
815
816
  if (r.kind !== "end")
816
817
  throw f(
817
818
  `${JSON.stringify(r.text)} is left over at the end of the selector`,
@@ -874,21 +875,21 @@ function w(e, t) {
874
875
  };
875
876
  }
876
877
  default:
877
- return ft(e.operator, e.left, e.right, t);
878
+ return gt(e.operator, e.left, e.right, t);
878
879
  }
879
880
  }
880
- const ht = Object.freeze({
881
+ const mt = Object.freeze({
881
882
  "<": (e, t) => e < t,
882
883
  "<=": (e, t) => e <= t,
883
884
  ">": (e, t) => e > t,
884
885
  ">=": (e, t) => e >= t
885
886
  });
886
- function mt(e, t) {
887
+ function ft(e, t) {
887
888
  return e.kind === "literal" ? e : t.kind === "literal" ? t : null;
888
889
  }
889
- function ft(e, t, n, r) {
890
+ function gt(e, t, n, r) {
890
891
  if (e === "==" || e === "!=") {
891
- const a = e === "==", u = t.kind === "literal", c = mt(t, n), h = u ? n : t;
892
+ const a = e === "==", u = t.kind === "literal", c = ft(t, n), h = u ? n : t;
892
893
  if (c !== null && c.value === null && h.kind === "path") {
893
894
  const { path: d } = h, { has: v } = r;
894
895
  return (k) => v(k, d) !== a;
@@ -900,7 +901,7 @@ function ft(e, t, n, r) {
900
901
  }
901
902
  return (d) => G(p(d), l(d)) === a;
902
903
  }
903
- const i = w(t, r), s = w(n, r), o = ht[e];
904
+ const i = w(t, r), s = w(n, r), o = mt[e];
904
905
  return (a) => {
905
906
  const u = i(a), c = s(a);
906
907
  return typeof u == "number" && typeof c == "number" ? o(u, c) : null;
@@ -929,10 +930,10 @@ function A(e, t) {
929
930
  }
930
931
  }
931
932
  }
932
- function gt(e) {
933
- return e.split(".").map((t) => yt(t) ? t : JSON.stringify(t)).join(".");
934
- }
935
933
  function yt(e) {
934
+ return e.split(".").map((t) => bt(t) ? t : JSON.stringify(t)).join(".");
935
+ }
936
+ function bt(e) {
936
937
  if (e === "" || !fe(e[0]))
937
938
  return !1;
938
939
  for (let t = 1; t < e.length; t++)
@@ -940,11 +941,11 @@ function yt(e) {
940
941
  return !1;
941
942
  return !0;
942
943
  }
943
- function Cn(e, t) {
944
+ function xn(e, t) {
944
945
  const { has: n } = e;
945
946
  return (r) => n(r, t);
946
947
  }
947
- function xn(e, t) {
948
+ function jn(e, t) {
948
949
  const { idOf: n } = e;
949
950
  if (n === null)
950
951
  throw new y({
@@ -955,7 +956,7 @@ function xn(e, t) {
955
956
  });
956
957
  return (r) => t.has(n(r));
957
958
  }
958
- function jn(e, t, n) {
959
+ function Pn(e, t, n) {
959
960
  const { value: r } = e;
960
961
  return (i) => {
961
962
  const s = n();
@@ -965,8 +966,8 @@ function jn(e, t, n) {
965
966
  return typeof o == "number" && Number.isFinite(o) && o >= s;
966
967
  };
967
968
  }
968
- function Pn(e, t) {
969
- const n = pt(e), r = [];
969
+ function Ln(e, t) {
970
+ const n = ht(e), r = [];
970
971
  if ($(n, r), r.length === 0) {
971
972
  let i = n;
972
973
  for (; i.kind === "group"; )
@@ -981,7 +982,7 @@ function Pn(e, t) {
981
982
  }
982
983
  return { paths: Object.freeze(r), test: A(n, t) };
983
984
  }
984
- const H = "results", bt = "$";
985
+ const H = "results", wt = "$";
985
986
  function T(e, t) {
986
987
  return t === void 0 ? `${H}.${e}` : `${H}.${e}.${t}`;
987
988
  }
@@ -1153,7 +1154,7 @@ const be = {
1153
1154
  scope: "graph",
1154
1155
  types: ["number"]
1155
1156
  }
1156
- }, Ln = Object.keys(be), q = {
1157
+ }, Dn = Object.keys(be), J = {
1157
1158
  "node-metric": {
1158
1159
  shape: "node-metric",
1159
1160
  primaryField: "value",
@@ -1271,13 +1272,13 @@ const be = {
1271
1272
  }
1272
1273
  };
1273
1274
  function B(e) {
1274
- return q[e];
1275
+ return J[e];
1275
1276
  }
1276
- function Dn(e) {
1277
- return q[e].layer === "highlight";
1277
+ function Gn(e) {
1278
+ return J[e].layer === "highlight";
1278
1279
  }
1279
- function Gn(e, t) {
1280
- const n = q[e], r = [], i = [
1280
+ function Un(e, t) {
1281
+ const n = J[e], r = [], i = [
1281
1282
  { names: n.nodeFields, kind: "node" },
1282
1283
  { names: n.edgeFields, kind: "edge" },
1283
1284
  { names: n.graphFields, kind: "graph" }
@@ -1300,18 +1301,18 @@ function Gn(e, t) {
1300
1301
  reason: `${o} field "${a}" is typed "${u.type}", not ${c.map((h) => `"${h}"`).join(" or ")}`
1301
1302
  });
1302
1303
  }
1303
- return n.headlineScalar && !wt(n, t) && r.push({
1304
+ return n.headlineScalar && !vt(n, t) && r.push({
1304
1305
  field: null,
1305
1306
  kind: "graph",
1306
1307
  reason: `shape "${e}" requires one graph-level scalar of its own beside "count"`
1307
1308
  }), r;
1308
1309
  }
1309
- function wt(e, t) {
1310
+ function vt(e, t) {
1310
1311
  const n = [...e.graphFields, ...e.optionalGraphFields];
1311
1312
  return t.some((r) => r.kind === "graph" && !n.includes(r.name));
1312
1313
  }
1313
- const vt = 3;
1314
- function Ot(e, t) {
1314
+ const Ot = 3;
1315
+ function kt(e, t) {
1315
1316
  if (e === t)
1316
1317
  return 0;
1317
1318
  const n = new Uint32Array(t.length + 1), r = new Uint32Array(t.length + 1);
@@ -1327,23 +1328,23 @@ function Ot(e, t) {
1327
1328
  }
1328
1329
  return n[t.length];
1329
1330
  }
1330
- function kt(e, t, n = vt) {
1331
+ function Nt(e, t, n = Ot) {
1331
1332
  const r = e.toLowerCase(), i = t.map((s) => ({
1332
1333
  candidate: s,
1333
- distance: Ot(r, s.toLowerCase())
1334
+ distance: kt(r, s.toLowerCase())
1334
1335
  }));
1335
1336
  return i.sort((s, o) => s.distance - o.distance || s.candidate.localeCompare(o.candidate)), Object.freeze(i.slice(0, Math.max(n, 0)).map((s) => s.candidate));
1336
1337
  }
1337
1338
  function se(e) {
1338
1339
  return typeof e == "string" ? e : "runId" in e ? e.runId : e.id;
1339
1340
  }
1340
- function Nt(e) {
1341
+ function St(e) {
1341
1342
  return typeof e == "string" ? void 0 : e.shape;
1342
1343
  }
1343
- function St(e, t) {
1344
+ function At(e, t) {
1344
1345
  return e.fields.some((n) => n.name === t) || t in e.graph;
1345
1346
  }
1346
- class At {
1347
+ class $t {
1347
1348
  #e;
1348
1349
  /**
1349
1350
  * Build the API over a registry.
@@ -1367,7 +1368,7 @@ class At {
1367
1368
  const r = se(t);
1368
1369
  if (n !== void 0)
1369
1370
  return T(r, n);
1370
- const i = Nt(t) ?? this.#e.entry(r)?.shape, s = i === void 0 ? null : B(i).primaryField;
1371
+ const i = St(t) ?? this.#e.entry(r)?.shape, s = i === void 0 ? null : B(i).primaryField;
1371
1372
  return s === null ? T(r) : T(r, s);
1372
1373
  }
1373
1374
  /**
@@ -1383,7 +1384,7 @@ class At {
1383
1384
  * @returns The path with every segment quoted that needs it.
1384
1385
  */
1385
1386
  term(t, n) {
1386
- return gt(n === void 0 ? this.path(t) : this.path(t, n));
1387
+ return yt(n === void 0 ? this.path(t) : this.path(t, n));
1387
1388
  }
1388
1389
  /**
1389
1390
  * One run's result.
@@ -1405,7 +1406,7 @@ class At {
1405
1406
  */
1406
1407
  has(t, n) {
1407
1408
  const r = this.get(t);
1408
- return r === void 0 ? !1 : n === void 0 || St(r, n);
1409
+ return r === void 0 ? !1 : n === void 0 || At(r, n);
1409
1410
  }
1410
1411
  /**
1411
1412
  * Every run that has published a result, as an expression editor reads them.
@@ -1418,20 +1419,20 @@ class At {
1418
1419
  return Object.freeze(t);
1419
1420
  }
1420
1421
  }
1421
- function Un(e) {
1422
- return new At(e);
1422
+ function Hn(e) {
1423
+ return new $t(e);
1423
1424
  }
1424
- const $t = 20, j = 100, Rt = 100, Et = Object.freeze([]), Ft = Object.freeze(["max", "min-max", "none"]);
1425
+ const Rt = 20, j = 100, Et = 100, Ft = Object.freeze([]), It = Object.freeze(["max", "min-max", "none"]);
1425
1426
  function we(e) {
1426
- return typeof e == "string" && Ft.includes(e);
1427
+ return typeof e == "string" && It.includes(e);
1427
1428
  }
1428
- function Hn(e) {
1429
+ function Bn(e) {
1429
1430
  return {
1430
1431
  length: e.length,
1431
1432
  get: (t) => e[t]
1432
1433
  };
1433
1434
  }
1434
- const It = Object.freeze({
1435
+ const Tt = Object.freeze({
1435
1436
  measured: 0,
1436
1437
  min: Number.NaN,
1437
1438
  max: Number.NaN,
@@ -1448,7 +1449,7 @@ function ve(e) {
1448
1449
  Number.isFinite(d) && (n[r] = d, r++);
1449
1450
  }
1450
1451
  if (r === 0)
1451
- return { length: t, ...It };
1452
+ return { length: t, ...Tt };
1452
1453
  let i = Number.POSITIVE_INFINITY, s = Number.NEGATIVE_INFINITY, o = Number.POSITIVE_INFINITY, a = 0, u = 0;
1453
1454
  for (let l = 0; l < r; l++) {
1454
1455
  const d = n[l];
@@ -1482,7 +1483,7 @@ function Oe(e) {
1482
1483
  median: t.median
1483
1484
  }), statistics: t };
1484
1485
  }
1485
- function J(e) {
1486
+ function q(e) {
1486
1487
  const t = e.filter((o) => Number.isFinite(o.value)).map((o) => ({ entry: o, label: String(o.id) }));
1487
1488
  t.sort((o, a) => o.entry.value !== a.entry.value ? a.entry.value - o.entry.value : o.label === a.label ? 0 : o.label < a.label ? -1 : 1);
1488
1489
  const n = t.length, r = [];
@@ -1500,7 +1501,7 @@ function J(e) {
1500
1501
  }
1501
1502
  return Object.freeze(r);
1502
1503
  }
1503
- function Tt(e, t) {
1504
+ function Mt(e, t) {
1504
1505
  let n = Math.min(t, e.length);
1505
1506
  for (; n > 0 && n < e.length && e[n].rank === e[n - 1].rank; )
1506
1507
  n--;
@@ -1517,17 +1518,17 @@ function Tt(e, t) {
1517
1518
  reason: o
1518
1519
  });
1519
1520
  }
1520
- function Mt(e) {
1521
+ function _t(e) {
1521
1522
  const { smallestPositive: t } = e;
1522
1523
  if (e.measured === 0 || !(e.max > 0) || t === null)
1523
1524
  return !1;
1524
1525
  const n = e.min > 0 ? e.min : t;
1525
1526
  return Math.log10(e.max) > Math.log10(n);
1526
1527
  }
1527
- function _t(e) {
1528
- return e.measured === 0 || !(e.median > 0) || e.max / e.median <= Rt ? "linear" : Mt(e) ? "log" : "linear";
1528
+ function zt(e) {
1529
+ return e.measured === 0 || !(e.median > 0) || e.max / e.median <= Et ? "linear" : _t(e) ? "log" : "linear";
1529
1530
  }
1530
- function zt(e, t, n, r) {
1531
+ function Ct(e, t, n, r) {
1531
1532
  if (!(t > e))
1532
1533
  return { binCount: 1, indexOf: () => 0, rangeOf: () => [e, t] };
1533
1534
  if (r) {
@@ -1551,7 +1552,7 @@ function zt(e, t, n, r) {
1551
1552
  ]
1552
1553
  };
1553
1554
  }
1554
- function Ct(e, t, n, r, i) {
1555
+ function xt(e, t, n, r, i) {
1555
1556
  const s = e > 0 ? 0 : 1, o = s === 0 ? e : n;
1556
1557
  if (!(t > 0) || o === null || !(o > 0))
1557
1558
  return null;
@@ -1581,9 +1582,9 @@ function Ct(e, t, n, r, i) {
1581
1582
  }
1582
1583
  };
1583
1584
  }
1584
- function xt(e) {
1585
+ function jt(e) {
1585
1586
  if (e === void 0)
1586
- return $t;
1587
+ return Rt;
1587
1588
  if (!Number.isInteger(e) || e < 1 || e > j)
1588
1589
  throw new y({
1589
1590
  code: "E_OPTION_RANGE",
@@ -1593,7 +1594,7 @@ function xt(e) {
1593
1594
  });
1594
1595
  return e;
1595
1596
  }
1596
- function jt(e, t) {
1597
+ function Pt(e, t) {
1597
1598
  const n = /* @__PURE__ */ new Map();
1598
1599
  for (let r = 0; r < e.length; r++) {
1599
1600
  const i = e.get(r);
@@ -1610,12 +1611,12 @@ function jt(e, t) {
1610
1611
  }
1611
1612
  return n;
1612
1613
  }
1613
- function Pt(e, t) {
1614
- const n = xt(t?.bins), r = t?.integerValued ?? !1, i = ve(e), s = _t(i), o = jt(e, n);
1614
+ function Lt(e, t) {
1615
+ const n = jt(t?.bins), r = t?.integerValued ?? !1, i = ve(e), s = zt(i), o = Pt(e, n);
1615
1616
  if (o !== null) {
1616
1617
  if (o.size === 0)
1617
1618
  return Object.freeze({
1618
- bins: Et,
1619
+ bins: Ft,
1619
1620
  // Nothing was measured, so nothing is on any axis. Reported as linear rather
1620
1621
  // than as the request, because "log scale" over an empty chart is the same false
1621
1622
  // caption this whole return type exists to prevent.
@@ -1634,7 +1635,7 @@ function Pt(e, t) {
1634
1635
  binning: "per-value"
1635
1636
  });
1636
1637
  }
1637
- const u = t?.scale === "log" || t?.scale === "auto" && s === "log" ? Ct(i.min, i.max, i.smallestPositive, n, r) : null, c = u ?? zt(i.min, i.max, n, r), h = new Array(c.binCount).fill(0);
1638
+ const u = t?.scale === "log" || t?.scale === "auto" && s === "log" ? xt(i.min, i.max, i.smallestPositive, n, r) : null, c = u ?? Ct(i.min, i.max, n, r), h = new Array(c.binCount).fill(0);
1638
1639
  for (let p = 0; p < e.length; p++) {
1639
1640
  const l = e.get(p);
1640
1641
  Number.isFinite(l) && (h[c.indexOf(l)] += 1);
@@ -1653,7 +1654,7 @@ function Pt(e, t) {
1653
1654
  binning: "banded"
1654
1655
  });
1655
1656
  }
1656
- const Lt = 10, Dt = 10;
1657
+ const Dt = 10, Gt = 10;
1657
1658
  function oe(e) {
1658
1659
  const t = { ids: [], records: [], index: /* @__PURE__ */ new Map() };
1659
1660
  if (e === void 0)
@@ -1705,7 +1706,7 @@ function Se(e, t) {
1705
1706
  const n = String(e), r = String(t);
1706
1707
  return n === r ? 0 : n < r ? -1 : 1;
1707
1708
  }
1708
- function Gt(e) {
1709
+ function Ut(e) {
1709
1710
  const t = [...e.entries()].map(([n, r]) => ({ group: n, size: r }));
1710
1711
  return t.sort((n, r) => r.size - n.size || Se(n.group, r.group)), Object.freeze(t.map((n) => Object.freeze(n)));
1711
1712
  }
@@ -1715,7 +1716,7 @@ function Ae(e, t) {
1715
1716
  }
1716
1717
  function ae(e, t, n) {
1717
1718
  const { statistics: r } = Oe(V(e, "value"));
1718
- for (const i of J(Y(e, "value"))) {
1719
+ for (const i of q(Y(e, "value"))) {
1719
1720
  const s = e.index.get(i.id);
1720
1721
  s !== void 0 && (M(e.records[s], "rank", i.rank), M(e.records[s], "percentile", i.percentile));
1721
1722
  }
@@ -1727,10 +1728,10 @@ function ce(e, t, n, r, i) {
1727
1728
  const a = o[n];
1728
1729
  W(a) && M(o, r, s.get(a));
1729
1730
  }
1730
- g(t, i, s.size), g(t, "sizes", Gt(s));
1731
+ g(t, i, s.size), g(t, "sizes", Ut(s));
1731
1732
  }
1732
- function Ut(e, t) {
1733
- for (const r of J(Y(e, "score"))) {
1733
+ function Ht(e, t) {
1734
+ for (const r of q(Y(e, "score"))) {
1734
1735
  const i = e.index.get(r.id);
1735
1736
  i !== void 0 && M(e.records[i], "rank", r.rank);
1736
1737
  }
@@ -1752,7 +1753,7 @@ function ue(e, t) {
1752
1753
  r[t] !== void 0 && n++;
1753
1754
  return n;
1754
1755
  }
1755
- function Ht(e, t, n, r, i) {
1756
+ function Bt(e, t, n, r, i) {
1756
1757
  switch (e) {
1757
1758
  case "node-metric":
1758
1759
  ae(t, r, i);
@@ -1767,7 +1768,7 @@ function Ht(e, t, n, r, i) {
1767
1768
  ce(t, r, "level", "levelSize", "levelCount");
1768
1769
  break;
1769
1770
  case "category-table":
1770
- Ut(t, r);
1771
+ Ht(t, r);
1771
1772
  break;
1772
1773
  case "path":
1773
1774
  g(r, "length", F(t, "onPath")), g(r, "hops", F(n, "onPath"));
@@ -1780,7 +1781,7 @@ function Ht(e, t, n, r, i) {
1780
1781
  break;
1781
1782
  }
1782
1783
  }
1783
- function Bt(e) {
1784
+ function Vt(e) {
1784
1785
  switch (e) {
1785
1786
  case "node-metric":
1786
1787
  case "edge-metric":
@@ -1793,7 +1794,7 @@ function Bt(e) {
1793
1794
  return null;
1794
1795
  }
1795
1796
  }
1796
- function Vt(e, t) {
1797
+ function Jt(e, t) {
1797
1798
  if (!Array.isArray(e))
1798
1799
  return;
1799
1800
  const n = [];
@@ -1826,7 +1827,7 @@ class qt {
1826
1827
  */
1827
1828
  constructor(t, n, r, i) {
1828
1829
  this.runId = t.runId, this.shape = t.shape, this.fields = Object.freeze([...t.fields]), this.measured = Object.freeze({ nodes: t.measured.nodes, edges: t.measured.edges }), this.graph = i, this.#e = n, this.#t = r, this.#n = t.caveats, this.#r = t.durationMs, this.#i = t.labelOf ?? (() => {
1829
- }), this.#s = t.reading ?? tt;
1830
+ }), this.#s = t.reading ?? nt;
1830
1831
  }
1831
1832
  /**
1832
1833
  * One node's fields.
@@ -1892,7 +1893,7 @@ class qt {
1892
1893
  const r = `${String(n)}:${t}`, i = this.#c.get(r);
1893
1894
  if (i !== void 0)
1894
1895
  return i;
1895
- const s = Tt(this.ranking(t), this.#l(n, "n"));
1896
+ const s = Mt(this.ranking(t), this.#l(n, "n"));
1896
1897
  return this.#c.set(r, s), s;
1897
1898
  }
1898
1899
  /**
@@ -1927,7 +1928,7 @@ class qt {
1927
1928
  */
1928
1929
  histogram(t, n) {
1929
1930
  const r = this.#d(t), i = r.kind === "edge" ? this.#t : this.#e;
1930
- return Pt(V(i, t), {
1931
+ return Lt(V(i, t), {
1931
1932
  ...n,
1932
1933
  integerValued: r.type === "integer"
1933
1934
  });
@@ -1983,7 +1984,7 @@ class qt {
1983
1984
  code: "E_UNKNOWN_ATTRIBUTE",
1984
1985
  source: "run",
1985
1986
  message: `Run "${this.runId}" published no field named "${t}".`,
1986
- details: { field: t, available: i, candidates: kt(t, i) },
1987
+ details: { field: t, available: i, candidates: Nt(t, i) },
1987
1988
  target: { kind: "run", id: this.runId }
1988
1989
  });
1989
1990
  if (!P(r))
@@ -2025,7 +2026,7 @@ class qt {
2025
2026
  * @throws A GraphtyError naming what went wrong.
2026
2027
  */
2027
2028
  #f(t) {
2028
- const n = J(Y(this.#p(t), t));
2029
+ const n = q(Y(this.#p(t), t));
2029
2030
  return this.#a.set(t, n), n;
2030
2031
  }
2031
2032
  /**
@@ -2033,7 +2034,7 @@ class qt {
2033
2034
  * @returns The summary.
2034
2035
  */
2035
2036
  #g() {
2036
- const t = Bt(this.shape), n = t === null || this.#m(t) === null ? null : t, r = n === null ? null : this.#h(n).statistics, i = r !== null && r.measured > 0 ? r : null, s = n === null ? [] : this.ranking(n, Lt).map(
2037
+ const t = Vt(this.shape), n = t === null || this.#m(t) === null ? null : t, r = n === null ? null : this.#h(n).statistics, i = r !== null && r.measured > 0 ? r : null, s = n === null ? [] : this.ranking(n, Dt).map(
2037
2038
  (c) => Object.freeze({
2038
2039
  id: c.id,
2039
2040
  label: this.#i(c.id) ?? String(c.id),
@@ -2053,7 +2054,7 @@ class qt {
2053
2054
  top: Object.freeze(s),
2054
2055
  caveats: this.#n,
2055
2056
  durationMs: this.#r
2056
- }, a = this.graph.sizes ?? this.graph.categories, u = Vt(a, Dt);
2057
+ }, a = this.graph.sizes ?? this.graph.categories, u = Jt(a, Gt);
2057
2058
  return Object.freeze(u === void 0 ? o : { ...o, groups: u });
2058
2059
  }
2059
2060
  /**
@@ -2090,16 +2091,16 @@ class qt {
2090
2091
  return we(n) ? n : t === null ? "none" : Ae(this.fields, t);
2091
2092
  }
2092
2093
  }
2093
- function Jt(e) {
2094
+ function Yt(e) {
2094
2095
  const t = oe(e.nodes), n = oe(e.edges), r = { ...e.graph };
2095
- Ht(e.shape, t, n, r, e.fields);
2096
+ Bt(e.shape, t, n, r, e.fields);
2096
2097
  for (const i of t.records)
2097
2098
  Object.freeze(i);
2098
2099
  for (const i of n.records)
2099
2100
  Object.freeze(i);
2100
2101
  return new qt(e, t, n, Object.freeze(r));
2101
2102
  }
2102
- function Yt(e) {
2103
+ function Wt(e) {
2103
2104
  const t = e.styles?.config.data.knownFields.nodeLabelPath ?? null;
2104
2105
  if (t === null)
2105
2106
  return;
@@ -2109,11 +2110,11 @@ function Yt(e) {
2109
2110
  return typeof i == "string" || typeof i == "number" ? String(i) : void 0;
2110
2111
  };
2111
2112
  }
2112
- function Bn(e) {
2113
+ function Vn(e) {
2113
2114
  return { exact: !0, precision: "f64", notes: [], ...e };
2114
2115
  }
2115
- const Wt = 1024, Kt = 16;
2116
- function Zt() {
2116
+ const Kt = 1024, Zt = 16;
2117
+ function Xt() {
2117
2118
  return {
2118
2119
  signal: new AbortController().signal,
2119
2120
  report: () => {
@@ -2123,15 +2124,15 @@ function Zt() {
2123
2124
  })
2124
2125
  };
2125
2126
  }
2126
- async function Vn(e, t, n, r) {
2127
+ async function Jn(e, t, n, r) {
2127
2128
  const i = n.length;
2128
2129
  e.report({ phase: t, completed: 0, total: i });
2129
2130
  let s = performance.now();
2130
2131
  for (let o = 0; o < i; o++)
2131
- o > 0 && o % Wt === 0 && (e.signal.throwIfAborted(), e.report({ phase: t, completed: o, total: i }), performance.now() - s >= Kt && (await e.yieldNow(), s = performance.now())), r(n[o], o);
2132
+ o > 0 && o % Kt === 0 && (e.signal.throwIfAborted(), e.report({ phase: t, completed: o, total: i }), performance.now() - s >= Zt && (await e.yieldNow(), s = performance.now())), r(n[o], o);
2132
2133
  e.signal.throwIfAborted(), e.report({ phase: t, completed: i, total: i });
2133
2134
  }
2134
- function Xt(e, t, n) {
2135
+ function Qt(e, t, n) {
2135
2136
  const r = n?.find((s) => s.name === e.name && s.kind === e.kind), i = {
2136
2137
  name: e.name,
2137
2138
  plainName: r?.plainName ?? e.name,
@@ -2167,7 +2168,7 @@ class qn extends D {
2167
2168
  */
2168
2169
  resolveOptions(t) {
2169
2170
  const { descriptor: n } = this.constructor;
2170
- return n === void 0 ? super.resolveOptions(t) : Ie(n.options, t ?? {}, {
2171
+ return n === void 0 ? super.resolveOptions(t) : _e(n.options, t ?? {}, {
2171
2172
  kind: "algorithm",
2172
2173
  id: n.key
2173
2174
  });
@@ -2194,7 +2195,7 @@ class qn extends D {
2194
2195
  * @returns A promise that settles when the result has been published.
2195
2196
  */
2196
2197
  async run() {
2197
- await this.computeRun(Zt(), this.type);
2198
+ await this.computeRun(Xt(), this.type);
2198
2199
  }
2199
2200
  /**
2200
2201
  * Compute on behalf of a run, and hand the result back.
@@ -2229,11 +2230,11 @@ class qn extends D {
2229
2230
  const i = Date.now(), s = await this.compute(t);
2230
2231
  if (s === null)
2231
2232
  return;
2232
- const o = this.graph.getDataManager(), a = Yt(this.graph), u = Jt({
2233
+ const o = this.graph.getDataManager(), a = Wt(this.graph), u = Yt({
2233
2234
  ...a === void 0 ? {} : { labelOf: a },
2234
2235
  runId: n,
2235
2236
  shape: s.shape,
2236
- fields: s.fields.map((c) => Xt(c, n, r)),
2237
+ fields: s.fields.map((c) => Qt(c, n, r)),
2237
2238
  measured: { nodes: o.nodes.size, edges: o.edges.size },
2238
2239
  graph: s.graph,
2239
2240
  nodes: s.nodes,
@@ -2244,7 +2245,7 @@ class qn extends D {
2244
2245
  return this.#e = u, u;
2245
2246
  }
2246
2247
  }
2247
- function Jn(e, t = "number") {
2248
+ function Yn(e, t = "number") {
2248
2249
  return [
2249
2250
  { name: "value", kind: e, type: t },
2250
2251
  { name: "rank", kind: e, type: "integer" },
@@ -2264,15 +2265,15 @@ const le = [
2264
2265
  { name: "groupCount", kind: "graph", type: "integer" },
2265
2266
  { name: "sizes", kind: "graph", type: "table" }
2266
2267
  ];
2267
- function Yn(e) {
2268
+ function Wn(e) {
2268
2269
  return e ? [...le, { name: "modularity", kind: "graph", type: "number" }] : le;
2269
2270
  }
2270
- const Wn = [
2271
+ const Kn = [
2271
2272
  { name: "level", kind: "node", type: "integer" },
2272
2273
  { name: "levelSize", kind: "node", type: "integer" },
2273
2274
  { name: "levelCount", kind: "graph", type: "integer" },
2274
2275
  { name: "sizes", kind: "graph", type: "table" }
2275
- ], Kn = [
2276
+ ], Zn = [
2276
2277
  { name: "onPath", kind: "node", type: "boolean" },
2277
2278
  { name: "order", kind: "node", type: "integer" },
2278
2279
  { name: "onPath", kind: "edge", type: "boolean" },
@@ -2280,18 +2281,18 @@ const Wn = [
2280
2281
  { name: "cost", kind: "graph", type: "number" },
2281
2282
  { name: "hops", kind: "graph", type: "integer" }
2282
2283
  ];
2283
- function Zn(e, t) {
2284
+ function Xn(e, t) {
2284
2285
  return [
2285
2286
  { name: "in", kind: e, type: "boolean" },
2286
2287
  { name: "count", kind: "graph", type: "integer" },
2287
2288
  { ...t, kind: "graph" }
2288
2289
  ];
2289
2290
  }
2290
- const Qt = `${H}.${bt}`;
2291
+ const en = `${H}.${wt}`;
2291
2292
  function O(e) {
2292
- return { ...e, path: `${Qt}.${e.name}` };
2293
+ return { ...e, path: `${en}.${e.name}` };
2293
2294
  }
2294
- function Xn(e) {
2295
+ function Qn(e) {
2295
2296
  return [
2296
2297
  O({
2297
2298
  name: "value",
@@ -2336,28 +2337,28 @@ function Xn(e) {
2336
2337
  })
2337
2338
  ];
2338
2339
  }
2339
- const en = 12;
2340
- function Qn(e, t = {}) {
2341
- return (tn(e) ? nn(e) : rn(e)).map((r) => {
2342
- const i = { ...r.meta, ...t.meta?.[r.name] }, s = r.node === null ? an(r.name, i, r.failure ?? "the schema could not be converted") : on(r.name, r.node, i), o = t.overrides?.[r.name];
2340
+ const tn = 12;
2341
+ function er(e, t = {}) {
2342
+ return (nn(e) ? rn(e) : sn(e)).map((r) => {
2343
+ const i = { ...r.meta, ...t.meta?.[r.name] }, s = r.node === null ? cn(r.name, i, r.failure ?? "the schema could not be converted") : an(r.name, r.node, i), o = t.overrides?.[r.name];
2343
2344
  return o === void 0 ? s : { ...s, ...o };
2344
2345
  });
2345
2346
  }
2346
- function tn(e) {
2347
+ function nn(e) {
2347
2348
  return typeof e != "object" || e === null ? !1 : "_zod" in e || "_def" in e;
2348
2349
  }
2349
- function nn(e) {
2350
+ function rn(e) {
2350
2351
  const t = $e(e);
2351
2352
  if (t === null)
2352
2353
  return [];
2353
2354
  const { properties: n } = t;
2354
2355
  return n === void 0 ? [] : Object.entries(n).map(([r, i]) => ({ name: r, node: Re(i, t) }));
2355
2356
  }
2356
- function rn(e) {
2357
+ function sn(e) {
2357
2358
  const t = Object.entries(e), n = {};
2358
2359
  for (const [s, o] of t)
2359
2360
  n[s] = o.schema;
2360
- const r = sn(n), i = r?.properties;
2361
+ const r = on(n), i = r?.properties;
2361
2362
  return t.map(([s, o]) => {
2362
2363
  const a = i?.[s];
2363
2364
  return r === null || a === void 0 ? {
@@ -2375,7 +2376,7 @@ function $e(e) {
2375
2376
  return null;
2376
2377
  }
2377
2378
  }
2378
- function sn(e) {
2379
+ function on(e) {
2379
2380
  try {
2380
2381
  return $e(me.object(e));
2381
2382
  } catch {
@@ -2390,8 +2391,8 @@ function Re(e, t) {
2390
2391
  const r = n.slice(de.length).replaceAll("~1", "/").replaceAll("~0", "~");
2391
2392
  return t.$defs?.[r] ?? e;
2392
2393
  }
2393
- function on(e, t, n) {
2394
- const r = Ee(t, 0), i = cn(r), s = {
2394
+ function an(e, t, n) {
2395
+ const r = Ee(t, 0), i = un(r), s = {
2395
2396
  name: e,
2396
2397
  plainName: n.label ?? K(e),
2397
2398
  technicalName: e,
@@ -2406,7 +2407,7 @@ function on(e, t, n) {
2406
2407
  const u = n.step ?? a?.multipleOf;
2407
2408
  return u !== void 0 && (s.step = u), i.values !== void 0 && (s.values = i.values), n.group !== void 0 && (s.group = n.group), n.advanced !== void 0 && (s.advanced = n.advanced), i.unsupportedReason !== void 0 && (s.unsupportedReason = i.unsupportedReason), s;
2408
2409
  }
2409
- function an(e, t, n) {
2410
+ function cn(e, t, n) {
2410
2411
  const r = {
2411
2412
  name: e,
2412
2413
  plainName: t.label ?? K(e),
@@ -2417,7 +2418,7 @@ function an(e, t, n) {
2417
2418
  return t.description !== void 0 && (r.description = t.description), t.step !== void 0 && (r.step = t.step), t.group !== void 0 && (r.group = t.group), t.advanced !== void 0 && (r.advanced = t.advanced), r;
2418
2419
  }
2419
2420
  function Ee(e, t) {
2420
- if (t >= en)
2421
+ if (t >= tn)
2421
2422
  return { arms: [], nullable: !1, unresolvedRef: !0 };
2422
2423
  if (e.$ref !== void 0)
2423
2424
  return { arms: [], nullable: !1, unresolvedRef: !0 };
@@ -2431,7 +2432,7 @@ function Ee(e, t) {
2431
2432
  }
2432
2433
  return r;
2433
2434
  }
2434
- function cn(e) {
2435
+ function un(e) {
2435
2436
  if (e.arms.length === 0)
2436
2437
  return e.unresolvedRef ? {
2437
2438
  type: "unknown",
@@ -2440,18 +2441,18 @@ function cn(e) {
2440
2441
  type: "unknown",
2441
2442
  unsupportedReason: e.nullable ? "the only value the schema accepts is null" : "the schema declares no value type"
2442
2443
  };
2443
- const t = ln(e.arms);
2444
+ const t = dn(e.arms);
2444
2445
  if (t !== void 0)
2445
2446
  return { type: "enum", node: e.arms[0], values: t };
2446
2447
  if (e.arms.length === 1)
2447
- return un(e.arms[0]);
2448
+ return ln(e.arms[0]);
2448
2449
  const n = e.arms.map((r) => Fe(r));
2449
2450
  return n.length === 2 && n.includes("string") && n.includes("number") ? { type: "node-id" } : {
2450
2451
  type: "unknown",
2451
2452
  unsupportedReason: `the schema is a union of ${n.join(" and ")}, which has no single control`
2452
2453
  };
2453
2454
  }
2454
- function un(e) {
2455
+ function ln(e) {
2455
2456
  switch (Fe(e)) {
2456
2457
  case "integer":
2457
2458
  return { type: "integer", node: e };
@@ -2481,7 +2482,7 @@ function un(e) {
2481
2482
  };
2482
2483
  }
2483
2484
  }
2484
- function ln(e) {
2485
+ function dn(e) {
2485
2486
  const t = [];
2486
2487
  for (const r of e)
2487
2488
  if (r.enum !== void 0)
@@ -2514,59 +2515,59 @@ function K(e) {
2514
2515
  return t === "" ? e : t.split(/\s+/u).map((n) => n.charAt(0).toUpperCase() + n.slice(1)).join(" ");
2515
2516
  }
2516
2517
  export {
2517
- Un as $,
2518
+ Hn as $,
2518
2519
  D as A,
2519
- In as B,
2520
- Pe as C,
2521
- Sn as D,
2522
- On as E,
2523
- wn as F,
2524
- Yt as G,
2525
- Jt as H,
2526
- $n as I,
2527
- An as J,
2528
- En as K,
2529
- Wn as L,
2530
- Rn as M,
2520
+ Tn as B,
2521
+ Le as C,
2522
+ An as D,
2523
+ kn as E,
2524
+ vn as F,
2525
+ Wt as G,
2526
+ Yt as H,
2527
+ Rn as I,
2528
+ $n as J,
2529
+ Fn as K,
2530
+ Kn as L,
2531
+ En as M,
2531
2532
  ve as N,
2532
2533
  b as O,
2533
- Kn as P,
2534
- Hn as Q,
2535
- Ln as R,
2536
- Pn as S,
2537
- zn as T,
2534
+ Zn as P,
2535
+ Bn as Q,
2536
+ Dn as R,
2537
+ Ln as S,
2538
+ Cn as T,
2538
2539
  B as U,
2539
- kt as V,
2540
- jn as W,
2541
- xn as X,
2542
- Kt as Y,
2543
- Cn as Z,
2544
- Dn as _,
2540
+ Nt as V,
2541
+ Pn as W,
2542
+ jn as X,
2543
+ Zt as Y,
2544
+ xn as Z,
2545
+ Gn as _,
2545
2546
  qn as a,
2546
- _n as a0,
2547
- Tn as b,
2548
- Gn as c,
2549
- vn as d,
2550
- Yn as e,
2551
- Bn as f,
2552
- Mn as g,
2553
- Vn as h,
2554
- Jn as i,
2555
- Fn as j,
2556
- bn as k,
2557
- Ue as l,
2547
+ zn as a0,
2548
+ Mn as b,
2549
+ Un as c,
2550
+ On as d,
2551
+ Wn as e,
2552
+ Vn as f,
2553
+ _n as g,
2554
+ Jn as h,
2555
+ Yn as i,
2556
+ In as j,
2557
+ wn as k,
2558
+ He as l,
2558
2559
  O as m,
2559
- Xn as n,
2560
- Qn as o,
2561
- je as p,
2562
- kn as q,
2563
- yn as r,
2564
- Zn as s,
2560
+ Qn as n,
2561
+ er as o,
2562
+ Pe as p,
2563
+ Nn as q,
2564
+ bn as r,
2565
+ Xn as s,
2565
2566
  H as t,
2566
- q as u,
2567
- De as v,
2568
- tt as w,
2569
- Nn as x,
2570
- gt as y,
2567
+ J as u,
2568
+ Ge as v,
2569
+ nt as w,
2570
+ Sn as x,
2571
+ yt as y,
2571
2572
  T as z
2572
2573
  };