PluginProbe ʕ •ᴥ•ʔ
Presto Player / 4.3.2
Presto Player v4.3.2
4.3.2 4.3.1 4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / src / admin / dashboard / components / charts / ChartTooltip.js
presto-player / src / admin / dashboard / components / charts Last commit date
ChartActiveDot.js 2 months ago ChartCrosshair.js 2 months ago ChartTooltip.js 2 months ago EngagementAreaChart.js 2 months ago RetentionTooltip.js 2 months ago chartTheme.js 2 months ago index.js 2 months ago
ChartTooltip.js
89 lines
1 import {
2 TOOLTIP_BG,
3 TOOLTIP_BORDER,
4 TOOLTIP_SHADOW,
5 TOOLTIP_RADIUS,
6 TOOLTIP_TEXT_PRIMARY,
7 TOOLTIP_TEXT_SECONDARY,
8 } from "./chartTheme";
9
10 /**
11 * Stripe-inspired chart tooltip.
12 * White bg, multi-layer shadow, stacked date/metric/value layout.
13 *
14 * @param {boolean} active - Whether tooltip is visible (from Recharts)
15 * @param {Array} payload - Data points at cursor position (from Recharts)
16 * @param {string} label - X-axis label at cursor position (from Recharts)
17 * @param {Function} formatter - Optional value formatter (e.g., humanSeconds)
18 * @param {string} metricLabel - Label for the metric (e.g., "Views", "Watch Time")
19 * @param {boolean} showComparison - Whether to show "vs prev" comparison row (deferred — requires API support for previous period data)
20 */
21 const ChartTooltip = ({ active, payload, label, formatter, metricLabel, showComparison = false }) => {
22 if (!active || !payload || payload.length === 0) return null;
23
24 const value = payload[0]?.value;
25 const displayValue = formatter
26 ? formatter(value)
27 : typeof value === "number"
28 ? value.toLocaleString()
29 : value;
30
31 return (
32 <div
33 style={{
34 background: TOOLTIP_BG,
35 border: `1px solid ${TOOLTIP_BORDER}`,
36 borderRadius: `${TOOLTIP_RADIUS}px`,
37 boxShadow: TOOLTIP_SHADOW,
38 padding: "12px 16px",
39 fontVariantNumeric: "tabular-nums",
40 transition: "opacity 100ms ease",
41 }}
42 >
43 {/* Date label */}
44 <div
45 style={{
46 fontSize: "11px",
47 color: TOOLTIP_TEXT_SECONDARY,
48 marginBottom: "6px",
49 }}
50 >
51 {label}
52 </div>
53
54 {/* Metric + Value */}
55 <div
56 style={{
57 display: "flex",
58 justifyContent: "space-between",
59 alignItems: "baseline",
60 gap: "16px",
61 }}
62 >
63 {metricLabel && (
64 <span
65 style={{
66 fontSize: "13px",
67 fontWeight: 500,
68 color: TOOLTIP_TEXT_PRIMARY,
69 }}
70 >
71 {metricLabel}
72 </span>
73 )}
74 <span
75 style={{
76 fontSize: "13px",
77 fontWeight: 600,
78 color: TOOLTIP_TEXT_PRIMARY,
79 }}
80 >
81 {displayValue}
82 </span>
83 </div>
84 </div>
85 );
86 };
87
88 export default ChartTooltip;
89