@photon-ai/pho-ui 4.8.0 → 4.9.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 (54) hide show
  1. package/dist/chunks/bar-chart-ht70KKj3.js +19 -0
  2. package/dist/chunks/bar-chart-ht70KKj3.js.map +1 -0
  3. package/dist/chunks/{basic-page-BqfpJgAj.js → basic-page-DzT8yecB.js} +176 -175
  4. package/dist/chunks/basic-page-DzT8yecB.js.map +1 -0
  5. package/dist/chunks/chart-B5c8gmlj.js +1338 -0
  6. package/dist/chunks/chart-B5c8gmlj.js.map +1 -0
  7. package/dist/chunks/code-block-CbcE994O.js +516 -0
  8. package/dist/chunks/code-block-CbcE994O.js.map +1 -0
  9. package/dist/chunks/line-chart-Cm_Ac7f4.js +22 -0
  10. package/dist/chunks/line-chart-Cm_Ac7f4.js.map +1 -0
  11. package/dist/components/bar-chart.js +1 -1
  12. package/dist/components/chart.js +8 -5
  13. package/dist/components/code-block.js +12 -3
  14. package/dist/components/line-chart.js +1 -1
  15. package/dist/index.js +175 -162
  16. package/dist/motion.js +14 -13
  17. package/dist/motion.js.map +1 -1
  18. package/dist/primitives.js +1 -1
  19. package/dist/sections/basic-page.js +1 -1
  20. package/dist/src/components/bar-chart/bar-chart.d.ts +9 -1
  21. package/dist/src/components/chart/chart.d.ts +25 -0
  22. package/dist/src/components/chart/format.d.ts +9 -5
  23. package/dist/src/components/chart/index.d.ts +7 -4
  24. package/dist/src/components/chart/scale.d.ts +2 -2
  25. package/dist/src/components/chart/shell.d.ts +20 -13
  26. package/dist/src/components/chart/skeleton.d.ts +11 -0
  27. package/dist/src/components/chart/theme.d.ts +8 -0
  28. package/dist/src/components/chart/types.d.ts +39 -2
  29. package/dist/src/components/chart/use-measure.d.ts +2 -1
  30. package/dist/src/components/code-block/code-block.d.ts +23 -11
  31. package/dist/src/components/code-block/highlight.d.ts +24 -0
  32. package/dist/src/components/code-block/index.d.ts +4 -1
  33. package/dist/src/components/code-block/languages.d.ts +64 -0
  34. package/dist/src/components/code-block/pho-theme.d.ts +18 -0
  35. package/dist/src/components/code-block/tokens.d.ts +14 -0
  36. package/dist/src/components/line-chart/line-chart.d.ts +12 -3
  37. package/dist/src/motion/index.d.ts +6 -0
  38. package/dist/src/sections/basic-page/basic-page.d.ts +2 -0
  39. package/package.json +4 -1
  40. package/src/styles/theme.css +17 -4
  41. package/dist/chunks/IconArrowsMinimize-BfPUGuCB.js +0 -75
  42. package/dist/chunks/IconArrowsMinimize-BfPUGuCB.js.map +0 -1
  43. package/dist/chunks/bar-chart-DIALC2_z.js +0 -190
  44. package/dist/chunks/bar-chart-DIALC2_z.js.map +0 -1
  45. package/dist/chunks/basic-page-BqfpJgAj.js.map +0 -1
  46. package/dist/chunks/code-block-BuFfh0zH.js +0 -197
  47. package/dist/chunks/code-block-BuFfh0zH.js.map +0 -1
  48. package/dist/chunks/legend-C0mU7dqd.js +0 -60
  49. package/dist/chunks/legend-C0mU7dqd.js.map +0 -1
  50. package/dist/chunks/line-chart-VuMYKzW3.js +0 -453
  51. package/dist/chunks/line-chart-VuMYKzW3.js.map +0 -1
  52. package/dist/chunks/use-measure-C-i54AC6.js +0 -629
  53. package/dist/chunks/use-measure-C-i54AC6.js.map +0 -1
  54. package/dist/src/components/chart/axes.d.ts +0 -22
@@ -1,453 +0,0 @@
1
- "use client";
2
- import { i as bt, t as kt } from "./legend-C0mU7dqd.js";
3
- import { _ as Mt, a as Tt, c as wt, d as Lt, f as St, g as Ct, h as it, i as Et, l as Pt, m as Nt, n as At, o as Ft, p as It, r as zt, s as ot, t as jt, u as Dt, v as Rt } from "./use-measure-C-i54AC6.js";
4
- import { useMemo as j, useState as Xt } from "react";
5
- import { jsx as M, jsxs as st } from "react/jsx-runtime";
6
- function y(t) {
7
- return function() {
8
- return t;
9
- };
10
- }
11
- var V = Math.PI, G = 2 * V, A = 1e-6, Wt = G - A;
12
- function ht(t) {
13
- this._ += t[0];
14
- for (let n = 1, e = t.length; n < e; ++n) this._ += arguments[n] + t[n];
15
- }
16
- function Yt(t) {
17
- let n = Math.floor(t);
18
- if (!(n >= 0)) throw new Error(`invalid digits: ${t}`);
19
- if (n > 15) return ht;
20
- const e = 10 ** n;
21
- return function(o) {
22
- this._ += o[0];
23
- for (let l = 1, a = o.length; l < a; ++l) this._ += Math.round(arguments[l] * e) / e + o[l];
24
- };
25
- }
26
- var J = class {
27
- constructor(t) {
28
- this._x0 = this._y0 = this._x1 = this._y1 = null, this._ = "", this._append = t == null ? ht : Yt(t);
29
- }
30
- moveTo(t, n) {
31
- this._append`M${this._x0 = this._x1 = +t},${this._y0 = this._y1 = +n}`;
32
- }
33
- closePath() {
34
- this._x1 !== null && (this._x1 = this._x0, this._y1 = this._y0, this._append`Z`);
35
- }
36
- lineTo(t, n) {
37
- this._append`L${this._x1 = +t},${this._y1 = +n}`;
38
- }
39
- quadraticCurveTo(t, n, e, o) {
40
- this._append`Q${+t},${+n},${this._x1 = +e},${this._y1 = +o}`;
41
- }
42
- bezierCurveTo(t, n, e, o, l, a) {
43
- this._append`C${+t},${+n},${+e},${+o},${this._x1 = +l},${this._y1 = +a}`;
44
- }
45
- arcTo(t, n, e, o, l) {
46
- if (t = +t, n = +n, e = +e, o = +o, l = +l, l < 0) throw new Error(`negative radius: ${l}`);
47
- let a = this._x1, c = this._y1, r = e - t, u = o - n, s = a - t, m = c - n, i = s * s + m * m;
48
- if (this._x1 === null) this._append`M${this._x1 = t},${this._y1 = n}`;
49
- else if (i > A) if (!(Math.abs(m * r - u * s) > A) || !l) this._append`L${this._x1 = t},${this._y1 = n}`;
50
- else {
51
- let h = e - a, x = o - c, b = r * r + u * u, S = h * h + x * x, k = Math.sqrt(b), T = Math.sqrt(i), C = l * Math.tan((V - Math.acos((b + i - S) / (2 * k * T))) / 2), $ = C / T, v = C / k;
52
- Math.abs($ - 1) > A && this._append`L${t + $ * s},${n + $ * m}`, this._append`A${l},${l},0,0,${+(m * h > s * x)},${this._x1 = t + v * r},${this._y1 = n + v * u}`;
53
- }
54
- }
55
- arc(t, n, e, o, l, a) {
56
- if (t = +t, n = +n, e = +e, a = !!a, e < 0) throw new Error(`negative radius: ${e}`);
57
- let c = e * Math.cos(o), r = e * Math.sin(o), u = t + c, s = n + r, m = 1 ^ a, i = a ? o - l : l - o;
58
- this._x1 === null ? this._append`M${u},${s}` : (Math.abs(this._x1 - u) > A || Math.abs(this._y1 - s) > A) && this._append`L${u},${s}`, e && (i < 0 && (i = i % G + G), i > Wt ? this._append`A${e},${e},0,1,${m},${t - c},${n - r}A${e},${e},0,1,${m},${this._x1 = u},${this._y1 = s}` : i > A && this._append`A${e},${e},0,${+(i >= V)},${m},${this._x1 = t + e * Math.cos(l)},${this._y1 = n + e * Math.sin(l)}`);
59
- }
60
- rect(t, n, e, o) {
61
- this._append`M${this._x0 = this._x1 = +t},${this._y0 = this._y1 = +n}h${e = +e}v${+o}h${-e}Z`;
62
- }
63
- toString() {
64
- return this._;
65
- }
66
- };
67
- function qt() {
68
- return new J();
69
- }
70
- qt.prototype = J.prototype;
71
- function ct(t) {
72
- let n = 3;
73
- return t.digits = function(e) {
74
- if (!arguments.length) return n;
75
- if (e == null) n = null;
76
- else {
77
- const o = Math.floor(e);
78
- if (!(o >= 0)) throw new RangeError(`invalid digits: ${e}`);
79
- n = o;
80
- }
81
- return t;
82
- }, () => new J(n);
83
- }
84
- var Kt = Array.prototype.slice;
85
- function ft(t) {
86
- return typeof t == "object" && "length" in t ? t : Array.from(t);
87
- }
88
- function pt(t) {
89
- this._context = t;
90
- }
91
- pt.prototype = {
92
- areaStart: function() {
93
- this._line = 0;
94
- },
95
- areaEnd: function() {
96
- this._line = NaN;
97
- },
98
- lineStart: function() {
99
- this._point = 0;
100
- },
101
- lineEnd: function() {
102
- (this._line || this._line !== 0 && this._point === 1) && this._context.closePath(), this._line = 1 - this._line;
103
- },
104
- point: function(t, n) {
105
- switch (t = +t, n = +n, this._point) {
106
- case 0:
107
- this._point = 1, this._line ? this._context.lineTo(t, n) : this._context.moveTo(t, n);
108
- break;
109
- case 1:
110
- this._point = 2;
111
- default:
112
- this._context.lineTo(t, n);
113
- }
114
- }
115
- };
116
- function B(t) {
117
- return new pt(t);
118
- }
119
- function _t(t) {
120
- return t[0];
121
- }
122
- function dt(t) {
123
- return t[1];
124
- }
125
- function mt(t, n) {
126
- var e = y(!0), o = null, l = B, a = null, c = ct(r);
127
- t = typeof t == "function" ? t : t === void 0 ? _t : y(t), n = typeof n == "function" ? n : n === void 0 ? dt : y(n);
128
- function r(u) {
129
- var s, m = (u = ft(u)).length, i, h = !1, x;
130
- for (o == null && (a = l(x = c())), s = 0; s <= m; ++s)
131
- !(s < m && e(i = u[s], s, u)) === h && ((h = !h) ? a.lineStart() : a.lineEnd()), h && a.point(+t(i, s, u), +n(i, s, u));
132
- if (x) return a = null, x + "" || null;
133
- }
134
- return r.x = function(u) {
135
- return arguments.length ? (t = typeof u == "function" ? u : y(+u), r) : t;
136
- }, r.y = function(u) {
137
- return arguments.length ? (n = typeof u == "function" ? u : y(+u), r) : n;
138
- }, r.defined = function(u) {
139
- return arguments.length ? (e = typeof u == "function" ? u : y(!!u), r) : e;
140
- }, r.curve = function(u) {
141
- return arguments.length ? (l = u, o != null && (a = l(o)), r) : l;
142
- }, r.context = function(u) {
143
- return arguments.length ? (u == null ? o = a = null : a = l(o = u), r) : o;
144
- }, r;
145
- }
146
- function Ot(t, n, e) {
147
- var o = null, l = y(!0), a = null, c = B, r = null, u = ct(s);
148
- t = typeof t == "function" ? t : t === void 0 ? _t : y(+t), n = typeof n == "function" ? n : y(n === void 0 ? 0 : +n), e = typeof e == "function" ? e : e === void 0 ? dt : y(+e);
149
- function s(i) {
150
- var h, x, b, S = (i = ft(i)).length, k, T = !1, C, $ = new Array(S), v = new Array(S);
151
- for (a == null && (r = c(C = u())), h = 0; h <= S; ++h) {
152
- if (!(h < S && l(k = i[h], h, i)) === T)
153
- if (T = !T)
154
- x = h, r.areaStart(), r.lineStart();
155
- else {
156
- for (r.lineEnd(), r.lineStart(), b = h - 1; b >= x; --b) r.point($[b], v[b]);
157
- r.lineEnd(), r.areaEnd();
158
- }
159
- T && ($[h] = +t(k, h, i), v[h] = +n(k, h, i), r.point(o ? +o(k, h, i) : $[h], e ? +e(k, h, i) : v[h]));
160
- }
161
- if (C) return r = null, C + "" || null;
162
- }
163
- function m() {
164
- return mt().defined(l).curve(c).context(a);
165
- }
166
- return s.x = function(i) {
167
- return arguments.length ? (t = typeof i == "function" ? i : y(+i), o = null, s) : t;
168
- }, s.x0 = function(i) {
169
- return arguments.length ? (t = typeof i == "function" ? i : y(+i), s) : t;
170
- }, s.x1 = function(i) {
171
- return arguments.length ? (o = i == null ? null : typeof i == "function" ? i : y(+i), s) : o;
172
- }, s.y = function(i) {
173
- return arguments.length ? (n = typeof i == "function" ? i : y(+i), e = null, s) : n;
174
- }, s.y0 = function(i) {
175
- return arguments.length ? (n = typeof i == "function" ? i : y(+i), s) : n;
176
- }, s.y1 = function(i) {
177
- return arguments.length ? (e = i == null ? null : typeof i == "function" ? i : y(+i), s) : e;
178
- }, s.lineX0 = s.lineY0 = function() {
179
- return m().x(t).y(n);
180
- }, s.lineY1 = function() {
181
- return m().x(t).y(e);
182
- }, s.lineX1 = function() {
183
- return m().x(o).y(n);
184
- }, s.defined = function(i) {
185
- return arguments.length ? (l = typeof i == "function" ? i : y(!!i), s) : l;
186
- }, s.curve = function(i) {
187
- return arguments.length ? (c = i, a != null && (r = c(a)), s) : c;
188
- }, s.context = function(i) {
189
- return arguments.length ? (i == null ? a = r = null : r = c(a = i), s) : a;
190
- }, s;
191
- }
192
- function rt(t) {
193
- return t < 0 ? -1 : 1;
194
- }
195
- function lt(t, n, e) {
196
- var o = t._x1 - t._x0, l = n - t._x1, a = (t._y1 - t._y0) / (o || l < 0 && -0), c = (e - t._y1) / (l || o < 0 && -0), r = (a * l + c * o) / (o + l);
197
- return (rt(a) + rt(c)) * Math.min(Math.abs(a), Math.abs(c), 0.5 * Math.abs(r)) || 0;
198
- }
199
- function ut(t, n) {
200
- var e = t._x1 - t._x0;
201
- return e ? (3 * (t._y1 - t._y0) / e - n) / 2 : n;
202
- }
203
- function U(t, n, e) {
204
- var o = t._x0, l = t._y0, a = t._x1, c = t._y1, r = (a - o) / 3;
205
- t._context.bezierCurveTo(o + r, l + r * n, a - r, c - r * e, a, c);
206
- }
207
- function Q(t) {
208
- this._context = t;
209
- }
210
- Q.prototype = {
211
- areaStart: function() {
212
- this._line = 0;
213
- },
214
- areaEnd: function() {
215
- this._line = NaN;
216
- },
217
- lineStart: function() {
218
- this._x0 = this._x1 = this._y0 = this._y1 = this._t0 = NaN, this._point = 0;
219
- },
220
- lineEnd: function() {
221
- switch (this._point) {
222
- case 2:
223
- this._context.lineTo(this._x1, this._y1);
224
- break;
225
- case 3:
226
- U(this, this._t0, ut(this, this._t0));
227
- }
228
- (this._line || this._line !== 0 && this._point === 1) && this._context.closePath(), this._line = 1 - this._line;
229
- },
230
- point: function(t, n) {
231
- var e = NaN;
232
- if (t = +t, n = +n, !(t === this._x1 && n === this._y1)) {
233
- switch (this._point) {
234
- case 0:
235
- this._point = 1, this._line ? this._context.lineTo(t, n) : this._context.moveTo(t, n);
236
- break;
237
- case 1:
238
- this._point = 2;
239
- break;
240
- case 2:
241
- this._point = 3, U(this, ut(this, e = lt(this, t, n)), e);
242
- break;
243
- default:
244
- U(this, this._t0, e = lt(this, t, n));
245
- }
246
- this._x0 = this._x1, this._x1 = t, this._y0 = this._y1, this._y1 = n, this._t0 = e;
247
- }
248
- }
249
- };
250
- function Ht(t) {
251
- this._context = new vt(t);
252
- }
253
- (Ht.prototype = Object.create(Q.prototype)).point = function(t, n) {
254
- Q.prototype.point.call(this, n, t);
255
- };
256
- function vt(t) {
257
- this._context = t;
258
- }
259
- vt.prototype = {
260
- moveTo: function(t, n) {
261
- this._context.moveTo(n, t);
262
- },
263
- closePath: function() {
264
- this._context.closePath();
265
- },
266
- lineTo: function(t, n) {
267
- this._context.lineTo(n, t);
268
- },
269
- bezierCurveTo: function(t, n, e, o, l, a) {
270
- this._context.bezierCurveTo(n, t, o, e, a, l);
271
- }
272
- };
273
- function at(t) {
274
- return new Q(t);
275
- }
276
- var Zt = 2, Bt = 4;
277
- function Qt({ data: t, series: n, label: e, description: o, height: l = 200, width: a, valueFormat: c, timeFormat: r, locale: u, legend: s, baseline: m = "zero", curve: i = "linear", area: h = !1, breakdownTitle: x, loading: b, empty: S = "Nothing here yet.", className: k, ...T }) {
278
- const [C, $] = jt(a), [v, K] = Xt(null), f = j(() => {
279
- const p = n.map((N, L) => bt(N.color, L)), _ = t.map((N) => It(N.x)), g = Tt(_), d = c ?? it(u, !0), H = c ?? it(u), W = r ?? Ft(u, g), Z = n.map((N) => t.map((L) => Ct(L, N.key)));
280
- let w = 1 / 0, z = -1 / 0;
281
- for (const N of Z) for (const L of N)
282
- L != null && (L < w && (w = L), L > z && (z = L));
283
- w === 1 / 0 && (w = 0, z = 0), m === "zero" && (w = Math.min(0, w), z = Math.max(0, z));
284
- const et = Pt(w, z);
285
- return {
286
- colors: p,
287
- times: _,
288
- values: Z,
289
- axisFormat: d,
290
- fullFormat: H,
291
- headingFormat: W,
292
- y: et,
293
- yLabels: et.ticks.map(d),
294
- described: o ?? Nt({
295
- data: t,
296
- series: n,
297
- kind: "line",
298
- valueFormat: H,
299
- timeFormat: W
300
- })
301
- };
302
- }, [
303
- t,
304
- n,
305
- m,
306
- c,
307
- r,
308
- u,
309
- o
310
- ]), F = Et($, l, f.yLabels), D = t.length, E = f.times[0] ?? 0, R = f.times[D - 1] ?? 0, { left: Y, right: q, top: tt, bottom: nt } = F, O = j(() => ot(R > E ? [E, R] : [E - 1, E + 1], [Y, q]), [
311
- E,
312
- R,
313
- Y,
314
- q
315
- ]), I = j(() => ot(f.y.domain, [nt, tt]), [
316
- f.y.domain,
317
- nt,
318
- tt
319
- ]), P = j(() => f.times.map((p) => O(p)), [f.times, O]), yt = j(() => {
320
- const p = mt().defined((d) => d[1] != null).x((d) => d[0]).y((d) => I(d[1])).curve(i === "monotone" ? at : B), _ = Math.max(f.y.domain[0], Math.min(0, f.y.domain[1])), g = Ot().defined((d) => d[1] != null).x((d) => d[0]).y0(I(_)).y1((d) => I(d[1])).curve(i === "monotone" ? at : B);
321
- return f.values.map((d, H) => {
322
- const W = d.map((Z, w) => [P[w], Z]);
323
- return {
324
- stroke: p(W) ?? "",
325
- area: h && H === 0 ? g(W) ?? "" : null
326
- };
327
- });
328
- }, [
329
- f.values,
330
- f.y.domain,
331
- P,
332
- I,
333
- i,
334
- h
335
- ]), gt = j(() => {
336
- const p = q - Y;
337
- if (D === 0 || p <= 0) return [];
338
- const _ = St(u), g = Lt(E, R, p);
339
- return Dt(g, _, p).map((d) => ({
340
- x: O(d.getTime()),
341
- label: _(d)
342
- }));
343
- }, [
344
- D,
345
- E,
346
- R,
347
- Y,
348
- q,
349
- O,
350
- u
351
- ]), xt = (p) => {
352
- if (D === 0) return;
353
- const _ = p.currentTarget.getBoundingClientRect(), g = _.width > 0 ? $ / _.width : 1, d = (p.clientX - _.left) * g;
354
- K(wt(P, d));
355
- }, X = v != null ? t[v] : void 0, $t = s ?? n.length > 1;
356
- return /* @__PURE__ */ st(zt, {
357
- label: e,
358
- description: f.described,
359
- height: l,
360
- width: $,
361
- containerRef: C,
362
- loading: b,
363
- empty: S,
364
- showEmpty: D === 0 && !b,
365
- onPlotPointerMove: xt,
366
- onPlotPointerLeave: () => K(null),
367
- className: k,
368
- legend: $t ? /* @__PURE__ */ M(kt, { items: n.map((p, _) => ({
369
- label: p.label,
370
- color: f.colors[_],
371
- kind: "line",
372
- dashed: p.dashed
373
- })) }) : null,
374
- tooltip: v != null && X != null ? /* @__PURE__ */ M(At, {
375
- x: P[v],
376
- width: $,
377
- top: F.top,
378
- heading: f.headingFormat(new Date(X.x)),
379
- rows: n.map((p, _) => {
380
- const g = f.values[_][v];
381
- return {
382
- label: p.label,
383
- value: g == null ? "No data" : f.fullFormat(g),
384
- color: f.colors[_],
385
- kind: "line",
386
- dashed: p.dashed
387
- };
388
- }),
389
- breakdown: X.breakdown,
390
- breakdownTitle: x,
391
- valueFormat: f.fullFormat
392
- }) : null,
393
- ...T,
394
- children: [
395
- /* @__PURE__ */ M(Rt, {
396
- layout: F,
397
- ticks: f.y.ticks,
398
- labels: f.yLabels,
399
- scale: I
400
- }),
401
- /* @__PURE__ */ M(Mt, {
402
- layout: F,
403
- ticks: gt
404
- }),
405
- v != null && X != null && /* @__PURE__ */ M("line", {
406
- x1: P[v],
407
- x2: P[v],
408
- y1: F.top,
409
- y2: F.bottom,
410
- stroke: "var(--color-pho-chart-crosshair)"
411
- }),
412
- /* @__PURE__ */ M("g", {
413
- "data-lines": "",
414
- children: yt.map((p, _) => /* @__PURE__ */ st("g", {
415
- "data-series": n[_].key,
416
- children: [p.area != null && p.area !== "" && /* @__PURE__ */ M("path", {
417
- d: p.area,
418
- fill: f.colors[_],
419
- fillOpacity: 0.1
420
- }), /* @__PURE__ */ M("path", {
421
- d: p.stroke,
422
- fill: "none",
423
- stroke: f.colors[_],
424
- strokeWidth: Zt,
425
- strokeLinejoin: "round",
426
- strokeLinecap: "round",
427
- strokeDasharray: n[_].dashed ? "4 4" : void 0
428
- })]
429
- }, n[_].key))
430
- }),
431
- v != null && X != null && /* @__PURE__ */ M("g", {
432
- "data-points": "",
433
- children: f.values.map((p, _) => {
434
- const g = p[v];
435
- return g == null ? null : /* @__PURE__ */ M("circle", {
436
- cx: P[v],
437
- cy: I(g),
438
- r: Bt,
439
- fill: f.colors[_],
440
- stroke: "var(--pho-surface, var(--background-color-pho-primary))",
441
- strokeWidth: 2
442
- }, n[_].key);
443
- })
444
- })
445
- ]
446
- });
447
- }
448
- Qt.displayName = "LineChart";
449
- export {
450
- Qt as t
451
- };
452
-
453
- //# sourceMappingURL=line-chart-VuMYKzW3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"line-chart-VuMYKzW3.js","names":["constant","curveLinear","x","pointX","y","pointY","array","constant","curveLinear","pointX","pointY","array","line"],"sources":["../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/constant.js","../../../../node_modules/.pnpm/d3-path@3.1.0/node_modules/d3-path/src/path.js","../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/path.js","../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/array.js","../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/linear.js","../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/point.js","../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/line.js","../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/area.js","../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/monotone.js","../../src/components/line-chart/line-chart.tsx"],"sourcesContent":["export default function(x) {\n return function constant() {\n return x;\n };\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(area);\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","import { useMemo, useState, type PointerEvent } from \"react\";\nimport { area as shapeArea, curveLinear, curveMonotoneX, line } from \"d3-shape\";\nimport { XAxis, YAxis } from \"../chart/axes\";\nimport { chartColor } from \"../chart/color\";\nimport { describeChart, numberFormatter, readValue } from \"../chart/format\";\nimport { ChartLegend } from \"../chart/legend\";\nimport {\n bucketSpan,\n bucketTimeFormatter,\n linearScale,\n nearestIndex,\n niceLinearDomain,\n thinTicks,\n timeAxisTicks,\n timeTickFormatter,\n toTime,\n} from \"../chart/scale\";\nimport { ChartShell, chartLayout } from \"../chart/shell\";\nimport { ChartTooltip } from \"../chart/tooltip\";\nimport type { ChartBaseProps, ChartDatum } from \"../chart/types\";\nimport { useMeasuredWidth } from \"../chart/use-measure\";\n\n/**\n * LineChart — series over time as lines: latency percentiles, one line\n * per destination, a min / average / max where the bounds are dashed.\n *\n * Design notes:\n * - A 2px stroke with round joins, no markers at rest. Straight segments\n * by default: a curve invents values between samples, so `curve=\n * \"monotone\"` is a choice the page makes for a smooth-by-nature\n * quantity. `area` washes the surface under a lone series at 10%.\n * - Hover snaps a crosshair to the nearest bucket and rings each series'\n * point in the surface colour, so a dot stays legible where lines\n * cross; the tooltip lists every series at that time.\n * - Gridlines, axis text, legend and the figure's spoken summary are the\n * bar chart's — one system, one reading.\n */\n\nconst LINE_WIDTH = 2;\nconst POINT_RADIUS = 4;\n\nexport interface LineChartProps<\n T extends ChartDatum,\n> extends ChartBaseProps<T> {\n /** Straight segments, or a monotone curve that never overshoots a sample. @default \"linear\" */\n curve?: \"linear\" | \"monotone\";\n /** A soft fill under the first series (a lone one, as a rule). */\n area?: boolean;\n}\n\ntype Point = [number, number | null];\n\nexport function LineChart<T extends ChartDatum>({\n data,\n series,\n label,\n description,\n height = 200,\n width: fixedWidth,\n valueFormat,\n timeFormat,\n locale,\n legend,\n baseline = \"zero\",\n curve = \"linear\",\n area = false,\n breakdownTitle,\n loading,\n empty = \"Nothing here yet.\",\n className,\n ...props\n}: LineChartProps<T>) {\n const [containerRef, width] = useMeasuredWidth<HTMLDivElement>(fixedWidth);\n const [hovered, setHovered] = useState<number | null>(null);\n\n const model = useMemo(() => {\n const colors = series.map((s, index) => chartColor(s.color, index));\n const times = data.map((d) => toTime(d.x));\n const span = bucketSpan(times);\n const axisFormat = valueFormat ?? numberFormatter(locale, true);\n const fullFormat = valueFormat ?? numberFormatter(locale);\n const headingFormat = timeFormat ?? bucketTimeFormatter(locale, span);\n const values = series.map((s) => data.map((d) => readValue(d, s.key)));\n let min = Infinity;\n let max = -Infinity;\n for (const column of values) {\n for (const value of column) {\n if (value == null) continue;\n if (value < min) min = value;\n if (value > max) max = value;\n }\n }\n if (min === Infinity) {\n min = 0;\n max = 0;\n }\n if (baseline === \"zero\") {\n min = Math.min(0, min);\n max = Math.max(0, max);\n }\n const y = niceLinearDomain(min, max);\n return {\n colors,\n times,\n values,\n axisFormat,\n fullFormat,\n headingFormat,\n y,\n yLabels: y.ticks.map(axisFormat),\n described:\n description ??\n describeChart({\n data,\n series,\n kind: \"line\",\n valueFormat: fullFormat,\n timeFormat: headingFormat,\n }),\n };\n }, [data, series, baseline, valueFormat, timeFormat, locale, description]);\n\n const layout = chartLayout(width, height, model.yLabels);\n const n = data.length;\n const t0 = model.times[0] ?? 0;\n const t1 = model.times[n - 1] ?? 0;\n const { left, right, top, bottom } = layout;\n const xScale = useMemo(\n () => linearScale(t1 > t0 ? [t0, t1] : [t0 - 1, t0 + 1], [left, right]),\n [t0, t1, left, right],\n );\n const yScale = useMemo(\n () => linearScale(model.y.domain, [bottom, top]),\n [model.y.domain, bottom, top],\n );\n const xs = useMemo(\n () => model.times.map((t) => xScale(t)),\n [model.times, xScale],\n );\n\n const paths = useMemo(() => {\n const shape = line<Point>()\n .defined((p) => p[1] != null)\n .x((p) => p[0])\n .y((p) => yScale(p[1]!))\n .curve(curve === \"monotone\" ? curveMonotoneX : curveLinear);\n const floor = Math.max(model.y.domain[0], Math.min(0, model.y.domain[1]));\n const fill = shapeArea<Point>()\n .defined((p) => p[1] != null)\n .x((p) => p[0])\n .y0(yScale(floor))\n .y1((p) => yScale(p[1]!))\n .curve(curve === \"monotone\" ? curveMonotoneX : curveLinear);\n return model.values.map((column, index) => {\n const points: Point[] = column.map((value, i) => [xs[i]!, value]);\n return {\n stroke: shape(points) ?? \"\",\n area: area && index === 0 ? (fill(points) ?? \"\") : null,\n };\n });\n }, [model.values, model.y.domain, xs, yScale, curve, area]);\n\n const xTicks = useMemo(() => {\n const innerWidth = right - left;\n if (n === 0 || innerWidth <= 0) return [];\n const format = timeTickFormatter(locale);\n const ticks = timeAxisTicks(t0, t1, innerWidth);\n return thinTicks(ticks, format, innerWidth).map((tick) => ({\n x: xScale(tick.getTime()),\n label: format(tick),\n }));\n }, [n, t0, t1, left, right, xScale, locale]);\n\n const onPointerMove = (event: PointerEvent<SVGSVGElement>) => {\n if (n === 0) return;\n const rect = event.currentTarget.getBoundingClientRect();\n const scale = rect.width > 0 ? width / rect.width : 1;\n const px = (event.clientX - rect.left) * scale;\n setHovered(nearestIndex(xs, px));\n };\n\n const hoveredDatum = hovered != null ? data[hovered] : undefined;\n const showLegend = legend ?? series.length > 1;\n\n return (\n <ChartShell\n label={label}\n description={model.described}\n height={height}\n width={width}\n containerRef={containerRef}\n loading={loading}\n empty={empty}\n showEmpty={n === 0 && !loading}\n onPlotPointerMove={onPointerMove}\n onPlotPointerLeave={() => setHovered(null)}\n className={className}\n legend={\n showLegend ? (\n <ChartLegend\n items={series.map((s, index) => ({\n label: s.label,\n color: model.colors[index]!,\n kind: \"line\",\n dashed: s.dashed,\n }))}\n />\n ) : null\n }\n tooltip={\n hovered != null && hoveredDatum != null ? (\n <ChartTooltip\n x={xs[hovered]!}\n width={width}\n top={layout.top}\n heading={model.headingFormat(new Date(hoveredDatum.x))}\n rows={series.map((s, index) => {\n const value = model.values[index]![hovered];\n return {\n label: s.label,\n value: value == null ? \"No data\" : model.fullFormat(value),\n color: model.colors[index]!,\n kind: \"line\",\n dashed: s.dashed,\n };\n })}\n breakdown={hoveredDatum.breakdown}\n breakdownTitle={breakdownTitle}\n valueFormat={model.fullFormat}\n />\n ) : null\n }\n {...props}\n >\n <YAxis\n layout={layout}\n ticks={model.y.ticks}\n labels={model.yLabels}\n scale={yScale}\n />\n <XAxis layout={layout} ticks={xTicks} />\n {hovered != null && hoveredDatum != null && (\n <line\n x1={xs[hovered]}\n x2={xs[hovered]}\n y1={layout.top}\n y2={layout.bottom}\n stroke=\"var(--color-pho-chart-crosshair)\"\n />\n )}\n <g data-lines=\"\">\n {paths.map((path, index) => (\n <g key={series[index]!.key} data-series={series[index]!.key}>\n {path.area != null && path.area !== \"\" && (\n <path\n d={path.area}\n fill={model.colors[index]}\n fillOpacity={0.1}\n />\n )}\n <path\n d={path.stroke}\n fill=\"none\"\n stroke={model.colors[index]}\n strokeWidth={LINE_WIDTH}\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n strokeDasharray={series[index]!.dashed ? \"4 4\" : undefined}\n />\n </g>\n ))}\n </g>\n {hovered != null && hoveredDatum != null && (\n <g data-points=\"\">\n {model.values.map((column, index) => {\n const value = column[hovered];\n if (value == null) return null;\n return (\n <circle\n key={series[index]!.key}\n cx={xs[hovered]}\n cy={yScale(value)}\n r={POINT_RADIUS}\n fill={model.colors[index]}\n // The surface ring keeps a dot legible where lines cross.\n stroke=\"var(--pho-surface, var(--background-color-pho-primary))\"\n strokeWidth={2}\n />\n );\n })}\n </g>\n )}\n </ChartShell>\n );\n}\n\nLineChart.displayName = \"LineChart\";\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8],"mappings":"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"}