@powered-by-array/ui 1.77.1 → 1.79.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 (101) hide show
  1. package/dist/components/CardContainer/CardContainer.variants.d.ts +1 -1
  2. package/dist/components/CardContainer/CardContainer.variants.d.ts.map +1 -1
  3. package/dist/components/CardContainer/CardContainer.variants.js +2 -0
  4. package/dist/components/CardContainer/CardContainer.variants.js.map +1 -1
  5. package/dist/components/LineChartCard/LineChartCard.d.ts +7 -0
  6. package/dist/components/LineChartCard/LineChartCard.d.ts.map +1 -0
  7. package/dist/components/LineChartCard/LineChartCard.js +17 -0
  8. package/dist/components/LineChartCard/LineChartCard.js.map +1 -0
  9. package/dist/components/LineChartCard/LineChartCard.types.d.ts +19 -0
  10. package/dist/components/LineChartCard/LineChartCard.types.d.ts.map +1 -0
  11. package/dist/components/LineChartCard/LineChartCard.types.js +2 -0
  12. package/dist/components/LineChartCard/LineChartCard.types.js.map +1 -0
  13. package/dist/components/LineChartCard/LineChartCard.variants.d.ts +23 -0
  14. package/dist/components/LineChartCard/LineChartCard.variants.d.ts.map +1 -0
  15. package/dist/components/LineChartCard/LineChartCard.variants.js +36 -0
  16. package/dist/components/LineChartCard/LineChartCard.variants.js.map +1 -0
  17. package/dist/components/LineChartCard/index.d.ts +5 -0
  18. package/dist/components/LineChartCard/index.d.ts.map +1 -0
  19. package/dist/components/LineChartCard/index.js +3 -0
  20. package/dist/components/LineChartCard/index.js.map +1 -0
  21. package/dist/components/SemanticBarChart/Chart/Chart.d.ts +3 -1
  22. package/dist/components/SemanticBarChart/Chart/Chart.d.ts.map +1 -1
  23. package/dist/components/SemanticBarChart/Chart/Chart.js +2 -2
  24. package/dist/components/SemanticBarChart/Chart/Chart.js.map +1 -1
  25. package/dist/components/SemanticLineChart/SemanticLineChart.d.ts +7 -0
  26. package/dist/components/SemanticLineChart/SemanticLineChart.d.ts.map +1 -0
  27. package/dist/components/SemanticLineChart/SemanticLineChart.js +99 -0
  28. package/dist/components/SemanticLineChart/SemanticLineChart.js.map +1 -0
  29. package/dist/components/SemanticLineChart/SemanticLineChart.path.utils.d.ts +18 -0
  30. package/dist/components/SemanticLineChart/SemanticLineChart.path.utils.d.ts.map +1 -0
  31. package/dist/components/SemanticLineChart/SemanticLineChart.path.utils.js +52 -0
  32. package/dist/components/SemanticLineChart/SemanticLineChart.path.utils.js.map +1 -0
  33. package/dist/components/SemanticLineChart/SemanticLineChart.types.d.ts +49 -0
  34. package/dist/components/SemanticLineChart/SemanticLineChart.types.d.ts.map +1 -0
  35. package/dist/components/SemanticLineChart/SemanticLineChart.types.js +2 -0
  36. package/dist/components/SemanticLineChart/SemanticLineChart.types.js.map +1 -0
  37. package/dist/components/SemanticLineChart/SemanticLineChart.utils.d.ts +17 -0
  38. package/dist/components/SemanticLineChart/SemanticLineChart.utils.d.ts.map +1 -0
  39. package/dist/components/SemanticLineChart/SemanticLineChart.utils.js +58 -0
  40. package/dist/components/SemanticLineChart/SemanticLineChart.utils.js.map +1 -0
  41. package/dist/components/SemanticLineChart/SemanticLineChart.variants.d.ts +68 -0
  42. package/dist/components/SemanticLineChart/SemanticLineChart.variants.d.ts.map +1 -0
  43. package/dist/components/SemanticLineChart/SemanticLineChart.variants.js +98 -0
  44. package/dist/components/SemanticLineChart/SemanticLineChart.variants.js.map +1 -0
  45. package/dist/components/SemanticLineChart/SemanticLineChartDot.d.ts +12 -0
  46. package/dist/components/SemanticLineChart/SemanticLineChartDot.d.ts.map +1 -0
  47. package/dist/components/SemanticLineChart/SemanticLineChartDot.js +10 -0
  48. package/dist/components/SemanticLineChart/SemanticLineChartDot.js.map +1 -0
  49. package/dist/components/SemanticLineChart/SemanticLineChartGrid.d.ts +9 -0
  50. package/dist/components/SemanticLineChart/SemanticLineChartGrid.d.ts.map +1 -0
  51. package/dist/components/SemanticLineChart/SemanticLineChartGrid.js +52 -0
  52. package/dist/components/SemanticLineChart/SemanticLineChartGrid.js.map +1 -0
  53. package/dist/components/SemanticLineChart/SemanticLineChartHitCurve.d.ts +12 -0
  54. package/dist/components/SemanticLineChart/SemanticLineChartHitCurve.d.ts.map +1 -0
  55. package/dist/components/SemanticLineChart/SemanticLineChartHitCurve.js +21 -0
  56. package/dist/components/SemanticLineChart/SemanticLineChartHitCurve.js.map +1 -0
  57. package/dist/components/SemanticLineChart/SemanticLineChartSeriesDots.d.ts +21 -0
  58. package/dist/components/SemanticLineChart/SemanticLineChartSeriesDots.d.ts.map +1 -0
  59. package/dist/components/SemanticLineChart/SemanticLineChartSeriesDots.js +65 -0
  60. package/dist/components/SemanticLineChart/SemanticLineChartSeriesDots.js.map +1 -0
  61. package/dist/components/SemanticLineChart/SemanticLineChartTrimmedCurve.d.ts +10 -0
  62. package/dist/components/SemanticLineChart/SemanticLineChartTrimmedCurve.d.ts.map +1 -0
  63. package/dist/components/SemanticLineChart/SemanticLineChartTrimmedCurve.js +13 -0
  64. package/dist/components/SemanticLineChart/SemanticLineChartTrimmedCurve.js.map +1 -0
  65. package/dist/components/SemanticLineChart/index.d.ts +5 -0
  66. package/dist/components/SemanticLineChart/index.d.ts.map +1 -0
  67. package/dist/components/SemanticLineChart/index.js +3 -0
  68. package/dist/components/SemanticLineChart/index.js.map +1 -0
  69. package/dist/components/SemanticLineChart/useSemanticLineChartDotsReveal.d.ts +6 -0
  70. package/dist/components/SemanticLineChart/useSemanticLineChartDotsReveal.d.ts.map +1 -0
  71. package/dist/components/SemanticLineChart/useSemanticLineChartDotsReveal.js +47 -0
  72. package/dist/components/SemanticLineChart/useSemanticLineChartDotsReveal.js.map +1 -0
  73. package/dist/components/SemanticLineChart/useSemanticLineChartEntryAnimation.d.ts +18 -0
  74. package/dist/components/SemanticLineChart/useSemanticLineChartEntryAnimation.d.ts.map +1 -0
  75. package/dist/components/SemanticLineChart/useSemanticLineChartEntryAnimation.js +37 -0
  76. package/dist/components/SemanticLineChart/useSemanticLineChartEntryAnimation.js.map +1 -0
  77. package/dist/components/SemanticLineChart/useSemanticLineChartSeriesHover.d.ts +13 -0
  78. package/dist/components/SemanticLineChart/useSemanticLineChartSeriesHover.d.ts.map +1 -0
  79. package/dist/components/SemanticLineChart/useSemanticLineChartSeriesHover.js +57 -0
  80. package/dist/components/SemanticLineChart/useSemanticLineChartSeriesHover.js.map +1 -0
  81. package/dist/components/StatCard/StatCard.d.ts +3 -0
  82. package/dist/components/StatCard/StatCard.d.ts.map +1 -0
  83. package/dist/components/StatCard/StatCard.js +19 -0
  84. package/dist/components/StatCard/StatCard.js.map +1 -0
  85. package/dist/components/StatCard/StatCard.types.d.ts +24 -0
  86. package/dist/components/StatCard/StatCard.types.d.ts.map +1 -0
  87. package/dist/components/StatCard/StatCard.types.js +2 -0
  88. package/dist/components/StatCard/StatCard.types.js.map +1 -0
  89. package/dist/components/StatCard/StatCard.variants.d.ts +13 -0
  90. package/dist/components/StatCard/StatCard.variants.d.ts.map +1 -0
  91. package/dist/components/StatCard/StatCard.variants.js +26 -0
  92. package/dist/components/StatCard/StatCard.variants.js.map +1 -0
  93. package/dist/components/StatCard/index.d.ts +3 -0
  94. package/dist/components/StatCard/index.d.ts.map +1 -0
  95. package/dist/components/StatCard/index.js +2 -0
  96. package/dist/components/StatCard/index.js.map +1 -0
  97. package/dist/index.d.ts +46 -0
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +4 -0
  100. package/dist/index.js.map +1 -1
  101. package/package.json +1 -1
@@ -0,0 +1,58 @@
1
+ import { SEMANTIC_LINE_CHART_SERIES_THEMES, } from "./SemanticLineChart.variants.js";
2
+ /** Scoped CSS variable injected by `ChartContainer` / `ChartStyle` per series key. */
3
+ export function seriesColorVar(dataKey) {
4
+ return `var(--color-${dataKey})`;
5
+ }
6
+ function sameTheme(color) {
7
+ return { light: color, dark: color };
8
+ }
9
+ export function resolveSeriesTheme(item, index, chartConfig) {
10
+ if (item.color != null && item.color !== "") {
11
+ return sameTheme(item.color);
12
+ }
13
+ const existing = chartConfig[item.dataKey];
14
+ if (existing?.theme != null) {
15
+ return existing.theme;
16
+ }
17
+ if (existing?.color != null && existing.color !== "") {
18
+ return sameTheme(existing.color);
19
+ }
20
+ return SEMANTIC_LINE_CHART_SERIES_THEMES[index % SEMANTIC_LINE_CHART_SERIES_THEMES.length];
21
+ }
22
+ export function buildLineChartConfig(series, chartConfig) {
23
+ const merged = { ...chartConfig };
24
+ series.forEach((item, index) => {
25
+ if (merged[item.dataKey] != null) {
26
+ return;
27
+ }
28
+ merged[item.dataKey] = {
29
+ label: item.label ?? item.dataKey,
30
+ theme: resolveSeriesTheme(item, index, chartConfig),
31
+ };
32
+ });
33
+ return merged;
34
+ }
35
+ /** Y-axis tick values that receive horizontal grid lines (excludes the bottom / domain min). */
36
+ export function resolveGridHorizontalValues(yTicks, yDomain) {
37
+ if (yTicks == null || yTicks.length === 0) {
38
+ return undefined;
39
+ }
40
+ const min = yDomain?.[0] ?? Math.min(...yTicks);
41
+ const filtered = yTicks.filter((tick) => tick !== min);
42
+ return filtered.length > 0 ? filtered : undefined;
43
+ }
44
+ /**
45
+ * Puts the hovered series last so its curve and dots render above siblings
46
+ * within Recharts' fixed z-index layers (line `400`, dot `600`).
47
+ */
48
+ export function orderSeriesForHover(series, hoveredDataKey) {
49
+ if (hoveredDataKey == null) {
50
+ return [...series];
51
+ }
52
+ const hovered = series.find((item) => item.dataKey === hoveredDataKey);
53
+ if (hovered == null) {
54
+ return [...series];
55
+ }
56
+ return [...series.filter((item) => item.dataKey !== hoveredDataKey), hovered];
57
+ }
58
+ //# sourceMappingURL=SemanticLineChart.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticLineChart.utils.js","sourceRoot":"","sources":["../../../src/components/SemanticLineChart/SemanticLineChart.utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { Margin } from "recharts";
2
+ import type { ChartConfig } from "../SemanticBarChart/Chart/index.js";
3
+ /** Default `LineChart` margin tuned for axis labels (Y + X). */
4
+ export declare const DEFAULT_LINE_MARGIN: Margin;
5
+ /** Figma Y-axis label column (`w-[36px]`). */
6
+ export declare const SEMANTIC_LINE_CHART_Y_LABEL_COLUMN_WIDTH = 36;
7
+ /** Figma gap between Y labels and the plot/grid (`gap-[12px]`). */
8
+ export declare const SEMANTIC_LINE_CHART_Y_LABEL_TO_GRID_GAP = 12;
9
+ /**
10
+ * Reserved Y-axis band: label column + gap before the plot.
11
+ * Keeps labels inside the card while grid lines start after the gap.
12
+ */
13
+ export declare const SEMANTIC_LINE_CHART_Y_AXIS_WIDTH: number;
14
+ /** X coordinate (textAnchor `end`) for right-aligned Y-axis labels. */
15
+ export declare const SEMANTIC_LINE_CHART_Y_LABEL_X: number;
16
+ /** Figma plot edge inset — keeps the first X label from overlapping the Y-axis column. */
17
+ export declare const SEMANTIC_LINE_CHART_X_AXIS_PADDING: {
18
+ readonly left: 20;
19
+ readonly right: 24;
20
+ };
21
+ /** Figma data-point inner diameter (`12px` → radius `6`). */
22
+ export declare const SEMANTIC_LINE_CHART_DOT_INNER_RADIUS = 6;
23
+ /** Invisible hit-target stroke width for series hover on line paths. */
24
+ export declare const SEMANTIC_LINE_CHART_HIT_STROKE_WIDTH = 16;
25
+ /** Default Recharts line layer (`DefaultZIndexes.line`). */
26
+ export declare const SEMANTIC_LINE_CHART_BASE_LINE_Z_INDEX = 400;
27
+ /** Raised line layer — above other series curves (`400`) and their dots (`600`). */
28
+ export declare const SEMANTIC_LINE_CHART_HOVERED_LINE_Z_INDEX = 650;
29
+ /** Raised dot layer for the hovered series — above its floated curve. */
30
+ export declare const SEMANTIC_LINE_CHART_HOVERED_DOTS_Z_INDEX = 700;
31
+ /** Extra stroke width applied to the hovered series curve. */
32
+ export declare const SEMANTIC_LINE_CHART_HOVER_STROKE_DELTA = 1;
33
+ /** Recharts class on visible series lines. */
34
+ export declare const SEMANTIC_LINE_CHART_SERIES_LINE_CLASS = "semantic-line-chart-series-line";
35
+ export type SemanticLineChartSeriesTheme = NonNullable<ChartConfig[string]["theme"]>;
36
+ /**
37
+ * Default light/dark stroke pairs for multi-series line charts.
38
+ * Dark values are one step richer than `chart.*` `darkValue` in `tokens.json` so
39
+ * series strokes stay distinct from `stroke-border` grid lines on navy surfaces.
40
+ */
41
+ export declare const SEMANTIC_LINE_CHART_SERIES_THEMES: readonly SemanticLineChartSeriesTheme[];
42
+ /** @deprecated Use {@link SEMANTIC_LINE_CHART_SERIES_THEMES} light values. */
43
+ export declare const SEMANTIC_LINE_CHART_SERIES_COLORS: readonly string[];
44
+ /** Recharts `XAxis` tick styling — Figma mono semibold category labels. */
45
+ export declare const semanticLineChartXAxisTick: {
46
+ readonly fill: "var(--color-semantic-fg-secondary)";
47
+ readonly fontSize: 10;
48
+ readonly fontWeight: 600;
49
+ };
50
+ /** Recharts `YAxis` tick styling — Figma mono regular percentage labels. */
51
+ export declare const semanticLineChartYAxisTick: {
52
+ readonly fill: "var(--color-semantic-fg-muted)";
53
+ readonly fontSize: 10;
54
+ readonly textAnchor: "end";
55
+ };
56
+ /** Default mount animation duration for each series line (ms). */
57
+ export declare const SEMANTIC_LINE_CHART_ANIMATION_DURATION_MS = 1000;
58
+ /** Delay between each series line starting its draw animation (ms). */
59
+ export declare const SEMANTIC_LINE_CHART_ANIMATION_STAGGER_MS = 140;
60
+ /** Recharts easing for the entry draw animation. */
61
+ export declare const SEMANTIC_LINE_CHART_ANIMATION_EASING: "ease-out";
62
+ /** Dot opacity fade-in after line entry animation completes (ms). */
63
+ export declare const SEMANTIC_LINE_CHART_DOTS_FADE_IN_MS = 500;
64
+ /** Debounce Recharts resize updates to reduce jank while the container animates. */
65
+ export declare const SEMANTIC_LINE_CHART_RESIZE_DEBOUNCE_MS = 50;
66
+ /** Recharts axis/grid overrides applied on the inner `ChartContainer`. */
67
+ export declare const semanticLineChartChartContainerVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
68
+ //# sourceMappingURL=SemanticLineChart.variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticLineChart.variants.d.ts","sourceRoot":"","sources":["../../../src/components/SemanticLineChart/SemanticLineChart.variants.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEtE,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,EAAE,MAKjC,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,wCAAwC,KAAK,CAAC;AAE3D,mEAAmE;AACnE,eAAO,MAAM,uCAAuC,KAAK,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,gCAAgC,QACuC,CAAC;AAErF,uEAAuE;AACvE,eAAO,MAAM,6BAA6B,QAC2B,CAAC;AAEtE,0FAA0F;AAC1F,eAAO,MAAM,kCAAkC;;;CAGrC,CAAC;AAEX,6DAA6D;AAC7D,eAAO,MAAM,oCAAoC,IAAI,CAAC;AAEtD,wEAAwE;AACxE,eAAO,MAAM,oCAAoC,KAAK,CAAC;AAEvD,4DAA4D;AAC5D,eAAO,MAAM,qCAAqC,MAAM,CAAC;AAEzD,oFAAoF;AACpF,eAAO,MAAM,wCAAwC,MAAM,CAAC;AAE5D,yEAAyE;AACzE,eAAO,MAAM,wCAAwC,MAAM,CAAC;AAE5D,8DAA8D;AAC9D,eAAO,MAAM,sCAAsC,IAAI,CAAC;AAExD,8CAA8C;AAC9C,eAAO,MAAM,qCAAqC,oCAAoC,CAAC;AAEvF,MAAM,MAAM,4BAA4B,GAAG,WAAW,CACpD,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAC7B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iCAAiC,EAAE,SAAS,4BAA4B,EAYzE,CAAC;AAEb,8EAA8E;AAC9E,eAAO,MAAM,iCAAiC,EAEzC,SAAS,MAAM,EAAE,CAAC;AAEvB,2EAA2E;AAC3E,eAAO,MAAM,0BAA0B;;;;CAI7B,CAAC;AAEX,4EAA4E;AAC5E,eAAO,MAAM,0BAA0B;;;;CAI7B,CAAC;AAEX,kEAAkE;AAClE,eAAO,MAAM,yCAAyC,OAAO,CAAC;AAE9D,uEAAuE;AACvE,eAAO,MAAM,wCAAwC,MAAM,CAAC;AAE5D,oDAAoD;AACpD,eAAO,MAAM,oCAAoC,EAAG,UAAmB,CAAC;AAExE,qEAAqE;AACrE,eAAO,MAAM,mCAAmC,MAAM,CAAC;AAEvD,oFAAoF;AACpF,eAAO,MAAM,sCAAsC,KAAK,CAAC;AAEzD,0EAA0E;AAC1E,eAAO,MAAM,uCAAuC,oFAgBlD,CAAC"}
@@ -0,0 +1,98 @@
1
+ import { cva } from "class-variance-authority";
2
+ /** Default `LineChart` margin tuned for axis labels (Y + X). */
3
+ export const DEFAULT_LINE_MARGIN = {
4
+ top: 10,
5
+ right: 24,
6
+ bottom: 32,
7
+ left: 8,
8
+ };
9
+ /** Figma Y-axis label column (`w-[36px]`). */
10
+ export const SEMANTIC_LINE_CHART_Y_LABEL_COLUMN_WIDTH = 36;
11
+ /** Figma gap between Y labels and the plot/grid (`gap-[12px]`). */
12
+ export const SEMANTIC_LINE_CHART_Y_LABEL_TO_GRID_GAP = 12;
13
+ /**
14
+ * Reserved Y-axis band: label column + gap before the plot.
15
+ * Keeps labels inside the card while grid lines start after the gap.
16
+ */
17
+ export const SEMANTIC_LINE_CHART_Y_AXIS_WIDTH = SEMANTIC_LINE_CHART_Y_LABEL_COLUMN_WIDTH + SEMANTIC_LINE_CHART_Y_LABEL_TO_GRID_GAP;
18
+ /** X coordinate (textAnchor `end`) for right-aligned Y-axis labels. */
19
+ export const SEMANTIC_LINE_CHART_Y_LABEL_X = DEFAULT_LINE_MARGIN.left + SEMANTIC_LINE_CHART_Y_LABEL_COLUMN_WIDTH;
20
+ /** Figma plot edge inset — keeps the first X label from overlapping the Y-axis column. */
21
+ export const SEMANTIC_LINE_CHART_X_AXIS_PADDING = {
22
+ left: 20,
23
+ right: 24,
24
+ };
25
+ /** Figma data-point inner diameter (`12px` → radius `6`). */
26
+ export const SEMANTIC_LINE_CHART_DOT_INNER_RADIUS = 6;
27
+ /** Invisible hit-target stroke width for series hover on line paths. */
28
+ export const SEMANTIC_LINE_CHART_HIT_STROKE_WIDTH = 16;
29
+ /** Default Recharts line layer (`DefaultZIndexes.line`). */
30
+ export const SEMANTIC_LINE_CHART_BASE_LINE_Z_INDEX = 400;
31
+ /** Raised line layer — above other series curves (`400`) and their dots (`600`). */
32
+ export const SEMANTIC_LINE_CHART_HOVERED_LINE_Z_INDEX = 650;
33
+ /** Raised dot layer for the hovered series — above its floated curve. */
34
+ export const SEMANTIC_LINE_CHART_HOVERED_DOTS_Z_INDEX = 700;
35
+ /** Extra stroke width applied to the hovered series curve. */
36
+ export const SEMANTIC_LINE_CHART_HOVER_STROKE_DELTA = 1;
37
+ /** Recharts class on visible series lines. */
38
+ export const SEMANTIC_LINE_CHART_SERIES_LINE_CLASS = "semantic-line-chart-series-line";
39
+ /**
40
+ * Default light/dark stroke pairs for multi-series line charts.
41
+ * Dark values are one step richer than `chart.*` `darkValue` in `tokens.json` so
42
+ * series strokes stay distinct from `stroke-border` grid lines on navy surfaces.
43
+ */
44
+ export const SEMANTIC_LINE_CHART_SERIES_THEMES = [
45
+ { light: "var(--color-blue-500)", dark: "var(--color-blue-400)" },
46
+ { light: "var(--color-yellow-500)", dark: "var(--color-yellow-500)" },
47
+ { light: "var(--color-blue-400)", dark: "var(--color-blue-400)" },
48
+ { light: "var(--color-blue-500)", dark: "var(--color-blue-500)" },
49
+ { light: "var(--color-red-500)", dark: "var(--color-red-500)" },
50
+ { light: "var(--color-green-500)", dark: "var(--color-green-500)" },
51
+ { light: "var(--color-blue-300)", dark: "var(--color-blue-400)" },
52
+ { light: "var(--color-red-400)", dark: "var(--color-red-500)" },
53
+ { light: "var(--color-green-400)", dark: "var(--color-green-500)" },
54
+ { light: "var(--color-blue-300)", dark: "var(--color-blue-400)" },
55
+ ];
56
+ /** @deprecated Use {@link SEMANTIC_LINE_CHART_SERIES_THEMES} light values. */
57
+ export const SEMANTIC_LINE_CHART_SERIES_COLORS = SEMANTIC_LINE_CHART_SERIES_THEMES.map((theme) => theme.light);
58
+ /** Recharts `XAxis` tick styling — Figma mono semibold category labels. */
59
+ export const semanticLineChartXAxisTick = {
60
+ fill: "var(--color-semantic-fg-secondary)",
61
+ fontSize: 10,
62
+ fontWeight: 600,
63
+ };
64
+ /** Recharts `YAxis` tick styling — Figma mono regular percentage labels. */
65
+ export const semanticLineChartYAxisTick = {
66
+ fill: "var(--color-semantic-fg-muted)",
67
+ fontSize: 10,
68
+ textAnchor: "end",
69
+ };
70
+ /** Default mount animation duration for each series line (ms). */
71
+ export const SEMANTIC_LINE_CHART_ANIMATION_DURATION_MS = 1000;
72
+ /** Delay between each series line starting its draw animation (ms). */
73
+ export const SEMANTIC_LINE_CHART_ANIMATION_STAGGER_MS = 140;
74
+ /** Recharts easing for the entry draw animation. */
75
+ export const SEMANTIC_LINE_CHART_ANIMATION_EASING = "ease-out";
76
+ /** Dot opacity fade-in after line entry animation completes (ms). */
77
+ export const SEMANTIC_LINE_CHART_DOTS_FADE_IN_MS = 500;
78
+ /** Debounce Recharts resize updates to reduce jank while the container animates. */
79
+ export const SEMANTIC_LINE_CHART_RESIZE_DEBOUNCE_MS = 50;
80
+ /** Recharts axis/grid overrides applied on the inner `ChartContainer`. */
81
+ export const semanticLineChartChartContainerVariants = cva([
82
+ "aspect-auto h-[221px] w-full overflow-visible",
83
+ "[&_.recharts-cartesian-grid-horizontal_line[stroke='#ccc']]:stroke-border/20",
84
+ "[&_.recharts-cartesian-grid-vertical_line[stroke='#ccc']]:stroke-border/20",
85
+ "dark:[&_.recharts-cartesian-grid-horizontal_line[stroke='#ccc']]:stroke-border/50",
86
+ "dark:[&_.recharts-cartesian-grid-vertical_line[stroke='#ccc']]:stroke-border/50",
87
+ "[&_.semantic-line-chart-series-line_.recharts-line-curve]:pointer-events-none",
88
+ "[&_.semantic-line-chart-series-hit-line_.semantic-line-chart-series-hit-curve]:pointer-events-auto",
89
+ "data-[entry-animating]:[&_.semantic-line-chart-series-hit-line_.semantic-line-chart-series-hit-curve]:pointer-events-none",
90
+ "[&_.recharts-active-dot]:pointer-events-none",
91
+ "[&_.recharts-wrapper]:outline-none",
92
+ "[&_.recharts-surface]:outline-none",
93
+ "[&_.recharts-surface:focus]:outline-none",
94
+ "[&_.recharts-surface:focus-visible]:outline-none",
95
+ "[&_.recharts-xAxis_.recharts-cartesian-axis-tick_text]:font-mono",
96
+ "[&_.recharts-yAxis_.recharts-cartesian-axis-tick_text]:font-mono",
97
+ ]);
98
+ //# sourceMappingURL=SemanticLineChart.variants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticLineChart.variants.js","sourceRoot":"","sources":["../../../src/components/SemanticLineChart/SemanticLineChart.variants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { DotProps } from "recharts";
2
+ import type * as React from "react";
3
+ type SemanticLineChartDotProps = DotProps & {
4
+ fill?: string;
5
+ /** Dot radius in px; defaults to Figma `12px` diameter. */
6
+ innerRadius?: number;
7
+ style?: React.CSSProperties;
8
+ };
9
+ /** Figma line-chart marker — solid inner dot only; gaps come from trimmed line segments. */
10
+ export declare function SemanticLineChartDot({ cx, cy, fill, innerRadius, className, style, }: SemanticLineChartDotProps): import("react/jsx-runtime").JSX.Element | null;
11
+ export {};
12
+ //# sourceMappingURL=SemanticLineChartDot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticLineChartDot.d.ts","sourceRoot":"","sources":["../../../src/components/SemanticLineChart/SemanticLineChartDot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAIpC,KAAK,yBAAyB,GAAG,QAAQ,GAAG;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAEF,4FAA4F;AAC5F,wBAAgB,oBAAoB,CAAC,EACnC,EAAE,EACF,EAAE,EACF,IAAI,EACJ,WAAkD,EAClD,SAAS,EACT,KAAK,GACN,EAAE,yBAAyB,kDAgB3B"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { SEMANTIC_LINE_CHART_DOT_INNER_RADIUS } from "./SemanticLineChart.variants.js";
3
+ /** Figma line-chart marker — solid inner dot only; gaps come from trimmed line segments. */
4
+ export function SemanticLineChartDot({ cx, cy, fill, innerRadius = SEMANTIC_LINE_CHART_DOT_INNER_RADIUS, className, style, }) {
5
+ if (cx == null || cy == null || fill == null) {
6
+ return null;
7
+ }
8
+ return (_jsx("circle", { className: className ?? "recharts-dot semantic-line-chart-dot", cx: cx, cy: cy, r: innerRadius, fill: fill, stroke: "none", style: style }));
9
+ }
10
+ //# sourceMappingURL=SemanticLineChartDot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticLineChartDot.js","sourceRoot":"","sources":["../../../src/components/SemanticLineChart/SemanticLineChartDot.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,oCAAoC,EAAE,MAAM,iCAAiC,CAAC;AASvF,4FAA4F;AAC5F,MAAM,UAAU,oBAAoB,CAAC,EACnC,EAAE,EACF,EAAE,EACF,IAAI,EACJ,WAAW,GAAG,oCAAoC,EAClD,SAAS,EACT,KAAK,GACqB;IAC1B,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,iBACE,SAAS,EAAE,SAAS,IAAI,sCAAsC,EAC9D,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,EAAE,EACN,CAAC,EAAE,WAAW,EACd,IAAI,EAAE,IAAI,EACV,MAAM,EAAC,MAAM,EACb,KAAK,EAAE,KAAK,GACZ,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { SemanticLineChartProps } from "./SemanticLineChart.types.js";
2
+ type SemanticLineChartGridProps = Pick<SemanticLineChartProps, "gridVertical" | "yDomain" | "yTicks">;
3
+ /**
4
+ * Figma-aligned grid: internal guides within the plot, with gaps before axis
5
+ * labels and no left/right/bottom perimeter border lines.
6
+ */
7
+ export declare function SemanticLineChartGrid({ gridVertical, yDomain, yTicks, }: SemanticLineChartGridProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=SemanticLineChartGrid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticLineChartGrid.d.ts","sourceRoot":"","sources":["../../../src/components/SemanticLineChart/SemanticLineChartGrid.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAwF3E,KAAK,0BAA0B,GAAG,IAAI,CACpC,sBAAsB,EACtB,cAAc,GAAG,SAAS,GAAG,QAAQ,CACtC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,YAAmB,EACnB,OAAO,EACP,MAAM,GACP,EAAE,0BAA0B,2CAa5B"}
@@ -0,0 +1,52 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { CartesianGrid } from "recharts";
5
+ import { resolveGridHorizontalValues } from "./SemanticLineChart.utils.js";
6
+ function isPlotBottomHorizontalLine(y, offset) {
7
+ if (y == null || offset == null) {
8
+ return false;
9
+ }
10
+ const plotBottom = offset.top + offset.height;
11
+ return Math.abs(y - plotBottom) < 1;
12
+ }
13
+ function isPlotEdgeVerticalLine(x, offset) {
14
+ if (x == null || offset == null) {
15
+ return false;
16
+ }
17
+ const plotLeft = offset.left;
18
+ const plotRight = offset.left + offset.width;
19
+ return Math.abs(x - plotLeft) < 1 || Math.abs(x - plotRight) < 1;
20
+ }
21
+ function hiddenGridLine(key) {
22
+ return _jsx("line", { x1: 0, y1: 0, x2: 0, y2: 0, visibility: "hidden" }, key);
23
+ }
24
+ function SemanticLineChartHorizontalGridLine(props) {
25
+ const { y1, x2, y2, offset, stroke, strokeWidth, strokeOpacity, key } = props;
26
+ if (isPlotBottomHorizontalLine(y1, offset)) {
27
+ return hiddenGridLine(key);
28
+ }
29
+ if (y1 == null || x2 == null || y2 == null || offset == null) {
30
+ return hiddenGridLine(key);
31
+ }
32
+ return (_jsx("line", { x1: offset.left, y1: y1, x2: x2, y2: y2, fill: "none", stroke: stroke, strokeWidth: strokeWidth, strokeOpacity: strokeOpacity }, key));
33
+ }
34
+ function SemanticLineChartVerticalGridLine(props) {
35
+ const { x1, y1, y2, offset, stroke, strokeWidth, strokeOpacity, key } = props;
36
+ if (isPlotEdgeVerticalLine(x1, offset)) {
37
+ return hiddenGridLine(key);
38
+ }
39
+ if (x1 == null || y1 == null || y2 == null) {
40
+ return hiddenGridLine(key);
41
+ }
42
+ return (_jsx("line", { x1: x1, y1: y1, x2: x1, y2: y2, fill: "none", stroke: stroke, strokeWidth: strokeWidth, strokeOpacity: strokeOpacity }, key));
43
+ }
44
+ /**
45
+ * Figma-aligned grid: internal guides within the plot, with gaps before axis
46
+ * labels and no left/right/bottom perimeter border lines.
47
+ */
48
+ export function SemanticLineChartGrid({ gridVertical = true, yDomain, yTicks, }) {
49
+ const horizontalValues = React.useMemo(() => resolveGridHorizontalValues(yTicks, yDomain), [yTicks, yDomain]);
50
+ return (_jsx(CartesianGrid, { horizontal: SemanticLineChartHorizontalGridLine, vertical: gridVertical ? SemanticLineChartVerticalGridLine : false, ...(horizontalValues != null ? { horizontalValues, syncWithTicks: true } : {}) }));
51
+ }
52
+ //# sourceMappingURL=SemanticLineChartGrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticLineChartGrid.js","sourceRoot":"","sources":["../../../src/components/SemanticLineChart/SemanticLineChartGrid.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type * as React from "react";
2
+ import type { CurveProps } from "recharts";
3
+ type SemanticLineChartHitCurveProps = {
4
+ points?: CurveProps["points"];
5
+ interactive?: boolean;
6
+ onMouseEnter?: React.MouseEventHandler<SVGPathElement>;
7
+ onMouseLeave?: React.MouseEventHandler<SVGPathElement>;
8
+ };
9
+ /** Wide transparent stroke used only for series hover hit-testing. */
10
+ export declare function SemanticLineChartHitCurve({ points, onMouseEnter, onMouseLeave, interactive, }: SemanticLineChartHitCurveProps): import("react/jsx-runtime").JSX.Element | null;
11
+ export {};
12
+ //# sourceMappingURL=SemanticLineChartHitCurve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticLineChartHitCurve.d.ts","sourceRoot":"","sources":["../../../src/components/SemanticLineChart/SemanticLineChartHitCurve.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAM3C,KAAK,8BAA8B,GAAG;IACpC,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CACxD,CAAC;AAiBF,sEAAsE;AACtE,wBAAgB,yBAAyB,CAAC,EACxC,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,WAAkB,GACnB,EAAE,8BAA8B,kDAoBhC"}
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { SEMANTIC_LINE_CHART_HIT_STROKE_WIDTH } from "./SemanticLineChart.variants.js";
4
+ function getLinearPath(points) {
5
+ const segments = points.filter((point) => point.x != null && point.y != null);
6
+ if (segments.length < 2) {
7
+ return null;
8
+ }
9
+ return segments
10
+ .map((point, index) => `${index === 0 ? "M" : "L"} ${point.x} ${point.y}`)
11
+ .join(" ");
12
+ }
13
+ /** Wide transparent stroke used only for series hover hit-testing. */
14
+ export function SemanticLineChartHitCurve({ points, onMouseEnter, onMouseLeave, interactive = true, }) {
15
+ const pathD = points != null && points.length > 0 ? getLinearPath(points) : null;
16
+ if (pathD == null) {
17
+ return null;
18
+ }
19
+ return (_jsx("path", { className: "semantic-line-chart-series-hit-curve", d: pathD, fill: "none", stroke: "#000", strokeOpacity: 0, strokeWidth: SEMANTIC_LINE_CHART_HIT_STROKE_WIDTH, pointerEvents: interactive ? "stroke" : "none", onMouseEnter: interactive ? onMouseEnter : undefined, onMouseLeave: interactive ? onMouseLeave : undefined }));
20
+ }
21
+ //# sourceMappingURL=SemanticLineChartHitCurve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticLineChartHitCurve.js","sourceRoot":"","sources":["../../../src/components/SemanticLineChart/SemanticLineChartHitCurve.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAKb,OAAO,EAAE,oCAAoC,EAAE,MAAM,iCAAiC,CAAC;AAWvF,SAAS,aAAa,CAAC,MAAqC;IAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAC5B,CAAC,KAAK,EAAqC,EAAE,CAC3C,KAAK,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CACrC,CAAC;IAEF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;SACzE,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,yBAAyB,CAAC,EACxC,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,WAAW,GAAG,IAAI,GACa;IAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEjF,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,eACE,SAAS,EAAC,sCAAsC,EAChD,CAAC,EAAE,KAAK,EACR,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,MAAM,EACb,aAAa,EAAE,CAAC,EAChB,WAAW,EAAE,oCAAoC,EACjD,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAC9C,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EACpD,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,GACpD,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import * as React from "react";
2
+ import type { SemanticLineChartDatum, SemanticLineChartSeries } from "./SemanticLineChart.types.js";
3
+ type SemanticLineChartSeriesDotsProps = {
4
+ series: SemanticLineChartSeries[];
5
+ data: SemanticLineChartDatum[];
6
+ dotRadius: number;
7
+ /** Hovered series omitted from the base layer (rendered in raised layer instead). */
8
+ excludedDataKey: string | null;
9
+ /** Hovered series dots rendered above the floated curve. */
10
+ raisedDataKey: string | null;
11
+ opacity: number;
12
+ onSeriesMouseEnter: (dataKey: string) => void;
13
+ onSeriesMouseLeave: (dataKey: string) => void;
14
+ };
15
+ /**
16
+ * Renders series dots in base and raised z-layers. Base layer opacity is animated
17
+ * externally so Recharts dot remounts cannot skip the fade-in.
18
+ */
19
+ export declare const SemanticLineChartSeriesDots: React.NamedExoticComponent<SemanticLineChartSeriesDotsProps>;
20
+ export {};
21
+ //# sourceMappingURL=SemanticLineChartSeriesDots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticLineChartSeriesDots.d.ts","sourceRoot":"","sources":["../../../src/components/SemanticLineChart/SemanticLineChartSeriesDots.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,8BAA8B,CAAC;AAOtC,KAAK,gCAAgC,GAAG;IACtC,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAClC,IAAI,EAAE,sBAAsB,EAAE,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,4DAA4D;IAC5D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C,CAAC;AAmFF;;;GAGG;AACH,eAAO,MAAM,2BAA2B,8DA6DtC,CAAC"}
@@ -0,0 +1,65 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { useXAxisScale, useYAxisScale, ZIndexLayer } from "recharts";
5
+ import { SemanticLineChartDot } from "./SemanticLineChartDot.js";
6
+ import { seriesColorVar } from "./SemanticLineChart.utils.js";
7
+ import { SEMANTIC_LINE_CHART_BASE_LINE_Z_INDEX, SEMANTIC_LINE_CHART_HOVERED_DOTS_Z_INDEX, } from "./SemanticLineChart.variants.js";
8
+ function buildSeriesDotNodes(series, data, xScale, yScale) {
9
+ return series.flatMap((item) => {
10
+ const fill = seriesColorVar(item.dataKey);
11
+ return data.flatMap((row, index) => {
12
+ const raw = row[item.dataKey];
13
+ const numeric = typeof raw === "number" ? raw : Number(raw);
14
+ if (!Number.isFinite(numeric)) {
15
+ return [];
16
+ }
17
+ const cx = xScale(row.name);
18
+ const cy = yScale(numeric);
19
+ if (cx == null || cy == null) {
20
+ return [];
21
+ }
22
+ return [
23
+ {
24
+ key: `${item.dataKey}-${String(row.name)}-${index}`,
25
+ cx,
26
+ cy,
27
+ fill,
28
+ dataKey: item.dataKey,
29
+ },
30
+ ];
31
+ });
32
+ });
33
+ }
34
+ function renderDotGroup(dots, dotRadius, className, opacity, onSeriesMouseEnter, onSeriesMouseLeave) {
35
+ if (dots.length === 0) {
36
+ return null;
37
+ }
38
+ const blockPointerEvents = opacity != null && opacity < 1;
39
+ return (_jsx("g", { className: className, ...(opacity != null ? { opacity } : {}), style: blockPointerEvents ? { pointerEvents: "none" } : undefined, children: dots.map((dot) => (_jsx("g", { onMouseEnter: () => onSeriesMouseEnter(dot.dataKey), onMouseLeave: () => onSeriesMouseLeave(dot.dataKey), children: _jsx(SemanticLineChartDot, { cx: dot.cx, cy: dot.cy, fill: dot.fill, innerRadius: dotRadius }) }, dot.key))) }));
40
+ }
41
+ /**
42
+ * Renders series dots in base and raised z-layers. Base layer opacity is animated
43
+ * externally so Recharts dot remounts cannot skip the fade-in.
44
+ */
45
+ export const SemanticLineChartSeriesDots = React.memo(function SemanticLineChartSeriesDots({ series, data, dotRadius, excludedDataKey, raisedDataKey, opacity, onSeriesMouseEnter, onSeriesMouseLeave, }) {
46
+ const xScale = useXAxisScale();
47
+ const yScale = useYAxisScale();
48
+ const { baseDots, raisedDots } = React.useMemo(() => {
49
+ if (xScale == null || yScale == null) {
50
+ return { baseDots: [], raisedDots: [] };
51
+ }
52
+ const allDots = buildSeriesDotNodes(series, data, xScale, yScale);
53
+ return {
54
+ baseDots: allDots.filter((dot) => dot.dataKey !== excludedDataKey),
55
+ raisedDots: raisedDataKey != null
56
+ ? allDots.filter((dot) => dot.dataKey === raisedDataKey)
57
+ : [],
58
+ };
59
+ }, [data, series, xScale, yScale, excludedDataKey, raisedDataKey]);
60
+ if (baseDots.length === 0 && raisedDots.length === 0) {
61
+ return null;
62
+ }
63
+ return (_jsxs(_Fragment, { children: [baseDots.length > 0 ? (_jsx(ZIndexLayer, { zIndex: SEMANTIC_LINE_CHART_BASE_LINE_Z_INDEX, children: renderDotGroup(baseDots, dotRadius, "recharts-line-dots semantic-line-chart-series-dots", opacity, onSeriesMouseEnter, onSeriesMouseLeave) })) : null, raisedDots.length > 0 ? (_jsx(ZIndexLayer, { zIndex: SEMANTIC_LINE_CHART_HOVERED_DOTS_Z_INDEX, children: renderDotGroup(raisedDots, dotRadius, "recharts-line-dots semantic-line-chart-raised-series-dots", undefined, onSeriesMouseEnter, onSeriesMouseLeave) })) : null] }));
64
+ });
65
+ //# sourceMappingURL=SemanticLineChartSeriesDots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticLineChartSeriesDots.js","sourceRoot":"","sources":["../../../src/components/SemanticLineChart/SemanticLineChartSeriesDots.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ import type { CurveProps } from "recharts";
3
+ type SemanticLineChartTrimmedCurveProps = CurveProps & {
4
+ /** Distance from each dot center where segments terminate. */
5
+ trimRadius: number;
6
+ };
7
+ /** Visible series stroke with gaps before each dot instead of a knockout ring. */
8
+ export declare const SemanticLineChartTrimmedCurve: React.NamedExoticComponent<SemanticLineChartTrimmedCurveProps>;
9
+ export {};
10
+ //# sourceMappingURL=SemanticLineChartTrimmedCurve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticLineChartTrimmedCurve.d.ts","sourceRoot":"","sources":["../../../src/components/SemanticLineChart/SemanticLineChartTrimmedCurve.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3C,KAAK,kCAAkC,GAAG,UAAU,GAAG;IACrD,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,6BAA6B,gEA2BxC,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { getTrimmedLinearPath } from "./SemanticLineChart.path.utils.js";
5
+ /** Visible series stroke with gaps before each dot instead of a knockout ring. */
6
+ export const SemanticLineChartTrimmedCurve = React.memo(function SemanticLineChartTrimmedCurve({ points, stroke, strokeWidth, strokeDasharray, pathRef, trimRadius, }) {
7
+ const pathD = getTrimmedLinearPath(points, trimRadius);
8
+ if (pathD == null) {
9
+ return null;
10
+ }
11
+ return (_jsx("path", { ref: pathRef, className: "semantic-line-chart-series-trimmed-curve", d: pathD, fill: "none", stroke: stroke, strokeWidth: strokeWidth, strokeDasharray: strokeDasharray, strokeLinecap: "round", pointerEvents: "none" }));
12
+ });
13
+ //# sourceMappingURL=SemanticLineChartTrimmedCurve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticLineChartTrimmedCurve.js","sourceRoot":"","sources":["../../../src/components/SemanticLineChart/SemanticLineChartTrimmedCurve.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAOzE,kFAAkF;AAClF,MAAM,CAAC,MAAM,6BAA6B,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,6BAA6B,CAAC,EAC7F,MAAM,EACN,MAAM,EACN,WAAW,EACX,eAAe,EACf,OAAO,EACP,UAAU,GACyB;IACnC,MAAM,KAAK,GAAG,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAEvD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,eACE,GAAG,EAAE,OAAO,EACZ,SAAS,EAAC,0CAA0C,EACpD,CAAC,EAAE,KAAK,EACR,IAAI,EAAC,MAAM,EACX,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EAChC,aAAa,EAAC,OAAO,EACrB,aAAa,EAAC,MAAM,GACpB,CACH,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { SemanticLineChart } from "./SemanticLineChart.js";
2
+ export { DEFAULT_LINE_MARGIN, SEMANTIC_LINE_CHART_SERIES_COLORS, SEMANTIC_LINE_CHART_SERIES_THEMES, semanticLineChartChartContainerVariants, semanticLineChartXAxisTick, semanticLineChartYAxisTick, } from "./SemanticLineChart.variants.js";
3
+ export type { SemanticLineChartSeriesTheme } from "./SemanticLineChart.variants.js";
4
+ export type { SemanticLineChartDatum, SemanticLineChartProps, SemanticLineChartSeries, } from "./SemanticLineChart.types.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SemanticLineChart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,iCAAiC,EACjC,iCAAiC,EACjC,uCAAuC,EACvC,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AACpF,YAAY,EACV,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { SemanticLineChart } from "./SemanticLineChart.js";
2
+ export { DEFAULT_LINE_MARGIN, SEMANTIC_LINE_CHART_SERIES_COLORS, SEMANTIC_LINE_CHART_SERIES_THEMES, semanticLineChartChartContainerVariants, semanticLineChartXAxisTick, semanticLineChartYAxisTick, } from "./SemanticLineChart.variants.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/SemanticLineChart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,iCAAiC,EACjC,iCAAiC,EACjC,uCAAuC,EACvC,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * One-shot dot-layer opacity ramp when `showDots` becomes true (after entry
3
+ * animation). Stays at 1 after reveal so resize re-renders do not restart fade.
4
+ */
5
+ export declare function useSemanticLineChartDotsReveal(showDots: boolean): number;
6
+ //# sourceMappingURL=useSemanticLineChartDotsReveal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSemanticLineChartDotsReveal.d.ts","sourceRoot":"","sources":["../../../src/components/SemanticLineChart/useSemanticLineChartDotsReveal.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CA+CxE"}
@@ -0,0 +1,47 @@
1
+ import * as React from "react";
2
+ import { SEMANTIC_LINE_CHART_DOTS_FADE_IN_MS } from "./SemanticLineChart.variants.js";
3
+ function easeOutQuad(progress) {
4
+ return 1 - (1 - progress) ** 2;
5
+ }
6
+ /**
7
+ * One-shot dot-layer opacity ramp when `showDots` becomes true (after entry
8
+ * animation). Stays at 1 after reveal so resize re-renders do not restart fade.
9
+ */
10
+ export function useSemanticLineChartDotsReveal(showDots) {
11
+ const hasRevealedRef = React.useRef(false);
12
+ const [opacity, setOpacity] = React.useState(1);
13
+ React.useEffect(() => {
14
+ if (!showDots) {
15
+ hasRevealedRef.current = false;
16
+ return undefined;
17
+ }
18
+ if (hasRevealedRef.current) {
19
+ return undefined;
20
+ }
21
+ setOpacity(0);
22
+ let start = null;
23
+ let frameId = 0;
24
+ const step = (timestamp) => {
25
+ if (start == null) {
26
+ start = timestamp;
27
+ }
28
+ const progress = Math.min((timestamp - start) / SEMANTIC_LINE_CHART_DOTS_FADE_IN_MS, 1);
29
+ const nextOpacity = easeOutQuad(progress);
30
+ setOpacity(nextOpacity);
31
+ if (progress < 1) {
32
+ frameId = window.requestAnimationFrame(step);
33
+ return;
34
+ }
35
+ hasRevealedRef.current = true;
36
+ };
37
+ frameId = window.requestAnimationFrame(step);
38
+ return () => {
39
+ window.cancelAnimationFrame(frameId);
40
+ };
41
+ }, [showDots]);
42
+ if (hasRevealedRef.current) {
43
+ return 1;
44
+ }
45
+ return opacity;
46
+ }
47
+ //# sourceMappingURL=useSemanticLineChartDotsReveal.js.map