@genome-spy/app 1.1.1 → 1.3.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 (96) hide show
  1. package/dist/{SharedReadCache-Ey5QIiPM.js → SharedReadCache-9sT2aIxW.js} +6 -12
  2. package/dist/__vite-browser-external-Dgu_Ldik.js +7 -0
  3. package/dist/{agentApi-sPuuT0KS.js → agentApi-BclFF9zB.js} +9981 -8914
  4. package/dist/agentApi.es.js +6783 -5135
  5. package/dist/agentShared.es.js +433 -460
  6. package/dist/arrayUtils-Bm7QnzhN.js +1306 -0
  7. package/dist/{blosc-JROzDOnd.js → blosc-C-W97QwH.js} +3 -3
  8. package/dist/{canvas2d-iDK4BC5j.js → canvas2d-8MSf70d4.js} +141 -134
  9. package/dist/{canvas2d-MXaFeZnP.js → canvas2d-BwGNI_Rx.js} +147 -141
  10. package/dist/clipOptions-SrrxeAEU.js +4316 -0
  11. package/dist/clipOptions-clBEbkjv.js +4326 -0
  12. package/dist/{layoutResult-D50MSHXR.js → color-jETn8xK_.js} +29 -10
  13. package/dist/color-uTRRsy8i.js +116 -0
  14. package/dist/{componentStyles-DGtQXvwc.js → componentStyles-C7FbjS-a.js} +1 -1
  15. package/dist/{viewIdentityRegistry-BIYd4TE0.js → containerView-BItRtKqu.js} +28 -31
  16. package/dist/{viewIdentityRegistry-BDKkEjXl.js → containerView-CWa6ZIJW.js} +28 -31
  17. package/dist/{debug-DbigmdrK.js → debug-23s-jja_.js} +10 -9
  18. package/dist/{debug-BlqDxTw3.js → debug-CWRxvAss.js} +9 -10
  19. package/dist/dialog.es.js +1 -1
  20. package/dist/dist-CmY6iewb.js +1501 -0
  21. package/dist/dist-D6xbz5Ks.js +1501 -0
  22. package/dist/{esm-CjkeZi__.js → esm-BFwBAnbO.js} +25 -25
  23. package/dist/esm-BUkWqSr2.js +299 -0
  24. package/dist/{esm-C-6g-SkZ.js → esm-C0xXMLsR.js} +37 -41
  25. package/dist/{esm-CJeszW-t.js → esm-C2xhhXs0.js} +7 -7
  26. package/dist/esm-C6erfjPM.js +252 -0
  27. package/dist/{esm-DFHFX1sH.js → esm-CVjC7qA4.js} +34 -38
  28. package/dist/esm-CqY5ezGz.js +1249 -0
  29. package/dist/esm-DfMIJ_N2.js +1522 -0
  30. package/dist/esm-Dls41IbZ.js +787 -0
  31. package/dist/{esm-Bv7Frz7C.js → esm-DzQDfrsZ.js} +7 -10
  32. package/dist/esm-aGLCvYRP.js +238 -0
  33. package/dist/{esm-VFJeyk9i.js → esm-nzwgJFGz.js} +40 -36
  34. package/dist/figWigMetadataSourceAdapter-8Kf_vZRf.js +36 -0
  35. package/dist/figWigMetadataSourceAdapter-DdDMZpYO.js +36 -0
  36. package/dist/flowNode-BSjy0Wz3.js +1306 -0
  37. package/dist/flowOutput-D5qpxWe0.js +183 -0
  38. package/dist/index.es.js +4766 -5522
  39. package/dist/index.js +1089 -685
  40. package/dist/inflate-BdC5KvHn.js +886 -0
  41. package/dist/{lz4-CUYSbVey.js → lz4-BLPgBOlE.js} +1 -1
  42. package/dist/markUtils-RaatLEa-.js +78 -0
  43. package/dist/{metadataChannels-DV62inJh.js → metadataChannels-DLSmx7kU.js} +6 -3
  44. package/dist/metadataUtils-DxEPe0vj.js +879 -0
  45. package/dist/order-BnKzKjt4.js +1151 -0
  46. package/dist/order-BpJnq_nV.js +1150 -0
  47. package/dist/{parquetRead-0hFIa3Cc.js → parquetRead-D-yY8njE.js} +3 -11
  48. package/dist/{rasterExport-B62RmAK1.js → rasterExport-B-WrX1pa.js} +5 -5
  49. package/dist/{rasterExport-DQH3hVg_.js → rasterExport-C_vx4Jwd.js} +4 -4
  50. package/dist/{rasterization-B05bDo5e.js → rasterization-QktH8Sn2.js} +26 -19
  51. package/dist/rectangle-BAdoDPXu.js +194 -0
  52. package/dist/{rectangle-DE98gIxF.js → rectangle-DZTR6NFQ.js} +10 -1
  53. package/dist/renderCanvas2D-CsRO78Pq.js +291 -0
  54. package/dist/{renderCanvas2D-Bdv-B4wj.js → renderCanvas2D-Y7pkRzbC.js} +98 -92
  55. package/dist/{rolldown-runtime-DF993M8W.js → rolldown-runtime-DeIk2rA4.js} +1 -1
  56. package/dist/{indexer-DbFTKGlm.js → scaleNull-CVzag4z8.js} +2 -12
  57. package/dist/{indexer-En7gpvLN.js → scaleNull-Pbz7QGnl.js} +2 -12
  58. package/dist/{scalePosition-ByvlXaML.js → scalePosition-CRXa0rCC.js} +8 -1
  59. package/dist/schema.json +33403 -16929
  60. package/dist/style.css +1 -1
  61. package/dist/{svg-N3tj05-e.js → svg-BBMtLgtM.js} +445 -362
  62. package/dist/{svg-DHsq1RpV.js → svg-JjWL6U-T.js} +464 -381
  63. package/dist/{svgRasterizer-CYVDlt5z.js → svgRasterizer-6OcftuoI.js} +3 -3
  64. package/dist/{svgRasterizer-CvCBlxLj.js → svgRasterizer-DkNRaCPs.js} +4 -4
  65. package/dist/tableMetadataSourceAdapter-CUNwLsdi.js +291 -0
  66. package/dist/tableMetadataSourceAdapter-DQrEXCo6.js +1283 -0
  67. package/dist/url-DeOdSRrv.js +183 -0
  68. package/dist/viewError-B0TMfOpB.js +33 -0
  69. package/dist/viewError-D9aO90cI.js +33 -0
  70. package/dist/{viewSelectors-DDLW-byr.js → viewSelectors-DkFvo33d.js} +914 -752
  71. package/dist/{viewSelectors-j-F9XwsE.js → viewSelectors-lM93fHAq.js} +942 -780
  72. package/dist/viewUtils-0SJOewM6.js +6195 -0
  73. package/dist/webgl-CXIO3OQz.js +5782 -0
  74. package/dist/webgl-Pdvfhio5.js +5783 -0
  75. package/package.json +7 -5
  76. package/src/agentApi/index.d.ts +3 -2
  77. package/src/agentShared/index.d.ts +2 -0
  78. package/src/appTypes.d.ts +1 -6
  79. package/src/embedTypes.d.ts +36 -1
  80. package/src/index.d.ts +6 -0
  81. package/src/spec/sampleView.d.ts +68 -13
  82. package/src/spec/view.d.ts +44 -5
  83. package/src/state/paramProvenanceTypes.d.ts +25 -2
  84. package/src/state.d.ts +14 -52
  85. package/dist/clipOptions-B5PibDq3.js +0 -2923
  86. package/dist/clipOptions-Cba4I0AO.js +0 -2903
  87. package/dist/esm-Dndm-NaA.js +0 -1193
  88. package/dist/order-B4uR9Q04.js +0 -1062
  89. package/dist/order-BSPy5DI8.js +0 -1062
  90. package/dist/renderCanvas2D-ChdoHGrU.js +0 -285
  91. package/dist/vega-scale-Byaw1K8O.js +0 -2446
  92. package/dist/vega-scale-Ctz_wa3z.js +0 -2443
  93. package/dist/viewError-BiR9VCgL.js +0 -29
  94. package/dist/viewUtils-JX6CMEYH.js +0 -6664
  95. package/dist/webgl-DdmOwEH0.js +0 -5544
  96. package/dist/webgl-Dw8xqZpX.js +0 -5544
@@ -0,0 +1,1150 @@
1
+ import { Fn as e, Yn as t, at as n, jt as r, m as i, ot as a } from "./clipOptions-clBEbkjv.js";
2
+ import { X as o } from "./flowNode-BSjy0Wz3.js";
3
+ import { a as s } from "./rasterization-QktH8Sn2.js";
4
+ import { l as c, t as l, u } from "./rectangle-BAdoDPXu.js";
5
+ import { t as d } from "./color-uTRRsy8i.js";
6
+ //#region ../core/src/rendering/immediate/markData.js
7
+ var f = [], p = ["x", "y"], m = class {
8
+ #e = {
9
+ x: 0,
10
+ y: 0,
11
+ width: 0,
12
+ height: 0
13
+ };
14
+ #t = new l(() => this.#e.x, () => this.#e.y, () => this.#e.width, () => this.#e.height);
15
+ #n;
16
+ #r = 0;
17
+ #i = 0;
18
+ #a = NaN;
19
+ #o = NaN;
20
+ #s = NaN;
21
+ resolveFacet(e, t) {
22
+ this.#c(e);
23
+ let n = t.locSize.location, r = t.locSize.size;
24
+ return (this.#a !== n || this.#o !== r || this.#s !== t.pixelToUnit) && (this.#l(n, r, t.pixelToUnit), this.#a = n, this.#o = r, this.#s = t.pixelToUnit), this.#t;
25
+ }
26
+ resolvePlacement(e, t, n) {
27
+ if (!t) return;
28
+ let r = t.getSnapshot().rectangles, i = n * 4;
29
+ if (!(i + 3 >= r.length)) return this.#c(e), this.#l(r[i + 1], r[i + 3], 1), this.#a = NaN, this.#o = NaN, this.#s = NaN, this.#t;
30
+ }
31
+ #c(e) {
32
+ this.#n !== e && (this.#e.x = e.x, this.#r = e.y, this.#e.width = e.width, this.#i = e.height, this.#n = e, this.#a = NaN, this.#o = NaN, this.#s = NaN);
33
+ }
34
+ #l(e, t, n) {
35
+ this.#e.y = this.#r + e * n * this.#i, this.#e.height = t * n * this.#i;
36
+ }
37
+ };
38
+ function h(e, t) {
39
+ let n = e.unitView.getCollector();
40
+ if (!n) throw Error(`Cannot render an uninitialized mark. View: ${e.unitView.getPathString()}`);
41
+ let r = n.facetBatches.get(void 0);
42
+ return r?.length ? r : n.facetBatches.get(t.facetId) ?? f;
43
+ }
44
+ function g(e, t, n, r, i, a) {
45
+ let o = h(e, t);
46
+ if (t.sampleFacetRenderingOptions) {
47
+ let a = r.resolveFacet(n, t.sampleFacetRenderingOptions);
48
+ _(e, a) && i(a, o);
49
+ } else if (e.encoders.facetIndex) for (let [s, c] of v(e.encoders.facetIndex, o)) {
50
+ let o = r.resolvePlacement(n, t.placement?.source, s);
51
+ o ? _(e, o) && i(o, c) : a(s);
52
+ }
53
+ else _(e, n) && i(n, o);
54
+ }
55
+ function _(e, t) {
56
+ if (e.properties.clamp && t.height <= 0) return !1;
57
+ for (let n of p) {
58
+ let r = e.encoders[n]?.scale;
59
+ if (r && "gapMapping" in r) {
60
+ let e = n === "x" ? t.width : t.height;
61
+ if (r.gapMapping(e)?.fits === !1) return !1;
62
+ }
63
+ }
64
+ return !0;
65
+ }
66
+ function v(e, t) {
67
+ let n = /* @__PURE__ */ new Map();
68
+ for (let r of t) {
69
+ let t = +e(r), i = n.get(t);
70
+ i || (i = [], n.set(t, i)), i.push(r);
71
+ }
72
+ return n;
73
+ }
74
+ //#endregion
75
+ //#region ../core/src/rendering/immediate/bounds.js
76
+ function y(e, t, n) {
77
+ return {
78
+ x1: n?.clipX ? Math.max(0, n.rect.x) : 0,
79
+ y1: n?.clipY ? Math.max(0, n.rect.y) : 0,
80
+ x2: n?.clipX ? Math.min(e, n.rect.x2) : e,
81
+ y2: n?.clipY ? Math.min(t, n.rect.y2) : t
82
+ };
83
+ }
84
+ function b(e, t, n) {
85
+ let r = n === !0 || n === "x", i = n === !0 || n === "y";
86
+ return {
87
+ x1: r ? t?.clipX ? t.rect.x : e.x : -Infinity,
88
+ y1: i ? t?.clipY ? t.rect.y : e.y : -Infinity,
89
+ x2: r ? t?.clipX ? t.rect.x2 : e.x2 : Infinity,
90
+ y2: i ? t?.clipY ? t.rect.y2 : e.y2 : Infinity
91
+ };
92
+ }
93
+ function x(e) {
94
+ return e.x1 <= e.x2 && e.y1 <= e.y2;
95
+ }
96
+ function S(e, t, n) {
97
+ return t < e.x1 || t > e.x2 || n < e.y1 || n > e.y2;
98
+ }
99
+ function C(e, t, n, r, i, a = 0) {
100
+ return !(Math.max(t, r) + a < e.x1 || Math.min(t, r) - a > e.x2 || Math.max(n, i) + a < e.y1 || Math.min(n, i) - a > e.y2);
101
+ }
102
+ //#endregion
103
+ //#region ../core/src/rendering/immediate/geometry/polygonUnion.js
104
+ var w = 1e-8;
105
+ function T(e) {
106
+ let t = e.flatMap((e, t) => e.map((n, r) => ({
107
+ a: n,
108
+ b: e[(r + 1) % e.length],
109
+ polygonIndex: t
110
+ }))), n = [];
111
+ for (let r of t) {
112
+ let i = [0, 1];
113
+ for (let e of t) r.polygonIndex != e.polygonIndex && E(r, e, i);
114
+ i.sort((e, t) => e - t);
115
+ for (let t = 0; t < i.length - 1; t++) {
116
+ let a = i[t], o = i[t + 1];
117
+ if (o - a <= w) continue;
118
+ let s = M(r.a, r.b, a), c = M(r.a, r.b, o), l = M(s, c, .5);
119
+ e.some((e, t) => t != r.polygonIndex && A(l, e)) || n.push({
120
+ a: s,
121
+ b: c,
122
+ polygonIndex: r.polygonIndex
123
+ });
124
+ }
125
+ }
126
+ return k(O(n));
127
+ }
128
+ function E(e, t, n) {
129
+ let r = P(e.b, e.a), i = P(t.b, t.a), a = P(t.a, e.a), o = I(r, i);
130
+ if (Math.abs(o) > w) {
131
+ let e = I(a, i) / o, t = I(a, r) / o;
132
+ e > w && e < .99999999 && t >= -1e-8 && t <= 1.00000001 && n.push(e);
133
+ } else Math.abs(I(a, r)) <= w && (D(e, t.a, n), D(e, t.b, n));
134
+ }
135
+ function D(e, t, n) {
136
+ let r = P(e.b, e.a), i = F(r, r), a = F(P(t, e.a), r) / i;
137
+ a > w && a < .99999999 && n.push(a);
138
+ }
139
+ function O(e) {
140
+ let t = /* @__PURE__ */ new Map();
141
+ for (let n of e) {
142
+ let e = N(n.a) + ":" + N(n.b), r = N(n.b) + ":" + N(n.a);
143
+ t.has(r) ? t.delete(r) : t.has(e) || t.set(e, n);
144
+ }
145
+ return Array.from(t.values());
146
+ }
147
+ function k(e) {
148
+ let t = /* @__PURE__ */ new Map();
149
+ for (let n of e) {
150
+ let e = N(n.a), r = t.get(e) ?? [];
151
+ r.push(n), t.set(e, r);
152
+ }
153
+ let n = new Set(e), r = [];
154
+ for (; n.size;) {
155
+ let e = n.values().next().value, i = [e.a], a = e;
156
+ for (;;) {
157
+ if (n.delete(a), i.push(a.b), N(a.b) == N(i[0])) {
158
+ i.pop();
159
+ break;
160
+ }
161
+ let e = (t.get(N(a.b)) ?? []).find((e) => n.has(e));
162
+ if (!e) throw Error("Cannot chain SVG polygon union boundary.");
163
+ a = e;
164
+ }
165
+ r.push(i);
166
+ }
167
+ return r;
168
+ }
169
+ function A(e, t) {
170
+ let n = !1;
171
+ for (let r = 0, i = t.length - 1; r < t.length; i = r++) {
172
+ let a = t[i], o = t[r];
173
+ if (j(e, a, o)) return !1;
174
+ a.y > e.y != o.y > e.y && e.x < (o.x - a.x) * (e.y - a.y) / (o.y - a.y) + a.x && (n = !n);
175
+ }
176
+ return n;
177
+ }
178
+ function j(e, t, n) {
179
+ return Math.abs(I(P(e, t), P(n, t))) <= w && F(P(e, t), P(e, n)) <= w;
180
+ }
181
+ function M(e, t, n) {
182
+ return {
183
+ x: e.x + (t.x - e.x) * n,
184
+ y: e.y + (t.y - e.y) * n
185
+ };
186
+ }
187
+ function N(e) {
188
+ return `${Math.round(e.x / w)},${Math.round(e.y / w)}`;
189
+ }
190
+ function P(e, t) {
191
+ return {
192
+ x: e.x - t.x,
193
+ y: e.y - t.y
194
+ };
195
+ }
196
+ function F(e, t) {
197
+ return e.x * t.x + e.y * t.y;
198
+ }
199
+ function I(e, t) {
200
+ return e.x * t.y - e.y * t.x;
201
+ }
202
+ //#endregion
203
+ //#region ../core/src/rendering/immediate/markEncoding.js
204
+ var L = /* @__PURE__ */ new WeakMap();
205
+ function R(e) {
206
+ let t = L.get(e);
207
+ if (!t) {
208
+ let n = /* @__PURE__ */ new Map([["none", 0]]), r = "none", i = 0;
209
+ t = (e) => {
210
+ if (e !== r) {
211
+ let t = n.get(e);
212
+ t === void 0 && (t = d(e)[3], n.set(e, t)), r = e, i = t;
213
+ }
214
+ return i;
215
+ }, L.set(e, t);
216
+ }
217
+ return t;
218
+ }
219
+ function z(e, t, n, r, i = !1) {
220
+ let o = t[n], s = t[n + "2"], c = t[n + "Offset"], l = t[n + "2Offset"], u = n == "x" ? e.width : e.height, d = n == "x" ? e.x : e.y + u, f = n == "x" ? u : -u, p = n == "x" ? e.x : e.y, m = p + u, h = H(o), g = s ? H(s) : 0, _ = H(c), v = l ? H(l) : 0, y = V(o, u, s), b = s && V(s, u, o), x = o.constant && !y ? B(o, r) + h : 0, S = s?.constant && !b ? B(s, r) + g : 0, C = c.constant ? B(c, r) + _ : 0, w = s && l?.constant ? B(l, r) + v : 0;
221
+ return (e, t) => {
222
+ let n = c.constant ? C : B(c, e) + _, r = y ? y(e) : o.constant ? x : B(o, e) + h, u = d + r * f + n, T = u;
223
+ if (s) {
224
+ let t = b ? b(e) : s.constant ? S : B(s, e) + g, r = l ? l.constant ? w : B(l, e) + v : n;
225
+ T = d + t * f + r;
226
+ }
227
+ return t[0] = i ? a(u, p, m) : u, t[1] = i ? a(T, p, m) : T, t;
228
+ };
229
+ }
230
+ function B(e, t) {
231
+ return e(t);
232
+ }
233
+ function V(e, t, n) {
234
+ let i = e.scale;
235
+ if (!i || !("gapMapping" in i)) return;
236
+ let a = i.gapMapping(t);
237
+ if (!a) return;
238
+ let o = n && (i.type === "index" || i.type === "locus") && c(e.channelDef) && n.branches[0].accessor, s = o ? 0 : .5, l = e.branches.map(({ accessor: e }) => {
239
+ let t = e.channelDef;
240
+ if (r(t)) return e.asNumberAccessor();
241
+ let n = "band" in t ? t.band ?? s : s;
242
+ return (t) => {
243
+ let r = e(t), i = !!o && Number(r) > Number(o(t));
244
+ return a.position(r, n, i);
245
+ };
246
+ });
247
+ return (t) => {
248
+ for (let n = 0; n < l.length; n++) if (e.branches[n].predicate(t)) return l[n](t);
249
+ };
250
+ }
251
+ function H(e) {
252
+ let t = e.scale;
253
+ if (!t) return 0;
254
+ let n = e.channelDef, r = n && "band" in n ? n.band ?? .5 : .5;
255
+ return s(t, r);
256
+ }
257
+ function U(e, t) {
258
+ return K(e(t));
259
+ }
260
+ function W(e, t) {
261
+ let n = t.start ?? 0;
262
+ if (!e.constant || n === (t.end ?? t.data.length)) return;
263
+ let r = e.branches[0].accessor, a = r.channelDef, o = "value" in a ? a.value : "datum" in a ? a.datum : a;
264
+ if (i(o)) {
265
+ let e = r;
266
+ if (!/^[$A-Z_a-z][$\w]*(?:\s*\.\s*[$A-Z_a-z][$\w]*)*(?:\s*\|\|\s*(?:"(?:[^"\\]|\\.)*"|null))?$/.test(o.expr.trim()) || !e.dependencies?.every((e) => e.batchStable)) return;
267
+ }
268
+ return K(e(t.data[n]));
269
+ }
270
+ function G(e, t) {
271
+ return i(t) ? e.unitView.paramRuntime.evaluateAndGet(t) : t;
272
+ }
273
+ function K(e) {
274
+ return e == null ? "none" : "" + e;
275
+ }
276
+ //#endregion
277
+ //#region ../core/src/rendering/immediate/marks/arrow.js
278
+ function ee(e) {
279
+ let t = e.properties, n = G(e, t.headSpacing);
280
+ return {
281
+ configuredRHeadSlope: de(G(e, t.headAngle)),
282
+ configuredRHeadNotchSlope: de(G(e, t.headNotchAngle)),
283
+ headShape: G(e, t.headShape),
284
+ headWidth: G(e, t.headWidth),
285
+ minSize: G(e, t.minSize),
286
+ stem: G(e, t.stem),
287
+ startNotch: G(e, t.startNotch),
288
+ minStemLength: G(e, t.minStemLength),
289
+ headSpacing: n,
290
+ repeatHeads: n != null && n >= 0,
291
+ headPlacement: G(e, t.headPlacement)
292
+ };
293
+ }
294
+ function te(e, t, n, r, i) {
295
+ let { viewOpacity: a } = n, o = e.encoders, s = R(o.stroke);
296
+ return ne(e, t, n, (e) => {
297
+ let n = t.stem ? oe(e.tail, e.tip, e.tangent, e.normal, e.stemHalfWidth, e.rHeadSlope, t.startNotch && !e.bidirectional, e.bidirectional) : null, c = n ? [n] : [];
298
+ ie(e, (t, n, r, i) => {
299
+ let a = {
300
+ x: t,
301
+ y: n
302
+ };
303
+ c.push(e.renderedHeadShape == "open" ? se(a, r, i, e.headHalfWidth, e.rHeadSlope, e.rHeadNotchSlope, e.size) : ae(a, r, i, e.headHalfWidth, e.rHeadSlope, e.rHeadNotchSlope));
304
+ });
305
+ let l = i ?? K(o.stroke(e.datum)), u = B(o.strokeOpacity, e.datum) * s(l) * a > 0 && e.strokeWidth > 0;
306
+ r({
307
+ datum: e.datum,
308
+ boundaryLoops: c.length == 1 || !u ? c : T(c),
309
+ strokeWidth: e.strokeWidth,
310
+ headShapeFallback: e.headShapeFallback
311
+ });
312
+ });
313
+ }
314
+ function ne(e, t, n, r) {
315
+ let { coords: i, data: a, visibleBounds: o, countOnly: s } = n, c = e.encoders;
316
+ if (a.length == 0) return 0;
317
+ let l = z(i, c, "x", a[0], u(e, "x")), d = z(i, c, "y", a[0], u(e, "y")), f = [0, 0], p = [0, 0], m = {
318
+ datum: {},
319
+ tail: {
320
+ x: 0,
321
+ y: 0
322
+ },
323
+ tip: {
324
+ x: 0,
325
+ y: 0
326
+ },
327
+ tangent: {
328
+ x: 0,
329
+ y: 0
330
+ },
331
+ normal: {
332
+ x: 0,
333
+ y: 0
334
+ },
335
+ reverseTangent: {
336
+ x: 0,
337
+ y: 0
338
+ },
339
+ reverseNormal: {
340
+ x: 0,
341
+ y: 0
342
+ },
343
+ size: 0,
344
+ stemHalfWidth: 0,
345
+ headHalfWidth: 0,
346
+ headAxisLength: 0,
347
+ rHeadSlope: 0,
348
+ rHeadNotchSlope: 0,
349
+ strokeWidth: 0,
350
+ repeatSpacing: Infinity,
351
+ headRepeatFootprint: 0,
352
+ geometryLength: 0,
353
+ bidirectional: !1,
354
+ stemContainsHead: !1,
355
+ renderedHeadShape: "triangle",
356
+ headShapeFallback: !1
357
+ }, h = 0;
358
+ for (let e of a) {
359
+ l(e, f), d(e, p);
360
+ let n = re(c.direction, e), i = n == "reverse", a = n == "both", u = i ? f[1] : f[0], g = i ? p[1] : p[0], _ = i ? f[0] : f[1], v = i ? p[0] : p[1], y = _ - u, b = v - g, x = Math.hypot(y, b);
361
+ if (x == 0) continue;
362
+ let S = y / x, w = b / x, T = Math.max(B(c.size, e), t.minSize), E = T / 2, D = Math.max(t.headWidth * T, 0) / 2, O = ce({
363
+ segmentLength: x,
364
+ headHalfWidth: D,
365
+ stemHalfWidth: t.stem ? E : -E,
366
+ configuredRHeadSlope: t.configuredRHeadSlope,
367
+ configuredRHeadNotchSlope: t.configuredRHeadNotchSlope,
368
+ headRepeat: t.repeatHeads && !a,
369
+ headPlacement: t.headPlacement,
370
+ startNotch: t.startNotch && !a,
371
+ minStemLength: t.minStemLength,
372
+ headShape: t.headShape,
373
+ bidirectional: a
374
+ }), k = t.headShape == "open" ? O : Math.min(t.configuredRHeadNotchSlope, O), A = t.headShape == "open" ? T : 0, j = t.headPlacement == "outside" ? ue(D, O, k, A) : 0, M = _ + S * j, N = v + w * j;
375
+ a && (u -= S * j, g -= w * j);
376
+ let P = D * O, F = Math.hypot(D, P), I = t.headShape == "open" && F > 0 ? T * D / F : 0, L = M - S * (P + I), R = N - w * (P + I), z = a ? u + S * (P + I) : u, V = a ? g + w * (P + I) : g, H = B(c.strokeWidth, e), U = Math.max(t.stem ? E : 0, D) + H * 2;
377
+ if (!C(o, Math.min(u, M, L, z), Math.min(g, N, R, V), Math.max(u, M, L, z), Math.max(g, N, R, V), U) || (h++, s)) continue;
378
+ let W = t.headShape == "triangle" || t.headShape == "open" ? t.headShape : "triangle", G = P + A / Math.hypot(O, 1) + H, K = !t.repeatHeads || a ? Infinity : Math.max((t.headSpacing ?? 0) * T, G);
379
+ m.datum = e, Y(m.tail, u, g), Y(m.tip, M, N), Y(m.tangent, S, w), Y(m.normal, -w, S), Y(m.reverseTangent, -S, -w), Y(m.reverseNormal, w, -S), m.size = T, m.stemHalfWidth = E, m.headHalfWidth = D, m.headAxisLength = P, m.rHeadSlope = O, m.rHeadNotchSlope = k, m.strokeWidth = H, m.repeatSpacing = K, m.headRepeatFootprint = G, m.geometryLength = Math.hypot(M - u, N - g), m.bidirectional = a, m.stemContainsHead = t.stem && W == "triangle" && (!t.repeatHeads || a) && D <= E, m.renderedHeadShape = W, m.headShapeFallback = W != t.headShape, r(m);
380
+ }
381
+ return h;
382
+ }
383
+ function re(e, t) {
384
+ let n = U(e, t);
385
+ switch (n) {
386
+ case "forward":
387
+ case "reverse":
388
+ case "both": return n;
389
+ default: throw Error(`Invalid value for "direction" channel: ${n}`);
390
+ }
391
+ }
392
+ function ie(e, t) {
393
+ e.bidirectional && !e.stemContainsHead && t(e.tail.x, e.tail.y, e.reverseTangent, e.reverseNormal);
394
+ for (let n = 0; !e.stemContainsHead && !(n > 0 && n + e.headRepeatFootprint - e.strokeWidth / 2 > e.geometryLength || (t(e.tip.x - e.tangent.x * n, e.tip.y - e.tangent.y * n, e.tangent, e.normal), !(e.repeatSpacing > 0) || !Number.isFinite(e.repeatSpacing))); n += e.repeatSpacing);
395
+ }
396
+ function ae(e, t, n, r, i, a) {
397
+ let o = r * i, s = o - r * a, c = q(q(e, J(t, -o)), J(n, r)), l = q(q(e, J(t, -o)), J(n, -r));
398
+ return [
399
+ e,
400
+ c,
401
+ q(e, J(t, -s)),
402
+ l
403
+ ];
404
+ }
405
+ function oe(e, t, n, r, i, a, o, s) {
406
+ let c = i * a, l = q(q(t, J(n, -c)), J(r, i)), u = q(q(t, J(n, -c)), J(r, -i)), d = q(e, J(r, i)), f = q(e, J(r, -i));
407
+ return s ? [
408
+ t,
409
+ l,
410
+ q(q(e, J(n, c)), J(r, i)),
411
+ e,
412
+ q(q(e, J(n, c)), J(r, -i)),
413
+ u
414
+ ] : [
415
+ t,
416
+ l,
417
+ d,
418
+ ...o ? [q(e, J(n, i * a))] : [],
419
+ f,
420
+ u
421
+ ];
422
+ }
423
+ function se(e, t, n, r, i, a, o) {
424
+ let s = r * i, c = q(q(e, J(t, -s)), J(n, r)), l = q(q(e, J(t, -s)), J(n, -r)), u = Math.hypot(r, s), d = u > 0 ? o * r / u : 0, f = u > 0 ? o * s / u : 0, p = q(q(c, J(t, -d)), J(n, -f)), m = q(q(l, J(t, -d)), J(n, f));
425
+ return [
426
+ e,
427
+ c,
428
+ p,
429
+ q(e, J(t, -(s + d - (r - f) * a))),
430
+ m,
431
+ l
432
+ ];
433
+ }
434
+ function ce({ segmentLength: e, headHalfWidth: t, stemHalfWidth: n, configuredRHeadSlope: r, configuredRHeadNotchSlope: i, headRepeat: a, headPlacement: o, startNotch: s, minStemLength: c, headShape: l, bidirectional: u }) {
435
+ if (a || n < 0) return r;
436
+ if (o == "outside") return !s || n <= 0 ? r : Math.min(r, Math.max(e - c, 0) / n);
437
+ if (l != "triangle") return r;
438
+ let d = Math.max(e - c, 0) / (u ? 2 : 1);
439
+ return le(n, t, r, i) <= d ? r : d < n * i ? n > 0 ? fe(d / n, 0, r) : 0 : fe((d + (t - n) * i) / t, 0, r);
440
+ }
441
+ function le(e, t, n, r) {
442
+ return t * n - (t - e) * Math.min(r, n);
443
+ }
444
+ function ue(e, t, n, r) {
445
+ if (e <= 0) return 0;
446
+ let i = e * t, a = Math.hypot(e, i);
447
+ return i + r * e / a - (e - r * i / a) * n;
448
+ }
449
+ function de(e) {
450
+ let t = fe(e, 1, 90) * Math.PI / 180;
451
+ return 1 / Math.max(Math.tan(t), 1e-6);
452
+ }
453
+ function q(e, t) {
454
+ return {
455
+ x: e.x + t.x,
456
+ y: e.y + t.y
457
+ };
458
+ }
459
+ function J(e, t) {
460
+ return {
461
+ x: e.x * t,
462
+ y: e.y * t
463
+ };
464
+ }
465
+ function Y(e, t, n) {
466
+ e.x = t, e.y = n;
467
+ }
468
+ function fe(e, t, n) {
469
+ return Math.min(Math.max(e, t), n);
470
+ }
471
+ //#endregion
472
+ //#region ../core/src/rendering/immediate/linkFading.js
473
+ var pe = 4;
474
+ function me(e, t, n) {
475
+ let r = t[0] - e[0], i = t[1] - e[1], a = Math.hypot(r, i);
476
+ if (a == 0) return;
477
+ let o = -i / a, s = r / a;
478
+ (o < 0 || o == 0 && s < 0) && (o = -o, s = -s);
479
+ let c = o * e[0] + s * e[1], [l, u] = n, d = JSON.stringify([
480
+ X(o, 6),
481
+ X(s, 6),
482
+ X(c, 1),
483
+ X(l, 1),
484
+ X(u, 1)
485
+ ]);
486
+ return {
487
+ normalX: o,
488
+ normalY: s,
489
+ offset: c,
490
+ start: l,
491
+ end: u,
492
+ key: d
493
+ };
494
+ }
495
+ function he(e, t, n = !1) {
496
+ let r = G(e, e.properties.arcFadingDistance);
497
+ return t != "arc" && t != "dome" || r === !1 || r[0] <= 0 || r[1] <= 0 || n && G(e, e.properties.noFadingOnSecondPass) ? !1 : r;
498
+ }
499
+ function ge(e, t) {
500
+ let n = [], r = (r) => {
501
+ for (let i = 0; i <= pe; i++) {
502
+ let a = i / pe, o = r ? t + (e - t) * a : e + (t - e) * a, s = r ? (t - o) / (2 * t) : (t + o) / (2 * t), c = (o - e) / (t - e);
503
+ n.push({
504
+ offset: s,
505
+ opacity: 1 - _e(c)
506
+ });
507
+ }
508
+ };
509
+ return r(!0), r(!1), n;
510
+ }
511
+ function _e(e) {
512
+ let t = Math.max(0, Math.min(1, e));
513
+ return t * t * (3 - 2 * t);
514
+ }
515
+ function X(e, t) {
516
+ let n = 10 ** t;
517
+ return Math.round(e * n) / n;
518
+ }
519
+ //#endregion
520
+ //#region ../core/src/rendering/immediate/geometry/linkGeometry.js
521
+ function ve(e, t, n, r) {
522
+ return r.shape == "orthogonal" ? {
523
+ type: "orthogonal",
524
+ points: [
525
+ e,
526
+ r.orient == "horizontal" ? [e[0], t[1]] : [t[0], e[1]],
527
+ t
528
+ ]
529
+ } : {
530
+ type: "cubic",
531
+ points: ye(e, t, n, r)
532
+ };
533
+ }
534
+ function ye(e, t, n, r) {
535
+ if (r.shape == "arc") {
536
+ let i = [...e], a = [...t], o = Ce(a, i), s = we(o);
537
+ if (s == 0) return [
538
+ i,
539
+ i,
540
+ a,
541
+ a
542
+ ];
543
+ let c = Q(o, 1 / s), l = [-c[1], c[0]];
544
+ s = be(i, a, s, r.maxChordLength, n);
545
+ let u = Q(l, Math.max(s / 2 * r.arcHeightFactor, r.minArcHeight) / .75);
546
+ return [
547
+ i,
548
+ Z(i, u),
549
+ Z(a, u),
550
+ a
551
+ ];
552
+ }
553
+ if (r.shape == "dome") {
554
+ let i, a, o;
555
+ r.orient == "vertical" ? (i = [Math.min(e[0], t[0]), t[1]], a = [Math.max(e[0], t[0]), t[1]], o = [0, e[1] - t[1]]) : (i = [t[0], Math.min(e[1], t[1])], a = [t[0], Math.max(e[1], t[1])], o = [e[0] - t[0], 0]);
556
+ let s = we(Ce(a, i));
557
+ be(i, a, s, r.maxChordLength, n), r.clampApex && xe(i, a, r.orient, n);
558
+ let c = Q(o, 1 / .75);
559
+ return [
560
+ i,
561
+ Z(i, c),
562
+ Z(a, c),
563
+ a
564
+ ];
565
+ }
566
+ if (r.shape == "diagonal") {
567
+ if (r.orient == "vertical") {
568
+ let n = (e[1] + t[1]) / 2;
569
+ return [
570
+ e,
571
+ [e[0], n],
572
+ [t[0], n],
573
+ t
574
+ ];
575
+ }
576
+ {
577
+ let n = (e[0] + t[0]) / 2;
578
+ return [
579
+ e,
580
+ [n, e[1]],
581
+ [n, t[1]],
582
+ t
583
+ ];
584
+ }
585
+ }
586
+ if (r.shape == "line") {
587
+ let n = Q(Z(e, t), .5);
588
+ return [
589
+ e,
590
+ n,
591
+ n,
592
+ t
593
+ ];
594
+ }
595
+ throw Error(`Unsupported link shape: ${r.shape}`);
596
+ }
597
+ function be(e, t, n, r, i) {
598
+ if (n <= r) return n;
599
+ let a = Q(Ce(t, e), 1 / n);
600
+ return Se(e, i, 2) ? (Te(t, Z(e, Q(a, r))), r) : Se(t, i, 2) ? (Te(e, Ce(t, Q(a, r))), r) : n;
601
+ }
602
+ function xe(e, t, n, r) {
603
+ n == "vertical" ? (t[0] > 0 && (e[0] = Math.max(e[0], -t[0])), e[0] < r.width && (t[0] = Math.min(t[0], 2 * r.width - e[0]))) : (t[1] > 0 && (e[1] = Math.max(e[1], -t[1])), e[1] < r.height && (t[1] = Math.min(t[1], 2 * r.height - e[1])));
604
+ }
605
+ function Se(e, t, n) {
606
+ return e[0] >= -t.width * n && e[0] <= t.width * (1 + n) && e[1] >= -t.height * n && e[1] <= t.height * (1 + n);
607
+ }
608
+ function Z(e, t) {
609
+ return [e[0] + t[0], e[1] + t[1]];
610
+ }
611
+ function Ce(e, t) {
612
+ return [e[0] - t[0], e[1] - t[1]];
613
+ }
614
+ function Q(e, t) {
615
+ return [e[0] * t, e[1] * t];
616
+ }
617
+ function we(e) {
618
+ return Math.hypot(e[0], e[1]);
619
+ }
620
+ function Te(e, t) {
621
+ e[0] = t[0], e[1] = t[1];
622
+ }
623
+ //#endregion
624
+ //#region ../core/src/rendering/immediate/marks/link.js
625
+ function Ee(e) {
626
+ let t = e.properties;
627
+ return {
628
+ shape: G(e, t.linkShape),
629
+ orient: G(e, t.orient),
630
+ arcHeightFactor: G(e, t.arcHeightFactor),
631
+ minArcHeight: G(e, t.minArcHeight),
632
+ maxChordLength: G(e, t.maxChordLength),
633
+ clampApex: G(e, t.clampApex)
634
+ };
635
+ }
636
+ function De(e, t, n, r) {
637
+ let { coords: i, data: a, visibleBounds: o } = n, s = e.encoders;
638
+ if (a.length == 0) return 0;
639
+ let c = z(i, s, "x", a[0], u(e, "x")), l = z(i, s, "y", a[0], u(e, "y")), d = [0, 0], f = [0, 0], p = i.x, m = i.y, h = {
640
+ width: i.width,
641
+ height: i.height
642
+ }, g = m + h.height, _ = u(e, "x") || u(e, "y"), v = 0;
643
+ for (let e of a) {
644
+ if (c(e, d), l(e, f), (_ || t.shape == "orthogonal") && d[0] === d[1] && f[0] === f[1]) continue;
645
+ let [i, a] = d, [u, m] = f, y = ve([i - p, g - u], [a - p, g - m], h, t), b = Infinity, x = Infinity, S = -Infinity, w = -Infinity;
646
+ for (let e of y.points) e[0] += p, e[1] = g - e[1], b = Math.min(b, e[0]), x = Math.min(x, e[1]), S = Math.max(S, e[0]), w = Math.max(w, e[1]);
647
+ let T = B(s.size, e);
648
+ C(o, b, x, S, w, Math.max(T, n.minPickingSize ?? 0) / 2) && (v++, r({
649
+ datum: e,
650
+ geometry: y,
651
+ strokeWidth: T
652
+ }));
653
+ }
654
+ return v;
655
+ }
656
+ //#endregion
657
+ //#region ../core/src/rendering/immediate/marks/point.js
658
+ function Oe(e) {
659
+ return { inwardStroke: G(e, e.properties.inwardStroke) };
660
+ }
661
+ function ke(e, t, n, r) {
662
+ let { coords: i, data: o, visibleBounds: s, anchorCullBounds: c } = n, l = n.start ?? 0, d = n.end ?? o.length, f = e.encoders;
663
+ if (l === d) return 0;
664
+ let p = z(i, f, "x", o[l]), m = z(i, f, "y", o[l]), h = [0, 0], g = [0, 0], _ = e.getSemanticThreshold(), v = {
665
+ datum: {},
666
+ shape: "circle",
667
+ x: 0,
668
+ y: 0,
669
+ radius: 0,
670
+ geometryRadius: 0,
671
+ boundsRadius: 0,
672
+ angle: 0,
673
+ strokeWidth: 0,
674
+ lineShape: !1
675
+ }, y = u(e, "x"), b = u(e, "y"), x = 0;
676
+ for (let n = l; n < d; n++) {
677
+ let l = o[n];
678
+ if (B(f.semanticScore, l) < _ && !e.isPreservedBySelection(l)) continue;
679
+ p(l, h), m(l, g);
680
+ let u = h[0] + B(f.dx, l), d = g[0] - B(f.dy, l);
681
+ if (y && (u = a(u, i.x, i.x2)), b && (d = a(d, i.y, i.y2)), S(c, u, d)) continue;
682
+ let w = Math.sqrt(B(f.size, l)) / 2;
683
+ if (t.inwardStroke && w <= 0) continue;
684
+ let T = U(f.shape, l), E = B(f.strokeWidth, l), D = T == "x" || T == "+", O = t.inwardStroke && !D ? Math.min(E, w) : E, k = t.inwardStroke && !D ? w - O / 2 : w, A = t.inwardStroke ? 0 : E / 2, j = w * Math.SQRT2 + A;
685
+ C(s, u - j, d - j, u + j, d + j) && (x++, v.datum = l, v.shape = T, v.x = u, v.y = d, v.radius = w, v.geometryRadius = k, v.boundsRadius = j, v.angle = B(f.angle, l), v.strokeWidth = O, v.lineShape = D, r(v));
686
+ }
687
+ return x;
688
+ }
689
+ //#endregion
690
+ //#region ../core/src/rendering/immediate/geometry/pointPath.js
691
+ function Ae(e, t, n, r, i) {
692
+ let a = r * .4, o = r * .15, s = Math.sqrt(3) * r / 2;
693
+ switch (e) {
694
+ case "diamond": return i.moveTo(t, n - r), i.lineTo(t + r, n), i.lineTo(t, n + r), i.lineTo(t - r, n), i.closePath(), !0;
695
+ case "cross": return i.moveTo(t - a, n - r), i.lineTo(t + a, n - r), i.lineTo(t + a, n - a), i.lineTo(t + r, n - a), i.lineTo(t + r, n + a), i.lineTo(t + a, n + a), i.lineTo(t + a, n + r), i.lineTo(t - a, n + r), i.lineTo(t - a, n + a), i.lineTo(t - r, n + a), i.lineTo(t - r, n - a), i.lineTo(t - a, n - a), i.closePath(), !0;
696
+ case "triangle-up": return i.moveTo(t, n - s), i.lineTo(t + r, n + s), i.lineTo(t - r, n + s), i.closePath(), !0;
697
+ case "triangle-right": return i.moveTo(t + s, n), i.lineTo(t - s, n + r), i.lineTo(t - s, n - r), i.closePath(), !0;
698
+ case "triangle-down": return i.moveTo(t, n + s), i.lineTo(t - r, n - s), i.lineTo(t + r, n - s), i.closePath(), !0;
699
+ case "triangle-left": return i.moveTo(t - s, n), i.lineTo(t + s, n - r), i.lineTo(t + s, n + r), i.closePath(), !0;
700
+ case "tick-up": return je(i, t - o, n - r, t + o, n), !0;
701
+ case "tick-right": return je(i, t, n - o, t + r, n + o), !0;
702
+ case "tick-down": return je(i, t - o, n, t + o, n + r), !0;
703
+ case "tick-left": return je(i, t - r, n - o, t, n + o), !0;
704
+ case "+": return i.moveTo(t - r, n), i.lineTo(t + r, n), i.moveTo(t, n - r), i.lineTo(t, n + r), !0;
705
+ case "x": return i.moveTo(t - r, n - r), i.lineTo(t + r, n + r), i.moveTo(t + r, n - r), i.lineTo(t - r, n + r), !0;
706
+ default: return !1;
707
+ }
708
+ }
709
+ function je(e, t, n, r, i) {
710
+ e.moveTo(t, n), e.lineTo(r, n), e.lineTo(r, i), e.lineTo(t, i), e.closePath();
711
+ }
712
+ //#endregion
713
+ //#region ../core/src/rendering/immediate/marks/rect.js
714
+ var Me = .1;
715
+ function Ne(e) {
716
+ let t = e.properties, n = G(e, t.cornerRadius), r = {
717
+ topLeft: G(e, t.cornerRadiusTopLeft ?? n),
718
+ topRight: G(e, t.cornerRadiusTopRight ?? n),
719
+ bottomRight: G(e, t.cornerRadiusBottomRight ?? n),
720
+ bottomLeft: G(e, t.cornerRadiusBottomLeft ?? n)
721
+ }, i = {
722
+ blur: G(e, t.shadowBlur ?? 0),
723
+ color: G(e, t.shadowColor ?? "black"),
724
+ offsetX: G(e, t.shadowOffsetX ?? 0),
725
+ offsetY: G(e, t.shadowOffsetY ?? 0),
726
+ opacity: G(e, t.shadowOpacity ?? 0)
727
+ }, a = G(e, t.hatch ?? "none"), o = !Le(r);
728
+ return {
729
+ cornerRadii: r,
730
+ minWidth: G(e, t.minWidth),
731
+ minHeight: G(e, t.minHeight),
732
+ minOpacity: G(e, t.minOpacity),
733
+ shadow: i,
734
+ hatch: a,
735
+ hasCornerRadii: o,
736
+ canPadSeams: a == "none" && i.opacity == 0 && !o
737
+ };
738
+ }
739
+ function Pe(e, t, n, r) {
740
+ let { coords: i, data: a, visibleBounds: o, viewOpacity: s } = n, c = n.start ?? 0, l = n.end ?? a.length, d = e.encoders;
741
+ if (c === l) return 0;
742
+ let f = R(d.fill), p = d.strokeWidth.constant, m = d.fillOpacity.constant, h = p ? B(d.strokeWidth, a[c]) : 0, g = m ? B(d.fillOpacity, a[c]) : 0, _ = W(d.fill, n), v = t.shadow.opacity > 0 ? t.shadow.blur + Math.max(Math.abs(t.shadow.offsetX), Math.abs(t.shadow.offsetY)) : 0, y = z(i, d, "x", a[c], u(e, "x")), b = z(i, d, "y", a[c], u(e, "y")), x = [0, 0], S = [0, 0], w = u(e, "x"), T = u(e, "y"), E = {
743
+ datum: {},
744
+ x: 0,
745
+ y: 0,
746
+ width: 0,
747
+ height: 0,
748
+ radii: {
749
+ topLeft: 0,
750
+ topRight: 0,
751
+ bottomRight: 0,
752
+ bottomLeft: 0
753
+ },
754
+ opacityFactor: 1,
755
+ strokeWidth: 0,
756
+ fill: "none",
757
+ fillOpacity: 0
758
+ }, D = 0;
759
+ for (let e = c; e < l; e++) {
760
+ let n = a[e];
761
+ if (y(n, x), b(n, S), w && x[0] === x[1] || T && S[0] === S[1]) continue;
762
+ let i = Math.min(x[0], x[1]), c = Math.min(S[0], S[1]), l = Math.abs(x[1] - x[0]), u = Math.abs(S[1] - S[0]), O = Fe(l, t.minWidth), k = Fe(u, t.minHeight), A = Math.max(t.minOpacity, O * k);
763
+ l < t.minWidth && (i -= (t.minWidth - l) / 2, l = t.minWidth), u < t.minHeight && (c -= (t.minHeight - u) / 2, u = t.minHeight);
764
+ let j = p ? h : B(d.strokeWidth, n), M = _ ?? K(d.fill(n)), N = (m ? g : B(d.fillOpacity, n)) * s, P = j == 0 && N * f(M) == 1 && A == 1 && t.canPadSeams && M != "none" ? Me : 0;
765
+ P && (i -= P, c -= P, l += P * 2, u += P * 2), C(o, i, c, i + l, c + u, j / 2 + v) && (D++, E.datum = n, E.x = i, E.y = c, E.width = l, E.height = u, E.opacityFactor = A, E.strokeWidth = j, E.fill = M, E.fillOpacity = N, t.hasCornerRadii && Ie(t.cornerRadii, l, u, E.radii), r(E));
766
+ }
767
+ return D;
768
+ }
769
+ function Fe(e, t) {
770
+ return t > 0 && e < t ? e / t : 1;
771
+ }
772
+ function Ie(e, t, n, r) {
773
+ let i = Math.min(t, n) / 2;
774
+ r.topLeft = Math.max(0, Math.min(e.topLeft, i)), r.topRight = Math.max(0, Math.min(e.topRight, i)), r.bottomRight = Math.max(0, Math.min(e.bottomRight, i)), r.bottomLeft = Math.max(0, Math.min(e.bottomLeft, i));
775
+ }
776
+ function Le(e) {
777
+ return e.topLeft == 0 && e.topRight == 0 && e.bottomRight == 0 && e.bottomLeft == 0;
778
+ }
779
+ //#endregion
780
+ //#region ../core/src/utils/clipSegment.js
781
+ function Re(e, t, n, r, i, a, o, s, c) {
782
+ if (!Number.isFinite(e) || !Number.isFinite(t) || !Number.isFinite(n) || !Number.isFinite(r)) return !1;
783
+ let l = n - e, u = r - t, d = 0, f = 1;
784
+ if (l == 0) {
785
+ if (e < i || e > o) return !1;
786
+ } else {
787
+ let t = (i - e) / l, n = (o - e) / l;
788
+ d = Math.max(d, Math.min(t, n)), f = Math.min(f, Math.max(t, n));
789
+ }
790
+ if (u == 0) {
791
+ if (t < a || t > s) return !1;
792
+ } else {
793
+ let e = (a - t) / u, n = (s - t) / u;
794
+ d = Math.max(d, Math.min(e, n)), f = Math.min(f, Math.max(e, n));
795
+ }
796
+ return d > f ? !1 : (c[0] = e + d * l, c[1] = t + d * u, c[2] = e + f * l, c[3] = t + f * u, !0);
797
+ }
798
+ //#endregion
799
+ //#region ../core/src/rendering/immediate/marks/rule.js
800
+ function ze(e) {
801
+ let t = "strokeAlign" in e.properties ? G(e, e.properties.strokeAlign) : "outside";
802
+ return {
803
+ strokeAlign: t === "inside" || t === "center" ? t : "outside",
804
+ minLength: G(e, e.properties.minLength),
805
+ strokeCap: G(e, e.properties.strokeCap)
806
+ };
807
+ }
808
+ function Be(e, t, n, r) {
809
+ let { coords: i, data: a, visibleBounds: o } = n, s = e.encoders, c = n.start ?? 0, l = n.end ?? a.length;
810
+ if (c === l) return 0;
811
+ let d = z(i, s, "x", a[c]), f = z(i, s, "y", a[c]), p = [0, 0], m = [0, 0], h = {
812
+ datum: {},
813
+ x1: 0,
814
+ y1: 0,
815
+ x2: 0,
816
+ y2: 0,
817
+ size: 0,
818
+ strokeWidth: 0,
819
+ stroke: "none",
820
+ strokeOpacity: 0
821
+ }, g = u(e, "x"), _ = u(e, "y"), v = [
822
+ 0,
823
+ 0,
824
+ 0,
825
+ 0
826
+ ], y = 0, b = e.getType() === "rule", x = b ? W(s.stroke, n) : "none", S = b ? R(s.stroke) : () => 0;
827
+ for (let e = c; e < l; e++) {
828
+ let n = a[e];
829
+ d(n, p), f(n, m);
830
+ let [c, l] = p, [u, w] = m, T = B(s.size, n);
831
+ if (T <= 0) continue;
832
+ let E = x ?? K(s.stroke(n)), D = b ? B(s.strokeOpacity, n) : 0, O = b && D * S(E) > 0 ? Math.max(0, B(s.strokeWidth, n)) : 0, k = T + 2 * O + t.minLength + 1, A = Math.max(o.x2 - o.x1, k), j = Math.max(o.y2 - o.y1, k);
833
+ if (!Re(c, u, l, w, g ? i.x : o.x1 - A, _ ? i.y : o.y1 - j, g ? i.x2 : o.x2 + A, _ ? i.y2 : o.y2 + j, v) || ([c, u, l, w] = v, c === l && u === w)) continue;
834
+ let M = l - c, N = w - u, P = Math.hypot(M, N);
835
+ if (P > 0 && P < t.minLength) {
836
+ let e = (t.minLength - P) / 2, n = M / P, r = N / P;
837
+ c -= n * e, u -= r * e, l += n * e, w += r * e;
838
+ }
839
+ C(o, c, u, l, w, (T / 2 + O) * (t.strokeCap === "square" ? Math.SQRT2 : 1)) && (y++, h.datum = n, h.x1 = c, h.y1 = u, h.x2 = l, h.y2 = w, h.size = T, h.strokeWidth = O, h.stroke = E, h.strokeOpacity = D, r(h));
840
+ }
841
+ return y;
842
+ }
843
+ //#endregion
844
+ //#region ../core/src/rendering/immediate/marks/text.js
845
+ function Ve(e) {
846
+ let t = e.properties;
847
+ return {
848
+ align: G(e, t.align),
849
+ baseline: G(e, t.baseline),
850
+ logoLetters: G(e, t.logoLetters),
851
+ paddingX: G(e, t.paddingX),
852
+ paddingY: G(e, t.paddingY),
853
+ flushX: G(e, t.flushX),
854
+ flushY: G(e, t.flushY),
855
+ squeeze: G(e, t.squeeze),
856
+ dx: G(e, t.dx),
857
+ dy: G(e, t.dy)
858
+ };
859
+ }
860
+ function He(e, r, i, a) {
861
+ let { coords: s, data: c, visibleBounds: l, anchorCullBounds: d } = i, { align: f, baseline: p } = r, m = e.encoders;
862
+ if (c.length == 0) return 0;
863
+ let h = m.size.constant ? B(m.size, c[0]) : 0, g = m.angle.constant ? B(m.angle, c[0]) : 0, _ = z(s, m, "x", c[0], u(e, "x")), v = z(s, m, "y", c[0], u(e, "y")), y = e.encoding.text, b = "format" in y ? o(y.format) : (e) => e, x = [0, 0], C = [0, 0], w = {
864
+ width: 0,
865
+ height: 0
866
+ }, T = {
867
+ x: 0,
868
+ y: 0
869
+ }, E = {
870
+ position: 0,
871
+ scale: 0
872
+ }, D = {
873
+ scaleX: 0,
874
+ scaleY: 0,
875
+ originX: 0,
876
+ originY: 0
877
+ }, O = Array(8).fill(0), k = {
878
+ datum: {},
879
+ text: "",
880
+ x: 0,
881
+ y: 0,
882
+ size: 0,
883
+ width: 0,
884
+ angle: 0,
885
+ dx: r.dx,
886
+ dy: r.dy,
887
+ fadeOpacity: 1,
888
+ scale: 1,
889
+ logoTransform: void 0,
890
+ multiCharacterLogo: !1,
891
+ boundsQuad: O
892
+ }, A = !!m.x2, j = !!m.y2, M = A && u(e, "x"), N = j && u(e, "y"), P = 0;
893
+ for (let e of c) {
894
+ let o = b(m.text(e)), c = t(o) ? o : o === null ? "" : "" + o;
895
+ if (!c || (_(e, x), v(e, C), M && x[0] === x[1] || N && C[0] === C[1])) continue;
896
+ let [u, y] = x, [F, I] = C, L = m.size.constant ? h : B(m.size, e), R = m.angle.constant ? g : B(m.angle, e);
897
+ if (r.logoLetters) {
898
+ let t = L, n = L;
899
+ if (A && (t = y - u, u = (u + y) / 2), j && (n = F - I, F = (F + I) / 2), Ue(O, u, F, Math.abs(t), Math.abs(n), "center", "middle", R, r.dx, r.dy), !t || !n || S(d, u, F) || !We(l, O)) continue;
900
+ let o = i.measureLogoInkBounds(c);
901
+ if (!o) continue;
902
+ P++, k.datum = e, k.text = c, k.x = u, k.y = F, k.size = 100, k.width = o.xMax - o.xMin, k.angle = R, k.fadeOpacity = 1, k.scale = 1, D.scaleX = t / k.width, D.scaleY = n / (o.yMax - o.yMin), D.originX = (o.xMin + o.xMax) / 2, D.originY = (o.yMin + o.yMax) / 2, k.logoTransform = D, k.multiCharacterLogo = c.length > 1, a(k);
903
+ continue;
904
+ }
905
+ let z = i.fontMeasurement.measureWidth(c, L);
906
+ Ge(z, L, R, w), A || j ? qe(f, p, R, T) : (T.x = Je[f], T.y = Ye[p]);
907
+ let V = 1;
908
+ if (A && (Ke(Math.min(u, y), Math.max(u, y), w.width, r.paddingX, T.x, r.flushX, s.x, s.x2, E), u = E.position, V *= E.scale), j && (Ke(Math.min(F, I), Math.max(F, I), w.height * V, r.paddingY, T.y, r.flushY, s.y, s.y2, E), F = E.position, V *= E.scale), S(d, u, F)) continue;
909
+ let H = 1;
910
+ if (V < 1) {
911
+ if (!r.squeeze || V < 3 / L) continue;
912
+ H = n(3 / L, 6 / L, V);
913
+ }
914
+ let U = L * V, W = z * V;
915
+ Ue(O, u, F, W, U, f, p, R, r.dx, r.dy), We(l, O) && (P++, k.datum = e, k.text = c, k.x = u, k.y = F, k.size = L, k.width = W, k.angle = R, k.fadeOpacity = H, k.scale = V, k.logoTransform = void 0, k.multiCharacterLogo = !1, a(k));
916
+ }
917
+ return P;
918
+ }
919
+ function Ue(e, t, n, r, i, a, o, s, c, l) {
920
+ let u = t + c - (Je[a] + 1) / 2 * r, d = n + l - (Ye[o] + 1) / 2 * i, f = u + r, p = d + i, m = s * Math.PI / 180, h = Math.sin(m), g = Math.cos(m);
921
+ return $(e, 0, t, n, u, d, h, g), $(e, 2, t, n, f, d, h, g), $(e, 4, t, n, f, p, h, g), $(e, 6, t, n, u, p, h, g), e;
922
+ }
923
+ function We(e, t) {
924
+ return C(e, Math.min(t[0], t[2], t[4], t[6]), Math.min(t[1], t[3], t[5], t[7]), Math.max(t[0], t[2], t[4], t[6]), Math.max(t[1], t[3], t[5], t[7]), 1);
925
+ }
926
+ function $(e, t, n, r, i, a, o, s) {
927
+ e[t] = n + (i - n) * s - (a - r) * o, e[t + 1] = r + (i - n) * o + (a - r) * s;
928
+ }
929
+ function Ge(e, t, n, r) {
930
+ let i = n * Math.PI / 180, a = Math.abs(Math.sin(i)), o = Math.abs(Math.cos(i));
931
+ r.width = e * o + t * a, r.height = e * a + t * o;
932
+ }
933
+ function Ke(e, t, n, r, i, a, o, s, c) {
934
+ let l = t - e, u = n + 2 * r;
935
+ if (e > s || t < o) {
936
+ c.position = 0, c.scale = 0;
937
+ return;
938
+ }
939
+ let d = Math.max(0, l - u), f;
940
+ if (i == 0) {
941
+ let n = e + t;
942
+ if (a) {
943
+ let e = Math.max(0, 2 * o + u - n);
944
+ n += Math.min(e, d);
945
+ let t = Math.max(0, u + n - 2 * s);
946
+ n -= Math.min(t, d);
947
+ }
948
+ f = n / 2;
949
+ } else if (i < 0) {
950
+ let t = e;
951
+ a && (t += Math.min(Math.max(0, o - t), d)), f = t + r;
952
+ } else {
953
+ let e = t;
954
+ a && (e -= Math.min(Math.max(0, e - s), d)), f = e - r;
955
+ }
956
+ c.position = f, c.scale = Math.max(0, Math.min(1, (l - r) / u));
957
+ }
958
+ function qe(e, t, n, r) {
959
+ let i = Je[e], a = -Ye[t], o = ((n + 45) % 360 + 360) % 360, s, c;
960
+ o < 90 ? (s = i, c = a) : o < 180 ? (s = a, c = -i) : o < 270 ? (s = -i, c = a) : (s = -a, c = i), r.x = s, r.y = -c;
961
+ }
962
+ var Je = {
963
+ left: -1,
964
+ center: 0,
965
+ right: 1
966
+ }, Ye = {
967
+ top: -1,
968
+ middle: 0,
969
+ bottom: 1,
970
+ alphabetic: 1,
971
+ baseline: 1
972
+ }, Xe = [
973
+ "Lato",
974
+ "Avenir Next",
975
+ "Avenir",
976
+ "Segoe UI",
977
+ "Ubuntu",
978
+ "Noto Sans",
979
+ "Helvetica Neue",
980
+ "Helvetica",
981
+ "Arial",
982
+ "sans-serif"
983
+ ], Ze = /* @__PURE__ */ new Set([
984
+ "serif",
985
+ "sans-serif",
986
+ "monospace",
987
+ "cursive",
988
+ "fantasy",
989
+ "system-ui",
990
+ "ui-serif",
991
+ "ui-sans-serif",
992
+ "ui-monospace",
993
+ "ui-rounded",
994
+ "emoji",
995
+ "math",
996
+ "fangsong"
997
+ ]), Qe = {
998
+ thin: 100,
999
+ light: 300,
1000
+ regular: 400,
1001
+ normal: 400,
1002
+ medium: 500,
1003
+ bold: 700,
1004
+ black: 900
1005
+ };
1006
+ function $e(e) {
1007
+ let t = e ?? "Lato";
1008
+ return [t, ...Xe.filter((e) => e.toLowerCase() != t.toLowerCase())].map(rt).join(", ");
1009
+ }
1010
+ function et(e) {
1011
+ if (typeof e == "number") return e;
1012
+ let t = Qe[e];
1013
+ if (t === void 0) throw Error("Unknown font weight: " + e);
1014
+ return t;
1015
+ }
1016
+ function tt(e) {
1017
+ return {
1018
+ style: e.fontStyle ?? "normal",
1019
+ weight: et(e.fontWeight ?? "normal"),
1020
+ family: $e(e.font)
1021
+ };
1022
+ }
1023
+ function nt(e, t) {
1024
+ switch (e) {
1025
+ case "top": return .79 * t;
1026
+ case "middle": return .35 * t;
1027
+ case "bottom": return -.21 * t;
1028
+ case "alphabetic":
1029
+ case "baseline": return 0;
1030
+ default: throw Error(`Unknown text baseline: ${e}`);
1031
+ }
1032
+ }
1033
+ function rt(e) {
1034
+ let t = e.toLowerCase();
1035
+ return Ze.has(t) ? t : `'${e.replaceAll("\\", "\\\\").replaceAll("'", "\\'")}'`;
1036
+ }
1037
+ //#endregion
1038
+ //#region ../core/src/rendering/nativeTextMetrics.js
1039
+ var it = "Mg", at = 100, ot = class {
1040
+ #e;
1041
+ #t;
1042
+ #n = new e([], JSON.stringify);
1043
+ #r = [];
1044
+ #i;
1045
+ constructor(e, t) {
1046
+ this.#e = e, this.#t = t, e.fontKerning = "normal", e.direction = "ltr", e.textAlign = "left", e.textBaseline = "alphabetic";
1047
+ }
1048
+ requestFont(e) {
1049
+ let t = tt(e), n = this.#n.get(t);
1050
+ if (!n) {
1051
+ n = new st((e, n) => this.#a(t, e, n)), this.#n.set(t, n);
1052
+ let e = this.#t?.load(ut(t, 16));
1053
+ e && this.#r.push(e.then(() => n.invalidateCache()));
1054
+ }
1055
+ return n;
1056
+ }
1057
+ async waitUntilReady() {
1058
+ await Promise.all(this.#r);
1059
+ }
1060
+ #a(e, t, n) {
1061
+ let r = ut(e, n);
1062
+ return r != this.#i && (this.#e.font = r, this.#i = r), this.#e.measureText(t);
1063
+ }
1064
+ }, st = class {
1065
+ #e;
1066
+ #t = NaN;
1067
+ #n = /* @__PURE__ */ new Float64Array(128);
1068
+ #r = NaN;
1069
+ #i = Array(128);
1070
+ constructor(e) {
1071
+ this.#e = e, this.#n.fill(NaN);
1072
+ }
1073
+ measureWidth(e, t) {
1074
+ this.#a(t);
1075
+ let n = e.length == 1 ? e.charCodeAt(0) : 128;
1076
+ if (n < 128) {
1077
+ let r = this.#n[n];
1078
+ if (!Number.isNaN(r)) return r;
1079
+ let i = this.#e(e, t).width;
1080
+ return this.#n[n] = i, i;
1081
+ }
1082
+ return this.#e(e, t).width;
1083
+ }
1084
+ getHeight(e) {
1085
+ if (this.#a(e), Number.isNaN(this.#r)) {
1086
+ let t = this.#e(it, e);
1087
+ this.#r = t.actualBoundingBoxAscent + t.actualBoundingBoxDescent;
1088
+ }
1089
+ return this.#r;
1090
+ }
1091
+ measureInkBounds(e) {
1092
+ let t = e.length == 1 ? e.charCodeAt(0) : 128;
1093
+ if (t < 128 && this.#i[t] !== void 0) return this.#i[t];
1094
+ let n = ct(this.#e(e, at));
1095
+ return t < 128 && (this.#i[t] = n), n;
1096
+ }
1097
+ invalidateCache() {
1098
+ this.#t = NaN, this.#n.fill(NaN), this.#r = NaN, this.#i.fill(void 0);
1099
+ }
1100
+ #a(e) {
1101
+ e != this.#t && (this.#t = e, this.#n.fill(NaN), this.#r = NaN);
1102
+ }
1103
+ };
1104
+ function ct(e) {
1105
+ let t = {
1106
+ xMin: -e.actualBoundingBoxLeft,
1107
+ xMax: e.actualBoundingBoxRight,
1108
+ yMin: -e.actualBoundingBoxAscent,
1109
+ yMax: e.actualBoundingBoxDescent
1110
+ };
1111
+ return t.xMax > t.xMin && t.yMax > t.yMin ? t : null;
1112
+ }
1113
+ function lt(e, t) {
1114
+ let n = e.requestFont(t);
1115
+ return n instanceof st ? (e) => n.measureInkBounds(e) : (e) => {
1116
+ let t = n.measureWidth(e, at), r = n.getHeight(at);
1117
+ return t > 0 && r > 0 ? {
1118
+ xMin: 0,
1119
+ xMax: t,
1120
+ yMin: -r,
1121
+ yMax: 0
1122
+ } : null;
1123
+ };
1124
+ }
1125
+ function ut(e, t) {
1126
+ return `${e.style} ${e.weight} ${t}px ${e.family}`;
1127
+ }
1128
+ function dt(e) {
1129
+ let t = e.createElement("canvas").getContext("2d");
1130
+ if (!t) throw Error("Canvas2D text measurement is unavailable.");
1131
+ return new ot(t, e.fonts);
1132
+ }
1133
+ async function ft(e, t) {
1134
+ t.visit((t) => {
1135
+ let n = t.mark;
1136
+ n?.getType() == "text" && e.requestFont(n.properties);
1137
+ }), await e.waitUntilReady();
1138
+ }
1139
+ //#endregion
1140
+ //#region ../core/src/rendering/immediate/order.js
1141
+ function pt(e, t, n, r, i) {
1142
+ let a = [], o = [];
1143
+ for (let i = t; i < n; i++) {
1144
+ let t = e[i];
1145
+ (r(t) ? a : o).push(t);
1146
+ }
1147
+ return i.map((e) => e === "matching" ? a : o);
1148
+ }
1149
+ //#endregion
1150
+ export { z as A, ee as C, B as D, ne as E, x as F, C as I, m as L, K as M, b as N, W as O, y as P, g as R, he as S, te as T, ke as _, $e as a, ge as b, Ve as c, Be as d, Re as f, Oe as g, Ae as h, lt as i, G as j, R as k, He as l, Pe as m, dt as n, nt as o, Ne as p, ft as r, et as s, pt as t, ze as u, Ee as v, ie as w, me as x, De as y };