@genome-spy/app 0.88.0 → 0.89.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.
Files changed (43) hide show
  1. package/dist/{agentApi-BYFBKiRQ.js → agentApi-BUcXm-JC.js} +5544 -6449
  2. package/dist/agentApi.es.js +3328 -4255
  3. package/dist/agentShared.es.js +9 -9
  4. package/dist/{canvas2d-BVQ7-2eJ.js → canvas2d-CGuVGvQk.js} +117 -106
  5. package/dist/{canvas2d-D7SZK3xv.js → canvas2d-DgF0kstG.js} +99 -88
  6. package/dist/{canvasSizeHelper-7h_8rOcx.js → canvasSizeHelper-foL2YvGL.js} +15 -8
  7. package/dist/{clipOptions-DTMcB_9z.js → clipOptions-8BPf0WMZ.js} +1013 -755
  8. package/dist/{clipOptions-BWHr3aTa.js → clipOptions-DBJX_W31.js} +1033 -775
  9. package/dist/{debug-CVpoEOWx.js → debug-BEWbYuZD.js} +2 -2
  10. package/dist/{debug-DYAMZZKl.js → debug-DQj_7mFm.js} +2 -2
  11. package/dist/index.es.js +65 -65
  12. package/dist/index.js +406 -364
  13. package/dist/{indexer-DAH_ruVn.js → indexer-Cdt_U05k.js} +1 -1
  14. package/dist/{indexer-CXjZDo2Q.js → indexer-D8Bgkkb8.js} +1 -1
  15. package/dist/order-BPOzLe80.js +1056 -0
  16. package/dist/order-DIxlclRN.js +1056 -0
  17. package/dist/rasterExport-Bl6w9t3J.js +51 -0
  18. package/dist/rasterExport-DRvNAH-r.js +51 -0
  19. package/dist/rasterization-D0tOoKu_.js +62 -0
  20. package/dist/rectangle-DE98gIxF.js +108 -0
  21. package/dist/{renderCanvas2D-DxturTEW.js → renderCanvas2D-Ct95auF3.js} +60 -59
  22. package/dist/{renderCanvas2D-DtcJjqpB.js → renderCanvas2D-LdEYFnRo.js} +71 -70
  23. package/dist/schema.json +588 -116
  24. package/dist/{svg-CyrLfa9e.js → svg-Ag36-h_I.js} +394 -382
  25. package/dist/{svg-SDJMzL--.js → svg-pkTPD4bv.js} +368 -356
  26. package/dist/{svgRasterizer-f7DJ3UO0.js → svgRasterizer-CksK4QTB.js} +6 -5
  27. package/dist/{svgRasterizer-mWK7HTkx.js → svgRasterizer-DrtJ9nLk.js} +6 -5
  28. package/dist/{vega-scale-CypF85iS.js → vega-scale-BJaDSHBJ.js} +891 -959
  29. package/dist/{vega-scale-DLKCwWRs.js → vega-scale-BWBFykuI.js} +692 -760
  30. package/dist/{viewIdentityRegistry-DIDo44XQ.js → viewIdentityRegistry-B-snqI3y.js} +1 -1
  31. package/dist/{viewIdentityRegistry-Dl-vMN9I.js → viewIdentityRegistry-BvCJajXG.js} +1 -1
  32. package/dist/{viewSelectors-CymbZyE6.js → viewSelectors-BlvzvG-z.js} +445 -380
  33. package/dist/{viewSelectors-DNiDip5e.js → viewSelectors-C5q3qBiR.js} +364 -299
  34. package/dist/{viewUtils-BrJLIj2o.js → viewUtils-C3vBtSvE.js} +1714 -1689
  35. package/dist/{webgl-CqTDifWM.js → webgl-CZX2pe5v.js} +2322 -971
  36. package/dist/{webgl-jaC2m0Zr.js → webgl-CexXSw_I.js} +2374 -1023
  37. package/package.json +5 -5
  38. package/dist/order-C5CzA37O.js +0 -918
  39. package/dist/order-DvY7KNcu.js +0 -918
  40. package/dist/rasterExport-BgZ98e6U.js +0 -44
  41. package/dist/rasterExport-DEr8fOLm.js +0 -44
  42. package/dist/rasterization-CFogVB3B.js +0 -50
  43. package/dist/rectangle-DKnrAmKs.js +0 -142
@@ -1,6 +1,6 @@
1
- import { b as e, i as t } from "./viewSelectors-CymbZyE6.js";
1
+ import { b as e, i as t } from "./viewSelectors-BlvzvG-z.js";
2
2
  import { t as n } from "./metadataChannels-DV62inJh.js";
3
- import { n as r, t as i } from "./viewIdentityRegistry-DIDo44XQ.js";
3
+ import { n as r, t as i } from "./viewIdentityRegistry-B-snqI3y.js";
4
4
  //#region ../core/src/debug/valuePreview.js
5
5
  var a = 3, o = 12, s = 8, c = 160;
6
6
  function l(e, t = 0) {
@@ -1,5 +1,5 @@
1
- import { a as e, x as t } from "./viewSelectors-DNiDip5e.js";
2
- import { i as n, n as r, t as i } from "./viewIdentityRegistry-Dl-vMN9I.js";
1
+ import { a as e, x as t } from "./viewSelectors-C5q3qBiR.js";
2
+ import { i as n, n as r, t as i } from "./viewIdentityRegistry-BvCJajXG.js";
3
3
  //#region ../core/src/debug/valuePreview.js
4
4
  var a = 3, o = 12, s = 8, c = 160;
5
5
  function l(e, t = 0) {
package/dist/index.es.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import { n as e, t } from "./rolldown-runtime-DF993M8W.js";
2
- import { $ as n, $t as r, A as i, An as a, At as o, B as s, Bt as c, C as l, Cn as u, Ct as d, D as f, Dn as p, Dt as m, E as h, En as g, Et as _, F as v, Fn as y, Ft as b, G as x, Gt as S, H as C, Ht as w, I as T, In as E, It as D, J as O, Jt as k, K as A, Kt as ee, L as j, Ln as M, Lt as N, M as P, Mn as F, Mt as te, N as ne, Nn as re, Nt as ie, O as ae, On as I, Ot as oe, P as se, Pn as ce, Pt as le, Q as ue, Qt as de, R as fe, Rt as pe, S as me, Sn as L, St as he, T as ge, Tn as _e, Tt as ve, U as ye, Ut as be, V as xe, Vt as Se, W as Ce, Wt as we, X as Te, Xt as Ee, Y as De, Yt as Oe, Z as ke, Zt as Ae, _ as je, _n as Me, _t as Ne, a as Pe, an as Fe, at as Ie, b as Le, bn as Re, bt as ze, c as Be, cn as Ve, ct as He, d as Ue, dn as We, dt as Ge, en as Ke, et as qe, f as Je, fn as Ye, ft as Xe, g as Ze, gn as Qe, gt as $e, h as et, hn as tt, ht as nt, i as rt, in as it, it as at, j as ot, jn as st, jt as ct, k as lt, kn as ut, kt as dt, l as ft, ln as pt, lt as mt, m as ht, mn as gt, mt as _t, n as vt, nn as yt, nt as bt, o as xt, on as St, ot as Ct, p as wt, pn as Tt, pt as Et, q as Dt, qt as Ot, r as kt, rn as At, rt as jt, s as Mt, sn as Nt, st as Pt, tn as Ft, tt as It, u as Lt, un as Rt, ut as zt, v as Bt, vn as Vt, vt as Ht, w as Ut, wn as Wt, wt as Gt, x as Kt, xn as qt, xt as Jt, y as Yt, yn as Xt, yt as Zt, z as Qt, zt as $t } from "./agentApi-BYFBKiRQ.js";
3
- import { B as en, C as tn, Ft as nn, G as rn, H as an, I as on, K as sn, L as cn, M as ln, P as un, R as dn, S as fn, cn as pn, et as mn, fn as hn, gn, i as _n, j as vn, jt as yn, k as bn, o as xn, pt as Sn, tt as Cn, un as wn, y as Tn, yt as En, z as Dn } from "./clipOptions-BWHr3aTa.js";
4
- import { D as On, T as kn, b as An, et as jn, nt as Mn, ot as Nn, v as Pn, y as Fn } from "./vega-scale-CypF85iS.js";
5
- import { h as In } from "./indexer-DAH_ruVn.js";
6
- import { A as Ln, E as Rn, G as zn, I as Bn, O as Vn, T as Hn, W as Un, a as Wn, c as Gn, f as Kn, h as qn, i as Jn, m as Yn, n as Xn, p as Zn, r as Qn, s as $n, t as er, v as tr, w as nr } from "./viewSelectors-DNiDip5e.js";
7
- import { n as rr, r as ir } from "./viewIdentityRegistry-Dl-vMN9I.js";
8
- import { t as ar } from "./rectangle-DKnrAmKs.js";
2
+ import { $ as n, $t as r, A as i, An as a, At as o, B as s, Bt as c, C as l, Cn as u, Ct as d, D as f, Dn as p, Dt as m, E as h, En as g, Et as _, F as v, Fn as y, Ft as b, G as x, Gt as S, H as C, Ht as w, I as T, In as E, It as D, J as O, Jt as k, K as A, Kt as ee, L as j, Ln as M, Lt as N, M as P, Mn as F, Mt as te, N as ne, Nn as re, Nt as ie, O as ae, On as I, Ot as oe, P as se, Pn as ce, Pt as le, Q as ue, Qt as de, R as fe, Rt as pe, S as me, Sn as L, St as he, T as ge, Tn as _e, Tt as ve, U as ye, Ut as be, V as xe, Vt as Se, W as Ce, Wt as we, X as Te, Xt as Ee, Y as De, Yt as Oe, Z as ke, Zt as Ae, _ as je, _n as Me, _t as Ne, a as Pe, an as Fe, at as Ie, b as Le, bn as Re, bt as ze, c as Be, cn as Ve, ct as He, d as Ue, dn as We, dt as Ge, en as Ke, et as qe, f as Je, fn as Ye, ft as Xe, g as Ze, gn as Qe, gt as $e, h as et, hn as tt, ht as nt, i as rt, in as it, it as at, j as ot, jn as st, jt as ct, k as lt, kn as ut, kt as dt, l as ft, ln as pt, lt as mt, m as ht, mn as gt, mt as _t, n as vt, nn as yt, nt as bt, o as xt, on as St, ot as Ct, p as wt, pn as Tt, pt as Et, q as Dt, qt as Ot, r as kt, rn as At, rt as jt, s as Mt, sn as Nt, st as Pt, tn as Ft, tt as It, u as Lt, un as Rt, ut as zt, v as Bt, vn as Vt, vt as Ht, w as Ut, wn as Wt, wt as Gt, x as Kt, xn as qt, xt as Jt, y as Yt, yn as Xt, yt as Zt, z as Qt, zt as $t } from "./agentApi-BUcXm-JC.js";
3
+ import { B as en, Bt as tn, C as nn, G as rn, H as an, I as on, It as sn, K as cn, L as ln, M as un, P as dn, R as fn, S as pn, Sn as mn, _n as hn, et as gn, hn as _n, i as vn, j as yn, k as bn, o as xn, pn as Sn, pt as Cn, tt as wn, wn as Tn, xn as En, y as Dn, yt as On, z as kn } from "./clipOptions-DBJX_W31.js";
4
+ import { D as An, T as jn, b as Mn, nt as Nn, v as Pn, y as Fn } from "./vega-scale-BJaDSHBJ.js";
5
+ import { h as In } from "./indexer-Cdt_U05k.js";
6
+ import { A as Ln, E as Rn, G as zn, I as Bn, O as Vn, T as Hn, W as Un, a as Wn, c as Gn, f as Kn, h as qn, i as Jn, m as Yn, n as Xn, p as Zn, r as Qn, s as $n, t as er, v as tr, w as nr } from "./viewSelectors-C5q3qBiR.js";
7
+ import { n as rr, r as ir } from "./viewIdentityRegistry-BvCJajXG.js";
8
+ import { t as ar } from "./rectangle-DE98gIxF.js";
9
9
  import { r as or, t as sr } from "./performanceProfiler-CPLEjApa.js";
10
10
  //#region ../../node_modules/d3-array/src/array.js
11
11
  var cr = Array.prototype, lr = cr.slice;
@@ -20,7 +20,7 @@ function ur(e) {
20
20
  function dr(e, t, n) {
21
21
  let r;
22
22
  for (;;) {
23
- let i = jn(e, t, n);
23
+ let i = mn(e, t, n);
24
24
  if (i === r || i === 0 || !isFinite(i)) return [e, t];
25
25
  i > 0 ? (e = Math.floor(e / i) * i, t = Math.ceil(t / i) * i) : i < 0 && (e = Math.ceil(e * i) / i, t = Math.floor(t * i) / i), r = i;
26
26
  }
@@ -41,8 +41,8 @@ function pr() {
41
41
  var l = t(c), u = l[0], d = l[1], f = n(c, u, d);
42
42
  if (!Array.isArray(f)) {
43
43
  let e = d, n = +f;
44
- if (t === re && ([u, d] = dr(u, d, n)), f = Mn(u, d, n), f[0] <= u && (s = jn(u, d, n)), f[f.length - 1] >= d) if (e >= d && t === re) {
45
- let e = jn(u, d, n);
44
+ if (t === re && ([u, d] = dr(u, d, n)), f = Tn(u, d, n), f[0] <= u && (s = mn(u, d, n)), f[f.length - 1] >= d) if (e >= d && t === re) {
45
+ let e = mn(u, d, n);
46
46
  isFinite(e) && (e > 0 ? d = (Math.floor(d / e) + 1) * e : e < 0 && (d = (Math.ceil(d * -e) + 1) / -e));
47
47
  } else f.pop();
48
48
  }
@@ -3826,10 +3826,10 @@ var al = I`
3826
3826
  #n;
3827
3827
  #r = 0;
3828
3828
  constructor() {
3829
- super(), this.values = [], this.thresholds = [], this.operators = [], this.colors = dl, this.showThresholdNumbers = !1, this.binCount = 40, this.#e = pr().thresholds(this.binCount), this.#t = this.#e([]), this.#n = On();
3829
+ super(), this.values = [], this.thresholds = [], this.operators = [], this.colors = dl, this.showThresholdNumbers = !1, this.binCount = 40, this.#e = pr().thresholds(this.binCount), this.#t = this.#e([]), this.#n = An();
3830
3830
  }
3831
3831
  willUpdate(e) {
3832
- e.has("binCount") && (this.#e = pr().thresholds(this.binCount)), (e.has("values") || e.has("binCount")) && (this.#t = this.#e(this.values), this.#n = On().domain(this.domain).range([0, 100]));
3832
+ e.has("binCount") && (this.#e = pr().thresholds(this.binCount)), (e.has("values") || e.has("binCount")) && (this.#t = this.#e(this.values), this.#n = An().domain(this.domain).range([0, 100]));
3833
3833
  }
3834
3834
  get domain() {
3835
3835
  return [this.#t.at(0).x0, this.#t.at(-1).x1];
@@ -3848,7 +3848,7 @@ var al = I`
3848
3848
  });
3849
3849
  }
3850
3850
  #o(e, t, n) {
3851
- n = mn(n, 0, 1), this.dispatchEvent(new sl(e, t, +this.#n.invert(n * 100).toPrecision(3)));
3851
+ n = gn(n, 0, 1), this.dispatchEvent(new sl(e, t, +this.#n.invert(n * 100).toPrecision(3)));
3852
3852
  }
3853
3853
  #s() {
3854
3854
  let e = this.#t, t = this.#n, n = 90 / e.map((e) => e.length).reduce((e, t) => Math.max(e, t), 0), r = [], i = this.thresholds.length == 1 && this.operators[0] == "eq", a = [
@@ -4180,7 +4180,7 @@ var yl = class extends G {
4180
4180
  customElements.define("gs-quantitative-attribute-filter-dialog", yl);
4181
4181
  function bl(e, t) {
4182
4182
  let n = e.scale?.type;
4183
- Fn(n) ? Sl(e, t) : Pn(n) || An(n) ? wl(e, t) : e.type === "identifier" ? xl(e, t) : q("Not implemented (yet).");
4183
+ Fn(n) ? Sl(e, t) : Pn(n) || Mn(n) ? wl(e, t) : e.type === "identifier" ? xl(e, t) : q("Not implemented (yet).");
4184
4184
  }
4185
4185
  function xl(e, t) {
4186
4186
  Cl(t.getSamples().map((e) => e.id), e, t);
@@ -8757,7 +8757,7 @@ var sm = { step: 24 }, cm = class extends we {
8757
8757
  type: "nominal",
8758
8758
  scale: {
8759
8759
  type: "ordinal",
8760
- domain: gn(500)
8760
+ domain: En(500)
8761
8761
  },
8762
8762
  axis: null
8763
8763
  },
@@ -9046,7 +9046,7 @@ var ym = 35, bm = 5, xm = 15, Sm = .2, Cm = [], wm = class {
9046
9046
  }
9047
9047
  setScrollOffset(e) {
9048
9048
  let t = Math.max(0, this.#n - this.#p.getHeight());
9049
- this.#t = mn(e, 0, t);
9049
+ this.#t = gn(e, 0, t);
9050
9050
  }
9051
9051
  getScrollableHeight() {
9052
9052
  return this.#n;
@@ -9281,7 +9281,7 @@ function Dm(e, t, n, r, i) {
9281
9281
  }
9282
9282
  function Om(e, { viewHeight: t = 0, sampleHeight: n = 0, groupSpacing: r = 5, sampleSpacingFactor: i = Sm, summaryHeight: a = 0 }) {
9283
9283
  if (!t && !n) throw Error("viewHeight or sampleHeight must be provided!");
9284
- let o = (e) => wn(e), s = e.map((e) => ({
9284
+ let o = (e) => _n(e), s = e.map((e) => ({
9285
9285
  path: e,
9286
9286
  sampleGroup: o(e),
9287
9287
  samples: o(e).samples
@@ -9302,7 +9302,7 @@ function Om(e, { viewHeight: t = 0, sampleHeight: n = 0, groupSpacing: r = 5, sa
9302
9302
  for (let [e, t] of s.entries()) {
9303
9303
  let n = { grow: 1 }, r = t.samples;
9304
9304
  Bn(r.map((e) => n), Math.max(0, l[e].locSize.size - a), { offset: l[e].locSize.location + a }).forEach((e, t) => {
9305
- let { size: n, location: a } = e, o = n * i * .5 * Cn(15, 22, n);
9305
+ let { size: n, location: a } = e, o = n * i * .5 * wn(15, 22, n);
9306
9306
  e.location = a + o, e.size = n - 2 * o, u.push({
9307
9307
  key: r[t],
9308
9308
  locSize: e
@@ -9312,7 +9312,7 @@ function Om(e, { viewHeight: t = 0, sampleHeight: n = 0, groupSpacing: r = 5, sa
9312
9312
  function* d() {
9313
9313
  let e = [];
9314
9314
  for (let t of l) {
9315
- let n = t.key, r = wn(n);
9315
+ let n = t.key, r = _n(n);
9316
9316
  for (; e.length <= n.length && e.length && n[e.length - 1] != e[e.length - 1].group;) yield e.pop();
9317
9317
  for (let n = 0; n < e.length; n++) {
9318
9318
  let r = e[n];
@@ -9386,7 +9386,7 @@ function Fm(e) {
9386
9386
  //#region src/sampleView/datumLookup.js
9387
9387
  function Im(e, t = e.getCollector()) {
9388
9388
  let n = e.getDataAccessor("x"), r = e.getDataAccessor("x2"), i = e.getScaleResolution("x")?.getScale()?.type, a = i ? Fn(i) : !1;
9389
- return !t || !n ? () => void 0 : a ? (e, r) => t.facetBatches.get(pn(e))?.find((e) => r == n(e)) : !a && r ? (e, i) => t.facetBatches.get(pn(e))?.find((e) => i >= n(e) && i < r(e)) : (e, r) => t.facetBatches.get(pn(e))?.find((e) => r == n(e));
9389
+ return !t || !n ? () => void 0 : a ? (e, r) => t.facetBatches.get(Sn(e))?.find((e) => r == n(e)) : !a && r ? (e, i) => t.facetBatches.get(Sn(e))?.find((e) => i >= n(e) && i < r(e)) : (e, r) => t.facetBatches.get(Sn(e))?.find((e) => r == n(e));
9390
9390
  }
9391
9391
  //#endregion
9392
9392
  //#region src/utils/predicates/featureFilter.js
@@ -9484,7 +9484,7 @@ function Wm(e, t) {
9484
9484
  i != null && (n.push(i), _ && r.push(t));
9485
9485
  };
9486
9486
  return (e) => {
9487
- let [t, n] = h(), r = a.facetBatches.get(pn(e));
9487
+ let [t, n] = h(), r = a.facetBatches.get(Sn(e));
9488
9488
  if (!r?.length) return g === "count" || g === "itemCount" ? 0 : void 0;
9489
9489
  let i = [], u = [], d = 0;
9490
9490
  switch (l(r, o, c, s, t, n, (e, t) => {
@@ -9600,7 +9600,7 @@ function ih(e, t) {
9600
9600
  }, d = Object.entries(r.getEncoding()).find(([e, t]) => "field" in t && t.field == n.field), f = d?.[0], p = d?.[1];
9601
9601
  if (!p && !("aggregation" in n)) throw Error(`Cannot resolve field '${n.field}' in view '${r.name}'`);
9602
9602
  if (!p && "aggregation" in n && n.aggregation.op !== "count" && n.aggregation.op !== "itemCount") throw Error(`Aggregation '${n.aggregation.op}' requires a field definition for '${n.field}' in view '${r.name}'`);
9603
- let m = f && Sn(f) ? r.getScaleResolution(f).getScale() : void 0, h = p && "scale" in p && p.scale && typeof p.scale == "object" ? p.scale : void 0, v = p && "type" in p ? p.type : void 0, y = "aggregation" in n ? "quantitative" : v, b, x;
9603
+ let m = f && Cn(f) ? r.getScaleResolution(f).getScale() : void 0, h = p && "scale" in p && p.scale && typeof p.scale == "object" ? p.scale : void 0, v = p && "type" in p ? p.type : void 0, y = "aggregation" in n ? "quantitative" : v, b, x;
9604
9604
  if ("ensureViewAttributeAvailability" in e) {
9605
9605
  let t = e;
9606
9606
  b = (e) => t.ensureViewAttributeAvailability(n, e), x = (e) => t.awaitViewAttributeProcessed(n, e);
@@ -9842,7 +9842,7 @@ var Dh = /* @__PURE__ */ "blues.greens.greys.oranges.purples.reds.blueGreen.blue
9842
9842
  function Oh(e) {
9843
9843
  let t = document.createElement("canvas");
9844
9844
  t.width = 120, t.height = 14;
9845
- let n = t.getContext("2d"), r = kn(e);
9845
+ let n = t.getContext("2d"), r = jn(e);
9846
9846
  if (!r) throw Error(`Unknown scheme name: ${e}`);
9847
9847
  if (typeof r == "function") {
9848
9848
  let e = r, i = t.width / 20;
@@ -11534,7 +11534,7 @@ function gg(e, t, n) {
11534
11534
  return t.type === "locus" ? "Locus: " + (Nt(n) || typeof n == "number" ? Ve(n) : String(n)) : (r ? r + ": " : "") + n;
11535
11535
  }
11536
11536
  function _g(e, t) {
11537
- if (!e || !t || e.selection.intervals.x?.length !== 2 || !sn(e.selection, t)) return {};
11537
+ if (!e || !t || e.selection.intervals.x?.length !== 2 || !cn(e.selection, t)) return {};
11538
11538
  let n = e.selection.intervals.x, r = e.view.getScaleResolution("x")?.type === "locus" ? [e.view.getScaleResolution("x").toComplex(n[0]), e.view.getScaleResolution("x").toComplex(n[1])] : n;
11539
11539
  return {
11540
11540
  selectionInterval: n,
@@ -11643,7 +11643,7 @@ function Cg(e, t) {
11643
11643
  return { status: "unavailable" };
11644
11644
  }
11645
11645
  if (!a || a.length === 0) return { status: "unavailable" };
11646
- let o = a.map((e) => yn(e)(r));
11646
+ let o = a.map((e) => sn(e)(r));
11647
11647
  if (o.some((e) => e == null)) return { status: "unavailable" };
11648
11648
  let s = i[0], c = Qn(n, s);
11649
11649
  try {
@@ -11869,7 +11869,7 @@ var Lg = 60, Rg = "all", zg = 1e-6, Bg = class {
11869
11869
  if (!this.#a(n) || this.#n() !== 0) return;
11870
11870
  let i = xn(r), a = i ? {
11871
11871
  ...r,
11872
- clip: _n(i.rect, !1, !0)
11872
+ clip: vn(i.rect, !1, !0)
11873
11873
  } : r;
11874
11874
  for (let r of ["left", "right"]) {
11875
11875
  let i = this.#i(r);
@@ -12197,7 +12197,7 @@ var Lg = 60, Rg = "all", zg = 1e-6, Bg = class {
12197
12197
  clipRect: i
12198
12198
  });
12199
12199
  }
12200
- let s = _n(this.locationManager.clipBySummary(t), !0, !0), c = this.locationManager.getLocations();
12200
+ let s = vn(this.locationManager.clipBySummary(t), !0, !0), c = this.locationManager.getLocations();
12201
12201
  if (!c) {
12202
12202
  a();
12203
12203
  return;
@@ -12220,14 +12220,14 @@ var Lg = 60, Rg = "all", zg = 1e-6, Bg = class {
12220
12220
  let f = r.summaryViews, p = f.getOverhang().getHorizontal();
12221
12221
  n = {
12222
12222
  ...n,
12223
- clip: _n(t.expand(p), !0, !0)
12223
+ clip: vn(t.expand(p), !0, !0)
12224
12224
  };
12225
12225
  let m = f.getSize().height.px;
12226
12226
  for (let [r, i] of c.summaries.entries()) {
12227
12227
  let a = t.modify({
12228
12228
  y: () => {
12229
12229
  let e = i.locSize.location, n = t.y + e;
12230
- return this.#i ? n + mn(-e, 0, i.locSize.size - m) : n;
12230
+ return this.#i ? n + gn(-e, 0, i.locSize.size - m) : n;
12231
12231
  },
12232
12232
  height: m
12233
12233
  }).expand(p);
@@ -12318,7 +12318,7 @@ var Lg = 60, Rg = "all", zg = 1e-6, Bg = class {
12318
12318
  for (let t of e) for (let [e, n] of t.paramRuntime.paramConfigs) {
12319
12319
  if (!("select" in n)) continue;
12320
12320
  let r = bn(n.select);
12321
- if (!dn(r) || !r.encodings?.includes("x")) continue;
12321
+ if (!fn(r) || !r.encodings?.includes("x")) continue;
12322
12322
  let i = t.paramRuntime.getValue(e);
12323
12323
  if (i && on(i)) return {
12324
12324
  selection: i,
@@ -12475,7 +12475,7 @@ var Lg = 60, Rg = "all", zg = 1e-6, Bg = class {
12475
12475
  dispose() {
12476
12476
  this.locationManager.getPlacementSource().dispose(), super.dispose(), this.intentExecutor.removeActionAugmenter(this.#u);
12477
12477
  }
12478
- }, Ug = class extends nn {
12478
+ }, Ug = class extends tn {
12479
12479
  #e;
12480
12480
  #t;
12481
12481
  #n = 0;
@@ -13031,7 +13031,7 @@ var z_ = {
13031
13031
  contributors: [],
13032
13032
  license: "MIT",
13033
13033
  homepage: "https://genomespy.app/",
13034
- version: "0.88.0",
13034
+ version: "0.89.0",
13035
13035
  main: "dist/index.js",
13036
13036
  module: "dist/index.es.js",
13037
13037
  type: "module",
@@ -13091,7 +13091,7 @@ var z_ = {
13091
13091
  "@fortawesome/fontawesome-free": "^6.4.2",
13092
13092
  "@fortawesome/fontawesome-svg-core": "^6.4.2",
13093
13093
  "@fortawesome/free-solid-svg-icons": "^6.4.2",
13094
- "@genome-spy/core": "^0.88.0",
13094
+ "@genome-spy/core": "^0.89.0",
13095
13095
  "@reduxjs/toolkit": "^2.11.0",
13096
13096
  "d3-color": "^3.1.0",
13097
13097
  idb: "^7.1.1",
@@ -13104,10 +13104,10 @@ var z_ = {
13104
13104
  zarrita: "^0.6.1"
13105
13105
  },
13106
13106
  devDependencies: {
13107
- "@genome-spy/app-agent": "^0.88.0",
13108
- "@genome-spy/inspector": "^0.88.0"
13107
+ "@genome-spy/app-agent": "^0.89.0",
13108
+ "@genome-spy/inspector": "^0.89.0"
13109
13109
  },
13110
- gitHead: "9d88f5bcdd3d46507acf5bd8cd4212f6b14dd0ed"
13110
+ gitHead: "00880e2449e48f19de1765cc6e08d11db1a8a050"
13111
13111
  };
13112
13112
  //#endregion
13113
13113
  //#region src/utils/version.js
@@ -15003,7 +15003,7 @@ var _v = class {
15003
15003
  if (e) $_(e);
15004
15004
  else throw Error("Cannot upload metadata without SampleView");
15005
15005
  }
15006
- }, yv = (e) => [...e.paramRuntime.paramConfigs.values()].some((e) => tn(e) && e.bind), bv = (e, t) => {
15006
+ }, yv = (e) => [...e.paramRuntime.paramConfigs.values()].some((e) => nn(e) && e.bind), bv = (e, t) => {
15007
15007
  let n = [];
15008
15008
  return t && n.push({
15009
15009
  label: "Parameters",
@@ -20538,7 +20538,7 @@ var Bx = class extends L {
20538
20538
  `), t.push(g`<genome-spy-view-visibility></genome-spy-view-visibility>`), this.app.isEmbedded() || t.push(g`
20539
20539
  <genome-spy-bookmark-button></genome-spy-bookmark-button>
20540
20540
  `);
20541
- let n = this.app.rootSpec.description ? pn(this.app.rootSpec.description) : [];
20541
+ let n = this.app.rootSpec.description ? Sn(this.app.rootSpec.description) : [];
20542
20542
  return n.length > 1 && t.push(g`
20543
20543
  <button
20544
20544
  class="tool-btn"
@@ -20740,7 +20740,7 @@ function Ux(e, t, n = (e) => +e) {
20740
20740
  }
20741
20741
  //#endregion
20742
20742
  //#region src/sampleView/mergeFacets.js
20743
- var Wx = "sampleCount", Gx = class extends nn {
20743
+ var Wx = "sampleCount", Gx = class extends tn {
20744
20744
  #e = !0;
20745
20745
  #t;
20746
20746
  constructor(e, t) {
@@ -20767,7 +20767,7 @@ var Wx = "sampleCount", Gx = class extends nn {
20767
20767
  initialize() {
20768
20768
  this.#t = this.paramRuntime.allocateSetter(Wx, 0, !0);
20769
20769
  let e = this.view.getEncoding().x;
20770
- if (En(e)) this.xAccessor = yn(e.field);
20770
+ if (On(e)) this.xAccessor = sn(e.field);
20771
20771
  else throw Error("Sample summarization requires a FieldDef. This is not a FieldDef: " + JSON.stringify(e));
20772
20772
  }
20773
20773
  handle(e) {}
@@ -20782,9 +20782,9 @@ var Wx = "sampleCount", Gx = class extends nn {
20782
20782
  this.#n && this.#i(this.provenance.getPresentState()[C]), super.complete();
20783
20783
  }
20784
20784
  #i(e) {
20785
- let t = [...A(e.rootGroup)].filter((e) => x(wn(e)));
20785
+ let t = [...A(e.rootGroup)].filter((e) => x(_n(e)));
20786
20786
  for (let [e, n] of t.entries()) {
20787
- let t = wn(n);
20787
+ let t = _n(n);
20788
20788
  if (x(t)) {
20789
20789
  this.beginBatch({
20790
20790
  type: "facet",
@@ -21514,7 +21514,7 @@ var AS = 150, jS = class {
21514
21514
  let t = $n(e.selector);
21515
21515
  if (this.#u.has(t)) return;
21516
21516
  let n = this.#L(e);
21517
- if (n === void 0 || fn(e.param) && this.#Z(e.param, n) && this.#C(e, t)) return;
21517
+ if (n === void 0 || pn(e.param) && this.#Z(e.param, n) && this.#C(e, t)) return;
21518
21518
  let r = this.#P(e, n);
21519
21519
  if (r) {
21520
21520
  if (this.#x(e, n, t)) {
@@ -21529,7 +21529,7 @@ var AS = 150, jS = class {
21529
21529
  }
21530
21530
  }
21531
21531
  #x(e, t, n) {
21532
- if (!fn(e.param) || !this.#Z(e.param, t)) return !1;
21532
+ if (!pn(e.param) || !this.#Z(e.param, t)) return !1;
21533
21533
  let { past: r, present: i } = this.#t.getState().provenance;
21534
21534
  if (r.length === 0) return !1;
21535
21535
  let a = i.lastAction;
@@ -21540,7 +21540,7 @@ var AS = 150, jS = class {
21540
21540
  return !s || this.#S(e.param, s.value);
21541
21541
  }
21542
21542
  #S(e, t) {
21543
- if (!t || !fn(e)) return !0;
21543
+ if (!t || !pn(e)) return !0;
21544
21544
  if (t.type === "point") return t.keys.length === 0;
21545
21545
  if (t.type === "pointExpand") return !1;
21546
21546
  if (t.type === "interval") {
@@ -21555,7 +21555,7 @@ var AS = 150, jS = class {
21555
21555
  return !n || this.#S(e.param, n.value);
21556
21556
  }
21557
21557
  #w(e) {
21558
- return fn(e) ? !0 : tn(e) && !!e.bind;
21558
+ return pn(e) ? !0 : nn(e) && !!e.bind;
21559
21559
  }
21560
21560
  #T(e, t) {
21561
21561
  let n = Mg.actions.paramChange({
@@ -21579,7 +21579,7 @@ var AS = 150, jS = class {
21579
21579
  this.#m.clear();
21580
21580
  }
21581
21581
  #k(e) {
21582
- return Tn(e.param, e.view.paramRuntime);
21582
+ return Dn(e.param, e.view.paramRuntime);
21583
21583
  }
21584
21584
  #A(e, t) {
21585
21585
  return this.#K(e.param, t), this.#k(e);
@@ -21607,12 +21607,12 @@ var AS = 150, jS = class {
21607
21607
  }
21608
21608
  #P(e, t) {
21609
21609
  let n = e.param;
21610
- if (fn(n)) {
21610
+ if (pn(n)) {
21611
21611
  let r = bn(n.select);
21612
21612
  if (en(r)) {
21613
21613
  let r = this.#N(e, "persist");
21614
21614
  if (!r) return;
21615
- let i = un(t, r);
21615
+ let i = dn(t, r);
21616
21616
  if (!i) return;
21617
21617
  let a = this.#M(e.view);
21618
21618
  if (a && a.completed) try {
@@ -21627,8 +21627,8 @@ var AS = 150, jS = class {
21627
21627
  keys: i
21628
21628
  };
21629
21629
  }
21630
- if (dn(r)) {
21631
- if (!cn(t)) {
21630
+ if (fn(r)) {
21631
+ if (!ln(t)) {
21632
21632
  this.#q(n, "has no value yet and will not be saved.");
21633
21633
  return;
21634
21634
  }
@@ -21636,7 +21636,7 @@ var AS = 150, jS = class {
21636
21636
  }
21637
21637
  throw Error(`Unsupported selection config for parameter "${n.name}".`);
21638
21638
  }
21639
- if (tn(n)) return {
21639
+ if (nn(n)) return {
21640
21640
  type: "value",
21641
21641
  value: t
21642
21642
  };
@@ -21662,18 +21662,18 @@ var AS = 150, jS = class {
21662
21662
  }
21663
21663
  }
21664
21664
  #I(e, t) {
21665
- return tn(e.param) && Object.is(e.view.paramRuntime.getTargetValue(e.selector.param), t);
21665
+ return nn(e.param) && Object.is(e.view.paramRuntime.getTargetValue(e.selector.param), t);
21666
21666
  }
21667
21667
  #L(e) {
21668
21668
  let t = e.selector.param;
21669
- return tn(e.param) ? e.view.paramRuntime.getTargetValue(t) : e.view.paramRuntime.getValue(t);
21669
+ return nn(e.param) ? e.view.paramRuntime.getTargetValue(t) : e.view.paramRuntime.getValue(t);
21670
21670
  }
21671
21671
  async whenApplied(e) {
21672
21672
  return await Promise.resolve(), await this.#h, this.#e.paramRuntime.whenPropagated(e);
21673
21673
  }
21674
21674
  #R(e, t) {
21675
21675
  let n = e.param, r = t.value;
21676
- if (fn(n)) {
21676
+ if (pn(n)) {
21677
21677
  let i = bn(n.select);
21678
21678
  if (en(i)) {
21679
21679
  if (r.type === "pointExpand") return this.#z(e, r, i);
@@ -21693,16 +21693,16 @@ var AS = 150, jS = class {
21693
21693
  }
21694
21694
  return c.unresolved.length && this.#K(n, "has some points that could not be resolved. Ensure encoding.key is unique and present in the data."), c.selection;
21695
21695
  }
21696
- if (dn(i)) {
21696
+ if (fn(i)) {
21697
21697
  if (r.type !== "interval") return this.#A(e, "cannot be restored because the bookmark stored a different selection type.");
21698
- let n = vn(i.encodings);
21698
+ let n = yn(i.encodings);
21699
21699
  this.#H(e.view, n, r.intervals);
21700
21700
  let a = this.#U(t.origin);
21701
21701
  return a && this.#H(e.view, n, a), n;
21702
21702
  }
21703
21703
  return this.#k(e);
21704
21704
  }
21705
- return tn(n) ? r.type === "value" ? r.value : this.#j(e, "cannot be restored because the bookmark stored a different value type.") : this.#k(e);
21705
+ return nn(n) ? r.type === "value" ? r.value : this.#j(e, "cannot be restored because the bookmark stored a different value type.") : this.#k(e);
21706
21706
  }
21707
21707
  #z(e, t, n) {
21708
21708
  if (!n.toggle) return this.#K(e.param, "cannot apply expansion because the target selection is not multi-point."), this.#k(e);
@@ -21719,7 +21719,7 @@ var AS = 150, jS = class {
21719
21719
  let n = SS(e), a = [];
21720
21720
  return r.visitData((e) => {
21721
21721
  n(e) && a.push(e);
21722
- }), ln(a);
21722
+ }), un(a);
21723
21723
  } catch (t) {
21724
21724
  return this.#K(e.param, `cannot apply expansion due to an error: ${t}`), this.#k(e);
21725
21725
  }
@@ -21803,7 +21803,7 @@ var AS = 150, jS = class {
21803
21803
  for (let [t, n] of Object.entries(e.intervalSources)) {
21804
21804
  let e = n.start, a = n.end ?? n.start;
21805
21805
  if (!e || !a) continue;
21806
- let o = yn(e), s = yn(a);
21806
+ let o = sn(e), s = sn(a);
21807
21807
  i[t] = [o(r), s(r)];
21808
21808
  }
21809
21809
  return i;
@@ -21828,11 +21828,11 @@ var AS = 150, jS = class {
21828
21828
  }
21829
21829
  #X(e, t) {
21830
21830
  let n = e.param;
21831
- fn(n) && en(bn(n.select)) && (this.#N(e, "persist") || this.#u.add(t));
21831
+ pn(n) && en(bn(n.select)) && (this.#N(e, "persist") || this.#u.add(t));
21832
21832
  }
21833
21833
  #Z(e, t) {
21834
21834
  let n = bn(e.select);
21835
- return en(n) ? an(t) ? !t.datum : !Dn(t) || t.data.size === 0 : dn(n) ? !on(t) : !1;
21835
+ return en(n) ? an(t) ? !t.datum : !kn(t) || t.data.size === 0 : fn(n) ? !on(t) : !1;
21836
21836
  }
21837
21837
  #Q(e) {
21838
21838
  this.#l.has(e) || (this.#l.add(e), this.#s.add(e), !this.#d && (this.#d = !0, queueMicrotask(() => {
@@ -22264,10 +22264,10 @@ var hC = class {
22264
22264
  }, this.genomeSpy.viewFactory.addViewType(Pm, ((e, t, n, r, i) => new Hg(e, t, n, r, i, this.provenance, this.intentExecutor, Ox(this)))), this.#o();
22265
22265
  }
22266
22266
  getAgentApi() {
22267
- return this.#e ||= import("./agentApi-BYFBKiRQ.js").then((e) => e.t).then((e) => e.createAgentApi(this)), this.#e;
22267
+ return this.#e ||= import("./agentApi-BUcXm-JC.js").then((e) => e.t).then((e) => e.createAgentApi(this)), this.#e;
22268
22268
  }
22269
22269
  async getDebugModules() {
22270
- return import("./debug-DYAMZZKl.js");
22270
+ return import("./debug-DQj_7mFm.js");
22271
22271
  }
22272
22272
  #r() {
22273
22273
  this.store = Qx(), this.intentExecutor = new Jx(this.store), this.provenance = new Hx(this.store), this.intentPipeline = new $x({
@@ -22390,7 +22390,7 @@ var hC = class {
22390
22390
  this.#c(this.store.subscribe(n));
22391
22391
  for (let [, e] of this.genomeSpy.getNamedScaleResolutions()) e.isZoomable() && (e.addEventListener("domain", n), this.#c(() => e.removeEventListener("domain", n)));
22392
22392
  }
22393
- let r = pn(this.genomeSpy.spec.description ?? []);
22393
+ let r = Sn(this.genomeSpy.spec.description ?? []);
22394
22394
  this.isFullPage() && r.length > 0 && (document.title = "GenomeSpy - " + r), this.store.dispatch(Yx.actions.setInitialized());
22395
22395
  }
22396
22396
  async #l(e) {