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