@ledgerhq/lumen-ui-react-visualization 0.1.14 → 0.1.16

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 (99) hide show
  1. package/dist/index.js +8 -12
  2. package/dist/lib/Components/Axis/Axis.constants.d.ts +9 -0
  3. package/dist/lib/Components/Axis/Axis.constants.d.ts.map +1 -0
  4. package/dist/lib/Components/Axis/Axis.constants.js +24 -0
  5. package/dist/lib/Components/Axis/Axis.types.d.ts +37 -0
  6. package/dist/lib/Components/Axis/Axis.types.d.ts.map +1 -1
  7. package/dist/lib/Components/Axis/XAxis/XAxis.d.ts +0 -1
  8. package/dist/lib/Components/Axis/XAxis/XAxis.d.ts.map +1 -1
  9. package/dist/lib/Components/Axis/XAxis/XAxis.js +21 -22
  10. package/dist/lib/Components/Axis/XAxis/index.d.ts +1 -1
  11. package/dist/lib/Components/Axis/XAxis/index.d.ts.map +1 -1
  12. package/dist/lib/Components/Axis/YAxis/YAxis.d.ts +0 -1
  13. package/dist/lib/Components/Axis/YAxis/YAxis.d.ts.map +1 -1
  14. package/dist/lib/Components/Axis/YAxis/YAxis.js +16 -17
  15. package/dist/lib/Components/Axis/YAxis/index.d.ts +1 -1
  16. package/dist/lib/Components/Axis/YAxis/index.d.ts.map +1 -1
  17. package/dist/lib/Components/Axis/index.d.ts +3 -0
  18. package/dist/lib/Components/Axis/index.d.ts.map +1 -0
  19. package/dist/lib/Components/CartesianChart/CartesianChart.d.ts +1 -1
  20. package/dist/lib/Components/CartesianChart/CartesianChart.d.ts.map +1 -1
  21. package/dist/lib/Components/CartesianChart/CartesianChart.js +62 -58
  22. package/dist/lib/Components/CartesianChart/context/useBuildChartContext.d.ts +7 -4
  23. package/dist/lib/Components/CartesianChart/context/useBuildChartContext.d.ts.map +1 -1
  24. package/dist/lib/Components/CartesianChart/context/useBuildChartContext.js +31 -31
  25. package/dist/lib/Components/CartesianChart/types.d.ts +11 -3
  26. package/dist/lib/Components/CartesianChart/types.d.ts.map +1 -1
  27. package/dist/lib/Components/CartesianChart/utils.d.ts +19 -8
  28. package/dist/lib/Components/CartesianChart/utils.d.ts.map +1 -1
  29. package/dist/lib/Components/CartesianChart/utils.js +10 -11
  30. package/dist/lib/Components/Line/utils.d.ts +4 -0
  31. package/dist/lib/Components/Line/utils.d.ts.map +1 -1
  32. package/dist/lib/Components/Line/utils.js +15 -15
  33. package/dist/lib/Components/LineChart/LineChart.d.ts +1 -1
  34. package/dist/lib/Components/LineChart/LineChart.d.ts.map +1 -1
  35. package/dist/lib/Components/LineChart/LineChart.js +64 -74
  36. package/dist/lib/Components/LineChart/__stories__/cryptoChartData.d.ts +85 -0
  37. package/dist/lib/Components/LineChart/__stories__/cryptoChartData.d.ts.map +1 -0
  38. package/dist/lib/Components/LineChart/types.d.ts +10 -3
  39. package/dist/lib/Components/LineChart/types.d.ts.map +1 -1
  40. package/dist/lib/Components/Point/Point.d.ts +1 -1
  41. package/dist/lib/Components/Point/Point.d.ts.map +1 -1
  42. package/dist/lib/Components/Point/Point.js +35 -30
  43. package/dist/lib/Components/Point/constants.d.ts +7 -0
  44. package/dist/lib/Components/Point/constants.d.ts.map +1 -0
  45. package/dist/lib/Components/Point/constants.js +9 -0
  46. package/dist/lib/Components/Point/pointContext/MagneticPointsProvider.d.ts +7 -0
  47. package/dist/lib/Components/Point/pointContext/MagneticPointsProvider.d.ts.map +1 -0
  48. package/dist/lib/Components/Point/pointContext/MagneticPointsProvider.js +19 -0
  49. package/dist/lib/Components/Point/pointContext/index.d.ts +3 -0
  50. package/dist/lib/Components/Point/pointContext/index.d.ts.map +1 -0
  51. package/dist/lib/Components/Point/pointContext/magneticPointsContext.d.ts +13 -0
  52. package/dist/lib/Components/Point/pointContext/magneticPointsContext.d.ts.map +1 -0
  53. package/dist/lib/Components/Point/pointContext/magneticPointsContext.js +9 -0
  54. package/dist/lib/Components/Point/types.d.ts +7 -0
  55. package/dist/lib/Components/Point/types.d.ts.map +1 -1
  56. package/dist/lib/Components/Point/utils.d.ts +8 -6
  57. package/dist/lib/Components/Point/utils.d.ts.map +1 -1
  58. package/dist/lib/Components/Point/utils.js +32 -20
  59. package/dist/lib/Components/ReferenceLine/constants.d.ts +1 -1
  60. package/dist/lib/Components/ReferenceLine/constants.d.ts.map +1 -1
  61. package/dist/lib/Components/ReferenceLine/utils.d.ts +3 -2
  62. package/dist/lib/Components/ReferenceLine/utils.d.ts.map +1 -1
  63. package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/ChartTooltipItem.d.ts +7 -1
  64. package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/ChartTooltipItem.d.ts.map +1 -1
  65. package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/ChartTooltipItem.js +23 -22
  66. package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/DefaultScrubberTooltip.d.ts.map +1 -1
  67. package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/DefaultScrubberTooltip.js +43 -47
  68. package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/utils.d.ts +19 -4
  69. package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/utils.d.ts.map +1 -1
  70. package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/utils.js +62 -41
  71. package/dist/lib/Components/Scrubber/Scrubber.d.ts +1 -1
  72. package/dist/lib/Components/Scrubber/Scrubber.d.ts.map +1 -1
  73. package/dist/lib/Components/Scrubber/Scrubber.js +78 -99
  74. package/dist/lib/Components/Scrubber/ScrubberProvider.d.ts +1 -1
  75. package/dist/lib/Components/Scrubber/ScrubberProvider.d.ts.map +1 -1
  76. package/dist/lib/Components/Scrubber/ScrubberProvider.js +97 -72
  77. package/dist/lib/Components/Scrubber/index.d.ts +0 -1
  78. package/dist/lib/Components/Scrubber/index.d.ts.map +1 -1
  79. package/dist/lib/Components/Scrubber/types.d.ts +17 -17
  80. package/dist/lib/Components/Scrubber/types.d.ts.map +1 -1
  81. package/dist/lib/Components/Scrubber/utils.d.ts +33 -3
  82. package/dist/lib/Components/Scrubber/utils.d.ts.map +1 -1
  83. package/dist/lib/Components/Scrubber/utils.js +70 -37
  84. package/dist/lib/utils/domain/domain.d.ts +5 -4
  85. package/dist/lib/utils/domain/domain.d.ts.map +1 -1
  86. package/dist/lib/utils/index.d.ts +1 -1
  87. package/dist/lib/utils/index.d.ts.map +1 -1
  88. package/dist/lib/utils/scales/scales.d.ts +11 -5
  89. package/dist/lib/utils/scales/scales.d.ts.map +1 -1
  90. package/dist/lib/utils/scales/scales.js +19 -15
  91. package/dist/lib/utils/ticks/ticks.d.ts +13 -5
  92. package/dist/lib/utils/ticks/ticks.d.ts.map +1 -1
  93. package/dist/lib/utils/ticks/ticks.js +20 -20
  94. package/dist/lib/utils/types.d.ts +3 -28
  95. package/dist/lib/utils/types.d.ts.map +1 -1
  96. package/dist/package.json +4 -4
  97. package/package.json +4 -4
  98. package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/index.d.ts +0 -3
  99. package/dist/lib/Components/Scrubber/DefaultScrubberTooltip/index.d.ts.map +0 -1
@@ -34,10 +34,25 @@ export declare const computeItemsBaseY: (drawingAreaY: number, hasTitle: boolean
34
34
  /**
35
35
  * Manages SVG text measurement for the tooltip via `getBBox`.
36
36
  *
37
- * A single `ResizeObserver` is created on mount and reused for the
38
- * component's entire lifetime, avoiding the cost of tearing down and
39
- * recreating an observer on every scrubber movement.
37
+ * A single `ResizeObserver` is created on mount and reused for the component's
38
+ * entire lifetime, avoiding the cost of tearing down and recreating an observer
39
+ * on every scrubber movement.
40
+ *
41
+ * The re-measure / re-observe effect's dependency is a shape signature (labels
42
+ * + title + count) rather than the raw `items` reference, so high-frequency
43
+ * value updates during a scrub do not trigger a fresh measurement or
44
+ * disconnect / re-observe cycle. The `ResizeObserver` still picks up real
45
+ * geometry changes (e.g. value strings widening past the current rect).
46
+ */
47
+ export declare function useTooltipMeasurement(items: ChartTooltipItemData[], hasTitle: boolean, title: SvgTextContent | undefined): UseTooltipMeasurementReturn;
48
+ type SvgTextRefSetter = (el: SVGTextElement | null) => void;
49
+ /**
50
+ * Builds stable per-index ref-callback arrays that mutate the given refs in
51
+ * place. Recomputed only when `length` changes, so the same callback identity
52
+ * is passed to each `ChartTooltipItem` across scrub frames. This unlocks
53
+ * `React.memo` on `ChartTooltipItem` and avoids the per-frame detach /
54
+ * re-attach dance of inline arrow ref callbacks.
40
55
  */
41
- export declare function useTooltipMeasurement(items: ChartTooltipItemData[], hasTitle: boolean, title: SvgTextContent | null | undefined): UseTooltipMeasurementReturn;
56
+ export declare const useBuildRefSetters: (refs: RefObject<(SVGTextElement | null)[]>, length: number) => SvgTextRefSetter[];
42
57
  export {};
43
58
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/Scrubber/DefaultScrubberTooltip/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAUrE,KAAK,MAAM,GAAG;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,KAAK,2BAA2B,GAAG;IACjC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC3C,SAAS,EAAE,SAAS,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAChD,SAAS,EAAE,SAAS,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;CACjD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,IAAI,kBAAkB,GAAG,IAAI,KAAG,MAOhE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,MAAM,GAAG,IAAI,EACrB,UAAU,OAAO,EACjB,UAAU,MAAM,KACf,MAUF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,cAAc,MAAM,EACpB,aAAa,WAAW,KACvB,MAOF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,WAAW,MAAM,EACjB,UAAU,OAAO,KAChB,MAQF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,cAAc,MAAM,EACpB,UAAU,OAAO,KAChB,MAGF,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,oBAAoB,EAAE,EAC7B,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GACvC,2BAA2B,CAkD7B"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/Scrubber/DefaultScrubberTooltip/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAUrE,KAAK,MAAM,GAAG;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,KAAK,2BAA2B,GAAG;IACjC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC3C,SAAS,EAAE,SAAS,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAChD,SAAS,EAAE,SAAS,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;CACjD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,IAAI,kBAAkB,GAAG,IAAI,KAAG,MAOhE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,MAAM,GAAG,IAAI,EACrB,UAAU,OAAO,EACjB,UAAU,MAAM,KACf,MAUF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,cAAc,MAAM,EACpB,aAAa,WAAW,KACvB,MAOF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,WAAW,MAAM,EACjB,UAAU,OAAO,KAChB,MAQF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,cAAc,MAAM,EACpB,UAAU,OAAO,KAChB,MAGF,CAAC;AA4BF;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,oBAAoB,EAAE,EAC7B,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,cAAc,GAAG,SAAS,GAChC,2BAA2B,CAuD7B;AAED,KAAK,gBAAgB,GAAG,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;AAE5D;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,SAAS,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,EAC1C,QAAQ,MAAM,KACb,gBAAgB,EAUlB,CAAC"}
@@ -1,5 +1,5 @@
1
- import { useRef as i, useState as W, useEffect as _, useLayoutEffect as g } from "react";
2
- import { LABEL_VALUE_GAP as E, PADDING_Y as d, ROW_HEIGHT as p, ROW_GAP as x, PADDING_X as G, TITLE_GAP as b } from "./constants.js";
1
+ import { useRef as i, useState as W, useEffect as _, useLayoutEffect as E, useMemo as x } from "react";
2
+ import { LABEL_VALUE_GAP as G, PADDING_Y as g, ROW_HEIGHT as b, ROW_GAP as L, PADDING_X as T, TITLE_GAP as R } from "./constants.js";
3
3
  const m = (t) => {
4
4
  if (!t || typeof t.getBBox != "function") return 0;
5
5
  try {
@@ -7,53 +7,74 @@ const m = (t) => {
7
7
  } catch {
8
8
  return 0;
9
9
  }
10
- }, A = (t, e, r) => {
11
- const n = t && e ? t.title : 0, c = t ? t.labels.map(
12
- (a, f) => a + E + (t.values[f] ?? 0)
13
- ) : [], l = Math.max(n, ...c) + G * 2;
14
- return Math.max(l, r);
15
- }, H = (t, e, r, n) => {
16
- const c = t + e + r > n.x + n.width;
10
+ }, I = (t, r, n) => {
11
+ const e = t && r ? t.title : 0, o = t ? t.labels.map(
12
+ (a, h) => a + G + (t.values[h] ?? 0)
13
+ ) : [], u = Math.max(e, ...o) + T * 2;
14
+ return Math.max(u, n);
15
+ }, M = (t, r, n, e) => {
16
+ const o = t + r + n > e.x + e.width;
17
17
  return Math.max(
18
- n.x,
19
- c ? t - e - r : t + e
18
+ e.x,
19
+ o ? t - r - n : t + r
20
20
  );
21
- }, I = (t, e) => {
22
- const r = e ? p + b : 0;
23
- return d * 2 + r + t * p + (t - 1) * x;
24
- }, P = (t, e) => {
25
- const r = e ? p + b : 0;
26
- return t + d + r;
21
+ }, P = (t, r) => {
22
+ const n = r ? b + R : 0;
23
+ return g * 2 + n + t * b + (t - 1) * L;
24
+ }, D = (t, r) => {
25
+ const n = r ? b + R : 0;
26
+ return t + g + n;
27
+ }, A = (t, r, n) => {
28
+ let e = "";
29
+ for (let c = 0; c < t.length; c++) {
30
+ c > 0 && (e += "");
31
+ const u = t[c].label;
32
+ e += typeof u == "string" || typeof u == "number" ? String(u) : "";
33
+ }
34
+ const o = typeof n == "string" || typeof n == "number" ? String(n) : "";
35
+ return `${r ? "1" : "0"}|${e}|${o}`;
27
36
  };
28
- function y(t, e, r) {
29
- const n = i(null), c = i([]), s = i([]), l = i(null), a = i(() => {
30
- }), [f, v] = W(null);
31
- return a.current = () => {
32
- const o = e ? m(n.current) : 0, u = t.map(
33
- (R, h) => m(c.current[h])
34
- ), B = t.map(
35
- (R, h) => m(s.current[h])
37
+ function O(t, r, n) {
38
+ const e = i(null), o = i([]), c = i([]), u = i(null), a = i(() => {
39
+ }), [h, y] = W(null);
40
+ a.current = () => {
41
+ const f = r ? m(e.current) : 0, s = t.map(
42
+ (v, p) => m(o.current[p])
43
+ ), l = t.map(
44
+ (v, p) => m(c.current[p])
36
45
  );
37
- v({
38
- title: o,
39
- labels: u,
40
- values: B
46
+ y({
47
+ title: f,
48
+ labels: s,
49
+ values: l
41
50
  });
42
51
  }, _(() => {
43
52
  if (!(typeof ResizeObserver > "u"))
44
- return l.current = new ResizeObserver(() => a.current()), () => l.current?.disconnect();
45
- }, []), g(() => {
46
- if (t.length === 0) return;
47
- c.current.length = t.length, s.current.length = t.length, a.current();
48
- const o = l.current;
49
- o && (o.disconnect(), n.current && o.observe(n.current), c.current.forEach((u) => u && o.observe(u)), s.current.forEach((u) => u && o.observe(u)));
50
- }, [t, r, e]), { widths: f, titleRef: n, labelRefs: c, valueRefs: s };
53
+ return u.current = new ResizeObserver(() => a.current()), () => u.current?.disconnect();
54
+ }, []);
55
+ const B = A(t, r, n), d = i(t.length);
56
+ return d.current = t.length, E(() => {
57
+ const f = d.current;
58
+ if (f === 0) return;
59
+ o.current.length = f, c.current.length = f, a.current();
60
+ const s = u.current;
61
+ s && (s.disconnect(), e.current && s.observe(e.current), o.current.forEach((l) => l && s.observe(l)), c.current.forEach((l) => l && s.observe(l)));
62
+ }, [B]), { widths: h, titleRef: e, labelRefs: o, valueRefs: c };
51
63
  }
64
+ const $ = (t, r) => x(() => {
65
+ const n = new Array(r);
66
+ for (let e = 0; e < r; e++)
67
+ n[e] = (o) => {
68
+ t.current[e] = o;
69
+ };
70
+ return n;
71
+ }, [t, r]);
52
72
  export {
53
- P as computeItemsBaseY,
54
- I as computeTooltipHeight,
55
- A as computeTooltipWidth,
56
- H as computeTooltipX,
73
+ D as computeItemsBaseY,
74
+ P as computeTooltipHeight,
75
+ I as computeTooltipWidth,
76
+ M as computeTooltipX,
57
77
  m as safeGetBBoxWidth,
58
- y as useTooltipMeasurement
78
+ $ as useBuildRefSetters,
79
+ O as useTooltipMeasurement
59
80
  };
@@ -25,5 +25,5 @@ import { ScrubberProps } from './types';
25
25
  * />
26
26
  * ```
27
27
  */
28
- export declare function Scrubber({ label, hideLine, hideOverlay, showBeacons, tooltip, }: Readonly<ScrubberProps>): import("react/jsx-runtime").JSX.Element | null;
28
+ export declare function Scrubber({ hideLine, hideOverlay, showBeacons, tooltip, }: Readonly<ScrubberProps>): import("react/jsx-runtime").JSX.Element | null;
29
29
  //# sourceMappingURL=Scrubber.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Scrubber.d.ts","sourceRoot":"","sources":["../../../../src/lib/Components/Scrubber/Scrubber.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAa7C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,QAAgB,EAChB,WAAmB,EACnB,WAAmB,EACnB,OAAO,GACR,EAAE,QAAQ,CAAC,aAAa,CAAC,kDA2KzB"}
1
+ {"version":3,"file":"Scrubber.d.ts","sourceRoot":"","sources":["../../../../src/lib/Components/Scrubber/Scrubber.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAY7C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,QAAgB,EAChB,WAAmB,EACnB,WAAmB,EACnB,OAAO,GACR,EAAE,QAAQ,CAAC,aAAa,CAAC,kDAoJzB"}
@@ -1,160 +1,139 @@
1
- import { jsxs as v, jsx as o, Fragment as F } from "react/jsx-runtime";
2
- import { useId as N, useMemo as d } from "react";
3
- import { resolvePixelX as P, resolvePixelY as R, LINE_GRADIENT_EDGE_OPACITY as O, OVERLAY_OPACITY as X, LABEL_OFFSET_Y as G, BEACON_STROKE_WIDTH as V, BEACON_RADIUS as H, OVERLAY_OFFSET as m, OVERLAY_LINE_INSET as S } from "./utils.js";
4
- import { useScrubberContext as M } from "./context/scrubberContext.js";
5
- import { useCartesianChartContext as U } from "../CartesianChart/context/cartesianChartContext.js";
6
- import { DefaultScrubberTooltip as j } from "./DefaultScrubberTooltip/DefaultScrubberTooltip.js";
7
- import { cssVar as r } from "../../../libs/design-core/dist/lib/cssVar/cssVar.js";
8
- function Z({
9
- label: n,
10
- hideLine: Y = !1,
11
- hideOverlay: _ = !1,
12
- showBeacons: l = !1,
13
- tooltip: f
1
+ import { jsxs as f, jsx as i, Fragment as N } from "react/jsx-runtime";
2
+ import { useId as P, useMemo as u } from "react";
3
+ import { DefaultScrubberTooltip as R } from "./DefaultScrubberTooltip/DefaultScrubberTooltip.js";
4
+ import { resolvePixelX as X, resolvePixelY as w, LINE_GRADIENT_EDGE_OPACITY as E, OVERLAY_OPACITY as L, BEACON_STROKE_WIDTH as G, BEACON_RADIUS as V, OVERLAY_OFFSET as p, OVERLAY_LINE_INSET as O } from "./utils.js";
5
+ import { useScrubberContext as F } from "./context/scrubberContext.js";
6
+ import { useCartesianChartContext as H } from "../CartesianChart/context/cartesianChartContext.js";
7
+ import { cssVar as o } from "../../../libs/design-core/dist/lib/cssVar/cssVar.js";
8
+ function B({
9
+ hideLine: A = !1,
10
+ hideOverlay: Y = !1,
11
+ showBeacons: n = !1,
12
+ tooltip: d
14
13
  }) {
15
- const b = N(), { scrubberPosition: e } = M(), {
16
- getXScale: p,
17
- getXAxisConfig: h,
18
- getYScale: y,
14
+ const m = P(), { scrubberPosition: e } = F(), {
15
+ getXScale: v,
16
+ getXAxisConfig: b,
17
+ getYScale: h,
19
18
  drawingArea: x,
20
- series: g,
21
- seriesMap: E
22
- } = U(), i = d(() => {
19
+ series: y,
20
+ seriesMap: g
21
+ } = H(), r = u(() => {
23
22
  if (e !== void 0)
24
- return P(e, p, h());
25
- }, [e, p, h]), I = d(() => e === void 0 || !l ? [] : g.map((t) => {
26
- const u = E.get(t.id)?.data, C = R(e, u, y);
23
+ return X(e, v, b());
24
+ }, [e, v, b]), k = u(() => e === void 0 || !n ? [] : y.map((t) => {
25
+ const c = g.get(t.id)?.data, C = w(e, c, h);
27
26
  return C === void 0 ? null : { id: t.id, stroke: t.stroke, pixelY: C };
28
27
  }).filter(
29
28
  (t) => t !== null
30
- ), [e, l, g, E, y]), A = d(() => {
31
- if (!(e === void 0 || !n))
32
- return n(e);
33
- }, [e, n]), a = d(() => {
34
- if (e === void 0 || !f)
29
+ ), [e, n, y, g, h]), s = u(() => {
30
+ if (e === void 0 || !d)
35
31
  return;
36
- const t = f(e);
32
+ const t = d(e);
37
33
  if (t.items.length === 0) return;
38
- const u = typeof t.title == "function" ? t.title(e) : t.title;
34
+ const c = typeof t.title == "function" ? t.title(e) : t.title;
39
35
  return {
40
36
  items: t.items,
41
- resolvedTitle: u,
37
+ resolvedTitle: c,
42
38
  offset: t.offset,
43
39
  minWidth: t.minWidth
44
40
  };
45
- }, [e, f]);
46
- if (e === void 0 || i === void 0)
41
+ }, [e, d]);
42
+ if (e === void 0 || r === void 0)
47
43
  return null;
48
44
  const {
49
- x: T,
50
- y: s,
51
- width: k,
52
- height: c
53
- } = x, W = i + S, L = s - m, w = Math.max(
45
+ x: I,
46
+ y: a,
47
+ width: S,
48
+ height: l
49
+ } = x, T = r + O, _ = a - p, W = Math.max(
54
50
  0,
55
- T + k - i - S + m
56
- ), D = c + m * 2;
57
- return /* @__PURE__ */ v("g", { "data-testid": "scrubber", children: [
58
- !Y && /* @__PURE__ */ v(F, { children: [
59
- /* @__PURE__ */ o("defs", { children: /* @__PURE__ */ v(
51
+ I + S - r - O + p
52
+ ), D = l + p * 2;
53
+ return /* @__PURE__ */ f("g", { "data-testid": "scrubber", children: [
54
+ !A && /* @__PURE__ */ f(N, { children: [
55
+ /* @__PURE__ */ i("defs", { children: /* @__PURE__ */ f(
60
56
  "linearGradient",
61
57
  {
62
- id: b,
58
+ id: m,
63
59
  gradientUnits: "userSpaceOnUse",
64
- x1: i,
65
- y1: s,
66
- x2: i,
67
- y2: s + c,
60
+ x1: r,
61
+ y1: a,
62
+ x2: r,
63
+ y2: a + l,
68
64
  children: [
69
- /* @__PURE__ */ o(
65
+ /* @__PURE__ */ i(
70
66
  "stop",
71
67
  {
72
68
  offset: "0%",
73
- stopColor: r("var(--border-base)"),
74
- stopOpacity: O
69
+ stopColor: o("var(--border-base)"),
70
+ stopOpacity: E
75
71
  }
76
72
  ),
77
- /* @__PURE__ */ o("stop", { offset: "20%", stopColor: r("var(--border-base)") }),
78
- /* @__PURE__ */ o("stop", { offset: "80%", stopColor: r("var(--border-base)") }),
79
- /* @__PURE__ */ o(
73
+ /* @__PURE__ */ i("stop", { offset: "20%", stopColor: o("var(--border-base)") }),
74
+ /* @__PURE__ */ i("stop", { offset: "80%", stopColor: o("var(--border-base)") }),
75
+ /* @__PURE__ */ i(
80
76
  "stop",
81
77
  {
82
78
  offset: "100%",
83
- stopColor: r("var(--border-base)"),
84
- stopOpacity: O
79
+ stopColor: o("var(--border-base)"),
80
+ stopOpacity: E
85
81
  }
86
82
  )
87
83
  ]
88
84
  }
89
85
  ) }),
90
- /* @__PURE__ */ o(
86
+ /* @__PURE__ */ i(
91
87
  "line",
92
88
  {
93
89
  "data-testid": "scrubber-line",
94
- x1: i,
95
- y1: s,
96
- x2: i,
97
- y2: s + c,
98
- stroke: `url(#${b})`,
99
- strokeWidth: r("var(--stroke-1)")
90
+ x1: r,
91
+ y1: a,
92
+ x2: r,
93
+ y2: a + l,
94
+ stroke: `url(#${m})`,
95
+ strokeWidth: o("var(--stroke-1)")
100
96
  }
101
97
  )
102
98
  ] }),
103
- !_ && /* @__PURE__ */ o(
99
+ !Y && /* @__PURE__ */ i(
104
100
  "rect",
105
101
  {
106
102
  "data-testid": "scrubber-overlay",
107
- x: W,
108
- y: L,
109
- width: w,
103
+ x: T,
104
+ y: _,
105
+ width: W,
110
106
  height: D,
111
- fill: r("var(--background-base)"),
112
- opacity: X
107
+ fill: o("var(--background-base)"),
108
+ opacity: L
113
109
  }
114
110
  ),
115
- A !== void 0 && /* @__PURE__ */ o(
116
- "text",
117
- {
118
- "data-testid": "scrubber-label",
119
- x: i,
120
- y: s - G,
121
- textAnchor: "middle",
122
- style: {
123
- fill: r("var(--text-base)"),
124
- fontSize: r("var(--font-style-body-4-size)"),
125
- fontWeight: r("var(--font-style-body-4-weight-medium)"),
126
- fontFamily: r("var(--font-family-font)")
127
- },
128
- children: A
129
- }
130
- ),
131
- l && I.map((t) => /* @__PURE__ */ o(
111
+ n && k.map((t) => /* @__PURE__ */ i(
132
112
  "circle",
133
113
  {
134
114
  "data-testid": `scrubber-beacon-${t.id}`,
135
- cx: i,
115
+ cx: r,
136
116
  cy: t.pixelY,
137
- r: H,
117
+ r: V,
138
118
  fill: t.stroke,
139
- stroke: r("var(--background-canvas)"),
140
- strokeWidth: V
119
+ stroke: o("var(--background-canvas)"),
120
+ strokeWidth: G
141
121
  },
142
122
  t.id
143
123
  )),
144
- a !== void 0 && /* @__PURE__ */ o(
145
- j,
124
+ s !== void 0 && /* @__PURE__ */ i(
125
+ R,
146
126
  {
147
- pixelX: i,
127
+ pixelX: r,
148
128
  drawingArea: x,
149
- dataIndex: e,
150
- title: a.resolvedTitle,
151
- items: a.items,
152
- offset: a.offset,
153
- minWidth: a.minWidth
129
+ title: s.resolvedTitle,
130
+ items: s.items,
131
+ offset: s.offset,
132
+ minWidth: s.minWidth
154
133
  }
155
134
  )
156
135
  ] });
157
136
  }
158
137
  export {
159
- Z as Scrubber
138
+ B as Scrubber
160
139
  };
@@ -1,3 +1,3 @@
1
1
  import { ScrubberProviderProps } from './types';
2
- export declare function ScrubberProvider({ children, svgRef, enableScrubbing, onScrubberPositionChange, }: Readonly<ScrubberProviderProps>): import("react/jsx-runtime").JSX.Element;
2
+ export declare function ScrubberProvider({ children, svgRef, enableScrubbing, onScrubberPositionChange, magnetRadius, }: Readonly<ScrubberProviderProps>): import("react/jsx-runtime").JSX.Element;
3
3
  //# sourceMappingURL=ScrubberProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScrubberProvider.d.ts","sourceRoot":"","sources":["../../../../src/lib/Components/Scrubber/ScrubberProvider.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAwB,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAG3E,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,MAAM,EACN,eAAe,EACf,wBAAwB,GACzB,EAAE,QAAQ,CAAC,qBAAqB,CAAC,2CAiLjC"}
1
+ {"version":3,"file":"ScrubberProvider.d.ts","sourceRoot":"","sources":["../../../../src/lib/Components/Scrubber/ScrubberProvider.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAwB,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAQ3E,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,MAAM,EACN,eAAe,EACf,wBAAwB,EACxB,YAAgB,GACjB,EAAE,QAAQ,CAAC,qBAAqB,CAAC,2CA+NjC"}
@@ -1,77 +1,102 @@
1
- import { jsx as D } from "react/jsx-runtime";
2
- import { useState as w, useRef as y, useCallback as a, useEffect as R, useMemo as T } from "react";
3
- import { getDataIndexFromPosition as X } from "./utils.js";
4
- import { useCartesianChartContext as A } from "../CartesianChart/context/cartesianChartContext.js";
5
- import { ScrubberContextProvider as B } from "./context/scrubberContext.js";
6
- function N({
7
- children: k,
8
- svgRef: L,
9
- enableScrubbing: o,
10
- onScrubberPositionChange: x
1
+ import { jsx as F } from "react/jsx-runtime";
2
+ import { useState as q, useRef as C, useMemo as I, useCallback as s, useEffect as K } from "react";
3
+ import { buildSortedMagnets as j, getDataIndexFromPosition as z, resolvePixelX as H, applyMagnetization as N } from "./utils.js";
4
+ import { useCartesianChartContext as U } from "../CartesianChart/context/cartesianChartContext.js";
5
+ import { useMagneticPointsContext as V } from "../Point/pointContext/magneticPointsContext.js";
6
+ import { ScrubberContextProvider as G } from "./context/scrubberContext.js";
7
+ function _({
8
+ children: X,
9
+ svgRef: k,
10
+ enableScrubbing: r,
11
+ onScrubberPositionChange: D,
12
+ magnetRadius: p = 8
11
13
  }) {
12
- const { getXScale: M, getXAxisConfig: g, dataLength: s } = A(), [m, C] = w(
14
+ const { getXScale: f, getXAxisConfig: m, dataLength: c } = U(), { getMagneticPoints: y, version: R } = V(), [v, T] = q(
13
15
  void 0
14
- ), v = y(m);
15
- v.current = m;
16
- const c = a(
16
+ ), h = C(v);
17
+ h.current = v;
18
+ const x = C(null), l = C(0), w = I(() => {
19
+ const t = y();
20
+ return j({
21
+ magneticIndices: t,
22
+ getPixelForIndex: (e) => H(e, f, m())
23
+ });
24
+ }, [R, y, f, m]), i = s(
17
25
  (t) => {
18
- const e = t === void 0 ? void 0 : Math.max(0, Math.min(t, s - 1));
19
- C(e), x?.(e);
26
+ const e = t === void 0 ? void 0 : Math.max(0, Math.min(t, c - 1));
27
+ T(e), D?.(e);
20
28
  },
21
- [s, x]
22
- ), i = a(
29
+ [c, D]
30
+ ), A = s(
23
31
  (t) => {
24
- const e = M();
25
- if (!e || !o || s <= 0) return;
26
- const n = X(
32
+ const e = f();
33
+ if (!e || !r || c <= 0) return;
34
+ const a = m();
35
+ let o = z(
27
36
  t,
28
37
  e,
29
- g(),
30
- s
38
+ a,
39
+ c
31
40
  );
32
- n !== v.current && c(n);
41
+ p > 0 && (o = N({
42
+ resolvedIndex: o,
43
+ pixelX: t,
44
+ sortedMagnets: w,
45
+ magnetRadius: p
46
+ })), o !== h.current && i(o);
33
47
  },
34
48
  [
35
- o,
36
- M,
37
- g,
38
- s,
39
- c
49
+ r,
50
+ f,
51
+ m,
52
+ c,
53
+ w,
54
+ p,
55
+ i
40
56
  ]
41
- ), r = a(() => {
42
- o && c(void 0);
43
- }, [o, c]), h = a(
57
+ ), u = s(
44
58
  (t) => {
45
- const n = t.currentTarget.getBoundingClientRect();
46
- i(t.clientX - n.left);
59
+ x.current = t, l.current || (l.current = requestAnimationFrame(() => {
60
+ l.current = 0;
61
+ const e = x.current;
62
+ e !== null && (x.current = null, A(e));
63
+ }));
47
64
  },
48
- [i]
49
- ), f = a(
65
+ [A]
66
+ ), n = s(() => {
67
+ r && i(void 0);
68
+ }, [r, i]), E = s(
50
69
  (t) => {
51
- if (!o || !t.touches.length) return;
52
- const e = t.touches[0], u = t.currentTarget.getBoundingClientRect();
53
- i(e.clientX - u.left);
70
+ const a = t.currentTarget.getBoundingClientRect();
71
+ u(t.clientX - a.left);
54
72
  },
55
- [o, i]
56
- ), l = a(
73
+ [u]
74
+ ), g = s(
75
+ (t) => {
76
+ if (!r || !t.touches.length) return;
77
+ const e = t.touches[0], o = t.currentTarget.getBoundingClientRect();
78
+ u(e.clientX - o.left);
79
+ },
80
+ [r, u]
81
+ ), L = s(
57
82
  (t) => {
58
83
  if (!t.touches.length) return;
59
84
  t.preventDefault();
60
- const e = t.touches[0], u = t.currentTarget.getBoundingClientRect();
61
- i(e.clientX - u.left);
85
+ const e = t.touches[0], o = t.currentTarget.getBoundingClientRect();
86
+ u(e.clientX - o.left);
62
87
  },
63
- [i]
64
- ), E = a(
88
+ [u]
89
+ ), M = s(
65
90
  (t) => {
66
- if (!o || s <= 0) return;
67
- const e = s - 1, n = v.current ?? e, u = t.shiftKey ? Math.min(10, Math.max(1, Math.floor(e * 0.1))) : 1;
91
+ if (!r || c <= 0) return;
92
+ const e = c - 1, a = h.current ?? e, o = t.shiftKey ? Math.min(10, Math.max(1, Math.floor(e * 0.1))) : 1;
68
93
  let d;
69
94
  switch (t.key) {
70
95
  case "ArrowLeft":
71
- t.preventDefault(), d = Math.max(0, n - u);
96
+ t.preventDefault(), d = Math.max(0, a - o);
72
97
  break;
73
98
  case "ArrowRight":
74
- t.preventDefault(), d = Math.min(e, n + u);
99
+ t.preventDefault(), d = Math.min(e, a + o);
75
100
  break;
76
101
  case "Home":
77
102
  t.preventDefault(), d = 0;
@@ -85,38 +110,38 @@ function N({
85
110
  default:
86
111
  return;
87
112
  }
88
- c(d);
113
+ i(d);
89
114
  },
90
- [o, s, c]
91
- ), p = a(() => {
92
- !o || v.current === void 0 || r();
93
- }, [o, r]);
94
- R(() => {
95
- const t = L.current;
96
- if (!(!t || !o))
97
- return t.addEventListener("mousemove", h), t.addEventListener("mouseleave", r), t.addEventListener("touchstart", f, { passive: !1 }), t.addEventListener("touchmove", l, { passive: !1 }), t.addEventListener("touchend", r), t.addEventListener("touchcancel", r), t.addEventListener("keydown", E), t.addEventListener("blur", p), () => {
98
- t.removeEventListener("mousemove", h), t.removeEventListener("mouseleave", r), t.removeEventListener("touchstart", f), t.removeEventListener("touchmove", l), t.removeEventListener("touchend", r), t.removeEventListener("touchcancel", r), t.removeEventListener("keydown", E), t.removeEventListener("blur", p);
115
+ [r, c, i]
116
+ ), P = s(() => {
117
+ !r || h.current === void 0 || n();
118
+ }, [r, n]);
119
+ K(() => {
120
+ const t = k.current;
121
+ if (!(!t || !r))
122
+ return t.addEventListener("mousemove", E), t.addEventListener("mouseleave", n), t.addEventListener("touchstart", g, { passive: !1 }), t.addEventListener("touchmove", L, { passive: !1 }), t.addEventListener("touchend", n), t.addEventListener("touchcancel", n), t.addEventListener("keydown", M), t.addEventListener("blur", P), () => {
123
+ t.removeEventListener("mousemove", E), t.removeEventListener("mouseleave", n), t.removeEventListener("touchstart", g), t.removeEventListener("touchmove", L), t.removeEventListener("touchend", n), t.removeEventListener("touchcancel", n), t.removeEventListener("keydown", M), t.removeEventListener("blur", P), cancelAnimationFrame(l.current), l.current = 0;
99
124
  };
100
125
  }, [
101
- L,
102
- o,
103
- h,
126
+ k,
104
127
  r,
105
- f,
106
- l,
107
128
  E,
108
- p
129
+ n,
130
+ g,
131
+ L,
132
+ M,
133
+ P
109
134
  ]);
110
- const P = T(
135
+ const B = I(
111
136
  () => ({
112
- enableScrubbing: o,
113
- scrubberPosition: m,
114
- onScrubberPositionChange: c
137
+ enableScrubbing: r,
138
+ scrubberPosition: v,
139
+ onScrubberPositionChange: i
115
140
  }),
116
- [o, m, c]
141
+ [r, v, i]
117
142
  );
118
- return /* @__PURE__ */ D(B, { value: P, children: k });
143
+ return /* @__PURE__ */ F(G, { value: B, children: X });
119
144
  }
120
145
  export {
121
- N as ScrubberProvider
146
+ _ as ScrubberProvider
122
147
  };