@sesionario/blocks 1.28.0 → 1.30.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/utils.ts","../src/components/charts/chart-stat-flow.tsx","../src/components/charts/chart-center-typography.ts","../src/components/charts/gauge-label-layout.tsx","../src/components/charts/notch-gauge-shared.ts","../src/components/charts/pie-context.tsx","../src/components/charts/pie-center.tsx","../src/components/charts/pie-center-shell.tsx","../src/components/charts/gauge.tsx","../src/components/charts/ring-context.tsx","../src/components/charts/ring-chart.tsx","../src/components/charts/use-enter-complete.ts","../src/components/charts/animation.ts","../src/components/charts/use-mount-progress.ts","../src/components/charts/ring.tsx","../src/components/charts/ring-center.tsx"],"names":["twMerge","clsx","useState","useEffect","useMemo","jsxs","Fragment","jsx","NumberFlow","Children","isValidElement","createContext","useContext","useRef","d3Pie","useCallback","motion","useId","useReducedMotion","ParentSize","arcGenerator","memo","RingChartCore","Group","useMotionValue","animate","Ring","useTransform"],"mappings":"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","file":"charts.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport NumberFlow from \"@number-flow/react\";\nimport { type ReactNode, useEffect, useMemo, useState } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/** Subset of `Intl.NumberFormatOptions` supported by NumberFlow */\nexport interface ChartStatFlowFormat {\n\tnotation?: \"standard\" | \"compact\";\n\tcompactDisplay?: \"short\" | \"long\";\n\tminimumFractionDigits?: number;\n\tmaximumFractionDigits?: number;\n\tminimumIntegerDigits?: number;\n\tminimumSignificantDigits?: number;\n\tmaximumSignificantDigits?: number;\n\tstyle?: \"decimal\" | \"percent\" | \"currency\";\n\tcurrency?: string;\n\tcurrencyDisplay?: \"symbol\" | \"narrowSymbol\" | \"code\" | \"name\";\n\tunit?: string;\n\tunitDisplay?: \"short\" | \"long\" | \"narrow\";\n}\n\nexport const defaultChartStatFlowFormat: ChartStatFlowFormat = {\n\tnotation: \"standard\",\n\tmaximumFractionDigits: 0,\n};\n\nfunction formatStatValue(\n\tvalue: number,\n\tformatOptions: ChartStatFlowFormat,\n\tprefix?: string,\n\tsuffix?: string,\n): string {\n\tconst formatted = new Intl.NumberFormat(undefined, formatOptions).format(\n\t\tvalue,\n\t);\n\treturn `${prefix ?? \"\"}${formatted}${suffix ?? \"\"}`;\n}\n\nfunction useNumberFlowElementReady(): boolean {\n\tconst [ready, setReady] = useState(\n\t\t() =>\n\t\t\ttypeof customElements !== \"undefined\" &&\n\t\t\tBoolean(customElements.get(\"number-flow-react\")),\n\t);\n\n\tuseEffect(() => {\n\t\tif (ready) {\n\t\t\treturn;\n\t\t}\n\t\tlet cancelled = false;\n\t\tcustomElements.whenDefined(\"number-flow-react\").then(() => {\n\t\t\tif (!cancelled) {\n\t\t\t\tsetReady(true);\n\t\t\t}\n\t\t});\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [ready]);\n\n\treturn ready;\n}\n\nexport interface ChartStatFlowProps {\n\tvalue: number;\n\tlabel: string;\n\tformatOptions?: ChartStatFlowFormat;\n\tprefix?: string;\n\tsuffix?: string;\n\tvalueClassName?: string;\n\tlabelClassName?: string;\n\ticon?: ReactNode;\n}\n\n/**\n * Shared value + label stack using NumberFlow (same layout as pie / ring centers).\n * Parent should provide flex alignment and sizing when needed.\n */\nexport function ChartStatFlow({\n\tvalue,\n\tlabel,\n\tformatOptions = defaultChartStatFlowFormat,\n\tprefix,\n\tsuffix,\n\tvalueClassName = \"text-2xl font-bold\",\n\tlabelClassName = \"text-xs\",\n\ticon,\n}: ChartStatFlowProps) {\n\tconst numberFlowReady = useNumberFlowElementReady();\n\tconst staticValue = useMemo(\n\t\t() => formatStatValue(value, formatOptions, prefix, suffix),\n\t\t[value, formatOptions, prefix, suffix],\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t{icon ? (\n\t\t\t\t<div className=\"mb-2 flex h-12 w-12 items-center justify-center rounded-full bg-muted/50\">\n\t\t\t\t\t{icon}\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<span className={cn(\"text-foreground tabular-nums\", valueClassName)}>\n\t\t\t\t{numberFlowReady ? (\n\t\t\t\t\t<NumberFlow\n\t\t\t\t\t\tformat={formatOptions}\n\t\t\t\t\t\tisolate\n\t\t\t\t\t\tprefix={prefix}\n\t\t\t\t\t\tsuffix={suffix}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\twillChange\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\tstaticValue\n\t\t\t\t)}\n\t\t\t</span>\n\t\t\t<span className={cn(\"mt-0.5 text-chart-label\", labelClassName)}>\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t</>\n\t);\n}\n\nChartStatFlow.displayName = \"ChartStatFlow\";\n","export const chartCenterContainerClassName =\n\t\"@container/chart-center size-full min-w-0\";\n\n/** Primary stat — ~22% of center width, clamped between text-sm and text-3xl. */\nexport const chartCenterValueClassName =\n\t\"font-bold tabular-nums leading-none text-[clamp(0.75rem,22cqw,1.875rem)]\";\n\n/** Supporting label — ~9% of center width, clamped between 10px and text-xs. */\nexport const chartCenterLabelClassName =\n\t\"max-w-full truncate leading-tight text-[clamp(0.625rem,9cqw,0.75rem)]\";\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tchartCenterContainerClassName,\n\tchartCenterLabelClassName,\n\tchartCenterValueClassName,\n} from \"./chart-center-typography\";\nimport {\n\tChartStatFlow,\n\ttype ChartStatFlowFormat,\n\tdefaultChartStatFlowFormat,\n} from \"./chart-stat-flow\";\n\nexport type GaugeLabelPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type GaugeLabelAlign = \"start\" | \"center\" | \"end\";\n\nexport interface GaugeLabelShellProps {\n\tcenterValue: number;\n\tdefaultLabel?: string;\n\tprefix?: string;\n\tsuffix?: string;\n\tformatOptions?: ChartStatFlowFormat;\n\talign?: GaugeLabelAlign;\n\tclassName?: string;\n}\n\nconst labelAlignClass: Record<GaugeLabelAlign, string> = {\n\tstart: \"items-start text-left\",\n\tcenter: \"items-center text-center\",\n\tend: \"items-end text-right\",\n};\n\nexport function GaugeLabelShell({\n\tcenterValue,\n\tdefaultLabel = \"Total\",\n\tprefix,\n\tsuffix,\n\tformatOptions = defaultChartStatFlowFormat,\n\talign = \"center\",\n\tclassName,\n}: GaugeLabelShellProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tchartCenterContainerClassName,\n\t\t\t\t\"flex min-w-0 flex-col\",\n\t\t\t\tlabelAlignClass[align],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<ChartStatFlow\n\t\t\t\tformatOptions={formatOptions}\n\t\t\t\tlabel={defaultLabel}\n\t\t\t\tlabelClassName={cn(\n\t\t\t\t\tchartCenterLabelClassName,\n\t\t\t\t\t\"text-[length:var(--chart-foreground-muted)]\",\n\t\t\t\t)}\n\t\t\t\tprefix={prefix}\n\t\t\t\tsuffix={suffix}\n\t\t\t\tvalue={centerValue}\n\t\t\t\tvalueClassName={cn(\n\t\t\t\t\tchartCenterValueClassName,\n\t\t\t\t\t\"text-[length:var(--chart-foreground)]\",\n\t\t\t\t)}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nconst crossAxisSelf: Record<GaugeLabelAlign, string> = {\n\tstart: \"self-start\",\n\tcenter: \"self-center\",\n\tend: \"self-end\",\n};\n\nconst crossAxisAlign: Record<GaugeLabelAlign, string> = {\n\tstart: \"items-start\",\n\tcenter: \"items-center\",\n\tend: \"items-end\",\n};\n\nconst inlineAxisAlign: Record<GaugeLabelAlign, string> = {\n\tstart: \"justify-start\",\n\tcenter: \"justify-center\",\n\tend: \"justify-end\",\n};\n\nexport function GaugeLabelLayout({\n\tplacement,\n\talign,\n\tlabel,\n\tchildren,\n\tclassName,\n}: {\n\tplacement: GaugeLabelPlacement;\n\talign: GaugeLabelAlign;\n\tlabel: ReactNode | null;\n\tchildren: ReactNode;\n\tclassName?: string;\n}) {\n\tif (!label) {\n\t\treturn <div className={cn(\"w-full min-w-0\", className)}>{children}</div>;\n\t}\n\n\tif (placement === \"top\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex w-full min-w-0 flex-col gap-3\",\n\t\t\t\t\tcrossAxisAlign[align],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className={crossAxisSelf[align]}>{label}</div>\n\t\t\t\t<div className=\"w-full min-w-0\">{children}</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (placement === \"bottom\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex w-full min-w-0 flex-col gap-3\",\n\t\t\t\t\tcrossAxisAlign[align],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className=\"w-full min-w-0\">{children}</div>\n\t\t\t\t<div className={crossAxisSelf[align]}>{label}</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (placement === \"left\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex w-full min-w-0 items-center gap-4\",\n\t\t\t\t\tinlineAxisAlign[align],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className=\"shrink-0\">{label}</div>\n\t\t\t\t<div className=\"min-w-0 flex-1\">{children}</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex w-full min-w-0 items-center gap-4\",\n\t\t\t\tinlineAxisAlign[align],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"min-w-0 flex-1\">{children}</div>\n\t\t\t<div className=\"shrink-0\">{label}</div>\n\t\t</div>\n\t);\n}\n","import {\n\tChildren,\n\tFragment,\n\tisValidElement,\n\ttype ReactElement,\n\ttype ReactNode,\n} from \"react\";\n\nexport const DEFAULT_ACTIVE_GRADIENT: readonly [string, string] = [\n\t\"#bef264\",\n\t\"#10b981\",\n];\n\nexport const DEFAULT_ACTIVE_FILL_OPACITY = 1;\nexport const DEFAULT_INACTIVE_FILL_OPACITY = 0.8;\nexport const DEFAULT_LINEAR_GAUGE_HEIGHT = 24;\n\nexport interface NotchPoint {\n\tx1: number;\n\ty1: number;\n\tx2: number;\n\ty2: number;\n\tx3: number;\n\ty3: number;\n\tx4: number;\n\ty4: number;\n}\n\nexport interface ComputedNotch {\n\tindex: number;\n\tpoints: NotchPoint;\n\tisActive: boolean;\n\tgradientColor: string;\n\txCenter: number;\n\tyCenter: number;\n}\n\nfunction isDefsComponent(child: ReactElement): boolean {\n\tconst typeLabel =\n\t\t(child.type as { displayName?: string })?.displayName ||\n\t\t(child.type as { name?: string })?.name ||\n\t\t\"\";\n\treturn (\n\t\ttypeLabel.includes(\"Gradient\") ||\n\t\ttypeLabel.includes(\"Pattern\") ||\n\t\ttypeLabel === \"LinearGradient\" ||\n\t\ttypeLabel === \"RadialGradient\" ||\n\t\ttypeLabel === \"Lines\" ||\n\t\ttypeLabel === \"PatternLines\" ||\n\t\ttypeLabel === \"Circles\" ||\n\t\ttypeLabel === \"Hexagons\" ||\n\t\ttypeLabel === \"Waves\"\n\t);\n}\n\nexport function collectGaugeDefsElements(nodes: ReactNode): ReactElement[] {\n\tconst out: ReactElement[] = [];\n\tChildren.forEach(nodes, (child) => {\n\t\tif (!isValidElement(child)) {\n\t\t\treturn;\n\t\t}\n\t\tif (child.type === Fragment) {\n\t\t\tout.push(\n\t\t\t\t...collectGaugeDefsElements(\n\t\t\t\t\t(child.props as { children?: ReactNode }).children,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (isDefsComponent(child)) {\n\t\t\tout.push(child);\n\t\t}\n\t});\n\treturn out;\n}\n\nexport function interpolateGaugeHex(\n\tcolor1: string,\n\tcolor2: string,\n\tfactor: number,\n): string {\n\tconst hex = (c: string) => Number.parseInt(c, 16);\n\tconst r1 = hex(color1.slice(1, 3));\n\tconst g1 = hex(color1.slice(3, 5));\n\tconst b1 = hex(color1.slice(5, 7));\n\tconst r2 = hex(color2.slice(1, 3));\n\tconst g2 = hex(color2.slice(3, 5));\n\tconst b2 = hex(color2.slice(5, 7));\n\n\tconst r = Math.round(r1 + (r2 - r1) * factor);\n\tconst g = Math.round(g1 + (g2 - g1) * factor);\n\tconst b = Math.round(b1 + (b2 - b1) * factor);\n\n\treturn `#${r.toString(16).padStart(2, \"0\")}${g.toString(16).padStart(2, \"0\")}${b.toString(16).padStart(2, \"0\")}`;\n}\n\nexport function createNotchPath(\n\tpoints: NotchPoint,\n\tcornerRadiusPx: number,\n\tverticalDepth: number,\n): string {\n\tconst { x1, y1, x2, y2, x3, y3, x4, y4 } = points;\n\n\tconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\n\tconst dist = (ax: number, ay: number, bx: number, by: number) =>\n\t\tMath.hypot(bx - ax, by - ay);\n\n\tconst d12 = dist(x1, y1, x2, y2);\n\tconst d23 = dist(x2, y2, x3, y3);\n\tconst d34 = dist(x3, y3, x4, y4);\n\tconst d41 = dist(x4, y4, x1, y1);\n\n\tif (cornerRadiusPx <= 0) {\n\t\treturn `M ${x1} ${y1} L ${x2} ${y2} L ${x3} ${y3} L ${x4} ${y4} Z`;\n\t}\n\n\tconst minEdge = Math.min(d12, d23, d34, d41);\n\tconst cr = Math.min(\n\t\tcornerRadiusPx,\n\t\tverticalDepth * 0.48,\n\t\td12 * 0.49,\n\t\td23 * 0.49,\n\t\td34 * 0.49,\n\t\td41 * 0.49,\n\t\tminEdge * 0.49,\n\t);\n\n\tconst r1 = Math.min(cr / d12, 0.49);\n\tconst r2 = Math.min(cr / d23, 0.49);\n\tconst r3 = Math.min(cr / d34, 0.49);\n\tconst r4 = Math.min(cr / d41, 0.49);\n\n\tconst p1a = { x: lerp(x1, x4, r4), y: lerp(y1, y4, r4) };\n\tconst p1b = { x: lerp(x1, x2, r1), y: lerp(y1, y2, r1) };\n\tconst p2a = { x: lerp(x2, x1, r1), y: lerp(y2, y1, r1) };\n\tconst p2b = { x: lerp(x2, x3, r2), y: lerp(y2, y3, r2) };\n\tconst p3a = { x: lerp(x3, x2, r2), y: lerp(y3, y2, r2) };\n\tconst p3b = { x: lerp(x3, x4, r3), y: lerp(y3, y4, r3) };\n\tconst p4a = { x: lerp(x4, x3, r3), y: lerp(y4, y3, r3) };\n\tconst p4b = { x: lerp(x4, x1, r4), y: lerp(y4, y1, r4) };\n\n\treturn `M ${p1a.x} ${p1a.y} Q ${x1} ${y1} ${p1b.x} ${p1b.y} L ${p2a.x} ${p2a.y} Q ${x2} ${y2} ${p2b.x} ${p2b.y} L ${p3a.x} ${p3a.y} Q ${x3} ${y3} ${p3b.x} ${p3b.y} L ${p4a.x} ${p4a.y} Q ${x4} ${y4} ${p4b.x} ${p4b.y} Z`;\n}\n\nexport function resolveGaugeBgFill(options: {\n\tnotchIndex: number;\n\ttotalNotches: number;\n\thasCustomInactive: boolean;\n\tinactiveFill?: string;\n\tuseThemePaletteGradient: boolean;\n\tuseGradient: boolean;\n\tinactiveGrad0: string;\n\tinactiveGrad1: string;\n\tarcTrackFill: string;\n\tlinearTrackFill: string;\n\tlinearMode: boolean;\n}): string {\n\tconst {\n\t\tnotchIndex,\n\t\ttotalNotches,\n\t\thasCustomInactive,\n\t\tinactiveFill,\n\t\tuseThemePaletteGradient,\n\t\tuseGradient,\n\t\tinactiveGrad0,\n\t\tinactiveGrad1,\n\t\tarcTrackFill,\n\t\tlinearTrackFill,\n\t\tlinearMode,\n\t} = options;\n\n\tif (hasCustomInactive) {\n\t\treturn inactiveFill as string;\n\t}\n\tif (useThemePaletteGradient) {\n\t\treturn linearMode ? \"var(--chart-1)\" : arcTrackFill;\n\t}\n\tif (useGradient) {\n\t\tconst denom = totalNotches > 1 ? totalNotches - 1 : 1;\n\t\treturn interpolateGaugeHex(\n\t\t\tinactiveGrad0,\n\t\t\tinactiveGrad1,\n\t\t\tnotchIndex / denom,\n\t\t);\n\t}\n\treturn linearMode ? linearTrackFill : arcTrackFill;\n}\n\nexport function resolveGaugeActiveFill(options: {\n\tnotch: ComputedNotch;\n\thasCustomActive: boolean;\n\tactiveFill?: string;\n\tuseThemePaletteGradient: boolean;\n\tthemeActiveGradientId: string;\n\tuseGradient: boolean;\n\tactiveFillSolid: string;\n}): string {\n\tconst {\n\t\tnotch,\n\t\thasCustomActive,\n\t\tactiveFill,\n\t\tuseThemePaletteGradient,\n\t\tthemeActiveGradientId,\n\t\tuseGradient,\n\t\tactiveFillSolid,\n\t} = options;\n\n\tif (hasCustomActive) {\n\t\treturn activeFill as string;\n\t}\n\tif (useThemePaletteGradient) {\n\t\treturn `url(#${themeActiveGradientId})`;\n\t}\n\tif (useGradient) {\n\t\treturn notch.gradientColor;\n\t}\n\treturn activeFillSolid;\n}\n","\"use client\";\n\nimport type { Transition } from \"motion/react\";\nimport {\n\tcreateContext,\n\ttype ReactNode,\n\ttype RefObject,\n\tuseContext,\n\tuseMemo,\n} from \"react\";\n\n// CSS variable references for pie chart theming\nexport const pieCssVars = {\n\tbackground: \"var(--chart-background)\",\n\tforeground: \"var(--chart-foreground)\",\n\tforegroundMuted: \"var(--chart-foreground-muted)\",\n\tlabel: \"var(--chart-label)\",\n\t// Default slice colors from chart palette\n\tslice1: \"var(--chart-1)\",\n\tslice2: \"var(--chart-2)\",\n\tslice3: \"var(--chart-3)\",\n\tslice4: \"var(--chart-4)\",\n\tslice5: \"var(--chart-5)\",\n};\n\n// Default slice color palette\nexport const defaultPieColors = [\n\tpieCssVars.slice1,\n\tpieCssVars.slice2,\n\tpieCssVars.slice3,\n\tpieCssVars.slice4,\n\tpieCssVars.slice5,\n];\n\nexport interface PieData {\n\t/** Display label for the slice */\n\tlabel: string;\n\t/** Value for the slice (determines slice size relative to total) */\n\tvalue: number;\n\t/** Optional color override - falls back to palette */\n\tcolor?: string;\n\t/** Optional fill override for patterns/gradients (e.g., \"url(#patternId)\") */\n\tfill?: string;\n}\n\n/** Arc data computed by visx Pie */\nexport interface PieArcData {\n\tdata: PieData;\n\tindex: number;\n\tstartAngle: number;\n\tendAngle: number;\n\tpadAngle: number;\n\tvalue: number;\n}\n\nexport interface PieHoverContextValue {\n\thoveredIndex: number | null;\n\tsetHoveredIndex: (index: number | null) => void;\n}\n\nexport interface PieStableContextValue {\n\t// Data\n\tdata: PieData[];\n\tarcs: PieArcData[];\n\n\t// Dimensions\n\tsize: number;\n\tcenter: number;\n\touterRadius: number;\n\tinnerRadius: number;\n\tpadAngle: number;\n\tcornerRadius: number;\n\n\t// Hover effect\n\thoverOffset: number;\n\n\t// Animation state\n\tanimationKey: number;\n\tisLoaded: boolean;\n\tenterTransition?: Transition;\n\tenterStaggerScale: number;\n\n\t// Container ref for portals\n\tcontainerRef: RefObject<HTMLDivElement | null>;\n\n\t// Computed values\n\ttotalValue: number;\n\n\t// Get color for a slice index\n\tgetColor: (index: number) => string;\n\n\t// Get fill for a slice index (supports patterns/gradients)\n\tgetFill: (index: number) => string;\n\n\t/**\n\t * Studio geometry scrub — skip Motion path morphing and use plain SVG paths.\n\t * @default false\n\t */\n\tgeometryScrubbing: boolean;\n\n\t/** Precomputed slice paths during geometry scrub (one per arc). */\n\tscrubSlicePaths: readonly string[] | null;\n}\n\nexport type PieContextValue = PieStableContextValue & PieHoverContextValue;\n\nconst PieStableContext = createContext<PieStableContextValue | null>(null);\nconst PieHoverContext = createContext<PieHoverContextValue | null>(null);\n\nexport function PieProvider({\n\tchildren,\n\tvalue,\n}: {\n\tchildren: ReactNode;\n\tvalue: PieContextValue;\n}) {\n\tconst stable = useMemo<PieStableContextValue>(\n\t\t() => ({\n\t\t\tdata: value.data,\n\t\t\tarcs: value.arcs,\n\t\t\tsize: value.size,\n\t\t\tcenter: value.center,\n\t\t\touterRadius: value.outerRadius,\n\t\t\tinnerRadius: value.innerRadius,\n\t\t\tpadAngle: value.padAngle,\n\t\t\tcornerRadius: value.cornerRadius,\n\t\t\thoverOffset: value.hoverOffset,\n\t\t\tanimationKey: value.animationKey,\n\t\t\tisLoaded: value.isLoaded,\n\t\t\tenterTransition: value.enterTransition,\n\t\t\tenterStaggerScale: value.enterStaggerScale,\n\t\t\tcontainerRef: value.containerRef,\n\t\t\ttotalValue: value.totalValue,\n\t\t\tgetColor: value.getColor,\n\t\t\tgetFill: value.getFill,\n\t\t\tgeometryScrubbing: value.geometryScrubbing,\n\t\t\tscrubSlicePaths: value.scrubSlicePaths,\n\t\t}),\n\t\t[\n\t\t\tvalue.data,\n\t\t\tvalue.arcs,\n\t\t\tvalue.size,\n\t\t\tvalue.center,\n\t\t\tvalue.outerRadius,\n\t\t\tvalue.innerRadius,\n\t\t\tvalue.padAngle,\n\t\t\tvalue.cornerRadius,\n\t\t\tvalue.hoverOffset,\n\t\t\tvalue.animationKey,\n\t\t\tvalue.isLoaded,\n\t\t\tvalue.enterTransition,\n\t\t\tvalue.enterStaggerScale,\n\t\t\tvalue.containerRef,\n\t\t\tvalue.totalValue,\n\t\t\tvalue.getColor,\n\t\t\tvalue.getFill,\n\t\t\tvalue.geometryScrubbing,\n\t\t\tvalue.scrubSlicePaths,\n\t\t],\n\t);\n\n\tconst hover = useMemo<PieHoverContextValue>(\n\t\t() => ({\n\t\t\thoveredIndex: value.hoveredIndex,\n\t\t\tsetHoveredIndex: value.setHoveredIndex,\n\t\t}),\n\t\t[value.hoveredIndex, value.setHoveredIndex],\n\t);\n\n\treturn (\n\t\t<PieStableContext.Provider value={stable}>\n\t\t\t<PieHoverContext.Provider value={hover}>\n\t\t\t\t{children}\n\t\t\t</PieHoverContext.Provider>\n\t\t</PieStableContext.Provider>\n\t);\n}\n\nexport function usePieStable(): PieStableContextValue {\n\tconst context = useContext(PieStableContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"usePieStable must be used within a PieProvider. \" +\n\t\t\t\t\"Make sure your component is wrapped in <PieChart>.\",\n\t\t);\n\t}\n\treturn context;\n}\n\nexport function usePieHover(): PieHoverContextValue {\n\tconst context = useContext(PieHoverContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"usePieHover must be used within a PieProvider. \" +\n\t\t\t\t\"Make sure your component is wrapped in <PieChart>.\",\n\t\t);\n\t}\n\treturn context;\n}\n\nexport function usePie(): PieContextValue {\n\treturn { ...usePieStable(), ...usePieHover() };\n}\n\nexport default PieStableContext;\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tchartCenterContainerClassName,\n\tchartCenterLabelClassName,\n\tchartCenterValueClassName,\n} from \"./chart-center-typography\";\nimport {\n\tChartStatFlow,\n\ttype ChartStatFlowFormat,\n\tdefaultChartStatFlowFormat,\n} from \"./chart-stat-flow\";\nimport { usePieHover, usePieStable } from \"./pie-context\";\n\nexport interface PieCenterProps {\n\t/** Label shown below the value. Default: \"Total\" when not hovering */\n\tdefaultLabel?: string;\n\t/** Format options for NumberFlow. Default: standard notation */\n\tformatOptions?: ChartStatFlowFormat;\n\t/** Custom render function for complete control over center content */\n\tchildren?: (props: {\n\t\tvalue: number;\n\t\tlabel: string;\n\t\tisHovered: boolean;\n\t\tdata: { label: string; value: number; color?: string; fill?: string };\n\t}) => ReactNode;\n\t/** Additional class name for the container */\n\tclassName?: string;\n\t/** Class name for the value text. Scales with center size via container queries. */\n\tvalueClassName?: string;\n\t/** Class name for the label text. Scales with center size via container queries. */\n\tlabelClassName?: string;\n\t/** Prefix to show before the number (e.g., \"$\") */\n\tprefix?: string;\n\t/** Suffix to show after the number (e.g., \"%\") */\n\tsuffix?: string;\n}\n\n/**\n * PieCenter displays content in the center of a donut/pie chart.\n *\n * This component renders as pure HTML (not inside SVG foreignObject) to avoid\n * Safari's WebKit bug #23113 where HTML content with CSS transforms/opacity\n * inside foreignObject renders at incorrect positions.\n *\n * The parent PieChart uses CSS Grid stacking to overlay this HTML content\n * on top of the SVG slices.\n */\nexport function PieCenter({\n\tdefaultLabel = \"Total\",\n\tformatOptions = defaultChartStatFlowFormat,\n\tchildren,\n\tclassName = \"\",\n\tvalueClassName = chartCenterValueClassName,\n\tlabelClassName = chartCenterLabelClassName,\n\tprefix,\n\tsuffix,\n}: PieCenterProps) {\n\tconst { data, totalValue, innerRadius, geometryScrubbing } = usePieStable();\n\tconst { hoveredIndex } = usePieHover();\n\n\tconst effectiveHoveredIndex = geometryScrubbing ? null : hoveredIndex;\n\tconst hoveredData =\n\t\teffectiveHoveredIndex === null ? null : data[effectiveHoveredIndex];\n\tconst displayValue = hoveredData ? hoveredData.value : totalValue;\n\tconst displayLabel = hoveredData ? hoveredData.label : defaultLabel;\n\n\t// Calculate center area size based on inner radius\n\t// Leave some padding so text doesn't touch the inner edge\n\tconst centerSize = innerRadius * 2 - 16;\n\n\t// Don't render if there's no inner radius (solid pie, not donut)\n\tif (innerRadius <= 0) {\n\t\treturn null;\n\t}\n\n\t// If custom render function is provided, use it\n\tif (children && hoveredData) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\tchartCenterContainerClassName,\n\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{ width: centerSize, height: centerSize }}\n\t\t\t>\n\t\t\t\t{children({\n\t\t\t\t\tvalue: displayValue,\n\t\t\t\t\tlabel: displayLabel,\n\t\t\t\t\tisHovered: effectiveHoveredIndex !== null,\n\t\t\t\t\tdata: hoveredData,\n\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Default center content with NumberFlow animations\n\t// Now renders as pure HTML, avoiding Safari's foreignObject bugs\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tchartCenterContainerClassName,\n\t\t\t\t\"flex flex-col items-center justify-center text-center\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={{ width: centerSize, height: centerSize }}\n\t\t>\n\t\t\t<ChartStatFlow\n\t\t\t\tformatOptions={formatOptions}\n\t\t\t\tlabel={displayLabel}\n\t\t\t\tlabelClassName={labelClassName}\n\t\t\t\tprefix={prefix}\n\t\t\t\tsuffix={suffix}\n\t\t\t\tvalue={displayValue}\n\t\t\t\tvalueClassName={valueClassName}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nPieCenter.displayName = \"PieCenter\";\n\nexport default PieCenter;\n","\"use client\";\n\nimport { pie as d3Pie } from \"d3-shape\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { PieCenter, type PieCenterProps } from \"./pie-center\";\nimport {\n\tdefaultPieColors,\n\ttype PieArcData,\n\ttype PieContextValue,\n\ttype PieData,\n\tPieProvider,\n} from \"./pie-context\";\n\nconst SHELL_HOVER_OFFSET = 10;\n\nexport type PieCenterShellProps = Omit<PieCenterProps, \"children\"> & {\n\t/** Value shown with NumberFlow (same role as pie total when not hovering) */\n\tcenterValue: number;\n\t/** Square reference size for pie context (matches `PieChart` `size`) */\n\tcontextSize: number;\n\t/** Inner radius in px — must be > 0 so `PieCenter` renders */\n\tinnerRadiusPx: number;\n\t/**\n\t * When true (default), the first paint uses `0` then updates to `centerValue`\n\t * on the next frame so NumberFlow can run an entrance transition. Subsequent\n\t * `centerValue` updates animate as usual.\n\t */\n\tanimateEntrance?: boolean;\n};\n\n/**\n * Renders {@link PieCenter} with a minimal {@link PieProvider} so you can reuse\n * the same center layout as a donut pie without mounting slices or a full {@link PieChart}.\n */\nexport function PieCenterShell({\n\tcenterValue,\n\tcontextSize,\n\tinnerRadiusPx,\n\tanimateEntrance = true,\n\t...pieCenterProps\n}: PieCenterShellProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst introStartedRef = useRef(false);\n\n\tconst [flowTotal, setFlowTotal] = useState(() =>\n\t\tanimateEntrance ? 0 : centerValue,\n\t);\n\n\tuseEffect(() => {\n\t\tif (!animateEntrance) {\n\t\t\tsetFlowTotal(centerValue);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!introStartedRef.current) {\n\t\t\tintroStartedRef.current = true;\n\t\t\tsetFlowTotal(0);\n\t\t\tlet innerRaf = 0;\n\t\t\tconst outerRaf = requestAnimationFrame(() => {\n\t\t\t\tinnerRaf = requestAnimationFrame(() => setFlowTotal(centerValue));\n\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tcancelAnimationFrame(outerRaf);\n\t\t\t\tcancelAnimationFrame(innerRaf);\n\t\t\t\tintroStartedRef.current = false;\n\t\t\t};\n\t\t}\n\n\t\tsetFlowTotal(centerValue);\n\t}, [animateEntrance, centerValue]);\n\n\tconst data: PieData[] = useMemo(\n\t\t() => [{ label: \"_pieCenterShell\", value: Math.max(flowTotal, 0) }],\n\t\t[flowTotal],\n\t);\n\n\tconst totalValue = flowTotal;\n\n\tconst arcs = useMemo((): PieArcData[] => {\n\t\tconst v = data[0]?.value ?? 0;\n\t\tif (v > 0) {\n\t\t\tconst pieGenerator = d3Pie<PieData>()\n\t\t\t\t.value((d) => d.value)\n\t\t\t\t.startAngle(-Math.PI / 2)\n\t\t\t\t.endAngle((3 * Math.PI) / 2)\n\t\t\t\t.padAngle(0)\n\t\t\t\t.sort(null);\n\t\t\tconst computed = pieGenerator(data);\n\t\t\treturn computed.map((arc, index) => ({\n\t\t\t\tdata: arc.data,\n\t\t\t\tindex,\n\t\t\t\tstartAngle: arc.startAngle,\n\t\t\t\tendAngle: arc.endAngle,\n\t\t\t\tpadAngle: arc.padAngle,\n\t\t\t\tvalue: arc.value,\n\t\t\t})) as PieArcData[];\n\t\t}\n\t\tconst d0 = data[0];\n\t\tif (!d0) {\n\t\t\treturn [];\n\t\t}\n\t\treturn [\n\t\t\t{\n\t\t\t\tdata: d0,\n\t\t\t\tindex: 0,\n\t\t\t\tstartAngle: -Math.PI / 2,\n\t\t\t\tendAngle: (3 * Math.PI) / 2,\n\t\t\t\tpadAngle: 0,\n\t\t\t\tvalue: 0,\n\t\t\t},\n\t\t];\n\t}, [data]);\n\n\tconst getColor = useCallback((index: number) => {\n\t\treturn defaultPieColors[index % defaultPieColors.length] as string;\n\t}, []);\n\n\tconst getFill = useCallback(\n\t\t(index: number) => {\n\t\t\tconst item = data[index];\n\t\t\tif (item?.fill) {\n\t\t\t\treturn item.fill;\n\t\t\t}\n\t\t\treturn getColor(index);\n\t\t},\n\t\t[data, getColor],\n\t);\n\n\tconst center = contextSize / 2;\n\tconst outerRadius = center - SHELL_HOVER_OFFSET;\n\n\tconst contextValue: PieContextValue = useMemo(\n\t\t() => ({\n\t\t\tdata,\n\t\t\tarcs,\n\t\t\tsize: contextSize,\n\t\t\tcenter,\n\t\t\touterRadius,\n\t\t\tinnerRadius: innerRadiusPx,\n\t\t\tpadAngle: 0,\n\t\t\tcornerRadius: 0,\n\t\t\thoverOffset: SHELL_HOVER_OFFSET,\n\t\t\thoveredIndex: null,\n\t\t\tsetHoveredIndex: () => undefined,\n\t\t\tanimationKey: 0,\n\t\t\tisLoaded: true,\n\t\t\tenterStaggerScale: 1,\n\t\t\tcontainerRef,\n\t\t\ttotalValue,\n\t\t\tgetColor,\n\t\t\tgetFill,\n\t\t\tgeometryScrubbing: false,\n\t\t\tscrubSlicePaths: null,\n\t\t}),\n\t\t[\n\t\t\tdata,\n\t\t\tarcs,\n\t\t\tcontextSize,\n\t\t\tcenter,\n\t\t\touterRadius,\n\t\t\tinnerRadiusPx,\n\t\t\ttotalValue,\n\t\t\tgetColor,\n\t\t\tgetFill,\n\t\t],\n\t);\n\n\treturn (\n\t\t<PieProvider value={contextValue}>\n\t\t\t<PieCenter {...pieCenterProps} />\n\t\t</PieProvider>\n\t);\n}\n\nPieCenterShell.displayName = \"PieCenterShell\";\n","\"use client\";\n\nimport { ParentSize } from \"@visx/responsive\";\nimport { motion, type Transition, useReducedMotion } from \"motion/react\";\nimport { type ReactNode, useId, useMemo } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\ttype ChartStatFlowFormat,\n\tdefaultChartStatFlowFormat,\n} from \"./chart-stat-flow\";\nimport {\n\ttype GaugeLabelAlign,\n\tGaugeLabelLayout,\n\ttype GaugeLabelPlacement,\n\tGaugeLabelShell,\n} from \"./gauge-label-layout\";\nimport {\n\ttype ComputedNotch,\n\tcollectGaugeDefsElements,\n\tcreateNotchPath,\n\tDEFAULT_ACTIVE_FILL_OPACITY,\n\tDEFAULT_ACTIVE_GRADIENT,\n\tDEFAULT_INACTIVE_FILL_OPACITY,\n\tDEFAULT_LINEAR_GAUGE_HEIGHT,\n\tinterpolateGaugeHex,\n\tresolveGaugeActiveFill,\n\tresolveGaugeBgFill,\n} from \"./notch-gauge-shared\";\nimport { PieCenterShell } from \"./pie-center-shell\";\n\nconst DEFAULT_NOTCH_ENTER_TRANSITION: Transition = {\n\ttype: \"spring\",\n\tstiffness: 300,\n\tdamping: 20,\n};\n\nexport type GaugeOrientation = \"arc\" | \"linear\";\n\nexport interface GaugeProps {\n\t/** Arc (default) or horizontal linear notch track */\n\torientation?: GaugeOrientation;\n\t/** Fill level 0–100 */\n\tvalue: number;\n\t/** Number of notches */\n\ttotalNotches?: number;\n\t/** Percentage of the track reserved for gaps between notches */\n\tspacing?: number;\n\tnotchCornerRadius?: number;\n\t/** `true` = rectangular notches; `false` = tapered toward center / midline */\n\tuniformWidth?: boolean;\n\tstartAngle?: number;\n\tendAngle?: number;\n\tuseGradient?: boolean;\n\tactiveGradient?: readonly [string, string];\n\tinactiveGradient?: readonly [string, string];\n\t/** Center statistic — omit to hide the label block */\n\tcenterValue?: number;\n\tdefaultLabel?: string;\n\tprefix?: string;\n\tsuffix?: string;\n\tformatOptions?: ChartStatFlowFormat;\n\t/** Label position for `orientation=\"linear\"`. Arc gauges always overlay center. */\n\tlabelPlacement?: GaugeLabelPlacement;\n\t/** Cross-axis alignment (start / center / end), same model as chart legend */\n\tlabelAlign?: GaugeLabelAlign;\n\tinactiveFill?: string;\n\tactiveFill?: string;\n\tinactiveFillOpacity?: number;\n\tactiveFillOpacity?: number;\n\tchildren?: ReactNode;\n\tclassName?: string;\n\twidth?: number;\n\theight?: number;\n\tminWidth?: number;\n\tnotchLengthPercent?: number;\n\t/** Linear only — notch width as % of each slot (default 80) */\n\tnotchWidthPercent?: number;\n\t/** Linear only — bar thickness in px when responsive (default 24) */\n\tlinearHeight?: number;\n\tenterTransition?: Transition;\n\tenterStaggerScale?: number;\n\t/** Studio-only: static paths while scrubbing geometry controls */\n\tgeometryScrubbing?: boolean;\n}\n\ninterface GaugeInnerProps extends Omit<GaugeProps, \"className\" | \"minWidth\"> {\n\twidth: number;\n\theight: number;\n}\n\nfunction GaugeNotchSvg({\n\tnotches,\n\twidth,\n\theight,\n\tnotchCornerRadius,\n\tcornerDepth,\n\tgeometryScrubbing,\n\tnotchTransition,\n\tstagger,\n\tdefsChildren,\n\tuseThemePaletteGradient,\n\tthemeActiveGradientId,\n\tresolvedInactiveFillOpacity,\n\tresolvedActiveFillOpacity,\n\tresolveBgFill,\n\tresolveActiveFill,\n}: {\n\tnotches: ComputedNotch[];\n\twidth: number;\n\theight: number;\n\tnotchCornerRadius: number;\n\tcornerDepth: number;\n\tgeometryScrubbing: boolean;\n\tnotchTransition: Transition;\n\tstagger: number;\n\tdefsChildren: ReactNode[];\n\tuseThemePaletteGradient: boolean;\n\tthemeActiveGradientId: string;\n\tresolvedInactiveFillOpacity: number;\n\tresolvedActiveFillOpacity: number;\n\tresolveBgFill: (index: number) => string;\n\tresolveActiveFill: (notch: ComputedNotch) => string;\n}) {\n\treturn (\n\t\t<svg\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"block w-full overflow-visible\"\n\t\t\theight={height}\n\t\t\tviewBox={`0 0 ${width} ${height}`}\n\t\t\twidth={width}\n\t\t>\n\t\t\t{defsChildren.length > 0 || useThemePaletteGradient ? (\n\t\t\t\t<defs>\n\t\t\t\t\t{useThemePaletteGradient ? (\n\t\t\t\t\t\t<linearGradient\n\t\t\t\t\t\t\tid={themeActiveGradientId}\n\t\t\t\t\t\t\tx1=\"0%\"\n\t\t\t\t\t\t\tx2=\"100%\"\n\t\t\t\t\t\t\ty1=\"0%\"\n\t\t\t\t\t\t\ty2=\"0%\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<stop offset=\"0%\" stopColor=\"var(--chart-1)\" />\n\t\t\t\t\t\t\t<stop offset=\"100%\" stopColor=\"var(--chart-5)\" />\n\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{defsChildren}\n\t\t\t\t</defs>\n\t\t\t) : null}\n\t\t\t{notches.map((notch) => {\n\t\t\t\tconst pathD = createNotchPath(\n\t\t\t\t\tnotch.points,\n\t\t\t\t\tnotchCornerRadius,\n\t\t\t\t\tcornerDepth,\n\t\t\t\t);\n\t\t\t\tif (geometryScrubbing) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td={pathD}\n\t\t\t\t\t\t\tfill={resolveBgFill(notch.index)}\n\t\t\t\t\t\t\tfillOpacity={resolvedInactiveFillOpacity}\n\t\t\t\t\t\t\tkey={`bg-${notch.index}`}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t<motion.path\n\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\td={pathD}\n\t\t\t\t\t\tfill={resolveBgFill(notch.index)}\n\t\t\t\t\t\tfillOpacity={resolvedInactiveFillOpacity}\n\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0 }}\n\t\t\t\t\t\tkey={`bg-${notch.index}`}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttransformOrigin: `${notch.xCenter}px ${notch.yCenter}px`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t...notchTransition,\n\t\t\t\t\t\t\tdelay: notch.index * 0.015 * stagger,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t})}\n\t\t\t{notches\n\t\t\t\t.filter((n) => n.isActive)\n\t\t\t\t.map((notch) => {\n\t\t\t\t\tconst pathD = createNotchPath(\n\t\t\t\t\t\tnotch.points,\n\t\t\t\t\t\tnotchCornerRadius,\n\t\t\t\t\t\tcornerDepth,\n\t\t\t\t\t);\n\t\t\t\t\tif (geometryScrubbing) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td={pathD}\n\t\t\t\t\t\t\t\tfill={resolveActiveFill(notch)}\n\t\t\t\t\t\t\t\tfillOpacity={resolvedActiveFillOpacity}\n\t\t\t\t\t\t\t\tkey={`active-${notch.index}`}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<motion.path\n\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\t\td={pathD}\n\t\t\t\t\t\t\tfill={resolveActiveFill(notch)}\n\t\t\t\t\t\t\tfillOpacity={resolvedActiveFillOpacity}\n\t\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0 }}\n\t\t\t\t\t\t\tkey={`active-${notch.index}`}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\ttransformOrigin: `${notch.xCenter}px ${notch.yCenter}px`,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t...notchTransition,\n\t\t\t\t\t\t\t\tdelay: (0.3 + notch.index * 0.02) * stagger,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t</svg>\n\t);\n}\n\nfunction useGaugeFillState(props: GaugeInnerProps) {\n\tconst {\n\t\tuseGradient = false,\n\t\tactiveGradient,\n\t\tinactiveGradient,\n\t\tinactiveFill,\n\t\tactiveFill,\n\t\tinactiveFillOpacity,\n\t\tactiveFillOpacity,\n\t\tchildren,\n\t\ttotalNotches = 40,\n\t} = props;\n\n\tconst themeActiveGradientId = `gauge-theme-active-${useId().replace(/:/g, \"\")}`;\n\tconst defsChildren = useMemo(\n\t\t() => collectGaugeDefsElements(children),\n\t\t[children],\n\t);\n\n\tconst hasCustomInactive =\n\t\tinactiveFill !== undefined && inactiveFill.length > 0;\n\tconst hasCustomActive = activeFill !== undefined && activeFill.length > 0;\n\n\tconst activeGrad0 = activeGradient?.[0] ?? DEFAULT_ACTIVE_GRADIENT[0];\n\tconst activeGrad1 = activeGradient?.[1] ?? DEFAULT_ACTIVE_GRADIENT[1];\n\tconst inactiveGrad0 = inactiveGradient?.[0] ?? activeGrad0;\n\tconst inactiveGrad1 = inactiveGradient?.[1] ?? activeGrad1;\n\tconst useThemePaletteGradient = useGradient && activeGradient === undefined;\n\n\treturn {\n\t\tthemeActiveGradientId,\n\t\tdefsChildren,\n\t\thasCustomInactive,\n\t\thasCustomActive,\n\t\tactiveGrad0,\n\t\tactiveGrad1,\n\t\tinactiveGrad0,\n\t\tinactiveGrad1,\n\t\tuseThemePaletteGradient,\n\t\tresolvedActiveFillOpacity: activeFillOpacity ?? DEFAULT_ACTIVE_FILL_OPACITY,\n\t\tresolvedInactiveFillOpacity:\n\t\t\tinactiveFillOpacity ?? DEFAULT_INACTIVE_FILL_OPACITY,\n\t\ttotalNotches,\n\t};\n}\n\nfunction GaugeArcInner(props: GaugeInnerProps) {\n\tconst {\n\t\tvalue,\n\t\ttotalNotches = 40,\n\t\tspacing = 25,\n\t\tnotchCornerRadius = 0,\n\t\tuniformWidth = false,\n\t\twidth,\n\t\theight,\n\t\tstartAngle = 135,\n\t\tendAngle = 405,\n\t\tuseGradient = false,\n\t\tcenterValue,\n\t\tdefaultLabel = \"Total\",\n\t\tprefix,\n\t\tsuffix,\n\t\tformatOptions = defaultChartStatFlowFormat,\n\t\tinactiveFill,\n\t\tactiveFill,\n\t\tnotchLengthPercent = 100,\n\t\tenterTransition,\n\t\tenterStaggerScale = 1,\n\t} = props;\n\n\tconst prefersReducedMotion = useReducedMotion();\n\tconst fillState = useGaugeFillState(props);\n\n\tconst notchTransition: Transition = prefersReducedMotion\n\t\t? { duration: 0 }\n\t\t: (enterTransition ?? DEFAULT_NOTCH_ENTER_TRANSITION);\n\tconst stagger = Math.max(0.25, Math.min(2.5, enterStaggerScale));\n\n\tconst size = Math.min(width, height);\n\tconst centerX = width / 2;\n\tconst centerY = height / 2;\n\tconst outerRadius = size * 0.42;\n\tconst innerRadiusBase = size * 0.28;\n\tconst defaultRadialDepth = outerRadius - innerRadiusBase;\n\tconst depthFactor = Math.min(100, Math.max(5, notchLengthPercent)) / 100;\n\tconst notchLength = defaultRadialDepth * depthFactor;\n\tconst innerRadius = outerRadius - notchLength;\n\n\tconst activeNotches = Math.round((value / 100) * totalNotches);\n\tconst totalAngle = endAngle - startAngle;\n\tconst availableAngle = totalAngle * (1 - spacing / 100);\n\tconst notchAngle = totalNotches > 0 ? availableAngle / totalNotches : 0;\n\tconst gapDen = totalNotches - 1 > 0 ? totalNotches - 1 : 1;\n\tconst gapAngle = (totalAngle * (spacing / 100)) / gapDen;\n\n\tconst notches = useMemo(() => {\n\t\treturn Array.from({ length: totalNotches }, (_, i) => {\n\t\t\tconst angle = startAngle + i * (notchAngle + gapAngle) + notchAngle / 2;\n\t\t\tconst radians = (angle * Math.PI) / 180;\n\t\t\tconst arcNotchWidth = notchAngle * 0.8;\n\t\t\tconst halfWidth = (arcNotchWidth * Math.PI) / 180 / 2;\n\n\t\t\tconst x1 = centerX + Math.cos(radians - halfWidth) * outerRadius;\n\t\t\tconst y1 = centerY + Math.sin(radians - halfWidth) * outerRadius;\n\t\t\tconst x2 = centerX + Math.cos(radians + halfWidth) * outerRadius;\n\t\t\tconst y2 = centerY + Math.sin(radians + halfWidth) * outerRadius;\n\n\t\t\tlet x3: number;\n\t\t\tlet y3: number;\n\t\t\tlet x4: number;\n\t\t\tlet y4: number;\n\n\t\t\tif (uniformWidth) {\n\t\t\t\tconst perpX = Math.cos(radians);\n\t\t\t\tconst perpY = Math.sin(radians);\n\t\t\t\tx3 = x2 - perpX * notchLength;\n\t\t\t\ty3 = y2 - perpY * notchLength;\n\t\t\t\tx4 = x1 - perpX * notchLength;\n\t\t\t\ty4 = y1 - perpY * notchLength;\n\t\t\t} else {\n\t\t\t\tx3 = centerX + Math.cos(radians + halfWidth) * innerRadius;\n\t\t\t\ty3 = centerY + Math.sin(radians + halfWidth) * innerRadius;\n\t\t\t\tx4 = centerX + Math.cos(radians - halfWidth) * innerRadius;\n\t\t\t\ty4 = centerY + Math.sin(radians - halfWidth) * innerRadius;\n\t\t\t}\n\n\t\t\tconst denom = totalNotches > 1 ? totalNotches - 1 : 1;\n\t\t\tconst gradientColor =\n\t\t\t\tuseGradient && !fillState.useThemePaletteGradient\n\t\t\t\t\t? interpolateGaugeHex(\n\t\t\t\t\t\t\tfillState.activeGrad0,\n\t\t\t\t\t\t\tfillState.activeGrad1,\n\t\t\t\t\t\t\ti / denom,\n\t\t\t\t\t\t)\n\t\t\t\t\t: \"var(--chart-1)\";\n\n\t\t\treturn {\n\t\t\t\tindex: i,\n\t\t\t\tpoints: { x1, y1, x2, y2, x3, y3, x4, y4 },\n\t\t\t\tisActive: i < activeNotches,\n\t\t\t\tgradientColor,\n\t\t\t\txCenter: centerX,\n\t\t\t\tyCenter: centerY,\n\t\t\t};\n\t\t});\n\t}, [\n\t\ttotalNotches,\n\t\tnotchAngle,\n\t\tgapAngle,\n\t\tcenterX,\n\t\tcenterY,\n\t\touterRadius,\n\t\tinnerRadius,\n\t\tactiveNotches,\n\t\tstartAngle,\n\t\tuniformWidth,\n\t\tnotchLength,\n\t\tuseGradient,\n\t\tfillState.useThemePaletteGradient,\n\t\tfillState.activeGrad0,\n\t\tfillState.activeGrad1,\n\t]);\n\n\tconst resolveBgFill = (notchIndex: number) =>\n\t\tresolveGaugeBgFill({\n\t\t\tnotchIndex,\n\t\t\ttotalNotches,\n\t\t\thasCustomInactive: fillState.hasCustomInactive,\n\t\t\tinactiveFill,\n\t\t\tuseThemePaletteGradient: fillState.useThemePaletteGradient,\n\t\t\tuseGradient,\n\t\t\tinactiveGrad0: fillState.inactiveGrad0,\n\t\t\tinactiveGrad1: fillState.inactiveGrad1,\n\t\t\tarcTrackFill: \"var(--border)\",\n\t\t\tlinearTrackFill: \"var(--chart-background)\",\n\t\t\tlinearMode: false,\n\t\t});\n\n\tconst resolveActiveFill = (notch: ComputedNotch) =>\n\t\tresolveGaugeActiveFill({\n\t\t\tnotch,\n\t\t\thasCustomActive: fillState.hasCustomActive,\n\t\t\tactiveFill,\n\t\t\tuseThemePaletteGradient: fillState.useThemePaletteGradient,\n\t\t\tthemeActiveGradientId: fillState.themeActiveGradientId,\n\t\t\tuseGradient,\n\t\t\tactiveFillSolid: \"var(--chart-1)\",\n\t\t});\n\n\tconst showCenter = centerValue != null;\n\n\treturn (\n\t\t<div className=\"relative w-full\" style={{ height, width }}>\n\t\t\t<GaugeNotchSvg\n\t\t\t\tcornerDepth={notchLength}\n\t\t\t\tdefsChildren={fillState.defsChildren}\n\t\t\t\tgeometryScrubbing={false}\n\t\t\t\theight={height}\n\t\t\t\tnotchCornerRadius={notchCornerRadius}\n\t\t\t\tnotches={notches}\n\t\t\t\tnotchTransition={notchTransition}\n\t\t\t\tresolveActiveFill={resolveActiveFill}\n\t\t\t\tresolveBgFill={resolveBgFill}\n\t\t\t\tresolvedActiveFillOpacity={fillState.resolvedActiveFillOpacity}\n\t\t\t\tresolvedInactiveFillOpacity={fillState.resolvedInactiveFillOpacity}\n\t\t\t\tstagger={stagger}\n\t\t\t\tthemeActiveGradientId={fillState.themeActiveGradientId}\n\t\t\t\tuseThemePaletteGradient={fillState.useThemePaletteGradient}\n\t\t\t\twidth={width}\n\t\t\t/>\n\t\t\t{showCenter ? (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"pointer-events-none absolute inset-0 flex flex-col items-center justify-center\"\n\t\t\t\t\tstyle={{ paddingTop: size * 0.08 }}\n\t\t\t\t>\n\t\t\t\t\t<PieCenterShell\n\t\t\t\t\t\tcenterValue={centerValue}\n\t\t\t\t\t\tcontextSize={size}\n\t\t\t\t\t\tdefaultLabel={defaultLabel}\n\t\t\t\t\t\tformatOptions={formatOptions}\n\t\t\t\t\t\tinnerRadiusPx={Math.max(size * 0.2, 52)}\n\t\t\t\t\t\tprefix={prefix}\n\t\t\t\t\t\tsuffix={suffix}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n\nfunction GaugeLinearInner(props: GaugeInnerProps) {\n\tconst {\n\t\tvalue,\n\t\ttotalNotches = 40,\n\t\tspacing = 25,\n\t\tnotchCornerRadius = 0,\n\t\tuniformWidth = true,\n\t\twidth,\n\t\theight,\n\t\tuseGradient = false,\n\t\tcenterValue,\n\t\tdefaultLabel = \"Total\",\n\t\tprefix,\n\t\tsuffix,\n\t\tformatOptions = defaultChartStatFlowFormat,\n\t\tlabelPlacement = \"top\",\n\t\tlabelAlign = \"start\",\n\t\tinactiveFill,\n\t\tactiveFill,\n\t\tnotchLengthPercent = 100,\n\t\tnotchWidthPercent = 80,\n\t\tenterTransition,\n\t\tenterStaggerScale = 1,\n\t\tgeometryScrubbing = false,\n\t} = props;\n\n\tconst prefersReducedMotion = useReducedMotion();\n\tconst fillState = useGaugeFillState(props);\n\n\tconst notchTransition: Transition = prefersReducedMotion\n\t\t? { duration: 0 }\n\t\t: (enterTransition ?? DEFAULT_NOTCH_ENTER_TRANSITION);\n\tconst stagger = Math.max(0.25, Math.min(2.5, enterStaggerScale));\n\n\tconst centerY = height / 2;\n\tconst depthFactor = Math.min(100, Math.max(5, notchLengthPercent)) / 100;\n\tconst outerOffset = (height / 2) * depthFactor;\n\tconst taperRatio = 28 / 42;\n\tconst innerOffset = uniformWidth ? outerOffset : outerOffset * taperRatio;\n\tconst notchDepth = uniformWidth ? outerOffset * 2 : outerOffset - innerOffset;\n\tconst cornerVerticalDepth = uniformWidth ? notchDepth : outerOffset * 2;\n\tconst widthFactor = Math.min(100, Math.max(10, notchWidthPercent)) / 100;\n\n\tconst activeNotches = Math.round((value / 100) * totalNotches);\n\tconst availableWidth = width * (1 - spacing / 100);\n\tconst slotWidth = totalNotches > 0 ? availableWidth / totalNotches : 0;\n\tconst gapDen = totalNotches - 1 > 0 ? totalNotches - 1 : 1;\n\tconst gapWidth = (width * (spacing / 100)) / gapDen;\n\n\tconst notches = useMemo(() => {\n\t\treturn Array.from({ length: totalNotches }, (_, i) => {\n\t\t\tconst xCenter = i * (slotWidth + gapWidth) + slotWidth / 2;\n\t\t\tconst halfWidth = (slotWidth * widthFactor) / 2;\n\n\t\t\tlet x1: number;\n\t\t\tlet y1: number;\n\t\t\tlet x2: number;\n\t\t\tlet y2: number;\n\t\t\tlet x3: number;\n\t\t\tlet y3: number;\n\t\t\tlet x4: number;\n\t\t\tlet y4: number;\n\n\t\t\tif (uniformWidth) {\n\t\t\t\tconst halfHeight = notchDepth / 2;\n\t\t\t\tx1 = xCenter - halfWidth;\n\t\t\t\ty1 = centerY - halfHeight;\n\t\t\t\tx2 = xCenter + halfWidth;\n\t\t\t\ty2 = centerY - halfHeight;\n\t\t\t\tx3 = xCenter + halfWidth;\n\t\t\t\ty3 = centerY + halfHeight;\n\t\t\t\tx4 = xCenter - halfWidth;\n\t\t\t\ty4 = centerY + halfHeight;\n\t\t\t} else {\n\t\t\t\tx1 = xCenter - halfWidth;\n\t\t\t\ty1 = centerY - outerOffset;\n\t\t\t\tx2 = xCenter + halfWidth;\n\t\t\t\ty2 = centerY - outerOffset;\n\t\t\t\tconst innerHalfWidth = halfWidth * (innerOffset / outerOffset);\n\t\t\t\tx3 = xCenter + innerHalfWidth;\n\t\t\t\ty3 = centerY + outerOffset;\n\t\t\t\tx4 = xCenter - innerHalfWidth;\n\t\t\t\ty4 = centerY + outerOffset;\n\t\t\t}\n\n\t\t\tconst denom = totalNotches > 1 ? totalNotches - 1 : 1;\n\t\t\tconst gradientColor =\n\t\t\t\tuseGradient && !fillState.useThemePaletteGradient\n\t\t\t\t\t? interpolateGaugeHex(\n\t\t\t\t\t\t\tfillState.activeGrad0,\n\t\t\t\t\t\t\tfillState.activeGrad1,\n\t\t\t\t\t\t\ti / denom,\n\t\t\t\t\t\t)\n\t\t\t\t\t: \"var(--chart-1)\";\n\n\t\t\treturn {\n\t\t\t\tindex: i,\n\t\t\t\tpoints: { x1, y1, x2, y2, x3, y3, x4, y4 },\n\t\t\t\tisActive: i < activeNotches,\n\t\t\t\tgradientColor,\n\t\t\t\txCenter,\n\t\t\t\tyCenter: centerY,\n\t\t\t};\n\t\t});\n\t}, [\n\t\ttotalNotches,\n\t\tslotWidth,\n\t\tgapWidth,\n\t\tcenterY,\n\t\touterOffset,\n\t\tinnerOffset,\n\t\tactiveNotches,\n\t\tuniformWidth,\n\t\tnotchDepth,\n\t\twidthFactor,\n\t\tuseGradient,\n\t\tfillState.useThemePaletteGradient,\n\t\tfillState.activeGrad0,\n\t\tfillState.activeGrad1,\n\t]);\n\n\tconst resolveBgFill = (notchIndex: number) =>\n\t\tresolveGaugeBgFill({\n\t\t\tnotchIndex,\n\t\t\ttotalNotches,\n\t\t\thasCustomInactive: fillState.hasCustomInactive,\n\t\t\tinactiveFill,\n\t\t\tuseThemePaletteGradient: fillState.useThemePaletteGradient,\n\t\t\tuseGradient,\n\t\t\tinactiveGrad0: fillState.inactiveGrad0,\n\t\t\tinactiveGrad1: fillState.inactiveGrad1,\n\t\t\tarcTrackFill: \"var(--border)\",\n\t\t\tlinearTrackFill: \"var(--chart-background)\",\n\t\t\tlinearMode: true,\n\t\t});\n\n\tconst resolveActiveFill = (notch: ComputedNotch) =>\n\t\tresolveGaugeActiveFill({\n\t\t\tnotch,\n\t\t\thasCustomActive: fillState.hasCustomActive,\n\t\t\tactiveFill,\n\t\t\tuseThemePaletteGradient: fillState.useThemePaletteGradient,\n\t\t\tthemeActiveGradientId: fillState.themeActiveGradientId,\n\t\t\tuseGradient,\n\t\t\tactiveFillSolid: \"var(--chart-1)\",\n\t\t});\n\n\tconst label =\n\t\tcenterValue == null ? null : (\n\t\t\t<GaugeLabelShell\n\t\t\t\talign={labelAlign}\n\t\t\t\tcenterValue={centerValue}\n\t\t\t\tdefaultLabel={defaultLabel}\n\t\t\t\tformatOptions={formatOptions}\n\t\t\t\tprefix={prefix}\n\t\t\t\tsuffix={suffix}\n\t\t\t/>\n\t\t);\n\n\tconst track = (\n\t\t<div className=\"relative w-full\" style={{ height, width }}>\n\t\t\t<GaugeNotchSvg\n\t\t\t\tcornerDepth={cornerVerticalDepth}\n\t\t\t\tdefsChildren={fillState.defsChildren}\n\t\t\t\tgeometryScrubbing={geometryScrubbing}\n\t\t\t\theight={height}\n\t\t\t\tnotchCornerRadius={notchCornerRadius}\n\t\t\t\tnotches={notches}\n\t\t\t\tnotchTransition={notchTransition}\n\t\t\t\tresolveActiveFill={resolveActiveFill}\n\t\t\t\tresolveBgFill={resolveBgFill}\n\t\t\t\tresolvedActiveFillOpacity={fillState.resolvedActiveFillOpacity}\n\t\t\t\tresolvedInactiveFillOpacity={fillState.resolvedInactiveFillOpacity}\n\t\t\t\tstagger={stagger}\n\t\t\t\tthemeActiveGradientId={fillState.themeActiveGradientId}\n\t\t\t\tuseThemePaletteGradient={fillState.useThemePaletteGradient}\n\t\t\t\twidth={width}\n\t\t\t/>\n\t\t</div>\n\t);\n\n\treturn (\n\t\t<GaugeLabelLayout\n\t\t\talign={labelAlign}\n\t\t\tlabel={label}\n\t\t\tplacement={labelPlacement}\n\t\t>\n\t\t\t{track}\n\t\t</GaugeLabelLayout>\n\t);\n}\n\nfunction GaugeInner(props: GaugeInnerProps) {\n\tif (props.orientation === \"linear\") {\n\t\treturn <GaugeLinearInner {...props} />;\n\t}\n\treturn <GaugeArcInner {...props} />;\n}\n\nexport function Gauge({\n\twidth: widthProp,\n\theight: heightProp,\n\tclassName,\n\tminWidth,\n\torientation = \"arc\",\n\tlinearHeight,\n\t...props\n}: GaugeProps) {\n\tconst isLinear = orientation === \"linear\";\n\tconst resolvedMinWidth = minWidth ?? (isLinear ? 200 : 300);\n\tconst resolvedLinearHeight = linearHeight ?? DEFAULT_LINEAR_GAUGE_HEIGHT;\n\n\tif (isLinear) {\n\t\tif (widthProp != null) {\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\"relative w-full max-w-full\", className)}\n\t\t\t\t\tstyle={{ width: widthProp }}\n\t\t\t\t>\n\t\t\t\t\t<GaugeInner\n\t\t\t\t\t\theight={heightProp ?? resolvedLinearHeight}\n\t\t\t\t\t\torientation=\"linear\"\n\t\t\t\t\t\twidth={widthProp}\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<div className={cn(\"relative w-full min-w-0 max-w-full\", className)}>\n\t\t\t\t<div className=\"w-full min-w-0\" style={{ minWidth: resolvedMinWidth }}>\n\t\t\t\t\t<ParentSize debounceTime={10}>\n\t\t\t\t\t\t{({ width }) =>\n\t\t\t\t\t\t\twidth > 0 ? (\n\t\t\t\t\t\t\t\t<GaugeInner\n\t\t\t\t\t\t\t\t\theight={resolvedLinearHeight}\n\t\t\t\t\t\t\t\t\torientation=\"linear\"\n\t\t\t\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null\n\t\t\t\t\t\t}\n\t\t\t\t\t</ParentSize>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (widthProp != null && heightProp != null) {\n\t\treturn (\n\t\t\t<div className={cn(\"relative inline-flex max-w-full\", className)}>\n\t\t\t\t<GaugeInner\n\t\t\t\t\theight={heightProp}\n\t\t\t\t\torientation=\"arc\"\n\t\t\t\t\twidth={widthProp}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"relative w-full max-w-full\", className)}\n\t\t\tstyle={{ minWidth: resolvedMinWidth }}\n\t\t>\n\t\t\t<div className=\"mx-auto aspect-[21/16] w-full max-w-[560px]\">\n\t\t\t\t<ParentSize debounceTime={10}>\n\t\t\t\t\t{({ width, height }) =>\n\t\t\t\t\t\twidth > 0 && height > 0 ? (\n\t\t\t\t\t\t\t<GaugeInner\n\t\t\t\t\t\t\t\theight={height}\n\t\t\t\t\t\t\t\torientation=\"arc\"\n\t\t\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null\n\t\t\t\t\t}\n\t\t\t\t</ParentSize>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nGauge.displayName = \"Gauge\";\n","\"use client\";\n\nimport type { Transition } from \"motion/react\";\nimport {\n\tcreateContext,\n\ttype ReactNode,\n\ttype RefObject,\n\tuseContext,\n\tuseMemo,\n} from \"react\";\n\n// CSS variable references for ring chart theming\nexport const ringCssVars = {\n\tbackground: \"var(--chart-background)\",\n\tforeground: \"var(--chart-foreground)\",\n\tforegroundMuted: \"var(--chart-foreground-muted)\",\n\tlabel: \"var(--chart-label)\",\n\tringBackground: \"var(--border)\",\n\t// Default ring colors from chart palette\n\tring1: \"var(--chart-1)\",\n\tring2: \"var(--chart-2)\",\n\tring3: \"var(--chart-3)\",\n\tring4: \"var(--chart-4)\",\n\tring5: \"var(--chart-5)\",\n};\n\n// Default ring color palette\nexport const defaultRingColors = [\n\tringCssVars.ring1,\n\tringCssVars.ring2,\n\tringCssVars.ring3,\n\tringCssVars.ring4,\n\tringCssVars.ring5,\n];\n\nexport interface RingData {\n\t/** Display label for the ring */\n\tlabel: string;\n\t/** Current value */\n\tvalue: number;\n\t/** Maximum value (determines progress percentage) */\n\tmaxValue: number;\n\t/** Optional color override - falls back to palette */\n\tcolor?: string;\n}\n\nexport interface RingHoverContextValue {\n\thoveredIndex: number | null;\n\tsetHoveredIndex: (index: number | null) => void;\n}\n\nexport interface RingStableContextValue {\n\t// Data\n\tdata: RingData[];\n\n\t// Dimensions\n\tsize: number;\n\tcenter: number;\n\tstrokeWidth: number;\n\tringGap: number;\n\tbaseInnerRadius: number;\n\n\t// Animation state\n\tanimationKey: number;\n\tisLoaded: boolean;\n\tenterTransition?: Transition;\n\tenterStaggerScale: number;\n\n\t// Container ref for portals\n\tcontainerRef: RefObject<HTMLDivElement | null>;\n\n\t// Computed values\n\ttotalValue: number;\n\n\t// Get color for a ring index\n\tgetColor: (index: number) => string;\n\n\t// Get ring radii for an index\n\tgetRingRadii: (index: number) => { innerRadius: number; outerRadius: number };\n\n\t// Arc angle range\n\tstartAngle: number;\n\tendAngle: number;\n\n\t/**\n\t * Studio geometry scrub — skip Motion path morphing and use plain SVG paths.\n\t * @default false\n\t */\n\tgeometryScrubbing: boolean;\n}\n\nexport type RingContextValue = RingStableContextValue & RingHoverContextValue;\n\nconst RingStableContext = createContext<RingStableContextValue | null>(null);\nconst RingHoverContext = createContext<RingHoverContextValue | null>(null);\n\nexport function RingProvider({\n\tchildren,\n\tvalue,\n}: {\n\tchildren: ReactNode;\n\tvalue: RingContextValue;\n}) {\n\tconst stable = useMemo<RingStableContextValue>(\n\t\t() => ({\n\t\t\tdata: value.data,\n\t\t\tsize: value.size,\n\t\t\tcenter: value.center,\n\t\t\tstrokeWidth: value.strokeWidth,\n\t\t\tringGap: value.ringGap,\n\t\t\tbaseInnerRadius: value.baseInnerRadius,\n\t\t\tanimationKey: value.animationKey,\n\t\t\tisLoaded: value.isLoaded,\n\t\t\tenterTransition: value.enterTransition,\n\t\t\tenterStaggerScale: value.enterStaggerScale,\n\t\t\tcontainerRef: value.containerRef,\n\t\t\ttotalValue: value.totalValue,\n\t\t\tgetColor: value.getColor,\n\t\t\tgetRingRadii: value.getRingRadii,\n\t\t\tstartAngle: value.startAngle,\n\t\t\tendAngle: value.endAngle,\n\t\t\tgeometryScrubbing: value.geometryScrubbing,\n\t\t}),\n\t\t[\n\t\t\tvalue.data,\n\t\t\tvalue.size,\n\t\t\tvalue.center,\n\t\t\tvalue.strokeWidth,\n\t\t\tvalue.ringGap,\n\t\t\tvalue.baseInnerRadius,\n\t\t\tvalue.animationKey,\n\t\t\tvalue.isLoaded,\n\t\t\tvalue.enterTransition,\n\t\t\tvalue.enterStaggerScale,\n\t\t\tvalue.containerRef,\n\t\t\tvalue.totalValue,\n\t\t\tvalue.getColor,\n\t\t\tvalue.getRingRadii,\n\t\t\tvalue.startAngle,\n\t\t\tvalue.endAngle,\n\t\t\tvalue.geometryScrubbing,\n\t\t],\n\t);\n\n\tconst hover = useMemo<RingHoverContextValue>(\n\t\t() => ({\n\t\t\thoveredIndex: value.hoveredIndex,\n\t\t\tsetHoveredIndex: value.setHoveredIndex,\n\t\t}),\n\t\t[value.hoveredIndex, value.setHoveredIndex],\n\t);\n\n\treturn (\n\t\t<RingStableContext.Provider value={stable}>\n\t\t\t<RingHoverContext.Provider value={hover}>\n\t\t\t\t{children}\n\t\t\t</RingHoverContext.Provider>\n\t\t</RingStableContext.Provider>\n\t);\n}\n\nexport function useRingStable(): RingStableContextValue {\n\tconst context = useContext(RingStableContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"useRingStable must be used within a RingProvider. \" +\n\t\t\t\t\"Make sure your component is wrapped in <RingChart>.\",\n\t\t);\n\t}\n\treturn context;\n}\n\nexport function useRingHover(): RingHoverContextValue {\n\tconst context = useContext(RingHoverContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"useRingHover must be used within a RingProvider. \" +\n\t\t\t\t\"Make sure your component is wrapped in <RingChart>.\",\n\t\t);\n\t}\n\treturn context;\n}\n\nexport function useRing(): RingContextValue {\n\treturn { ...useRingStable(), ...useRingHover() };\n}\n\nexport default RingStableContext;\n","\"use client\";\n\nimport { Group } from \"@visx/group\";\nimport { ParentSize } from \"@visx/responsive\";\nimport { arc as arcGenerator } from \"@visx/shape\";\nimport type { Transition } from \"motion/react\";\nimport {\n\tChildren,\n\tisValidElement,\n\tmemo,\n\ttype ReactNode,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tdefaultRingColors,\n\ttype RingContextValue,\n\ttype RingData,\n\tRingProvider,\n\tringCssVars,\n} from \"./ring-context\";\n\nfunction generateRingArcPath(\n\tinnerRadius: number,\n\touterRadius: number,\n\tstartAngle: number,\n\tendAngle: number,\n\tcornerRadius: number,\n): string {\n\tconst generator = arcGenerator<unknown>({\n\t\tinnerRadius,\n\t\touterRadius,\n\t\tcornerRadius,\n\t});\n\treturn generator({ startAngle, endAngle } as unknown as null) || \"\";\n}\n\nexport interface RingChartProps {\n\t/** Data array - each item represents a ring */\n\tdata: RingData[];\n\t/** Chart size in pixels. If not provided, uses parent container size */\n\tsize?: number;\n\t/** Stroke width of each ring. Default: 12 */\n\tstrokeWidth?: number;\n\t/** Gap between rings. Default: 6 */\n\tringGap?: number;\n\t/** Inner radius of the innermost ring. Default: 60 */\n\tbaseInnerRadius?: number;\n\t/** Animation duration in milliseconds. Default: 1100 */\n\tanimationDuration?: number;\n\t/** Additional class name for the container */\n\tclassName?: string;\n\t/** Controlled hover state - index of hovered ring */\n\thoveredIndex?: number | null;\n\t/** Callback when hover state changes */\n\tonHoverChange?: (index: number | null) => void;\n\t/** Start angle in radians. Default: -PI/2 (top) */\n\tstartAngle?: number;\n\t/** End angle in radians. Default: 3*PI/2 (full circle) */\n\tendAngle?: number;\n\t/** Framer Motion transition for ring enter animation */\n\tenterTransition?: Transition;\n\t/** Scales ring stagger delays (1 = default). */\n\tenterStaggerScale?: number;\n\t/**\n\t * High-frequency geometry updates (e.g. studio NumberField scrub).\n\t * Uses plain SVG paths instead of Motion `d` morphing.\n\t */\n\tgeometryScrubbing?: boolean;\n\t/** Child components (Ring, RingCenter, etc.) */\n\tchildren: ReactNode;\n}\n\ninterface RingChartInnerProps {\n\twidth: number;\n\theight: number;\n\tdata: RingData[];\n\tstrokeWidth: number;\n\tringGap: number;\n\tbaseInnerRadius: number;\n\tchildren: ReactNode;\n\tcontainerRef: React.RefObject<HTMLDivElement | null>;\n\thoveredIndexProp?: number | null;\n\tonHoverChange?: (index: number | null) => void;\n\tstartAngle: number;\n\tendAngle: number;\n\tenterTransition?: Transition;\n\tenterStaggerScale: number;\n\tgeometryScrubbing: boolean;\n}\n\nfunction isRing(child: ReactNode): boolean {\n\treturn (\n\t\tisValidElement(child) &&\n\t\ttypeof child.type === \"function\" &&\n\t\t((child.type as { displayName?: string }).displayName === \"Ring\" ||\n\t\t\t(child.type as { name?: string }).name === \"Ring\")\n\t);\n}\n\n// Helper to check if a child is a RingCenter component\nfunction isRingCenter(child: ReactNode): boolean {\n\treturn (\n\t\tisValidElement(child) &&\n\t\ttypeof child.type === \"function\" &&\n\t\t((child.type as { displayName?: string }).displayName === \"RingCenter\" ||\n\t\t\tchild.type.name === \"RingCenter\")\n\t);\n}\n\nfunction RingChartInner(props: RingChartInnerProps) {\n\tconst size = Math.min(props.width, props.height);\n\n\tif (size < 10) {\n\t\treturn null;\n\t}\n\n\treturn <RingChartCore {...props} />;\n}\n\ninterface ScrubRingLayer {\n\tbgPath: string;\n\tprogressPath: string;\n\tcolor: string;\n}\n\nconst RingChartCore = memo(function RingChartCore({\n\twidth,\n\theight,\n\tdata,\n\tstrokeWidth: strokeWidthProp,\n\tringGap: ringGapProp,\n\tbaseInnerRadius: baseInnerRadiusProp,\n\tchildren,\n\tcontainerRef,\n\thoveredIndexProp,\n\tonHoverChange,\n\tstartAngle,\n\tendAngle,\n\tenterTransition,\n\tenterStaggerScale,\n\tgeometryScrubbing,\n}: RingChartInnerProps) {\n\tconst [internalHoveredIndex, setInternalHoveredIndex] = useState<\n\t\tnumber | null\n\t>(null);\n\tconst [animationKey] = useState(0);\n\tconst [isLoaded, setIsLoaded] = useState(false);\n\n\t// Use controlled or uncontrolled hover state\n\tconst isControlled = hoveredIndexProp !== undefined;\n\tconst hoveredIndex = isControlled ? hoveredIndexProp : internalHoveredIndex;\n\tconst setHoveredIndex = useCallback(\n\t\t(index: number | null) => {\n\t\t\tif (isControlled) {\n\t\t\t\tonHoverChange?.(index);\n\t\t\t} else {\n\t\t\t\tsetInternalHoveredIndex(index);\n\t\t\t}\n\t\t},\n\t\t[isControlled, onHoverChange],\n\t);\n\n\t// Use the smaller dimension to ensure the chart fits\n\tconst size = Math.min(width, height);\n\tconst center = size / 2;\n\n\t// Calculate scaled dimensions to fit within the available space\n\t// The outermost ring needs to fit within the chart with some padding\n\tconst ringCount = data.length;\n\tconst padding = 8; // Padding from edge\n\tconst availableRadius = center - padding;\n\n\t// Calculate the \"design\" outer radius (what we'd need at 1:1 scale)\n\tconst designOuterRadius =\n\t\tbaseInnerRadiusProp +\n\t\t(ringCount - 1) * (strokeWidthProp + ringGapProp) +\n\t\tstrokeWidthProp;\n\n\t// Scale factor to fit within available space\n\tconst scale = Math.min(1, availableRadius / designOuterRadius);\n\n\t// Apply scaling to all dimensions\n\tconst strokeWidth = strokeWidthProp * scale;\n\tconst ringGap = ringGapProp * scale;\n\tconst baseInnerRadius = baseInnerRadiusProp * scale;\n\n\t// Calculate total value\n\tconst totalValue = useMemo(\n\t\t() => data.reduce((sum, d) => sum + d.value, 0),\n\t\t[data],\n\t);\n\n\t// Get color for a ring index\n\tconst getColor = useCallback(\n\t\t(index: number) => {\n\t\t\tconst item = data[index];\n\t\t\tif (item?.color) {\n\t\t\t\treturn item.color;\n\t\t\t}\n\t\t\treturn defaultRingColors[index % defaultRingColors.length] as string;\n\t\t},\n\t\t[data],\n\t);\n\n\t// Get ring radii for an index\n\tconst getRingRadii = useCallback(\n\t\t(index: number) => {\n\t\t\tconst innerRadius = baseInnerRadius + index * (strokeWidth + ringGap);\n\t\t\tconst outerRadius = innerRadius + strokeWidth;\n\t\t\treturn { innerRadius, outerRadius };\n\t\t},\n\t\t[baseInnerRadius, strokeWidth, ringGap],\n\t);\n\n\tconst arcRange = endAngle - startAngle;\n\tconst scrubRingLayers = useMemo((): readonly ScrubRingLayer[] | null => {\n\t\tif (!geometryScrubbing) {\n\t\t\treturn null;\n\t\t}\n\t\treturn data.map((ringData, index) => {\n\t\t\tconst { innerRadius, outerRadius } = getRingRadii(index);\n\t\t\tconst cornerRadius = (outerRadius - innerRadius) / 2;\n\t\t\tconst progress = ringData.value / ringData.maxValue;\n\t\t\tconst progressEndAngle = startAngle + arcRange * progress;\n\t\t\treturn {\n\t\t\t\tbgPath: generateRingArcPath(\n\t\t\t\t\tinnerRadius,\n\t\t\t\t\touterRadius,\n\t\t\t\t\tstartAngle,\n\t\t\t\t\tendAngle,\n\t\t\t\t\tcornerRadius,\n\t\t\t\t),\n\t\t\t\tprogressPath:\n\t\t\t\t\tprogressEndAngle <= startAngle + 0.01\n\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t: generateRingArcPath(\n\t\t\t\t\t\t\t\tinnerRadius,\n\t\t\t\t\t\t\t\touterRadius,\n\t\t\t\t\t\t\t\tstartAngle,\n\t\t\t\t\t\t\t\tprogressEndAngle,\n\t\t\t\t\t\t\t\tcornerRadius,\n\t\t\t\t\t\t\t),\n\t\t\t\tcolor: getColor(index),\n\t\t\t};\n\t\t});\n\t}, [\n\t\tgeometryScrubbing,\n\t\tdata,\n\t\tgetRingRadii,\n\t\tgetColor,\n\t\tstartAngle,\n\t\tendAngle,\n\t\tarcRange,\n\t]);\n\n\tconst effectiveIsLoaded = geometryScrubbing || isLoaded;\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: enterTransition\n\tuseEffect(() => {\n\t\tif (geometryScrubbing) {\n\t\t\treturn;\n\t\t}\n\t\tsetIsLoaded(false);\n\t\tconst timer = setTimeout(() => {\n\t\t\tsetIsLoaded(true);\n\t\t}, 100);\n\t\treturn () => clearTimeout(timer);\n\t}, [enterTransition, enterStaggerScale, geometryScrubbing]);\n\n\t// Separate SVG children (rings) from HTML children (RingCenter)\n\t// This avoids Safari's foreignObject positioning bugs (WebKit #23113)\n\tconst { svgChildren, centerChildren } = useMemo(() => {\n\t\tconst svgNodes: ReactNode[] = [];\n\t\tconst centerNodes: ReactNode[] = [];\n\n\t\tChildren.forEach(children, (child) => {\n\t\t\tif (isRingCenter(child)) {\n\t\t\t\tcenterNodes.push(child);\n\t\t\t} else if (geometryScrubbing && isRing(child)) {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tsvgNodes.push(child);\n\t\t\t}\n\t\t});\n\n\t\treturn { svgChildren: svgNodes, centerChildren: centerNodes };\n\t}, [children, geometryScrubbing]);\n\n\tconst contextValue: RingContextValue = useMemo(\n\t\t() => ({\n\t\t\tdata,\n\t\t\tsize,\n\t\t\tcenter,\n\t\t\tstrokeWidth,\n\t\t\tringGap,\n\t\t\tbaseInnerRadius,\n\t\t\thoveredIndex,\n\t\t\tsetHoveredIndex,\n\t\t\tanimationKey,\n\t\t\tisLoaded: effectiveIsLoaded,\n\t\t\tenterTransition,\n\t\t\tenterStaggerScale,\n\t\t\tcontainerRef,\n\t\t\ttotalValue,\n\t\t\tgetColor,\n\t\t\tgetRingRadii,\n\t\t\tstartAngle,\n\t\t\tendAngle,\n\t\t\tgeometryScrubbing,\n\t\t}),\n\t\t[\n\t\t\tdata,\n\t\t\tsize,\n\t\t\tcenter,\n\t\t\tstrokeWidth,\n\t\t\tringGap,\n\t\t\tbaseInnerRadius,\n\t\t\thoveredIndex,\n\t\t\tsetHoveredIndex,\n\t\t\tanimationKey,\n\t\t\teffectiveIsLoaded,\n\t\t\tenterTransition,\n\t\t\tenterStaggerScale,\n\t\t\tcontainerRef,\n\t\t\ttotalValue,\n\t\t\tgetColor,\n\t\t\tgetRingRadii,\n\t\t\tstartAngle,\n\t\t\tendAngle,\n\t\t\tgeometryScrubbing,\n\t\t],\n\t);\n\n\t// Use CSS Grid stacking to layer SVG and HTML content\n\t// This avoids Safari's foreignObject rendering bugs where HTML content\n\t// inside SVG foreignObject renders at wrong positions when it has a RenderLayer\n\treturn (\n\t\t<RingProvider value={contextValue}>\n\t\t\t<div\n\t\t\t\tclassName=\"grid\"\n\t\t\t\tstyle={{\n\t\t\t\t\tgridTemplateColumns: \"1fr\",\n\t\t\t\t\tgridTemplateRows: \"1fr\",\n\t\t\t\t\twidth: size,\n\t\t\t\t\theight: size,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{/* SVG layer with rings */}\n\t\t\t\t<svg\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\theight={size}\n\t\t\t\t\tstyle={{ gridArea: \"1 / 1\", contain: \"layout style paint\" }}\n\t\t\t\t\twidth={size}\n\t\t\t\t>\n\t\t\t\t\t<Group left={center} top={center}>\n\t\t\t\t\t\t{scrubRingLayers\n\t\t\t\t\t\t\t? scrubRingLayers.map((layer, index) => (\n\t\t\t\t\t\t\t\t\t<g key={data[index]?.label ?? index}>\n\t\t\t\t\t\t\t\t\t\t<path d={layer.bgPath} fill={ringCssVars.ringBackground} />\n\t\t\t\t\t\t\t\t\t\t{layer.progressPath ? (\n\t\t\t\t\t\t\t\t\t\t\t<path d={layer.progressPath} fill={layer.color} />\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t{svgChildren}\n\t\t\t\t\t</Group>\n\t\t\t\t</svg>\n\n\t\t\t\t{/* HTML layer with center content - stacked on top via grid */}\n\t\t\t\t{centerChildren.length > 0 && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"pointer-events-none flex items-center justify-center\"\n\t\t\t\t\t\tstyle={{ gridArea: \"1 / 1\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{centerChildren}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</RingProvider>\n\t);\n}, ringChartCorePropsEqual);\n\nfunction ringChartCorePropsEqual(\n\tprev: RingChartInnerProps,\n\tnext: RingChartInnerProps,\n): boolean {\n\treturn (\n\t\tprev.width === next.width &&\n\t\tprev.height === next.height &&\n\t\tprev.data === next.data &&\n\t\tprev.strokeWidth === next.strokeWidth &&\n\t\tprev.ringGap === next.ringGap &&\n\t\tprev.baseInnerRadius === next.baseInnerRadius &&\n\t\tprev.hoveredIndexProp === next.hoveredIndexProp &&\n\t\tprev.onHoverChange === next.onHoverChange &&\n\t\tprev.startAngle === next.startAngle &&\n\t\tprev.endAngle === next.endAngle &&\n\t\tprev.enterTransition === next.enterTransition &&\n\t\tprev.enterStaggerScale === next.enterStaggerScale &&\n\t\tprev.geometryScrubbing === next.geometryScrubbing &&\n\t\tprev.children === next.children\n\t);\n}\n\nexport function RingChart({\n\tdata,\n\tsize: fixedSize,\n\tstrokeWidth = 12,\n\tringGap = 6,\n\tbaseInnerRadius = 60,\n\tclassName = \"\",\n\thoveredIndex,\n\tonHoverChange,\n\tstartAngle = -Math.PI / 2,\n\tendAngle = (3 * Math.PI) / 2,\n\tenterTransition,\n\tenterStaggerScale = 1,\n\tgeometryScrubbing = false,\n\tchildren,\n}: RingChartProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\n\t// If fixed size is provided, use it directly\n\tif (fixedSize) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\"relative flex items-center justify-center\", className)}\n\t\t\t\tref={containerRef}\n\t\t\t\tstyle={{ width: fixedSize, height: fixedSize }}\n\t\t\t>\n\t\t\t\t<RingChartInner\n\t\t\t\t\tbaseInnerRadius={baseInnerRadius}\n\t\t\t\t\tcontainerRef={containerRef}\n\t\t\t\t\tdata={data}\n\t\t\t\t\tendAngle={endAngle}\n\t\t\t\t\tenterStaggerScale={enterStaggerScale}\n\t\t\t\t\tenterTransition={enterTransition}\n\t\t\t\t\tgeometryScrubbing={geometryScrubbing}\n\t\t\t\t\theight={fixedSize}\n\t\t\t\t\thoveredIndexProp={hoveredIndex}\n\t\t\t\t\tonHoverChange={onHoverChange}\n\t\t\t\t\tringGap={ringGap}\n\t\t\t\t\tstartAngle={startAngle}\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\twidth={fixedSize}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</RingChartInner>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Otherwise use ParentSize for responsive sizing\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"relative aspect-square w-full\", className)}\n\t\t\tref={containerRef}\n\t\t>\n\t\t\t<ParentSize debounceTime={10}>\n\t\t\t\t{({ width, height }) => (\n\t\t\t\t\t<RingChartInner\n\t\t\t\t\t\tbaseInnerRadius={baseInnerRadius}\n\t\t\t\t\t\tcontainerRef={containerRef}\n\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\tendAngle={endAngle}\n\t\t\t\t\t\tenterStaggerScale={enterStaggerScale}\n\t\t\t\t\t\tenterTransition={enterTransition}\n\t\t\t\t\t\tgeometryScrubbing={geometryScrubbing}\n\t\t\t\t\t\theight={height}\n\t\t\t\t\t\thoveredIndexProp={hoveredIndex}\n\t\t\t\t\t\tonHoverChange={onHoverChange}\n\t\t\t\t\t\tringGap={ringGap}\n\t\t\t\t\t\tstartAngle={startAngle}\n\t\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\t\twidth={width}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</RingChartInner>\n\t\t\t\t)}\n\t\t\t</ParentSize>\n\t\t</div>\n\t);\n}\n\nexport default RingChart;\n","\"use client\";\n\nimport type { MotionValue } from \"motion/react\";\nimport { useEffect, useState } from \"react\";\n\n/**\n * Returns true once a mount-progress MotionValue reaches 1.\n * Use to swap animated MotionValue-driven props for static values after\n * enter completes — drops per-frame subscriptions during pan/hover.\n */\nexport function useEnterComplete(mountProgress: MotionValue<number>): boolean {\n\tconst [complete, setComplete] = useState(() => mountProgress.get() >= 1);\n\n\tuseEffect(() => {\n\t\tif (mountProgress.get() >= 1) {\n\t\t\tsetComplete(true);\n\t\t\treturn;\n\t\t}\n\n\t\treturn mountProgress.on(\"change\", (value) => {\n\t\t\tif (value >= 1) {\n\t\t\t\tsetComplete(true);\n\t\t\t}\n\t\t});\n\t}, [mountProgress]);\n\n\treturn complete;\n}\n","import type { Transition } from \"motion/react\";\n\n/** Default clip-reveal easing for cartesian charts. */\nexport const DEFAULT_ANIMATION_EASING = \"cubic-bezier(0.85, 0, 0.15, 1)\";\n\nexport const DEFAULT_ANIMATION_DURATION_MS = 1100;\n\n/** Default enter transition — matches the original line chart reveal. */\nexport const DEFAULT_CHART_ENTER_TRANSITION: Transition = {\n\ttype: \"tween\",\n\tduration: DEFAULT_ANIMATION_DURATION_MS / 1000,\n\tease: [0.85, 0, 0.15, 1],\n};\n\n/**\n * Clip-path width reveal must use tween — spring does not reliably animate SVG width.\n */\nexport function clipRevealTransition(enterTransition?: Transition): Transition {\n\tif (enterTransition?.type === \"tween\") {\n\t\treturn {\n\t\t\t...enterTransition,\n\t\t\tease: enterTransition.ease ?? DEFAULT_CHART_ENTER_TRANSITION.ease,\n\t\t};\n\t}\n\n\tconst duration =\n\t\ttypeof enterTransition?.duration === \"number\"\n\t\t\t? enterTransition.duration\n\t\t\t: DEFAULT_ANIMATION_DURATION_MS / 1000;\n\n\treturn {\n\t\ttype: \"tween\",\n\t\tduration,\n\t\tease: DEFAULT_CHART_ENTER_TRANSITION.ease,\n\t};\n}\n","\"use client\";\n\nimport { animate, type Transition, useMotionValue } from \"motion/react\";\nimport { useEffect, useRef } from \"react\";\nimport { DEFAULT_CHART_ENTER_TRANSITION } from \"./animation\";\n\n/** Drives 0→1 enter progress using the studio motion transition (spring or tween). */\nexport function useMountProgress(\n\tenterTransition: Transition | undefined,\n\tdelaySeconds: number,\n\treplayKey: number | string,\n) {\n\tconst progress = useMotionValue(0);\n\tconst transitionRef = useRef(enterTransition);\n\ttransitionRef.current = enterTransition;\n\n\t// replayKey intentionally retriggers enter when motion settings change\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: replayKey\n\tuseEffect(() => {\n\t\tprogress.set(0);\n\t\tconst controls = animate(progress, 1, {\n\t\t\t...(transitionRef.current ?? DEFAULT_CHART_ENTER_TRANSITION),\n\t\t\tdelay: delaySeconds,\n\t\t});\n\t\treturn () => controls.stop();\n\t}, [delaySeconds, replayKey, progress]);\n\n\treturn progress;\n}\n","\"use client\";\n\nimport { arc as arcGenerator } from \"@visx/shape\";\nimport { type MotionValue, motion, useTransform } from \"motion/react\";\nimport { memo, useCallback } from \"react\";\nimport { ringCssVars, useRingHover, useRingStable } from \"./ring-context\";\nimport { useEnterComplete } from \"./use-enter-complete\";\nimport { useMountProgress } from \"./use-mount-progress\";\n\nfunction generateArcPath(\n\tinnerRadius: number,\n\touterRadius: number,\n\tstartAngle: number,\n\tendAngle: number,\n\tcornerRadius: number,\n): string {\n\tconst generator = arcGenerator<unknown>({\n\t\tinnerRadius,\n\t\touterRadius,\n\t\tcornerRadius,\n\t});\n\treturn generator({ startAngle, endAngle } as unknown as null) || \"\";\n}\n\nexport type RingLineCap = \"round\" | \"butt\";\n\nexport interface RingProps {\n\tindex: number;\n\tcolor?: string;\n\tanimate?: boolean;\n\tshowGlow?: boolean;\n\tlineCap?: RingLineCap;\n}\n\nfunction ringHoverScale(isHovered: boolean, isPushedOut: boolean): number {\n\tif (isHovered) {\n\t\treturn 1.03;\n\t}\n\tif (isPushedOut) {\n\t\treturn 1.02;\n\t}\n\treturn 1;\n}\n\nfunction RingProgressPath({\n\tprogressComplete,\n\tprogressPath,\n\tanimatedProgressPath,\n\tcolor,\n}: {\n\tprogressComplete: boolean;\n\tprogressPath: string;\n\tanimatedProgressPath: MotionValue<string>;\n\tcolor: string;\n}) {\n\tif (progressComplete) {\n\t\tif (!progressPath) {\n\t\t\treturn null;\n\t\t}\n\t\treturn <path d={progressPath} fill={color} />;\n\t}\n\treturn <motion.path d={animatedProgressPath} fill={color} />;\n}\n\nexport const Ring = memo(function Ring({\n\tindex,\n\tcolor: colorProp,\n\tanimate = true,\n\tshowGlow = true,\n\tlineCap = \"round\",\n}: RingProps) {\n\tconst {\n\t\tdata,\n\t\tgetColor,\n\t\tgetRingRadii,\n\t\tstartAngle,\n\t\tendAngle,\n\t\tenterTransition,\n\t\tenterStaggerScale,\n\t\tanimationKey,\n\t} = useRingStable();\n\tconst { hoveredIndex, setHoveredIndex } = useRingHover();\n\n\tconst expandDelay = index * 0.08 * enterStaggerScale;\n\tconst expandProgress = useMountProgress(\n\t\tenterTransition,\n\t\texpandDelay,\n\t\t`${animationKey}-expand-${index}`,\n\t);\n\tconst expandComplete = useEnterComplete(expandProgress);\n\n\tconst progressDelay = (0.6 + index * 0.1) * enterStaggerScale;\n\tconst progressMount = useMountProgress(\n\t\tenterTransition,\n\t\tprogressDelay,\n\t\t`${animationKey}-progress-${index}`,\n\t);\n\tconst progressComplete = useEnterComplete(progressMount);\n\n\tconst ringData = data[index];\n\tconst progress = ringData ? ringData.value / ringData.maxValue : 0;\n\tconst arcRange = endAngle - startAngle;\n\n\tconst animatedProgressPath = useTransform(progressMount, (v) => {\n\t\tif (!ringData) {\n\t\t\treturn \"\";\n\t\t}\n\t\tconst currentEndAngle = startAngle + arcRange * progress * v;\n\t\tif (currentEndAngle <= startAngle + 0.01) {\n\t\t\treturn \"\";\n\t\t}\n\t\tconst radii = getRingRadii(index);\n\t\tconst corner =\n\t\t\tlineCap === \"round\" ? (radii.outerRadius - radii.innerRadius) / 2 : 0;\n\t\treturn generateArcPath(\n\t\t\tradii.innerRadius,\n\t\t\tradii.outerRadius,\n\t\t\tstartAngle,\n\t\t\tcurrentEndAngle,\n\t\t\tcorner,\n\t\t);\n\t});\n\n\tconst enterScale = useTransform(expandProgress, [0, 1], [0, 1]);\n\n\tconst handleMouseEnter = useCallback(\n\t\t() => setHoveredIndex(index),\n\t\t[index, setHoveredIndex],\n\t);\n\tconst handleMouseLeave = useCallback(\n\t\t() => setHoveredIndex(null),\n\t\t[setHoveredIndex],\n\t);\n\n\tif (!ringData) {\n\t\treturn null;\n\t}\n\n\tconst { innerRadius, outerRadius } = getRingRadii(index);\n\tconst color = colorProp || getColor(index);\n\n\tconst isHovered = hoveredIndex === index;\n\tconst isFaded = hoveredIndex !== null && hoveredIndex !== index;\n\tconst isPushedOut = hoveredIndex !== null && hoveredIndex < index;\n\n\tconst cornerRadius =\n\t\tlineCap === \"round\" ? (outerRadius - innerRadius) / 2 : 0;\n\tconst bgPath = generateArcPath(\n\t\tinnerRadius,\n\t\touterRadius,\n\t\tstartAngle,\n\t\tendAngle,\n\t\tcornerRadius,\n\t);\n\tconst progressEndAngle = startAngle + arcRange * progress;\n\tconst progressPath =\n\t\tprogressEndAngle <= startAngle + 0.01\n\t\t\t? \"\"\n\t\t\t: generateArcPath(\n\t\t\t\t\tinnerRadius,\n\t\t\t\t\touterRadius,\n\t\t\t\t\tstartAngle,\n\t\t\t\t\tprogressEndAngle,\n\t\t\t\t\tcornerRadius,\n\t\t\t\t);\n\n\tconst hoverScale = ringHoverScale(isHovered, isPushedOut);\n\tconst layerOpacity = isFaded ? 0.35 : 1;\n\tconst enterDone = !animate || (expandComplete && progressComplete);\n\n\tconst groupStyle = {\n\t\tcursor: \"pointer\" as const,\n\t\ttransformOrigin: \"0px 0px\",\n\t\tfilter: showGlow && isHovered ? `drop-shadow(0 0 12px ${color})` : \"none\",\n\t};\n\n\tif (enterDone) {\n\t\treturn (\n\t\t\t<motion.g\n\t\t\t\tanimate={{ scale: hoverScale, opacity: layerOpacity }}\n\t\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\tstyle={groupStyle}\n\t\t\t\ttransition={{\n\t\t\t\t\tscale: { type: \"spring\", stiffness: 400, damping: 25 },\n\t\t\t\t\topacity: { duration: 0.15 },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<path d={bgPath} fill={ringCssVars.ringBackground} />\n\t\t\t\t{progressPath ? <path d={progressPath} fill={color} /> : null}\n\t\t\t</motion.g>\n\t\t);\n\t}\n\n\tif (!expandComplete) {\n\t\treturn (\n\t\t\t<motion.g\n\t\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\tstyle={{\n\t\t\t\t\t...groupStyle,\n\t\t\t\t\tscale: enterScale,\n\t\t\t\t\topacity: layerOpacity,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<path d={bgPath} fill={ringCssVars.ringBackground} />\n\t\t\t</motion.g>\n\t\t);\n\t}\n\n\treturn (\n\t\t<motion.g\n\t\t\tanimate={{ scale: hoverScale, opacity: layerOpacity }}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\tstyle={groupStyle}\n\t\t\ttransition={{\n\t\t\t\tscale: { type: \"spring\", stiffness: 400, damping: 25 },\n\t\t\t\topacity: { duration: 0.15 },\n\t\t\t}}\n\t\t>\n\t\t\t<path d={bgPath} fill={ringCssVars.ringBackground} />\n\t\t\t<RingProgressPath\n\t\t\t\tanimatedProgressPath={animatedProgressPath}\n\t\t\t\tcolor={color}\n\t\t\t\tprogressComplete={progressComplete}\n\t\t\t\tprogressPath={progressPath}\n\t\t\t/>\n\t\t</motion.g>\n\t);\n});\n\nRing.displayName = \"Ring\";\n\nexport default Ring;\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tchartCenterContainerClassName,\n\tchartCenterLabelClassName,\n\tchartCenterValueClassName,\n} from \"./chart-center-typography\";\nimport {\n\tChartStatFlow,\n\ttype ChartStatFlowFormat,\n\tdefaultChartStatFlowFormat,\n} from \"./chart-stat-flow\";\nimport { useRingHover, useRingStable } from \"./ring-context\";\n\nexport interface RingCenterProps {\n\t/** Label shown below the value. Default: \"Total\" when not hovering */\n\tdefaultLabel?: string;\n\t/** Format options for NumberFlow. Default: standard notation */\n\tformatOptions?: ChartStatFlowFormat;\n\t/** Custom render function for complete control over center content */\n\tchildren?: (props: {\n\t\tvalue: number;\n\t\tlabel: string;\n\t\tisHovered: boolean;\n\t\tdata: { label: string; value: number; maxValue: number; color?: string };\n\t}) => ReactNode;\n\t/** Additional class name for the container */\n\tclassName?: string;\n\t/** Class name for the value text. Scales with center size via container queries. */\n\tvalueClassName?: string;\n\t/** Class name for the label text. Scales with center size via container queries. */\n\tlabelClassName?: string;\n\t/** Prefix to show before the number (e.g., \"$\") */\n\tprefix?: string;\n\t/** Suffix to show after the number (e.g., \"%\") */\n\tsuffix?: string;\n}\n\n/**\n * RingCenter displays content in the center of the ring chart.\n *\n * This component renders as pure HTML (not inside SVG foreignObject) to avoid\n * Safari's WebKit bug #23113 where HTML content with CSS transforms/opacity\n * inside foreignObject renders at incorrect positions.\n *\n * The parent RingChart uses CSS Grid stacking to overlay this HTML content\n * on top of the SVG rings.\n */\nexport function RingCenter({\n\tdefaultLabel = \"Total\",\n\tformatOptions = defaultChartStatFlowFormat,\n\tchildren,\n\tclassName = \"\",\n\tvalueClassName = chartCenterValueClassName,\n\tlabelClassName = chartCenterLabelClassName,\n\tprefix,\n\tsuffix,\n}: RingCenterProps) {\n\tconst { data, totalValue, baseInnerRadius } = useRingStable();\n\tconst { hoveredIndex } = useRingHover();\n\n\tconst hoveredData = hoveredIndex === null ? null : data[hoveredIndex];\n\tconst displayValue = hoveredData ? hoveredData.value : totalValue;\n\tconst displayLabel = hoveredData ? hoveredData.label : defaultLabel;\n\n\t// Calculate center area size based on scaled baseInnerRadius\n\t// Leave some padding so text doesn't touch the inner ring\n\tconst centerSize = baseInnerRadius * 2 - 16;\n\n\t// If custom render function is provided, use it\n\tif (children && hoveredData) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\tchartCenterContainerClassName,\n\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{ width: centerSize, height: centerSize }}\n\t\t\t>\n\t\t\t\t{children({\n\t\t\t\t\tvalue: displayValue,\n\t\t\t\t\tlabel: displayLabel,\n\t\t\t\t\tisHovered: hoveredIndex !== null,\n\t\t\t\t\tdata: hoveredData,\n\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Default center content with NumberFlow animations\n\t// Now renders as pure HTML, avoiding Safari's foreignObject bugs\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tchartCenterContainerClassName,\n\t\t\t\t\"flex flex-col items-center justify-center text-center\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={{ width: centerSize, height: centerSize }}\n\t\t>\n\t\t\t<ChartStatFlow\n\t\t\t\tformatOptions={formatOptions}\n\t\t\t\tlabel={displayLabel}\n\t\t\t\tlabelClassName={labelClassName}\n\t\t\t\tprefix={prefix}\n\t\t\t\tsuffix={suffix}\n\t\t\t\tvalue={displayValue}\n\t\t\t\tvalueClassName={valueClassName}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nRingCenter.displayName = \"RingCenter\";\n\nexport default RingCenter;\n"]}
1
+ {"version":3,"sources":["../src/lib/utils.ts","../src/components/charts/fade-edges.ts","../src/components/charts/area-gradient-defs.tsx","../src/components/charts/y-axis-scales.ts","../src/components/charts/chart-context.tsx","../src/components/charts/line-loading-timing.ts","../src/components/charts/line-loading-pulse.tsx","../src/components/charts/loading-sweep.tsx","../src/components/charts/path-stroke-utils.ts","../src/components/charts/dash-tail-stroke.tsx","../src/components/charts/series-dash-tail-overlay.tsx","../src/components/charts/highlight-segment.tsx","../src/components/charts/chart-config-context.tsx","../src/components/charts/highlight-segment-bounds.ts","../src/components/charts/use-highlight-segment.ts","../src/components/charts/series-highlight-layer.tsx","../src/components/charts/chart-legend-hover.tsx","../src/components/charts/series-hover-dim.tsx","../src/components/charts/animation.ts","../src/components/charts/series-point-marker.tsx","../src/components/charts/series-markers.tsx","../src/components/charts/area.tsx","../src/components/shimmering-text.tsx","../src/components/charts/chart-loading-label.tsx","../src/components/charts/chart-phase.ts","../src/components/charts/pattern-area.tsx","../src/components/charts/chart-child-passthrough.ts","../src/components/charts/chart-defs.ts","../src/components/charts/chart-formatters.ts","../src/components/charts/chart-reveal-clip.tsx","../src/components/charts/decimate-time-series.ts","../src/components/charts/filter-data-by-x-domain.ts","../src/components/charts/generate-chart-skeleton-data.ts","../src/components/charts/projection-utils.ts","../src/components/charts/projection-config.ts","../src/components/charts/reference-area-config.ts","../src/components/charts/reference-area-registration-context.tsx","../src/components/charts/series-bar-layout.ts","../src/components/charts/static-chart-preview-context.tsx","../src/components/charts/y-domain-utils.ts","../src/components/charts/use-animated-y-domains.ts","../src/components/charts/use-scheduled-tooltip.ts","../src/components/charts/use-chart-interaction.ts","../src/components/charts/use-chart-phase-orchestrator.ts","../src/components/charts/time-series-chart-shell.tsx","../src/components/charts/area-chart.tsx","../src/components/charts/series-path-utils.ts","../src/components/charts/use-animated-series-path.ts","../src/components/charts/line.tsx","../src/components/charts/line-chart.tsx","../src/components/charts/bar-squares-layout.ts","../src/components/charts/bar-chart.tsx","../src/components/charts/bar-depth-geometry.ts","../src/components/charts/motion-utils.ts","../src/components/charts/bar.tsx","../src/components/charts/series-bar.tsx","../src/components/charts/composed-chart.tsx","../src/components/charts/live-line-chart.tsx","../src/components/charts/live-line.tsx","../src/components/charts/use-enter-complete.ts","../src/components/charts/use-mount-progress.ts","../src/components/charts/funnel-chart.tsx","../src/components/charts/heatmap/heatmap-utils.ts","../src/components/charts/heatmap/heatmap-animation.ts","../src/components/charts/chart-scale.ts","../src/components/charts/heatmap/heatmap-colors.ts","../src/components/charts/heatmap/heatmap-context.tsx","../src/components/charts/heatmap/heatmap-cells.tsx","../src/components/charts/visx-pattern.tsx","../src/components/charts/pattern-preset.tsx","../src/components/charts/heatmap/heatmap-pattern-defs.tsx","../src/components/charts/heatmap/heatmap-separator.tsx","../src/components/charts/heatmap/heatmap-resolve-separator.ts","../src/components/charts/heatmap/heatmap-chart.tsx","../src/components/charts/heatmap/heatmap-x-axis.tsx","../src/components/charts/heatmap/heatmap-y-axis.tsx","../src/components/charts/heatmap/heatmap-legend-gradient.tsx","../src/components/charts/heatmap/heatmap-legend-swatch.tsx","../src/components/charts/heatmap/heatmap-legend.tsx","../src/components/charts/tooltip/tooltip-box.tsx","../src/components/charts/heatmap/use-delayed-tooltip-data.ts","../src/components/charts/heatmap/heatmap-tooltip.tsx","../src/components/charts/x-axis.tsx","../src/components/charts/reference-area-geometry.ts","../src/components/charts/y-axis-ticks.ts","../src/components/charts/y-axis.tsx","../src/components/charts/use-grid-shimmer.ts","../src/components/charts/grid.tsx","../src/components/charts/tooltip/date-ticker.tsx","../src/components/charts/tooltip/tooltip-content.tsx","../src/components/charts/tooltip/tooltip-dot.tsx","../src/components/charts/indicator-fade.ts","../src/components/charts/tooltip/tooltip-indicator.tsx","../src/components/charts/tooltip/chart-tooltip.tsx","../src/components/charts/chart-stat-flow.tsx","../src/components/charts/chart-center-typography.ts","../src/components/charts/gauge-label-layout.tsx","../src/components/charts/notch-gauge-shared.ts","../src/components/charts/pie-context.tsx","../src/components/charts/pie-center.tsx","../src/components/charts/pie-center-shell.tsx","../src/components/charts/gauge.tsx","../src/components/charts/ring-context.tsx","../src/components/charts/ring-chart.tsx","../src/components/charts/ring.tsx","../src/components/charts/ring-center.tsx","../src/components/ui/card.tsx","../src/data/revenue-series.ts","../src/components/stat-card-chart.tsx","../src/components/stat-card-hover-bridge.tsx","../src/components/ui/badge.tsx","../src/components/trend-badge.tsx","../src/components/stat-card-area.tsx","../src/data/sessions-series.ts","../src/components/stat-card-line.tsx","../src/lib/chart-series.ts"],"names":["twMerge","clsx","jsxs","jsx","Fragment","scaleLinear","createContext","useMemo","useContext","useMotionValue","useTransform","useEffect","animate","useId","motion","useRef","useCallback","useReducedMotion","useState","AreaClosed","LinePath","memo","useSpring","StaticSeriesPointMarker","curve","curveMonotoneX","isValidElement","Children","cloneElement","getChildComponentName","scale","event","localPoint","TimeSeriesChartCore","bisector","extent","scaleTime","ParentSize","d3Line","curveNatural","DEFAULT_MARGIN","ChartInner","count","step","columnHeight","positions","ChartCore","scaleBand","max","BarInner","valueY","LiveLineChartCore","startTransition","HeatmapMotionCell","HeatmapCells","HeatmapRect","Group","VisxPatternLines","VisxPatternCircles","HeatmapPatternDefs","HeatmapSeparator","createPortal","useLayoutEffect","HeatmapXAxis","HeatmapYAxis","HEATMAP_INACTIVE_TRANSITION","HeatmapLegendGradient","HeatmapLegendSwatch","HEATMAP_INACTIVE_OPACITY","HeatmapLegend","HeatmapTooltip","formatLabel","XAxisInner","YAxisInner","GridRows","GridColumns","DateTickerCompact","DateTickerInner","isRing","ChartTooltipInner","NumberFlow","d3Pie","arcGenerator","RingChartCore","Ring","cva","Slot","CentralIcon","LinearGradient","curveCardinal","curveBasis"],"mappings":"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","file":"charts.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","export type FadeEdges = boolean | \"left\" | \"right\";\n\nexport interface FadeSides {\n\t/** Whether the left edge should fade out. */\n\tleft: boolean;\n\t/** Whether the right edge should fade out. */\n\tright: boolean;\n\t/** True if either side fades — use to gate gradient/mask defs. */\n\tany: boolean;\n}\n\nexport function resolveFadeSides(fade: FadeEdges): FadeSides {\n\tif (fade === false) {\n\t\treturn { left: false, right: false, any: false };\n\t}\n\tif (fade === \"left\") {\n\t\treturn { left: true, right: false, any: true };\n\t}\n\tif (fade === \"right\") {\n\t\treturn { left: false, right: true, any: true };\n\t}\n\treturn { left: true, right: true, any: true };\n}\n\nexport interface FadeGradientStop {\n\toffset: string;\n\topacity: number;\n}\n\n/**\n * Stops for a horizontal fade gradient with opacity 0 at the faded side(s)\n * and opacity 1 in the middle. Matches the historic 0/15/85/100 pattern.\n */\nexport function fadeGradientStops(sides: FadeSides): FadeGradientStop[] {\n\treturn [\n\t\t{ offset: \"0%\", opacity: sides.left ? 0 : 1 },\n\t\t{ offset: \"15%\", opacity: 1 },\n\t\t{ offset: \"85%\", opacity: 1 },\n\t\t{ offset: \"100%\", opacity: sides.right ? 0 : 1 },\n\t];\n}\n\n/** Horizontal fade gradient pinned to the chart viewport (not the series path bounds). */\nexport function viewportFadeGradientAttrs(innerWidth: number) {\n\treturn {\n\t\tgradientUnits: \"userSpaceOnUse\" as const,\n\t\tx1: 0,\n\t\tx2: innerWidth,\n\t\ty1: 0,\n\t\ty2: 0,\n\t};\n}\n","import {\n\ttype FadeEdges,\n\tfadeGradientStops,\n\tresolveFadeSides,\n\tviewportFadeGradientAttrs,\n} from \"./fade-edges\";\n\ninterface AreaGradientDefsProps {\n\tgradientId: string;\n\tstrokeGradientId: string;\n\tedgeMaskId: string;\n\tedgeGradientId: string;\n\tfill: string;\n\tfillOpacity: number;\n\tgradientToOpacity: number;\n\t/** 0–1: where the bottom stop sits (1 = full-height gradient). */\n\tgradientSpan?: number;\n\tresolvedStroke: string;\n\tisPatternFill: boolean;\n\tfadeEdges: FadeEdges;\n\tinnerWidth: number;\n\tinnerHeight: number;\n}\n\nexport function AreaGradientDefs({\n\tgradientId,\n\tstrokeGradientId,\n\tedgeMaskId,\n\tedgeGradientId,\n\tfill,\n\tfillOpacity,\n\tgradientToOpacity,\n\tgradientSpan = 1,\n\tresolvedStroke,\n\tisPatternFill,\n\tfadeEdges,\n\tinnerWidth,\n\tinnerHeight,\n}: AreaGradientDefsProps) {\n\tconst sides = resolveFadeSides(fadeEdges);\n\t// Stroke gradient mirrors the area's edge fade so the line doesn't pop in\n\t// past the faded fill. Skip emitting it when neither edge fades — the line\n\t// can then paint a solid stroke instead of an unnecessary url(#...) ref.\n\tconst strokeStops = sides.any ? fadeGradientStops(sides) : null;\n\tconst showEdgeMask = sides.any && !isPatternFill;\n\tconst edgeStops = showEdgeMask ? fadeGradientStops(sides) : null;\n\tconst span = Math.min(1, Math.max(0.01, gradientSpan));\n\tconst midOffset = `${span * 100}%`;\n\n\treturn (\n\t\t<defs>\n\t\t\t{isPatternFill ? null : (\n\t\t\t\t<linearGradient id={gradientId} x1=\"0%\" x2=\"0%\" y1=\"0%\" y2=\"100%\">\n\t\t\t\t\t<stop\n\t\t\t\t\t\toffset=\"0%\"\n\t\t\t\t\t\tstyle={{ stopColor: fill, stopOpacity: fillOpacity }}\n\t\t\t\t\t/>\n\t\t\t\t\t<stop\n\t\t\t\t\t\toffset={midOffset}\n\t\t\t\t\t\tstyle={{ stopColor: fill, stopOpacity: gradientToOpacity }}\n\t\t\t\t\t/>\n\t\t\t\t\t{span < 1 ? (\n\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\toffset=\"100%\"\n\t\t\t\t\t\t\tstyle={{ stopColor: fill, stopOpacity: gradientToOpacity }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\n\t\t\t\t</linearGradient>\n\t\t\t)}\n\n\t\t\t{strokeStops ? (\n\t\t\t\t<linearGradient\n\t\t\t\t\tid={strokeGradientId}\n\t\t\t\t\t{...viewportFadeGradientAttrs(innerWidth)}\n\t\t\t\t>\n\t\t\t\t\t{strokeStops.map((stop) => (\n\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\tkey={stop.offset}\n\t\t\t\t\t\t\toffset={stop.offset}\n\t\t\t\t\t\t\tstyle={{ stopColor: resolvedStroke, stopOpacity: stop.opacity }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</linearGradient>\n\t\t\t) : null}\n\n\t\t\t{edgeStops ? (\n\t\t\t\t<>\n\t\t\t\t\t<linearGradient\n\t\t\t\t\t\tid={edgeGradientId}\n\t\t\t\t\t\t{...viewportFadeGradientAttrs(innerWidth)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{edgeStops.map((stop) => (\n\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\tkey={stop.offset}\n\t\t\t\t\t\t\t\toffset={stop.offset}\n\t\t\t\t\t\t\t\tstyle={{ stopColor: \"white\", stopOpacity: stop.opacity }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</linearGradient>\n\t\t\t\t\t<mask id={edgeMaskId}>\n\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\tfill={`url(#${edgeGradientId})`}\n\t\t\t\t\t\t\theight={innerHeight}\n\t\t\t\t\t\t\twidth={innerWidth}\n\t\t\t\t\t\t\tx=\"0\"\n\t\t\t\t\t\t\ty=\"0\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</mask>\n\t\t\t\t</>\n\t\t\t) : null}\n\t\t</defs>\n\t);\n}\n","import { scaleLinear } from \"@visx/scale\";\nimport type { LineConfig } from \"./chart-context\";\n\n/** Default axis id when `yAxisId` is omitted (Recharts-style `0` / primary left axis). */\nexport const DEFAULT_Y_AXIS_ID = \"left\";\n\nexport type YAxisOrientation = \"left\" | \"right\";\n\nexport function normalizeYAxisId(id?: string | number): string {\n\tif (id == null || id === \"\") {\n\t\treturn DEFAULT_Y_AXIS_ID;\n\t}\n\treturn String(id);\n}\n\nexport function groupLinesByYAxisId(\n\tlines: LineConfig[],\n): Map<string, LineConfig[]> {\n\tconst groups = new Map<string, LineConfig[]>();\n\tfor (const line of lines) {\n\t\tconst axisId = normalizeYAxisId(line.yAxisId);\n\t\tconst bucket = groups.get(axisId) ?? [];\n\t\tbucket.push(line);\n\t\tgroups.set(axisId, bucket);\n\t}\n\treturn groups;\n}\n\ntype YScale = ReturnType<typeof scaleLinear<number>>;\n\nexport function getPrimaryYScale(\n\tyScales: Record<string, YScale>,\n\tfallback: YScale,\n): YScale {\n\tconst primary = yScales[DEFAULT_Y_AXIS_ID];\n\tif (primary) {\n\t\treturn primary;\n\t}\n\tconst first = Object.values(yScales)[0];\n\treturn first ?? fallback;\n}\n\nexport function buildYScalesForLines({\n\tlines,\n\tinnerHeight,\n\tresolveDomain,\n}: {\n\tlines: LineConfig[];\n\t/** Passed by callers; domain is resolved via `resolveDomain`. */\n\tdata?: Record<string, unknown>[];\n\tinnerHeight: number;\n\tresolveDomain: (dataKeys: string[]) => [number, number];\n}): Record<string, YScale> {\n\tconst groups = groupLinesByYAxisId(lines);\n\tconst scales: Record<string, YScale> = {};\n\n\tfor (const [axisId, axisLines] of groups) {\n\t\tconst dataKeys = axisLines.map((line) => line.dataKey);\n\t\tconst domain = resolveDomain(dataKeys);\n\t\tscales[axisId] = scaleLinear({\n\t\t\trange: [innerHeight, 0],\n\t\t\tdomain,\n\t\t\tnice: true,\n\t\t});\n\t}\n\n\tif (!scales[DEFAULT_Y_AXIS_ID]) {\n\t\tscales[DEFAULT_Y_AXIS_ID] = scaleLinear({\n\t\t\trange: [innerHeight, 0],\n\t\t\tdomain: [0, 100],\n\t\t\tnice: true,\n\t\t});\n\t}\n\n\treturn scales;\n}\n\n/** Build y-scales from pre-computed (already nice'd) domain endpoints. */\nexport function buildYScalesFromDomains({\n\tlines,\n\tinnerHeight,\n\tdomainsByAxis,\n}: {\n\tlines: LineConfig[];\n\tinnerHeight: number;\n\tdomainsByAxis: Record<string, [number, number]>;\n}): Record<string, YScale> {\n\tconst groups = groupLinesByYAxisId(lines);\n\tconst scales: Record<string, YScale> = {};\n\n\tfor (const [axisId] of groups) {\n\t\tconst domain =\n\t\t\tdomainsByAxis[axisId] ??\n\t\t\tdomainsByAxis[DEFAULT_Y_AXIS_ID] ??\n\t\t\t([0, 100] as [number, number]);\n\t\tscales[axisId] = scaleLinear({\n\t\t\trange: [innerHeight, 0],\n\t\t\tdomain,\n\t\t});\n\t}\n\n\tif (!scales[DEFAULT_Y_AXIS_ID]) {\n\t\tscales[DEFAULT_Y_AXIS_ID] = scaleLinear({\n\t\t\trange: [innerHeight, 0],\n\t\t\tdomain: domainsByAxis[DEFAULT_Y_AXIS_ID] ?? [0, 100],\n\t\t});\n\t}\n\n\treturn scales;\n}\n\n/** Single-axis charts (bar, scatter, candlestick, live line). */\nexport function wrapSingleYScale(yScale: YScale): Record<string, YScale> {\n\treturn { [DEFAULT_Y_AXIS_ID]: yScale };\n}\n","\"use client\";\n\nimport type { scaleBand, scaleLinear, scaleTime } from \"@visx/scale\";\n\ntype ScaleLinear<Output> = ReturnType<typeof scaleLinear<Output>>;\ntype ScaleTime<Output> = ReturnType<typeof scaleTime<Output>>;\ntype ScaleBand<Domain extends { toString(): string }> = ReturnType<\n\ttypeof scaleBand<Domain>\n>;\n\nimport type { Transition } from \"motion/react\";\nimport {\n\tcreateContext,\n\ttype Dispatch,\n\ttype ReactNode,\n\ttype RefObject,\n\ttype SetStateAction,\n\tuseContext,\n\tuseMemo,\n} from \"react\";\nimport type { ChartPhase, ChartStatus } from \"./chart-phase\";\nimport type { ReferenceAreaConfig } from \"./reference-area-config\";\nimport type { ChartSelection } from \"./use-chart-interaction\";\nimport { DEFAULT_Y_AXIS_ID } from \"./y-axis-scales\";\nimport type { YDomain } from \"./y-domain-utils\";\n\n// CSS variable references for theming\nexport const chartCssVars = {\n\tbackground: \"var(--chart-background)\",\n\tforeground: \"var(--chart-foreground)\",\n\tforegroundMuted: \"var(--chart-foreground-muted)\",\n\tlabel: \"var(--chart-label)\",\n\tlinePrimary: \"var(--chart-line-primary)\",\n\tlineSecondary: \"var(--chart-line-secondary)\",\n\tcrosshair: \"var(--chart-crosshair)\",\n\tgrid: \"var(--chart-grid)\",\n\tindicatorColor: \"var(--chart-indicator-color)\",\n\tindicatorSecondaryColor: \"var(--chart-indicator-secondary-color)\",\n\tmarkerBackground: \"var(--chart-marker-background)\",\n\tmarkerBorder: \"var(--chart-marker-border)\",\n\tmarkerForeground: \"var(--chart-marker-foreground)\",\n\tbadgeBackground: \"var(--chart-marker-badge-background)\",\n\tbadgeForeground: \"var(--chart-marker-badge-foreground)\",\n\tsegmentBackground: \"var(--chart-segment-background)\",\n\tsegmentLine: \"var(--chart-segment-line)\",\n\tbrushBorder: \"var(--chart-brush-border)\",\n\ttooltipBackground: \"var(--chart-tooltip-background)\",\n};\n\n/** Default scatter series colors from the chart palette (`--chart-1` … `--chart-5`). */\nexport const defaultScatterColors = [\n\t\"var(--chart-1)\",\n\t\"var(--chart-2)\",\n\t\"var(--chart-3)\",\n\t\"var(--chart-4)\",\n\t\"var(--chart-5)\",\n] as const;\n\nexport interface Margin {\n\ttop: number;\n\tright: number;\n\tbottom: number;\n\tleft: number;\n}\n\nexport interface TooltipData {\n\t/** The data point being hovered */\n\tpoint: Record<string, unknown>;\n\t/** Index in the data array */\n\tindex: number;\n\t/** X position in pixels (relative to chart area) */\n\tx: number;\n\t/** Y positions for each line, keyed by dataKey */\n\tyPositions: Record<string, number>;\n\t/** X positions for each series (for grouped bars), keyed by dataKey */\n\txPositions?: Record<string, number>;\n}\n\nexport interface LineConfig {\n\tdataKey: string;\n\tstroke: string;\n\tstrokeWidth: number;\n\t/** Scale group id (Recharts `yAxisId`). Default: `\"left\"`. */\n\tyAxisId?: string | number;\n}\n\n/**\n * Hover/selection state — every field here changes on mouse movement.\n * Lives in its own context so cold consumers (Grid, YAxis, PatternArea, …)\n * can subscribe to the stable slice and skip re-rendering on every hover.\n */\nexport interface ChartHoverContextValue {\n\t// Tooltip state\n\ttooltipData: TooltipData | null;\n\tsetTooltipData: Dispatch<SetStateAction<TooltipData | null>>;\n\n\t// Selection state (optional - only present when useChartInteraction is used)\n\t/** Current drag/pinch selection range */\n\tselection?: ChartSelection | null;\n\t/** Clear the current selection */\n\tclearSelection?: () => void;\n\n\t// Bar chart hover (optional - only present in BarChart)\n\t/** Index of currently hovered bar */\n\thoveredBarIndex?: number | null;\n\t/** Setter for hovered bar index */\n\tsetHoveredBarIndex?: (index: number | null) => void;\n\n\t// Candlestick hover (optional - only present in CandlestickChart)\n\t/** Index of currently hovered candle */\n\thoveredCandleIndex?: number | null;\n\t/** Setter for hovered candle index */\n\tsetHoveredCandleIndex?: (index: number | null) => void;\n}\n\nexport interface ChartContextValue extends ChartHoverContextValue {\n\t// Data\n\tdata: Record<string, unknown>[];\n\t/** Decimated subset for SVG path rendering; equals `data` when no decimation is needed. */\n\trenderData: Record<string, unknown>[];\n\n\t// Scales\n\txScale: ScaleTime<number>;\n\t/** Primary (left) y-scale — alias for `yScales[DEFAULT_Y_AXIS_ID]`. */\n\tyScale: ScaleLinear<number>;\n\t/** Per-axis y-scales keyed by `yAxisId`. */\n\tyScales: Record<string, ScaleLinear<number>>;\n\n\t// Dimensions\n\twidth: number;\n\theight: number;\n\tinnerWidth: number;\n\tinnerHeight: number;\n\tmargin: Margin;\n\n\t// Column width for spacing calculations\n\tcolumnWidth: number;\n\n\t// Container ref for portals\n\tcontainerRef: RefObject<HTMLDivElement | null>;\n\n\t// Line configurations (extracted from children)\n\tlines: LineConfig[];\n\n\t/** {@link ReferenceArea} bands — drives y-axis label colors in range. */\n\treferenceAreas: ReferenceAreaConfig[];\n\n\t// Loading / lifecycle (LineChart status transitions)\n\tchartPhase: ChartPhase;\n\tchartStatus: ChartStatus;\n\t/** Centered label while `chartPhase` shows loading chrome. */\n\tloadingLabel?: string;\n\t/** Y-domain tween duration when transitioning loading ↔ ready (ms). */\n\tyDomainTweenDuration: number;\n\t/** Nice’d y-domains per axis from skeleton data (placeholder). */\n\tyDomainSkeletonByAxis: Record<string, YDomain>;\n\t/** Nice’d y-domains per axis from the current target data. */\n\tyDomainTargetByAxis: Record<string, YDomain>;\n\n\t// Animation state\n\tisLoaded: boolean;\n\tanimationDuration: number;\n\t/** CSS easing for clip-reveal / line draw (cartesian charts). */\n\tanimationEasing?: string;\n\t/** Motion enter transition (spring or tween) — drives clip reveal when spring. */\n\tenterTransition?: Transition;\n\t/** Increments when enter animation should replay. */\n\trevealEpoch?: number;\n\t/** Fired when a one-shot loading pulse (exit / enter) completes. */\n\tnotifyLoadingPulseComplete?: () => void;\n\n\t// X accessor - how to get the x value from data points\n\txAccessor: (d: Record<string, unknown>) => Date;\n\n\t// Pre-computed date labels for ticker animation\n\tdateLabels: string[];\n\n\t/** Active brush zoom range — when set, axis ticks align to visible data rows. */\n\txDomain?: [Date, Date];\n\t/** Full dataset length when brush zoom is enabled (for zoom vs full-range detection). */\n\txDomainSlotCount?: number;\n\n\t// Bar chart specific (optional - only present in BarChart)\n\t/** Band scale for categorical x-axis (bar charts) */\n\tbarScale?: ScaleBand<string>;\n\t/** Width of each bar band */\n\tbandWidth?: number;\n\t/** X accessor for bar charts (returns string instead of Date) */\n\tbarXAccessor?: (d: Record<string, unknown>) => string;\n\t/** Bar chart orientation */\n\torientation?: \"vertical\" | \"horizontal\";\n\t/** Whether bars are stacked */\n\tstacked?: boolean;\n\t/** Stack offsets: Map of data index -> Map of dataKey -> cumulative offset */\n\tstackOffsets?: Map<number, Map<string, number>>;\n\t/** Squares variant — snap tooltip to top square and size ring dots. */\n\tsquareSnap?: { squareGap: number; groupGap?: number; fit?: boolean };\n\n\t// ComposedChart + SeriesBar (optional)\n\t/** `SeriesBar` dataKeys in tree order, for grouped columns at each x */\n\tcomposedBarDataKeys?: string[];\n\t/** Target bar width in px (Recharts `barSize` style). */\n\tcomposedBarSize?: number;\n\t/** Max bar width in px (Recharts `maxBarSize`). */\n\tcomposedMaxBarSize?: number;\n\t/** Gap between grouped `SeriesBar` columns in px. */\n\tcomposedBarGap?: number;\n\t/** When true, `SeriesBar` segments stack in child order at each x. */\n\tcomposedStacked?: boolean;\n\t/** Per-row cumulative offsets for stacked `SeriesBar` (data index → dataKey → offset). */\n\tcomposedStackOffsets?: Map<number, Map<string, number>>;\n\t/** Vertical gap in px between stacked `SeriesBar` segments. Default: 0 */\n\tcomposedStackGap?: number;\n}\n\n/**\n * Stable slice of the chart context — everything that doesn't change on hover\n * (data, scales, dimensions, animation state, layout config). Consumers that\n * subscribe via `useChartStable()` skip re-renders on every mouse move.\n */\nexport type ChartStableContextValue = Omit<\n\tChartContextValue,\n\tkeyof ChartHoverContextValue\n>;\n\nconst ChartStableContext = createContext<ChartStableContextValue | null>(null);\nconst ChartHoverContext = createContext<ChartHoverContextValue | null>(null);\n\n/**\n * Splits the merged `value` into a stable slice and a volatile hover slice,\n * publishing each to its own context. Each slice is memoized on its own\n * field identities, so changing `tooltipData` does not bust the stable\n * slice — consumers of `useChartStable()` skip re-renders on hover.\n */\nexport function ChartProvider({\n\tchildren,\n\tvalue,\n}: {\n\tchildren: ReactNode;\n\tvalue: ChartContextValue;\n}) {\n\tconst stable = useMemo<ChartStableContextValue>(\n\t\t() => ({\n\t\t\tdata: value.data,\n\t\t\trenderData: value.renderData,\n\t\t\txScale: value.xScale,\n\t\t\tyScale: value.yScale,\n\t\t\tyScales: value.yScales,\n\t\t\twidth: value.width,\n\t\t\theight: value.height,\n\t\t\tinnerWidth: value.innerWidth,\n\t\t\tinnerHeight: value.innerHeight,\n\t\t\tmargin: value.margin,\n\t\t\tcolumnWidth: value.columnWidth,\n\t\t\tcontainerRef: value.containerRef,\n\t\t\tlines: value.lines,\n\t\t\treferenceAreas: value.referenceAreas,\n\t\t\tchartPhase: value.chartPhase,\n\t\t\tchartStatus: value.chartStatus,\n\t\t\tloadingLabel: value.loadingLabel,\n\t\t\tyDomainTweenDuration: value.yDomainTweenDuration,\n\t\t\tyDomainSkeletonByAxis: value.yDomainSkeletonByAxis,\n\t\t\tyDomainTargetByAxis: value.yDomainTargetByAxis,\n\t\t\tisLoaded: value.isLoaded,\n\t\t\tanimationDuration: value.animationDuration,\n\t\t\tanimationEasing: value.animationEasing,\n\t\t\tenterTransition: value.enterTransition,\n\t\t\trevealEpoch: value.revealEpoch,\n\t\t\tnotifyLoadingPulseComplete: value.notifyLoadingPulseComplete,\n\t\t\txAccessor: value.xAccessor,\n\t\t\tdateLabels: value.dateLabels,\n\t\t\txDomain: value.xDomain,\n\t\t\txDomainSlotCount: value.xDomainSlotCount,\n\t\t\tbarScale: value.barScale,\n\t\t\tbandWidth: value.bandWidth,\n\t\t\tbarXAccessor: value.barXAccessor,\n\t\t\torientation: value.orientation,\n\t\t\tstacked: value.stacked,\n\t\t\tstackOffsets: value.stackOffsets,\n\t\t\tcomposedBarDataKeys: value.composedBarDataKeys,\n\t\t\tcomposedBarSize: value.composedBarSize,\n\t\t\tcomposedMaxBarSize: value.composedMaxBarSize,\n\t\t\tcomposedBarGap: value.composedBarGap,\n\t\t\tcomposedStacked: value.composedStacked,\n\t\t\tcomposedStackOffsets: value.composedStackOffsets,\n\t\t\tcomposedStackGap: value.composedStackGap,\n\t\t}),\n\t\t[\n\t\t\tvalue.data,\n\t\t\tvalue.renderData,\n\t\t\tvalue.xScale,\n\t\t\tvalue.yScale,\n\t\t\tvalue.yScales,\n\t\t\tvalue.width,\n\t\t\tvalue.height,\n\t\t\tvalue.innerWidth,\n\t\t\tvalue.innerHeight,\n\t\t\tvalue.margin,\n\t\t\tvalue.columnWidth,\n\t\t\tvalue.containerRef,\n\t\t\tvalue.lines,\n\t\t\tvalue.referenceAreas,\n\t\t\tvalue.chartPhase,\n\t\t\tvalue.chartStatus,\n\t\t\tvalue.loadingLabel,\n\t\t\tvalue.yDomainTweenDuration,\n\t\t\tvalue.yDomainSkeletonByAxis,\n\t\t\tvalue.yDomainTargetByAxis,\n\t\t\tvalue.isLoaded,\n\t\t\tvalue.animationDuration,\n\t\t\tvalue.animationEasing,\n\t\t\tvalue.enterTransition,\n\t\t\tvalue.revealEpoch,\n\t\t\tvalue.notifyLoadingPulseComplete,\n\t\t\tvalue.xAccessor,\n\t\t\tvalue.dateLabels,\n\t\t\tvalue.xDomain,\n\t\t\tvalue.xDomainSlotCount,\n\t\t\tvalue.barScale,\n\t\t\tvalue.bandWidth,\n\t\t\tvalue.barXAccessor,\n\t\t\tvalue.orientation,\n\t\t\tvalue.stacked,\n\t\t\tvalue.stackOffsets,\n\t\t\tvalue.composedBarDataKeys,\n\t\t\tvalue.composedBarSize,\n\t\t\tvalue.composedMaxBarSize,\n\t\t\tvalue.composedBarGap,\n\t\t\tvalue.composedStacked,\n\t\t\tvalue.composedStackOffsets,\n\t\t\tvalue.composedStackGap,\n\t\t],\n\t);\n\n\tconst hover = useMemo<ChartHoverContextValue>(\n\t\t() => ({\n\t\t\ttooltipData: value.tooltipData,\n\t\t\tsetTooltipData: value.setTooltipData,\n\t\t\tselection: value.selection,\n\t\t\tclearSelection: value.clearSelection,\n\t\t\thoveredBarIndex: value.hoveredBarIndex,\n\t\t\tsetHoveredBarIndex: value.setHoveredBarIndex,\n\t\t\thoveredCandleIndex: value.hoveredCandleIndex,\n\t\t\tsetHoveredCandleIndex: value.setHoveredCandleIndex,\n\t\t}),\n\t\t[\n\t\t\tvalue.tooltipData,\n\t\t\tvalue.setTooltipData,\n\t\t\tvalue.selection,\n\t\t\tvalue.clearSelection,\n\t\t\tvalue.hoveredBarIndex,\n\t\t\tvalue.setHoveredBarIndex,\n\t\t\tvalue.hoveredCandleIndex,\n\t\t\tvalue.setHoveredCandleIndex,\n\t\t],\n\t);\n\n\treturn (\n\t\t<ChartStableContext.Provider value={stable}>\n\t\t\t<ChartHoverContext.Provider value={hover}>\n\t\t\t\t{children}\n\t\t\t</ChartHoverContext.Provider>\n\t\t</ChartStableContext.Provider>\n\t);\n}\n\n/**\n * Stable slice — data, scales, dimensions, animation state, layout config.\n * Subscribers skip re-renders on hover (the hover slice lives in a separate\n * context). Prefer this in cold consumers like axes, grid, pattern fills.\n */\nexport function useChartStable(): ChartStableContextValue {\n\tconst context = useContext(ChartStableContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"useChartStable must be used within a ChartProvider. \" +\n\t\t\t\t\"Make sure your component is wrapped in <LineChart>, <AreaChart>, <BarChart>, or <ComposedChart>.\",\n\t\t);\n\t}\n\treturn context;\n}\n\n/** Y-scale for a series axis (`yAxisId` on Line / Area / YAxis). */\nexport function useYScale(yAxisId?: string | number): ScaleLinear<number> {\n\tconst { yScales, yScale } = useChartStable();\n\tconst id =\n\t\tyAxisId == null || yAxisId === \"\" ? DEFAULT_Y_AXIS_ID : String(yAxisId);\n\treturn yScales[id] ?? yScale;\n}\n\n/**\n * Hover slice — tooltipData, selection, hovered bar / candle indices.\n * Subscribers re-render on every mouse move. Use only when the component\n * actually reads hover state.\n */\nexport function useChartHover(): ChartHoverContextValue {\n\tconst context = useContext(ChartHoverContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"useChartHover must be used within a ChartProvider. \" +\n\t\t\t\t\"Make sure your component is wrapped in <LineChart>, <AreaChart>, <BarChart>, or <ComposedChart>.\",\n\t\t);\n\t}\n\treturn context;\n}\n\n/**\n * Merged stable + hover context. Convenient for components that need both,\n * but re-renders on every hover (because hover changes). Prefer\n * `useChartStable()` or `useChartHover()` for hot consumers that only need\n * one slice.\n */\nexport function useChart(): ChartContextValue {\n\tconst stable = useChartStable();\n\tconst hover = useChartHover();\n\t// Identity changes on every hover (hover is the volatile slice) — that's\n\t// fine for consumers using this merged hook; they explicitly opted in to\n\t// re-rendering on hover.\n\treturn { ...stable, ...hover };\n}\n\nexport default ChartStableContext;\n","export const LINE_LOADING_PULSE_CYCLE_S = 2.2;\n\n/** Idle gap before the loading line pulse restarts (milliseconds). */\nexport const LINE_LOADING_LOOP_PAUSE_MS = 280;\n\n/** Loading label exit on loading → ready (seconds). */\nexport const LOADING_LABEL_EXIT_S = 0.45;\n\n/** Loading label drops this many pixels while exiting. */\nexport const LOADING_LABEL_EXIT_Y_PX = 30;\n\nexport const LINE_LOADING_PULSE_EASE = [0.85, 0, 0.15, 1] as const;\n","\"use client\";\n\nimport { animate, motion, useMotionValue, useTransform } from \"motion/react\";\nimport { useEffect, useId } from \"react\";\nimport { chartCssVars, useChartStable } from \"./chart-context\";\nimport type { ChartPhase } from \"./chart-phase\";\nimport {\n\tfadeGradientStops,\n\tresolveFadeSides,\n\tviewportFadeGradientAttrs,\n} from \"./fade-edges\";\nimport {\n\tLINE_LOADING_PULSE_CYCLE_S,\n\tLINE_LOADING_PULSE_EASE,\n} from \"./line-loading-timing\";\n\nconst CLIP_PADDING = 10;\n\nexport type LineLoadingPulseMode = \"loop\" | \"exit\" | \"enter\";\n\nexport function resolveLineLoadingPulseMode(\n\tphase: ChartPhase,\n): LineLoadingPulseMode | null {\n\tswitch (phase) {\n\t\tcase \"loading\":\n\t\t\treturn \"loop\";\n\t\tcase \"exiting\":\n\t\t\treturn \"exit\";\n\t\tcase \"revealingLoading\":\n\t\t\treturn \"enter\";\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nexport interface LineLoadingPulseStrokeProps {\n\tpathD: string;\n\tmode?: LineLoadingPulseMode;\n\t/** Bumps to restart loop cycles without remounting the stroke. */\n\tloopEpoch?: number;\n\tstroke?: string;\n\t/** Stroke opacity for the animated segment. Default: 0.5 */\n\tstrokeOpacity?: number;\n\tstrokeWidth?: number;\n\tonCycleComplete?: () => void;\n}\n\nfunction useGrowExitClip(\n\tinnerWidth: number,\n\tmode: LineLoadingPulseMode,\n\tloopEpoch: number,\n\tonComplete?: () => void,\n) {\n\tconst progress = useMotionValue(0);\n\tconst paddedFullWidth = innerWidth + CLIP_PADDING * 2;\n\tconst rightEdge = innerWidth + CLIP_PADDING;\n\n\tconst clipWidth = useTransform(progress, (p) => {\n\t\tif (p <= 0.5) {\n\t\t\treturn (p / 0.5) * paddedFullWidth;\n\t\t}\n\t\tconst shrink = (p - 0.5) / 0.5;\n\t\treturn (1 - shrink) * paddedFullWidth;\n\t});\n\n\tconst clipX = useTransform(progress, (p) => {\n\t\tif (p <= 0.5) {\n\t\t\treturn -CLIP_PADDING;\n\t\t}\n\t\tconst shrink = (p - 0.5) / 0.5;\n\t\treturn rightEdge - (1 - shrink) * paddedFullWidth;\n\t});\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: loopEpoch restarts pulse when orchestrator advances\n\tuseEffect(() => {\n\t\tif (innerWidth <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst halfCycleS = LINE_LOADING_PULSE_CYCLE_S / 2;\n\t\tlet cancelled = false;\n\t\tlet controls: ReturnType<typeof animate> | undefined;\n\n\t\tconst finish = () => {\n\t\t\tif (!cancelled) {\n\t\t\t\tonComplete?.();\n\t\t\t}\n\t\t};\n\n\t\tconst runShrink = (from: number) => {\n\t\t\tconst shrinkDuration = halfCycleS * ((1 - from) / 0.5);\n\t\t\tcontrols = animate(progress, 1, {\n\t\t\t\tduration: Math.max(shrinkDuration, 0.01),\n\t\t\t\tease: [...LINE_LOADING_PULSE_EASE],\n\t\t\t\tonComplete: finish,\n\t\t\t});\n\t\t};\n\n\t\tif (mode === \"loop\") {\n\t\t\tprogress.set(0);\n\t\t\tcontrols = animate(progress, 1, {\n\t\t\t\tduration: LINE_LOADING_PULSE_CYCLE_S,\n\t\t\t\tease: [...LINE_LOADING_PULSE_EASE],\n\t\t\t\tonComplete: finish,\n\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tcancelled = true;\n\t\t\t\tcontrols?.stop();\n\t\t\t};\n\t\t}\n\n\t\tif (mode === \"exit\") {\n\t\t\tconst current = progress.get();\n\n\t\t\tif (current < 0.5) {\n\t\t\t\tconst growDuration = halfCycleS * ((0.5 - current) / 0.5);\n\t\t\t\tcontrols = animate(progress, 0.5, {\n\t\t\t\t\tduration: Math.max(growDuration, 0.01),\n\t\t\t\t\tease: [...LINE_LOADING_PULSE_EASE],\n\t\t\t\t\tonComplete: () => {\n\t\t\t\t\t\tif (!cancelled) {\n\t\t\t\t\t\t\trunShrink(0.5);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\trunShrink(current);\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\tcancelled = true;\n\t\t\t\tcontrols?.stop();\n\t\t\t};\n\t\t}\n\n\t\tif (mode === \"enter\") {\n\t\t\tprogress.set(0);\n\t\t\tcontrols = animate(progress, 0.5, {\n\t\t\t\tduration: halfCycleS,\n\t\t\t\tease: [...LINE_LOADING_PULSE_EASE],\n\t\t\t\tonComplete: finish,\n\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tcancelled = true;\n\t\t\t\tcontrols?.stop();\n\t\t\t};\n\t\t}\n\t}, [innerWidth, loopEpoch, mode, onComplete, progress]);\n\n\treturn { clipX, clipWidth };\n}\n\nexport function LineLoadingPulseStroke({\n\tpathD,\n\tmode = \"loop\",\n\tloopEpoch = 0,\n\tstroke = chartCssVars.foreground,\n\tstrokeOpacity = 0.5,\n\tstrokeWidth = 2.5,\n\tonCycleComplete,\n}: LineLoadingPulseStrokeProps) {\n\tconst { innerWidth, innerHeight } = useChartStable();\n\tconst reactId = useId();\n\tconst clipPathId = `line-loading-clip-${reactId}`;\n\tconst gradientId = `line-loading-gradient-${reactId}`;\n\tconst fadeStops = fadeGradientStops(resolveFadeSides(true));\n\tconst clipHeight = innerHeight + CLIP_PADDING * 2;\n\tconst { clipX, clipWidth } = useGrowExitClip(\n\t\tinnerWidth,\n\t\tmode,\n\t\tloopEpoch,\n\t\tonCycleComplete,\n\t);\n\n\tif (innerWidth <= 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<defs>\n\t\t\t\t<clipPath id={clipPathId}>\n\t\t\t\t\t<motion.rect\n\t\t\t\t\t\theight={clipHeight}\n\t\t\t\t\t\tstyle={{ width: clipWidth, x: clipX }}\n\t\t\t\t\t\ty={-CLIP_PADDING}\n\t\t\t\t\t/>\n\t\t\t\t</clipPath>\n\t\t\t\t<linearGradient\n\t\t\t\t\tid={gradientId}\n\t\t\t\t\t{...viewportFadeGradientAttrs(innerWidth)}\n\t\t\t\t>\n\t\t\t\t\t{fadeStops.map((stop) => (\n\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\tkey={stop.offset}\n\t\t\t\t\t\t\toffset={stop.offset}\n\t\t\t\t\t\t\tstopColor={stroke}\n\t\t\t\t\t\t\tstopOpacity={stop.opacity}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</linearGradient>\n\t\t\t</defs>\n\t\t\t<path\n\t\t\t\tclipPath={`url(#${clipPathId})`}\n\t\t\t\td={pathD}\n\t\t\t\tfill=\"none\"\n\t\t\t\topacity={strokeOpacity}\n\t\t\t\tstroke={`url(#${gradientId})`}\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nLineLoadingPulseStroke.displayName = \"LineLoadingPulseStroke\";\n\nexport default LineLoadingPulseStroke;\n","\"use client\";\n\nimport { scaleLinear } from \"@visx/scale\";\nimport { AreaClosed, LinePath } from \"@visx/shape\";\nimport type { CurveFactory } from \"d3-shape\";\nimport { motion, useReducedMotion } from \"motion/react\";\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseId,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { chartCssVars, useChartStable } from \"./chart-context\";\nimport {\n\tLINE_LOADING_PULSE_EASE,\n\tLOADING_LABEL_EXIT_S,\n} from \"./line-loading-timing\";\n\n/**\n * Shared \"sweep\" loading visuals. A soft diagonal shimmer band travels across a\n * self-contained skeleton silhouette on a loop, painted via an SVG mask. The\n * silhouette re-randomizes between passes (held steady during a pass, re-rolled\n * once the band clears the right edge) so it reads as live and still loading,\n * without warping mid-sweep. Used as the `loadingStyle=\"sweep\"` alternative to\n * the traveling pulse on `<Line>` and `<Area>`, and as the skeleton for\n * `<BarChart status=\"loading\">`.\n */\n\n/** One shimmer sweep, in seconds. */\nconst DEFAULT_SWEEP_DURATION_S = 2;\n/** Sweep travel in objectBoundingBox space: off the left edge to off the right. */\nconst SWEEP_START_X = -1;\nconst SWEEP_END_X = 2;\n/** Diagonal tilt of the shimmer band, in degrees. */\nconst SWEEP_ANGLE_DEG = 25;\nconst HEIGHT_MIN_PCT = 20;\nconst HEIGHT_MAX_PCT = 80;\nconst DEFAULT_POINT_COUNT = 14;\nconst BAR_CORNER_RADIUS = 2;\nconst DEFAULT_BAR_COUNT = 12;\nconst DEFAULT_FILL = \"var(--foreground)\";\nconst DEFAULT_BAR_FILL_OPACITY = 0.45;\nconst LINE_STROKE_OPACITY = 0.55;\nconst AREA_FILL_TOP_OPACITY = 0.18;\nconst AREA_FILL_BOTTOM_OPACITY = 0.02;\n/** Bar width as a fraction of its band (the rest is the inter-bar gap). */\nconst DEFAULT_BAR_FRACTION = 0.7;\n\n// ─── Pure, SSR-safe helpers ──────────────────────────────────────────────\n// Heights come from a deterministic hash of (index, seed), never\n// `Math.random()`, so the first server render and first client render agree\n// (no Next.js hydration mismatch). Re-randomizing only bumps the numeric seed\n// on the client, after a sweep completes.\n\n/** Cheap deterministic hash to a fractional part in [0, 1). */\nfunction hashFract(n: number): number {\n\tconst x = Math.sin(n) * 43_758.5453;\n\treturn x - Math.floor(x);\n}\n\n/** Deterministic heights (percentages of the available height) for a seed. */\nexport function getSkeletonHeights(\n\tcount: number,\n\tseed = 0,\n\tmin = HEIGHT_MIN_PCT,\n\tmax = HEIGHT_MAX_PCT,\n): number[] {\n\tconst range = max - min;\n\treturn Array.from(\n\t\t{ length: count },\n\t\t(_, i) => min + Math.floor(hashFract((i + 1) * 12.9898 + seed) * range),\n\t);\n}\n\n/** Deterministic up/down (±1) per bar for the \"center\" baseline. */\nfunction getSkeletonSigns(count: number, seed = 0): number[] {\n\treturn Array.from({ length: count }, (_, i) =>\n\t\thashFract((i + 1) * 78.233 + seed) < 0.5 ? -1 : 1,\n\t);\n}\n\n/** Bell-curve opacity stops (sin squared) for the shimmer band's soft edges. */\nfunction generateEasedGradientStops(\n\tsteps = 17,\n\tminOpacity = 0.05,\n\tmaxOpacity = 0.9,\n) {\n\treturn Array.from({ length: steps }, (_, i) => {\n\t\tconst t = i / (steps - 1);\n\t\tconst eased = Math.sin(t * Math.PI) ** 2;\n\t\tconst opacity = minOpacity + eased * (maxOpacity - minOpacity);\n\t\treturn {\n\t\t\toffset: `${(t * 100).toFixed(0)}%`,\n\t\t\topacity: Number(opacity.toFixed(3)),\n\t\t};\n\t});\n}\n\n// ─── Shared mask defs (`${chartId}-mask` is the mask id) ─────────────────────\n\nfunction LoadingSweepMask({\n\tchartId,\n\twidth,\n\theight,\n\tdurationSeconds,\n\tonSweepComplete,\n}: {\n\tchartId: string;\n\twidth: number;\n\theight: number;\n\tdurationSeconds: number;\n\tonSweepComplete: () => void;\n}) {\n\tconst gradientStops = useMemo(() => generateEasedGradientStops(), []);\n\tconst lastXRef = useRef(SWEEP_START_X);\n\n\tconst handleUpdate = useCallback(\n\t\t(latest: { x?: number }) => {\n\t\t\tconst xValue = typeof latest.x === \"number\" ? latest.x : SWEEP_START_X;\n\t\t\t// Re-roll once the band has cleared the visible area (crossed past 1),\n\t\t\t// so the silhouette never changes shape under the user's eye.\n\t\t\tif (xValue >= 1 && lastXRef.current < 1) {\n\t\t\t\tonSweepComplete();\n\t\t\t}\n\t\t\tlastXRef.current = xValue;\n\t\t},\n\t\t[onSweepComplete],\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<linearGradient id={`${chartId}-grad`} x1=\"0\" x2=\"1\" y1=\"0\" y2=\"0\">\n\t\t\t\t{gradientStops.map(({ offset, opacity }) => (\n\t\t\t\t\t<stop\n\t\t\t\t\t\tkey={offset}\n\t\t\t\t\t\toffset={offset}\n\t\t\t\t\t\tstopColor=\"white\"\n\t\t\t\t\t\tstopOpacity={opacity}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</linearGradient>\n\t\t\t<pattern\n\t\t\t\theight=\"1\"\n\t\t\t\tid={`${chartId}-pattern`}\n\t\t\t\tpatternContentUnits=\"objectBoundingBox\"\n\t\t\t\tpatternTransform={`rotate(${SWEEP_ANGLE_DEG})`}\n\t\t\t\tpatternUnits=\"objectBoundingBox\"\n\t\t\t\twidth={3}\n\t\t\t\tx=\"0\"\n\t\t\t\ty=\"0\"\n\t\t\t>\n\t\t\t\t<motion.rect\n\t\t\t\t\tanimate={{ x: SWEEP_END_X }}\n\t\t\t\t\tfill={`url(#${chartId}-grad)`}\n\t\t\t\t\theight=\"1\"\n\t\t\t\t\tinitial={{ x: SWEEP_START_X }}\n\t\t\t\t\tonUpdate={handleUpdate}\n\t\t\t\t\ttransition={{\n\t\t\t\t\t\tduration: durationSeconds,\n\t\t\t\t\t\tease: \"linear\",\n\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\trepeatType: \"loop\",\n\t\t\t\t\t}}\n\t\t\t\t\twidth=\"1\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t/>\n\t\t\t</pattern>\n\t\t\t<mask id={`${chartId}-mask`} maskUnits=\"userSpaceOnUse\">\n\t\t\t\t<rect fill={`url(#${chartId}-pattern)`} height={height} width={width} />\n\t\t\t</mask>\n\t\t</>\n\t);\n}\n\n// ─── Line / Area loading sweep (its own re-randomizing silhouette) ───────────\n\nexport interface LineLoadingSweepProps {\n\t/** Curve factory from the host `<Line>` / `<Area>`, so the silhouette matches\n\t * the chart's interpolation (step, smooth, linear, …). */\n\tcurve: CurveFactory;\n\t/** Fill the silhouette as an area (for `<Area>`); otherwise stroke only. */\n\twithArea?: boolean;\n\t/** Loading phase: `\"loop\"` (steady), `\"exit\"` (loading → ready), or `\"enter\"`\n\t * (ready → loading). Exit/enter fade the silhouette and then signal the chart\n\t * to continue its reveal. Default: `\"loop\"`. */\n\tmode?: \"loop\" | \"exit\" | \"enter\";\n\t/** Fired when an exit/enter transition finishes, to advance the chart phase. */\n\tonTransitionComplete?: () => void;\n\tstroke?: string;\n\tstrokeOpacity?: number;\n\tstrokeWidth?: number;\n\tpointCount?: number;\n\tdurationSeconds?: number;\n}\n\n/**\n * Renders a placeholder line/area silhouette (its own, not the chart's skeleton)\n * with the shimmer sweeping across it. The silhouette re-randomizes between\n * passes. Reads inner dimensions from chart context.\n */\nexport function LineLoadingSweep({\n\tcurve,\n\twithArea = false,\n\tmode = \"loop\",\n\tonTransitionComplete,\n\tstroke = chartCssVars.foreground,\n\tstrokeOpacity = LINE_STROKE_OPACITY,\n\tstrokeWidth = 2,\n\tpointCount = DEFAULT_POINT_COUNT,\n\tdurationSeconds = DEFAULT_SWEEP_DURATION_S,\n}: LineLoadingSweepProps) {\n\tconst { innerWidth, innerHeight } = useChartStable();\n\tconst reduceMotion = useReducedMotion();\n\tconst reactId = useId();\n\tconst chartId = `line-sweep-${reactId.replace(/[^a-zA-Z0-9_-]/g, \"\")}`;\n\tconst isLoop = mode === \"loop\";\n\n\tconst [tick, setTick] = useState(0);\n\t// Re-randomize only while looping; hold the silhouette steady through a\n\t// transition so it fades out (or in) as one piece.\n\tconst onSweepComplete = useCallback(() => {\n\t\tif (isLoop) {\n\t\t\tsetTick((prev) => prev + 1);\n\t\t}\n\t}, [isLoop]);\n\tconst heights = useMemo(\n\t\t() => getSkeletonHeights(pointCount, tick),\n\t\t[pointCount, tick],\n\t);\n\n\t// With reduced motion there is no fade to await, so signal the handoff\n\t// immediately or the phase machine would stall mid-transition.\n\tuseEffect(() => {\n\t\tif (reduceMotion && !isLoop) {\n\t\t\tonTransitionComplete?.();\n\t\t}\n\t}, [reduceMotion, isLoop, onTransitionComplete]);\n\n\tif (innerWidth <= 0 || innerHeight <= 0 || heights.length < 2) {\n\t\treturn null;\n\t}\n\n\tconst xScale = scaleLinear({\n\t\tdomain: [0, heights.length - 1],\n\t\trange: [0, innerWidth],\n\t});\n\tconst yScale = scaleLinear({ domain: [0, 100], range: [innerHeight, 0] });\n\tconst points = heights.map((value, index) => ({ index, value }));\n\tconst getX = (d: { index: number }) => xScale(d.index);\n\tconst getY = (d: { value: number }) => yScale(d.value);\n\n\tconst silhouette = (\n\t\t<>\n\t\t\t{withArea ? (\n\t\t\t\t<AreaClosed\n\t\t\t\t\tcurve={curve}\n\t\t\t\t\tdata={points}\n\t\t\t\t\tfill={`url(#${chartId}-area)`}\n\t\t\t\t\tx={getX}\n\t\t\t\t\ty={getY}\n\t\t\t\t\tyScale={yScale}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t<LinePath\n\t\t\t\tcurve={curve}\n\t\t\t\tdata={points}\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke={stroke}\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeOpacity={strokeOpacity}\n\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\tx={getX}\n\t\t\t\ty={getY}\n\t\t\t/>\n\t\t</>\n\t);\n\n\tconst areaGradient = withArea ? (\n\t\t<linearGradient id={`${chartId}-area`} x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n\t\t\t<stop\n\t\t\t\toffset=\"0%\"\n\t\t\t\tstopColor={stroke}\n\t\t\t\tstopOpacity={AREA_FILL_TOP_OPACITY}\n\t\t\t/>\n\t\t\t<stop\n\t\t\t\toffset=\"100%\"\n\t\t\t\tstopColor={stroke}\n\t\t\t\tstopOpacity={AREA_FILL_BOTTOM_OPACITY}\n\t\t\t/>\n\t\t</linearGradient>\n\t) : null;\n\n\tif (reduceMotion) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{areaGradient ? <defs>{areaGradient}</defs> : null}\n\t\t\t\t{silhouette}\n\t\t\t</>\n\t\t);\n\t}\n\n\tconst maskUrl = `url(#${chartId}-mask)`;\n\tconst defs = (\n\t\t<defs>\n\t\t\t{areaGradient}\n\t\t\t<LoadingSweepMask\n\t\t\t\tchartId={chartId}\n\t\t\t\tdurationSeconds={durationSeconds}\n\t\t\t\theight={innerHeight}\n\t\t\t\tonSweepComplete={onSweepComplete}\n\t\t\t\twidth={innerWidth}\n\t\t\t/>\n\t\t</defs>\n\t);\n\n\tif (isLoop) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{defs}\n\t\t\t\t<g mask={maskUrl}>{silhouette}</g>\n\t\t\t</>\n\t\t);\n\t}\n\n\t// Transition: fade the swept silhouette out (exit) or in (enter), then hand\n\t// off to the chart so it can reveal the real series.\n\treturn (\n\t\t<>\n\t\t\t{defs}\n\t\t\t<motion.g\n\t\t\t\tanimate={{ opacity: mode === \"exit\" ? 0 : 1 }}\n\t\t\t\tinitial={{ opacity: mode === \"exit\" ? 1 : 0 }}\n\t\t\t\tmask={maskUrl}\n\t\t\t\tonAnimationComplete={onTransitionComplete}\n\t\t\t\ttransition={{\n\t\t\t\t\tduration: LOADING_LABEL_EXIT_S,\n\t\t\t\t\tease: [...LINE_LOADING_PULSE_EASE],\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{silhouette}\n\t\t\t</motion.g>\n\t\t</>\n\t);\n}\n\nLineLoadingSweep.displayName = \"LineLoadingSweep\";\n\n// ─── Bar loading skeleton (seeded bars under the sweep, inner coords) ─────────\n\nfunction SkeletonBars({\n\theights,\n\tsigns,\n\tinnerWidth,\n\tinnerHeight,\n\tbaseline,\n\tbarFraction,\n\tfill,\n\tfillOpacity,\n}: {\n\theights: number[];\n\tsigns: number[];\n\tinnerWidth: number;\n\tinnerHeight: number;\n\tbaseline: \"bottom\" | \"center\";\n\tbarFraction: number;\n\tfill: string;\n\tfillOpacity: number;\n}) {\n\tconst bandWidth = innerWidth / heights.length;\n\tconst barW = bandWidth * barFraction;\n\tconst xOffset = (bandWidth * (1 - barFraction)) / 2;\n\tconst isCenter = baseline === \"center\";\n\tconst baselineY = isCenter ? innerHeight / 2 : innerHeight;\n\tconst halfBarH = isCenter ? innerHeight / 2 : innerHeight;\n\n\treturn (\n\t\t<>\n\t\t\t{heights.map((value, i) => {\n\t\t\t\tconst sign = isCenter ? (signs[i] ?? 1) : 1;\n\t\t\t\tconst barH = Math.max(1, halfBarH * (value / 100));\n\t\t\t\tconst x = i * bandWidth + xOffset;\n\t\t\t\tconst y = sign === 1 ? baselineY - barH : baselineY;\n\t\t\t\treturn (\n\t\t\t\t\t<rect\n\t\t\t\t\t\tfill={fill}\n\t\t\t\t\t\tfillOpacity={fillOpacity}\n\t\t\t\t\t\theight={barH}\n\t\t\t\t\t\tkey={`${x.toFixed(2)}-${value}`}\n\t\t\t\t\t\trx={BAR_CORNER_RADIUS}\n\t\t\t\t\t\twidth={barW}\n\t\t\t\t\t\tx={x}\n\t\t\t\t\t\ty={y}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t})}\n\t\t</>\n\t);\n}\n\nexport interface BarLoadingSkeletonProps {\n\tinnerWidth: number;\n\tinnerHeight: number;\n\t/** Number of skeleton bars. Default: 12 */\n\tbarCount?: number;\n\t/** Bar fill color. Default: `var(--foreground)` */\n\tfill?: string;\n\t/** Bar fill opacity. Default: 0.45 */\n\tfillOpacity?: number;\n\t/** Bars rise from the bottom or diverge from the vertical center. Default: `\"bottom\"` */\n\tbaseline?: \"bottom\" | \"center\";\n\t/** Bar width as a fraction of its band (0–1). Default: 0.7 */\n\tbarFraction?: number;\n\t/** One shimmer sweep, in seconds. Default: 2 */\n\tdurationSeconds?: number;\n}\n\n/**\n * Skeleton bars masked by the shimmer sweep, re-randomizing between passes.\n * Rendered in the chart's inner coordinate space (origin at the inner top-left),\n * so a `BarChart` drops it inside its margin-translated group.\n */\nexport function BarLoadingSkeleton({\n\tinnerWidth,\n\tinnerHeight,\n\tbarCount = DEFAULT_BAR_COUNT,\n\tfill = DEFAULT_FILL,\n\tfillOpacity = DEFAULT_BAR_FILL_OPACITY,\n\tbaseline = \"bottom\",\n\tbarFraction = DEFAULT_BAR_FRACTION,\n\tdurationSeconds = DEFAULT_SWEEP_DURATION_S,\n}: BarLoadingSkeletonProps) {\n\tconst reduceMotion = useReducedMotion();\n\tconst reactId = useId();\n\tconst chartId = `bar-sweep-${reactId.replace(/[^a-zA-Z0-9_-]/g, \"\")}`;\n\tconst [tick, setTick] = useState(0);\n\tconst onSweepComplete = useCallback(() => setTick((prev) => prev + 1), []);\n\tconst heights = useMemo(\n\t\t() => getSkeletonHeights(barCount, tick),\n\t\t[barCount, tick],\n\t);\n\tconst signs = useMemo(\n\t\t() => getSkeletonSigns(barCount, tick),\n\t\t[barCount, tick],\n\t);\n\n\tif (innerWidth <= 0 || innerHeight <= 0) {\n\t\treturn null;\n\t}\n\n\tconst bars = (\n\t\t<SkeletonBars\n\t\t\tbarFraction={barFraction}\n\t\t\tbaseline={baseline}\n\t\t\tfill={fill}\n\t\t\tfillOpacity={fillOpacity}\n\t\t\theights={heights}\n\t\t\tinnerHeight={innerHeight}\n\t\t\tinnerWidth={innerWidth}\n\t\t\tsigns={signs}\n\t\t/>\n\t);\n\n\tif (reduceMotion) {\n\t\treturn bars;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<defs>\n\t\t\t\t<LoadingSweepMask\n\t\t\t\t\tchartId={chartId}\n\t\t\t\t\tdurationSeconds={durationSeconds}\n\t\t\t\t\theight={innerHeight}\n\t\t\t\t\tonSweepComplete={onSweepComplete}\n\t\t\t\t\twidth={innerWidth}\n\t\t\t\t/>\n\t\t\t</defs>\n\t\t\t<g mask={`url(#${chartId}-mask)`}>{bars}</g>\n\t\t</>\n\t);\n}\n\nBarLoadingSkeleton.displayName = \"BarLoadingSkeleton\";\n","import { type RefObject, useEffect, useState } from \"react\";\n\nexport function findPathLengthAtX(\n\tpath: SVGPathElement | null,\n\tpathLength: number,\n\ttargetX: number,\n): number {\n\tif (!path || pathLength === 0) {\n\t\treturn 0;\n\t}\n\tlet low = 0;\n\tlet high = pathLength;\n\tconst tolerance = 0.5;\n\n\twhile (high - low > tolerance) {\n\t\tconst mid = (low + high) / 2;\n\t\tconst point = path.getPointAtLength(mid);\n\t\tif (point.x < targetX) {\n\t\t\tlow = mid;\n\t\t} else {\n\t\t\thigh = mid;\n\t\t}\n\t}\n\treturn (low + high) / 2;\n}\n\ninterface PathStrokeMetrics {\n\tpathD: string | null;\n\tpathLength: number;\n}\n\nconst EMPTY_METRICS: PathStrokeMetrics = { pathD: null, pathLength: 0 };\n\n/**\n * Caller passes the references that drive the rendered path (renderData,\n * innerWidth, etc.) as `deps`. A stringified summary like\n * `${renderData.length}:${innerWidth}` is *not* safe here — same-length\n * in-place mutations of `renderData` keep the summary identical, so the\n * effect would never re-fire and `pathD`/`pathLength` would stay frozen on\n * the previous geometry (the area fill repaints from `renderData` directly\n * and would diverge from the stroke).\n */\nexport function usePathStrokeMetrics(\n\tpathRef: RefObject<SVGPathElement | null>,\n\tdeps: readonly unknown[],\n): PathStrokeMetrics {\n\tconst [metrics, setMetrics] = useState<PathStrokeMetrics>(EMPTY_METRICS);\n\n\tuseEffect(() => {\n\t\tconst path = pathRef.current;\n\t\tif (!path) {\n\t\t\treturn;\n\t\t}\n\t\tconst d = path.getAttribute(\"d\");\n\t\tconst len = d ? path.getTotalLength() : 0;\n\t\tsetMetrics((prev) =>\n\t\t\tprev.pathD === d && prev.pathLength === len\n\t\t\t\t? prev\n\t\t\t\t: { pathD: d, pathLength: len },\n\t\t);\n\t}, deps);\n\n\treturn metrics;\n}\n\nexport function resolveDashTailBounds(\n\tdashFromIndex: number | undefined,\n\tdataLength: number,\n): boolean {\n\treturn (\n\t\tdashFromIndex != null &&\n\t\tdashFromIndex >= 0 &&\n\t\tdashFromIndex < dataLength - 1\n\t);\n}\n\nexport function resolveDashStartX(\n\tdata: Record<string, unknown>[],\n\tdashFromIndex: number,\n\txScale: (value: Date | number) => number | undefined,\n\txAccessor: (datum: Record<string, unknown>) => Date | number,\n): number {\n\tconst dashFromPoint = data[dashFromIndex];\n\tif (!dashFromPoint) {\n\t\treturn 0;\n\t}\n\treturn xScale(xAccessor(dashFromPoint)) ?? 0;\n}\n","\"use client\";\n\nimport { useId } from \"react\";\n\nexport interface DashTailStrokeProps {\n\t/** SVG path `d` for the full series (single curved path). */\n\tpathD: string | null;\n\t/** Total length of `pathD` in user units. */\n\tpathLength: number;\n\t/** Path length at which the dashed tail begins. */\n\tdashStartLength: number;\n\t/** X coordinate (chart inner space) where the tail clip begins. */\n\tdashStartX: number;\n\tinnerWidth: number;\n\tinnerHeight: number;\n\t/** Stroke paint — solid color or gradient url. */\n\tstroke: string;\n\tstrokeWidth: number;\n\tdashArray: string;\n}\n\nexport function DashTailStroke({\n\tpathD,\n\tpathLength,\n\tdashStartLength,\n\tdashStartX,\n\tinnerWidth,\n\tinnerHeight,\n\tstroke,\n\tstrokeWidth,\n\tdashArray,\n}: DashTailStrokeProps) {\n\tconst clipPathId = useId().replace(/:/g, \"\");\n\n\tif (!pathD || pathLength <= 0 || dashStartLength >= pathLength) {\n\t\treturn null;\n\t}\n\n\tconst pad = strokeWidth * 2;\n\tconst tailWidth = Math.max(0, innerWidth - dashStartX + pad);\n\n\treturn (\n\t\t<>\n\t\t\t<defs>\n\t\t\t\t<clipPath id={clipPathId}>\n\t\t\t\t\t<rect\n\t\t\t\t\t\theight={innerHeight + pad}\n\t\t\t\t\t\twidth={tailWidth}\n\t\t\t\t\t\tx={dashStartX - strokeWidth}\n\t\t\t\t\t\ty={-strokeWidth}\n\t\t\t\t\t/>\n\t\t\t\t</clipPath>\n\t\t\t</defs>\n\t\t\t{/* Solid head — same curved path, gradient/fade preserved */}\n\t\t\t<path\n\t\t\t\td={pathD}\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke={stroke}\n\t\t\t\tstrokeDasharray={`${dashStartLength} ${Math.max(1, pathLength - dashStartLength)}`}\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t/>\n\t\t\t{/* Dashed tail — clipped to x ≥ dashStartX so dashes follow the curve */}\n\t\t\t<path\n\t\t\t\tclipPath={`url(#${clipPathId})`}\n\t\t\t\td={pathD}\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke={stroke}\n\t\t\t\tstrokeDasharray={dashArray}\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t/>\n\t\t</>\n\t);\n}\n","\"use client\";\n\nimport { memo, useMemo } from \"react\";\nimport { DashTailStroke } from \"./dash-tail-stroke\";\nimport { resolveDashStartX, resolveDashTailBounds } from \"./path-stroke-utils\";\n\ninterface SeriesDashTailOverlayProps {\n\tdashFromIndex?: number;\n\tdashArray: string;\n\tdata: Record<string, unknown>[];\n\tpathD: string | null;\n\tpathLength: number;\n\tinnerWidth: number;\n\tinnerHeight: number;\n\tstroke: string;\n\tstrokeWidth: number;\n\txScale: (value: Date | number) => number | undefined;\n\txAccessor: (datum: Record<string, unknown>) => Date | number;\n}\n\nfunction SeriesDashTailOverlayImpl({\n\tdashFromIndex,\n\tdashArray,\n\tdata,\n\tpathD,\n\tpathLength,\n\tinnerWidth,\n\tinnerHeight,\n\tstroke,\n\tstrokeWidth,\n\txScale,\n\txAccessor,\n}: SeriesDashTailOverlayProps) {\n\tconst hasDashTail = resolveDashTailBounds(dashFromIndex, data.length);\n\n\tconst dashStartX = useMemo(() => {\n\t\tif (!hasDashTail || dashFromIndex == null) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn resolveDashStartX(data, dashFromIndex, xScale, xAccessor);\n\t}, [hasDashTail, dashFromIndex, data, xScale, xAccessor]);\n\n\t// Linear (index-based) approximation of the path length at `dashFromIndex`.\n\t// The accurate version (`findPathLengthAtX` binary search via\n\t// `getPointAtLength`) is exact but cost ~40 ms per series on a 365-point\n\t// bezier — for charts with ~10 series that synchronously blocks the main\n\t// thread for ~400 ms on the post-measurement re-render, swallowing the first\n\t// second of the entrance animation.\n\t//\n\t// For evenly-spaced time-series data — the standard case — this is exact at\n\t// flat regions of the curve and only differs by a pixel or two where the\n\t// curve has steep y-variation, which is imperceptible at the dash boundary.\n\tconst dashStartLength = useMemo(() => {\n\t\tif (!hasDashTail || dashFromIndex == null || pathLength <= 0) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn (dashFromIndex / Math.max(1, data.length - 1)) * pathLength;\n\t}, [hasDashTail, dashFromIndex, data.length, pathLength]);\n\n\tif (!hasDashTail || dashFromIndex == null || pathLength <= 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<DashTailStroke\n\t\t\tdashArray={dashArray}\n\t\t\tdashStartLength={dashStartLength}\n\t\t\tdashStartX={dashStartX}\n\t\t\tinnerHeight={innerHeight}\n\t\t\tinnerWidth={innerWidth}\n\t\t\tpathD={pathD}\n\t\t\tpathLength={pathLength}\n\t\t\tstroke={stroke}\n\t\t\tstrokeWidth={strokeWidth}\n\t\t/>\n\t);\n}\n\n// All props originate from the chart's stable context slice (data, xScale,\n// xAccessor, …) or are mount-stable strings (gradient `url(#…)` ids). Shallow\n// compare lets us skip the path-length binary search on every cursor move.\nexport const SeriesDashTailOverlay = memo(SeriesDashTailOverlayImpl);\n","\"use client\";\n\nimport { type MotionValue, motion } from \"motion/react\";\nimport { type RefObject, useId } from \"react\";\n\n// Hover-highlight overlay: re-strokes the base path `d`, clipped to a vertical\n// band whose x/width spring to track the hovered point, so only the segment\n// around the dot shows brighter. The band comes from `useHighlightSegment`;\n// because the bright stroke reuses the base `d`, it follows whatever curve is\n// drawn (see `highlight-segment-bounds.ts` for the band-extent caveat).\n\nexport interface HighlightSegmentProps {\n\t/** Ref to the rendered base stroke `<path>` — its `d` is re-used verbatim. */\n\tpathRef: RefObject<SVGPathElement | null>;\n\t/** Whether to render (caller gates on showHighlight + active + loaded). */\n\tvisible: boolean;\n\tstroke: string;\n\tstrokeWidth: number;\n\t/** Plot height — the clip band spans it fully. */\n\theight: number;\n\t/** Spring-eased left edge of the clip band (px). */\n\tx: MotionValue<number>;\n\t/** Spring-eased width of the clip band (px). */\n\twidth: MotionValue<number>;\n}\n\nexport function HighlightSegment({\n\tpathRef,\n\tvisible,\n\tstroke,\n\tstrokeWidth,\n\theight,\n\tx,\n\twidth,\n}: HighlightSegmentProps) {\n\tconst clipId = useId();\n\tif (!(visible && pathRef.current)) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<>\n\t\t\t<defs>\n\t\t\t\t<clipPath id={clipId}>\n\t\t\t\t\t<motion.rect height={height} width={width} x={x} y={0} />\n\t\t\t\t</clipPath>\n\t\t\t</defs>\n\t\t\t<motion.path\n\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\tclipPath={`url(#${clipId})`}\n\t\t\t\td={pathRef.current.getAttribute(\"d\") || \"\"}\n\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\tfill=\"none\"\n\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\tstroke={stroke}\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\ttransition={{ duration: 0.4, ease: \"easeInOut\" }}\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nHighlightSegment.displayName = \"HighlightSegment\";\n\nexport default HighlightSegment;\n","\"use client\";\n\nimport { createContext, type ReactNode, useContext, useMemo } from \"react\";\n\nexport interface SpringConfig {\n\tstiffness: number;\n\tdamping: number;\n}\n\nexport interface ChartConfigValue {\n\t/** Crosshair indicator, tooltip dot, date pill. */\n\ttooltipSpring: SpringConfig;\n\t/** Floating tooltip panel. */\n\ttooltipBoxSpring: SpringConfig;\n\t/** Line/area hover-highlight band (x + width). */\n\thighlightSpring: SpringConfig;\n}\n\nexport const DEFAULT_CHART_CONFIG: ChartConfigValue = {\n\ttooltipSpring: { stiffness: 300, damping: 30 },\n\ttooltipBoxSpring: { stiffness: 100, damping: 20 },\n\thighlightSpring: { stiffness: 180, damping: 28 },\n};\n\nconst ChartConfigContext = createContext<ChartConfigValue | null>(null);\n\nexport interface ChartConfigProviderProps {\n\tvalue?: Partial<ChartConfigValue>;\n\tchildren: ReactNode;\n}\n\nexport function ChartConfigProvider({\n\tvalue,\n\tchildren,\n}: ChartConfigProviderProps) {\n\tconst merged = useMemo<ChartConfigValue>(\n\t\t() => ({\n\t\t\t...DEFAULT_CHART_CONFIG,\n\t\t\t...value,\n\t\t}),\n\t\t[value],\n\t);\n\n\treturn (\n\t\t<ChartConfigContext.Provider value={merged}>\n\t\t\t{children}\n\t\t</ChartConfigContext.Provider>\n\t);\n}\n\nexport function useChartConfig(): ChartConfigValue {\n\treturn useContext(ChartConfigContext) ?? DEFAULT_CHART_CONFIG;\n}\n\nconst DEFAULT_TOOLTIP_BOX_DAMPING =\n\tDEFAULT_CHART_CONFIG.tooltipBoxSpring.damping;\n\n/** Maps a damping slider to the floating tooltip panel follow spring. `0` = instant. */\nexport function resolveTooltipBoxMotion(damping?: number): {\n\tanimate: boolean;\n\tspringConfig: SpringConfig;\n} {\n\tif (damping === 0) {\n\t\treturn {\n\t\t\tanimate: false,\n\t\t\tspringConfig: DEFAULT_CHART_CONFIG.tooltipBoxSpring,\n\t\t};\n\t}\n\n\tconst effectiveDamping = damping ?? DEFAULT_TOOLTIP_BOX_DAMPING;\n\tlet stiffness = DEFAULT_CHART_CONFIG.tooltipBoxSpring.stiffness;\n\n\tif (effectiveDamping < DEFAULT_TOOLTIP_BOX_DAMPING) {\n\t\tconst t =\n\t\t\t(DEFAULT_TOOLTIP_BOX_DAMPING - effectiveDamping) /\n\t\t\tDEFAULT_TOOLTIP_BOX_DAMPING;\n\t\tstiffness += t * 400;\n\t} else if (effectiveDamping > DEFAULT_TOOLTIP_BOX_DAMPING) {\n\t\tconst t =\n\t\t\t(effectiveDamping - DEFAULT_TOOLTIP_BOX_DAMPING) /\n\t\t\t(100 - DEFAULT_TOOLTIP_BOX_DAMPING);\n\t\tstiffness -= t * 85;\n\t}\n\n\treturn {\n\t\tanimate: true,\n\t\tspringConfig: {\n\t\t\tstiffness: Math.max(12, Math.round(stiffness)),\n\t\t\tdamping: effectiveDamping,\n\t\t},\n\t};\n}\n","import type { TooltipData } from \"./chart-context\";\nimport type { ChartSelection } from \"./use-chart-interaction\";\n\n// Pure geometry for the hover-highlight band, split out from the hook so it can\n// be unit-tested without React/motion (see __tests__).\n//\n// The band is the pixel x-range one data point either side of the hovered point:\n// [ xScale(t(idx-1)), xScale(t(idx+1)) ]\n// `<HighlightSegment>` then re-strokes the base path clipped to that band, so the\n// highlight always traces the line itself. Selecting the band by data index\n// assumes x is monotone along the path, which holds for a time series. On a curve\n// that overshoots in x (curveNatural, curveBasis) a band edge can land a few\n// pixels short, slightly narrowing the bright slice but never detaching it.\n\nexport interface SegmentBounds {\n\t/** Left edge of the highlight band, in pixels. */\n\tx: number;\n\t/** Width of the highlight band, in pixels. */\n\twidth: number;\n\tisActive: boolean;\n}\n\nexport const INACTIVE_SEGMENT: SegmentBounds = {\n\tx: 0,\n\twidth: 0,\n\tisActive: false,\n};\n\n/**\n * The highlight band `{x, width}` in pixel space, from the data + `xScale` plus\n * the current hover/selection. Hover spans one data point either side of the dot\n * (clamped to the ends); an active drag-selection uses the dragged pixel range\n * directly and takes priority over hover.\n */\nexport function computeSegmentBounds(\n\tdata: Record<string, unknown>[],\n\txScale: (value: Date) => number | undefined,\n\txAccessor: (d: Record<string, unknown>) => Date,\n\ttooltipData: Pick<TooltipData, \"index\"> | null | undefined,\n\tselection:\n\t\tPick<ChartSelection, \"active\" | \"startX\" | \"endX\"> | null | undefined,\n): SegmentBounds {\n\tif (data.length === 0) {\n\t\treturn INACTIVE_SEGMENT;\n\t}\n\n\tif (selection?.active) {\n\t\tconst x = Math.min(selection.startX, selection.endX);\n\t\tconst width = Math.abs(selection.endX - selection.startX);\n\t\treturn { x, width, isActive: true };\n\t}\n\n\tif (!tooltipData) {\n\t\treturn INACTIVE_SEGMENT;\n\t}\n\n\tconst idx = tooltipData.index;\n\tconst startIdx = Math.max(0, idx - 1);\n\tconst endIdx = Math.min(data.length - 1, idx + 1);\n\tconst startPoint = data[startIdx];\n\tconst endPoint = data[endIdx];\n\tif (!(startPoint && endPoint)) {\n\t\treturn INACTIVE_SEGMENT;\n\t}\n\n\tconst startX = xScale(xAccessor(startPoint)) ?? 0;\n\tconst endX = xScale(xAccessor(endPoint)) ?? 0;\n\treturn { x: startX, width: Math.max(0, endX - startX), isActive: true };\n}\n","\"use client\";\n\nimport { useSpring } from \"motion/react\";\nimport { useMemo, useRef } from \"react\";\nimport { useChartConfig } from \"./chart-config-context\";\nimport { useChartHover, useChartStable } from \"./chart-context\";\nimport {\n\tcomputeSegmentBounds,\n\tINACTIVE_SEGMENT,\n} from \"./highlight-segment-bounds\";\n\n// Hover-highlight band for `line.tsx` and `area.tsx`. Computes the segment\n// bounds and springs its x/width; `<HighlightSegment>` renders the clipped\n// re-stroke. Spring tuning comes from `ChartConfigProvider.highlightSpring`.\n// Stable + hover slices are read separately so callers can see the exact\n// subscription surface (anything calling this hook will re-render on hover).\n\nexport interface HighlightSegmentResult {\n\txSpring: ReturnType<typeof useSpring>;\n\twidthSpring: ReturnType<typeof useSpring>;\n\tisActive: boolean;\n}\n\n/**\n * @param enabled set false when there is no stroke to highlight (e.g. an area\n * with `showLine={false}`); defaults true.\n */\nexport function useHighlightSegment({\n\tenabled = true,\n}: {\n\tenabled?: boolean;\n} = {}): HighlightSegmentResult {\n\tconst { data, xScale, xAccessor } = useChartStable();\n\tconst { tooltipData, selection } = useChartHover();\n\tconst { highlightSpring } = useChartConfig();\n\n\tconst bounds = useMemo(\n\t\t() =>\n\t\t\tenabled\n\t\t\t\t? computeSegmentBounds(data, xScale, xAccessor, tooltipData, selection)\n\t\t\t\t: INACTIVE_SEGMENT,\n\t\t[enabled, data, xScale, xAccessor, tooltipData, selection],\n\t);\n\n\tconst xSpring = useSpring(0, highlightSpring);\n\tconst widthSpring = useSpring(0, highlightSpring);\n\n\t// Jump on inactive→active so the band appears at the hovered point instead\n\t// of sliding in from x=0; ease on subsequent moves.\n\tconst wasActive = useRef(false);\n\tif (bounds.isActive && !wasActive.current) {\n\t\txSpring.jump(bounds.x);\n\t\twidthSpring.jump(bounds.width);\n\t} else {\n\t\txSpring.set(bounds.x);\n\t\twidthSpring.set(bounds.width);\n\t}\n\twasActive.current = bounds.isActive;\n\n\treturn { xSpring, widthSpring, isActive: bounds.isActive };\n}\n","\"use client\";\n\nimport type { RefObject } from \"react\";\nimport { useChartStable } from \"./chart-context\";\nimport { HighlightSegment } from \"./highlight-segment\";\nimport { useHighlightSegment } from \"./use-highlight-segment\";\n\ninterface SeriesHighlightLayerProps {\n\t/** Caller already gated `showHighlight && showLine`; this just routes through. */\n\tenabled: boolean;\n\theight: number;\n\tpathRef: RefObject<SVGPathElement | null>;\n\tstroke: string;\n\tstrokeWidth: number;\n}\n\n/**\n * Self-contained hover-highlight band over a series stroke.\n *\n * Owns the `useHighlightSegment` subscription (which reads both stable + hover\n * context) so the parent <Area> / <Line> can stay on the stable slice. This\n * component still re-renders on hover — that's the price of driving the\n * highlight band — but it's a tiny leaf so the cost is bounded to itself.\n */\nexport function SeriesHighlightLayer({\n\tenabled,\n\theight,\n\tpathRef,\n\tstroke,\n\tstrokeWidth,\n}: SeriesHighlightLayerProps) {\n\tconst { isLoaded } = useChartStable();\n\tconst { xSpring, widthSpring, isActive } = useHighlightSegment({ enabled });\n\treturn (\n\t\t<HighlightSegment\n\t\t\theight={height}\n\t\t\tpathRef={pathRef}\n\t\t\tstroke={stroke}\n\t\t\tstrokeWidth={strokeWidth}\n\t\t\tvisible={enabled && isActive && isLoaded}\n\t\t\twidth={widthSpring}\n\t\t\tx={xSpring}\n\t\t/>\n\t);\n}\n\nSeriesHighlightLayer.displayName = \"SeriesHighlightLayer\";\n\nexport default SeriesHighlightLayer;\n","\"use client\";\n\nimport { createContext, type ReactNode, useContext, useMemo } from \"react\";\n\ninterface ChartLegendHoverContextValue {\n\thoveredIndex: number | null;\n\tsetHoveredIndex: (index: number | null) => void;\n}\n\nconst ChartLegendHoverContext =\n\tcreateContext<ChartLegendHoverContextValue | null>(null);\n\nexport function ChartLegendHoverProvider({\n\thoveredIndex,\n\tonHoverChange,\n\tchildren,\n}: {\n\thoveredIndex: number | null;\n\tonHoverChange: (index: number | null) => void;\n\tchildren: ReactNode;\n}) {\n\tconst value = useMemo(\n\t\t() => ({ hoveredIndex, setHoveredIndex: onHoverChange }),\n\t\t[hoveredIndex, onHoverChange],\n\t);\n\n\treturn (\n\t\t<ChartLegendHoverContext.Provider value={value}>\n\t\t\t{children}\n\t\t</ChartLegendHoverContext.Provider>\n\t);\n}\n\nexport function useChartLegendHover(): ChartLegendHoverContextValue {\n\tconst context = useContext(ChartLegendHoverContext);\n\treturn (\n\t\tcontext ?? {\n\t\t\thoveredIndex: null,\n\t\t\tsetHoveredIndex: () => {\n\t\t\t\t/* noop outside ChartLegendHoverProvider */\n\t\t\t},\n\t\t}\n\t);\n}\n","\"use client\";\n\nimport { motion } from \"motion/react\";\nimport type { ReactNode } from \"react\";\nimport { useChartHover } from \"./chart-context\";\nimport { useChartLegendHover } from \"./chart-legend-hover\";\n\ninterface SeriesHoverDimProps {\n\t/** Skip the dim entirely. */\n\tenabled?: boolean;\n\t/** Opacity to fade to while the chart is being hovered. */\n\tdimOpacity?: number;\n\t/** Tween duration in seconds. */\n\tdurationSec?: number;\n\t/** Series index for multi-series legend hover dimming. */\n\tseriesIndex?: number;\n\t/** Stable chart visuals — area fill, stroke line, dashed tail, etc. */\n\tchildren: ReactNode;\n}\n\n/**\n * Wraps stable series visuals with a hover-driven opacity animation.\n *\n * The wrapper subscribes to chart hover state internally so the parent (Area /\n * Line) can stay on the stable context slice. Children come in as a React prop:\n * because the parent is not re-rendering on hover, the children element\n * reference stays identical and React skips re-rendering them when this\n * wrapper re-renders. That keeps expensive subtrees (`SeriesDashTailOverlay`\n * and its `getPointAtLength` binary search) quiescent on cursor motion.\n */\nexport function SeriesHoverDim({\n\tenabled = true,\n\tdimOpacity = 0.5,\n\tdurationSec = 0.4,\n\tseriesIndex,\n\tchildren,\n}: SeriesHoverDimProps) {\n\tconst { tooltipData, selection } = useChartHover();\n\tconst { hoveredIndex: legendHoveredIndex } = useChartLegendHover();\n\tconst isChartHovering = tooltipData !== null || selection?.active === true;\n\tconst isLegendDimmed =\n\t\tlegendHoveredIndex !== null &&\n\t\tseriesIndex !== undefined &&\n\t\tlegendHoveredIndex !== seriesIndex;\n\tconst opacity =\n\t\tenabled && (isChartHovering || isLegendDimmed) ? dimOpacity : 1;\n\treturn (\n\t\t<motion.g\n\t\t\tanimate={{ opacity }}\n\t\t\tinitial={{ opacity: 1 }}\n\t\t\ttransition={{ duration: durationSec, ease: \"easeInOut\" }}\n\t\t>\n\t\t\t{children}\n\t\t</motion.g>\n\t);\n}\n\nSeriesHoverDim.displayName = \"SeriesHoverDim\";\n\nexport default SeriesHoverDim;\n","import type { Transition } from \"motion/react\";\n\n/** Default clip-reveal easing for cartesian charts. */\nexport const DEFAULT_ANIMATION_EASING = \"cubic-bezier(0.85, 0, 0.15, 1)\";\n\nexport const DEFAULT_ANIMATION_DURATION_MS = 1100;\n\n/** Default enter transition — matches the original line chart reveal. */\nexport const DEFAULT_CHART_ENTER_TRANSITION: Transition = {\n\ttype: \"tween\",\n\tduration: DEFAULT_ANIMATION_DURATION_MS / 1000,\n\tease: [0.85, 0, 0.15, 1],\n};\n\n/**\n * Clip-path width reveal must use tween — spring does not reliably animate SVG width.\n */\nexport function clipRevealTransition(enterTransition?: Transition): Transition {\n\tif (enterTransition?.type === \"tween\") {\n\t\treturn {\n\t\t\t...enterTransition,\n\t\t\tease: enterTransition.ease ?? DEFAULT_CHART_ENTER_TRANSITION.ease,\n\t\t};\n\t}\n\n\tconst duration =\n\t\ttypeof enterTransition?.duration === \"number\"\n\t\t\t? enterTransition.duration\n\t\t\t: DEFAULT_ANIMATION_DURATION_MS / 1000;\n\n\treturn {\n\t\ttype: \"tween\",\n\t\tduration,\n\t\tease: DEFAULT_CHART_ENTER_TRANSITION.ease,\n\t};\n}\n","\"use client\";\n\nimport type { Variants } from \"motion/react\";\nimport { motion } from \"motion/react\";\nimport { memo } from \"react\";\nimport { DEFAULT_CHART_ENTER_TRANSITION } from \"./animation\";\n\nexport interface SeriesPointMarkerStyle {\n\t/** Fill color for the inner circle */\n\tfill?: string;\n\t/** Outer ring stroke color. Default: same as `fill` */\n\tstroke?: string;\n\t/** Outer ring stroke width in px. Default: 2. Set to 0 to disable. */\n\tstrokeWidth?: number;\n\t/** Gap between the inner fill and outer ring in px. Default: 2 */\n\tringGap?: number;\n\t/** Optional outer outline beyond the ring. Default: 0 */\n\toutlineWidth?: number;\n\t/** Outer outline color. Default: same as `stroke` */\n\toutlineColor?: string;\n\t/** Point radius in px. Default: 5 */\n\tradius?: number;\n\t/** Dim non-active points while hovering. Default: true */\n\tfadeOnHover?: boolean;\n\t/** Opacity for non-hovered points when `fadeOnHover` is true. Default: 0.5 */\n\tinactiveOpacity?: number;\n\t/**\n\t * Blur in px for non-hovered points when `fadeOnHover` is true.\n\t * Applied once on the dimmed layer (not per dot) for performance. Default: 2\n\t */\n\tinactiveBlur?: number;\n\t/** Initial blur in px during enter animation. Default: 2 */\n\tenterBlur?: number;\n\t/** Enlarge the active point while hovering. Default: true */\n\tshowActiveHighlight?: boolean;\n}\n\ninterface MarkerCirclesProps {\n\tfill?: string;\n\tstroke?: string;\n\tstrokeWidth: number;\n\tringGap: number;\n\toutlineWidth: number;\n\toutlineColor?: string;\n\tradius: number;\n}\n\nfunction MarkerCircles({\n\tfill,\n\tstroke,\n\tstrokeWidth,\n\tringGap,\n\toutlineWidth,\n\toutlineColor,\n\tradius,\n}: MarkerCirclesProps) {\n\tconst resolvedStroke = stroke ?? fill ?? \"currentColor\";\n\tconst resolvedOutlineColor = outlineColor ?? resolvedStroke;\n\tconst ringOuter = strokeWidth > 0 ? radius + ringGap + strokeWidth : radius;\n\tconst outlineRadius = outlineWidth > 0 ? ringOuter + outlineWidth / 2 : 0;\n\n\treturn (\n\t\t<>\n\t\t\t{outlineWidth > 0 ? (\n\t\t\t\t<circle\n\t\t\t\t\tcx={0}\n\t\t\t\t\tcy={0}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tr={outlineRadius}\n\t\t\t\t\tstroke={resolvedOutlineColor}\n\t\t\t\t\tstrokeWidth={outlineWidth}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t<circle cx={0} cy={0} fill={fill} r={radius} />\n\t\t\t{strokeWidth > 0 ? (\n\t\t\t\t<circle\n\t\t\t\t\tcx={0}\n\t\t\t\t\tcy={0}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tr={radius + ringGap + strokeWidth / 2}\n\t\t\t\t\tstroke={resolvedStroke}\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</>\n\t);\n}\n\nexport interface StaticSeriesPointMarkerProps extends SeriesPointMarkerStyle {\n\tcx: number;\n\tcy: number;\n\tscale?: number;\n}\n\nexport const StaticSeriesPointMarker = memo(function StaticSeriesPointMarker({\n\tcx,\n\tcy,\n\tscale = 1,\n\tfill,\n\tstroke,\n\tstrokeWidth = 2,\n\tringGap = 2,\n\toutlineWidth = 0,\n\toutlineColor,\n\tradius = 5,\n}: StaticSeriesPointMarkerProps) {\n\treturn (\n\t\t<g transform={`translate(${cx}, ${cy}) scale(${scale})`}>\n\t\t\t<MarkerCircles\n\t\t\t\tfill={fill}\n\t\t\t\toutlineColor={outlineColor}\n\t\t\t\toutlineWidth={outlineWidth}\n\t\t\t\tradius={radius}\n\t\t\t\tringGap={ringGap}\n\t\t\t\tstroke={stroke}\n\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t/>\n\t\t</g>\n\t);\n});\n\nexport interface SeriesPointMarkerProps extends SeriesPointMarkerStyle {\n\tdataKey: string;\n\tindex: number;\n\tcx: number;\n\tcy: number;\n\trevealDelay: number;\n\trevealEpoch: number;\n\tenterDuration: number;\n}\n\n/** Motion enter marker — used only while the chart reveal is running. */\nexport function SeriesPointMarker({\n\tdataKey,\n\tindex,\n\tcx,\n\tcy,\n\tenterBlur = 2,\n\trevealDelay,\n\trevealEpoch,\n\tenterDuration,\n\tfill,\n\tstroke,\n\tstrokeWidth = 2,\n\tringGap = 2,\n\toutlineWidth = 0,\n\toutlineColor,\n\tradius = 5,\n}: SeriesPointMarkerProps) {\n\tconst variants: Variants = {\n\t\thidden: {\n\t\t\topacity: 0,\n\t\t\tfilter: `blur(${enterBlur}px)`,\n\t\t\tscale: 1,\n\t\t},\n\t\tvisible: {\n\t\t\topacity: 1,\n\t\t\tfilter: \"blur(0px)\",\n\t\t\tscale: 1,\n\t\t\ttransition: {\n\t\t\t\tdelay: revealDelay,\n\t\t\t\tduration: enterDuration,\n\t\t\t\tease: DEFAULT_CHART_ENTER_TRANSITION.ease,\n\t\t\t},\n\t\t},\n\t};\n\n\treturn (\n\t\t<g transform={`translate(${cx}, ${cy})`}>\n\t\t\t<motion.g\n\t\t\t\tanimate=\"visible\"\n\t\t\t\tinitial=\"hidden\"\n\t\t\t\tkey={`${dataKey}-${index}-${revealEpoch}`}\n\t\t\t\tvariants={variants}\n\t\t\t>\n\t\t\t\t<MarkerCircles\n\t\t\t\t\tfill={fill}\n\t\t\t\t\toutlineColor={outlineColor}\n\t\t\t\t\toutlineWidth={outlineWidth}\n\t\t\t\t\tradius={radius}\n\t\t\t\t\tringGap={ringGap}\n\t\t\t\t\tstroke={stroke}\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t/>\n\t\t\t</motion.g>\n\t\t</g>\n\t);\n}\n\nexport function getSeriesMarkerVisualExtent(\n\tstyle: Pick<\n\t\tSeriesPointMarkerStyle,\n\t\t| \"radius\"\n\t\t| \"strokeWidth\"\n\t\t| \"ringGap\"\n\t\t| \"outlineWidth\"\n\t\t| \"showActiveHighlight\"\n\t>,\n): number {\n\tconst radius = style.radius ?? 5;\n\tconst strokeWidth = style.strokeWidth ?? 2;\n\tconst ringGap = style.ringGap ?? 2;\n\tconst outlineWidth = style.outlineWidth ?? 0;\n\tconst showActiveHighlight = style.showActiveHighlight ?? true;\n\tconst ring = strokeWidth > 0 ? ringGap + strokeWidth : 0;\n\tconst outline = outlineWidth > 0 ? outlineWidth : 0;\n\tconst highlightPad = showActiveHighlight ? radius * 0.35 : 0;\n\treturn radius + ring + outline + highlightPad + 2;\n}\n","\"use client\";\n\nimport { type ReactNode, useCallback, useMemo } from \"react\";\nimport { clipRevealTransition } from \"./animation\";\nimport {\n\tdefaultScatterColors,\n\tuseChartHover,\n\tuseChartStable,\n\tuseYScale,\n} from \"./chart-context\";\nimport { useChartLegendHover } from \"./chart-legend-hover\";\nimport {\n\tgetSeriesMarkerVisualExtent,\n\tSeriesPointMarker,\n\ttype SeriesPointMarkerStyle,\n\tStaticSeriesPointMarker,\n} from \"./series-point-marker\";\n\nexport interface SeriesMarkersProps extends SeriesPointMarkerStyle {\n\tdataKey: string;\n\t/** Marker fill color. Defaults to series stroke or chart palette color. */\n\tfill?: string;\n\t/** Whether to animate markers with clip reveal. Default: true */\n\tanimate?: boolean;\n}\n\ninterface PointAt {\n\tindex: number;\n\tcx: number;\n\tcy: number;\n\trevealDelay: number;\n}\n\ninterface MarkerStyle {\n\tfill: string;\n\tstroke: string;\n\tstrokeWidth: number;\n\tringGap: number;\n\toutlineWidth: number;\n\toutlineColor?: string;\n\tradius: number;\n}\n\nexport function SeriesMarkers({\n\tdataKey,\n\tfill,\n\tstroke,\n\tstrokeWidth = 2,\n\tringGap = 2,\n\toutlineWidth = 0,\n\toutlineColor,\n\tradius = 5,\n\tanimate = true,\n\tfadeOnHover = true,\n\tinactiveOpacity = 0.5,\n\tinactiveBlur = 2,\n\tenterBlur = 2,\n\tshowActiveHighlight = true,\n}: SeriesMarkersProps) {\n\t// Stable slice only. Hover-driven dim + active-highlight live in the inner\n\t// <SeriesMarkersDimWrapper> / <SeriesMarkersActiveHighlight> components, so\n\t// mouse motion does not re-render the full point grid.\n\tconst {\n\t\tdata,\n\t\txScale,\n\t\tinnerWidth,\n\t\tenterTransition,\n\t\tanimationDuration,\n\t\trevealEpoch,\n\t\tisLoaded,\n\t\txAccessor,\n\t\tlines,\n\t} = useChartStable();\n\n\tconst seriesIndex = useMemo(() => {\n\t\tconst index = lines.findIndex((line) => line.dataKey === dataKey);\n\t\treturn index >= 0 ? index : 0;\n\t}, [lines, dataKey]);\n\n\tconst seriesConfig = lines[seriesIndex];\n\tconst yScale = useYScale(seriesConfig?.yAxisId);\n\tconst seriesColor =\n\t\tdefaultScatterColors[seriesIndex % defaultScatterColors.length] ??\n\t\tdefaultScatterColors[0];\n\n\tconst resolvedFill = fill ?? seriesConfig?.stroke ?? seriesColor;\n\tconst resolvedStroke = stroke ?? resolvedFill;\n\n\tconst visualExtent = useMemo(\n\t\t() =>\n\t\t\tgetSeriesMarkerVisualExtent({\n\t\t\t\tradius,\n\t\t\t\tstrokeWidth,\n\t\t\t\tringGap,\n\t\t\t\toutlineWidth,\n\t\t\t\tshowActiveHighlight,\n\t\t\t}),\n\t\t[radius, strokeWidth, ringGap, outlineWidth, showActiveHighlight],\n\t);\n\n\tconst revealDurationSec =\n\t\tclipRevealTransition(enterTransition).duration ?? animationDuration / 1000;\n\tconst enterDuration = 0.5;\n\tconst isRevealing = animate && !isLoaded;\n\n\tconst getY = useCallback(\n\t\t(d: Record<string, unknown>) => {\n\t\t\tconst value = d[dataKey];\n\t\t\treturn typeof value === \"number\" ? (yScale(value) ?? 0) : null;\n\t\t},\n\t\t[dataKey, yScale],\n\t);\n\n\tconst points = useMemo<PointAt[]>(\n\t\t() =>\n\t\t\tdata.flatMap((d, index) => {\n\t\t\t\tconst cy = getY(d);\n\t\t\t\tif (cy === null) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t\tconst cx = xScale(xAccessor(d)) ?? 0;\n\t\t\t\tconst leadingEdge = Math.max(0, cx - visualExtent);\n\t\t\t\tconst revealDelay =\n\t\t\t\t\tinnerWidth > 0 && isRevealing\n\t\t\t\t\t\t? (leadingEdge / innerWidth) * revealDurationSec\n\t\t\t\t\t\t: 0;\n\n\t\t\t\treturn [{ index, cx, cy, revealDelay }];\n\t\t\t}),\n\t\t[\n\t\t\tdata,\n\t\t\tgetY,\n\t\t\txScale,\n\t\t\txAccessor,\n\t\t\tinnerWidth,\n\t\t\tisRevealing,\n\t\t\trevealDurationSec,\n\t\t\tvisualExtent,\n\t\t],\n\t);\n\n\t// Memo so the inner <SeriesMarkersActiveHighlight> sees a stable prop and\n\t// can be cheaply re-rendered on hover without re-creating the spread.\n\tconst markerStyle = useMemo<MarkerStyle>(\n\t\t() => ({\n\t\t\tfill: resolvedFill,\n\t\t\tstroke: resolvedStroke,\n\t\t\tstrokeWidth,\n\t\t\tringGap,\n\t\t\toutlineWidth,\n\t\t\toutlineColor,\n\t\t\tradius,\n\t\t}),\n\t\t[\n\t\t\tresolvedFill,\n\t\t\tresolvedStroke,\n\t\t\tstrokeWidth,\n\t\t\tringGap,\n\t\t\toutlineWidth,\n\t\t\toutlineColor,\n\t\t\tradius,\n\t\t],\n\t);\n\n\tif (isRevealing) {\n\t\treturn (\n\t\t\t<g>\n\t\t\t\t{points.map((point) => (\n\t\t\t\t\t<SeriesPointMarker\n\t\t\t\t\t\tcx={point.cx}\n\t\t\t\t\t\tcy={point.cy}\n\t\t\t\t\t\tdataKey={dataKey}\n\t\t\t\t\t\tenterBlur={enterBlur}\n\t\t\t\t\t\tenterDuration={enterDuration}\n\t\t\t\t\t\tindex={point.index}\n\t\t\t\t\t\tkey={`${dataKey}-${point.index}`}\n\t\t\t\t\t\trevealDelay={point.revealDelay}\n\t\t\t\t\t\trevealEpoch={revealEpoch ?? 0}\n\t\t\t\t\t\t{...markerStyle}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</g>\n\t\t);\n\t}\n\n\t// Stable base layer — its children come from the parent and stay\n\t// referentially identical when the dim wrapper re-renders for hover.\n\tconst baseMarkers = points.map((point) => (\n\t\t<StaticSeriesPointMarker\n\t\t\tcx={point.cx}\n\t\t\tcy={point.cy}\n\t\t\tkey={`${dataKey}-${point.index}`}\n\t\t\t{...markerStyle}\n\t\t/>\n\t));\n\tconst activeScale = showActiveHighlight ? 1.35 : 1;\n\n\treturn (\n\t\t<g>\n\t\t\t<SeriesMarkersDimWrapper\n\t\t\t\tenabled={fadeOnHover}\n\t\t\t\tinactiveBlur={inactiveBlur}\n\t\t\t\tinactiveOpacity={inactiveOpacity}\n\t\t\t\tseriesIndex={seriesIndex}\n\t\t\t>\n\t\t\t\t{baseMarkers}\n\t\t\t</SeriesMarkersDimWrapper>\n\t\t\t<SeriesMarkersActiveHighlight\n\t\t\t\tactiveScale={activeScale}\n\t\t\t\tenabled={fadeOnHover}\n\t\t\t\tmarkerStyle={markerStyle}\n\t\t\t\tpoints={points}\n\t\t\t/>\n\t\t</g>\n\t);\n}\n\nSeriesMarkers.displayName = \"SeriesMarkers\";\n\ninterface SeriesMarkersDimWrapperProps {\n\tenabled: boolean;\n\tinactiveOpacity: number;\n\tinactiveBlur: number;\n\tseriesIndex: number;\n\tchildren: ReactNode;\n}\n\n/**\n * Wraps the stable point grid with hover-driven opacity + blur. Subscribes to\n * hover internally so the grid (passed as `children`) keeps a stable reference\n * and React skips reconciling it when this wrapper re-renders.\n */\nfunction SeriesMarkersDimWrapper({\n\tenabled,\n\tinactiveOpacity,\n\tinactiveBlur,\n\tseriesIndex,\n\tchildren,\n}: SeriesMarkersDimWrapperProps) {\n\tconst { tooltipData } = useChartHover();\n\tconst { hoveredIndex: legendHoveredIndex } = useChartLegendHover();\n\tconst isLegendDimmed =\n\t\tlegendHoveredIndex !== null && legendHoveredIndex !== seriesIndex;\n\tconst dimBase = enabled && (tooltipData !== null || isLegendDimmed);\n\treturn (\n\t\t<g\n\t\t\topacity={dimBase ? inactiveOpacity : 1}\n\t\t\tstyle={{\n\t\t\t\ttransition: \"opacity 0.15s ease-in-out, filter 0.15s ease-in-out\",\n\t\t\t\tfilter:\n\t\t\t\t\tdimBase && inactiveBlur > 0 ? `blur(${inactiveBlur}px)` : \"none\",\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</g>\n\t);\n}\n\ninterface SeriesMarkersActiveHighlightProps {\n\tenabled: boolean;\n\tpoints: PointAt[];\n\tmarkerStyle: MarkerStyle;\n\tactiveScale: number;\n}\n\n/**\n * Renders the scaled \"active\" marker on top of the base grid. Subscribes to\n * hover internally; the parent doesn't re-render on cursor motion.\n */\nfunction SeriesMarkersActiveHighlight({\n\tenabled,\n\tpoints,\n\tmarkerStyle,\n\tactiveScale,\n}: SeriesMarkersActiveHighlightProps) {\n\tconst { tooltipData } = useChartHover();\n\tif (!enabled || tooltipData === null) {\n\t\treturn null;\n\t}\n\tconst activePoint = points.find((point) => point.index === tooltipData.index);\n\tif (!activePoint) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<StaticSeriesPointMarker\n\t\t\tcx={activePoint.cx}\n\t\t\tcy={activePoint.cy}\n\t\t\tscale={activeScale}\n\t\t\t{...markerStyle}\n\t\t/>\n\t);\n}\n\nexport default SeriesMarkers;\n","\"use client\";\n\nimport { curveMonotoneX } from \"@visx/curve\";\nimport { AreaClosed, LinePath } from \"@visx/shape\";\nimport type { CurveFactory } from \"d3-shape\";\nimport { useCallback, useId, useMemo, useRef, useState } from \"react\";\nimport { AreaGradientDefs } from \"./area-gradient-defs\";\nimport { chartCssVars, useChartStable, useYScale } from \"./chart-context\";\nimport type { ChartPhase, LoadingStyle } from \"./chart-phase\";\nimport { type FadeEdges, resolveFadeSides } from \"./fade-edges\";\nimport {\n\ttype LineLoadingPulseMode,\n\tLineLoadingPulseStroke,\n\tresolveLineLoadingPulseMode,\n} from \"./line-loading-pulse\";\nimport { LINE_LOADING_LOOP_PAUSE_MS } from \"./line-loading-timing\";\nimport { LineLoadingSweep } from \"./loading-sweep\";\nimport {\n\tresolveDashTailBounds,\n\tusePathStrokeMetrics,\n} from \"./path-stroke-utils\";\nimport { SeriesDashTailOverlay } from \"./series-dash-tail-overlay\";\nimport { SeriesHighlightLayer } from \"./series-highlight-layer\";\nimport { SeriesHoverDim } from \"./series-hover-dim\";\nimport { SeriesMarkers } from \"./series-markers\";\nimport type { SeriesPointMarkerStyle } from \"./series-point-marker\";\n\nexport interface AreaProps {\n\t/** Key in data to use for y values */\n\tdataKey: string;\n\t/** Y-scale group id (Recharts `yAxisId`). Default: `\"left\"`. */\n\tyAxisId?: string | number;\n\t/** Fill color for the area gradient start. Default: var(--chart-line-primary) */\n\tfill?: string;\n\t/** Fill opacity at the top of the area. Default: 0.4 */\n\tfillOpacity?: number;\n\t/** Stroke color for the line. Default: same as fill */\n\tstroke?: string;\n\t/** Stroke width. Default: 2 */\n\tstrokeWidth?: number;\n\t/** Curve function. Default: curveMonotoneX */\n\tcurve?: CurveFactory;\n\t/** Whether to animate the area. Default: true */\n\tanimate?: boolean;\n\t/** Whether to show the stroke line. Default: true */\n\tshowLine?: boolean;\n\t/** Whether to show highlight segment on hover. Default: true */\n\tshowHighlight?: boolean;\n\t/** Gradient opacity at bottom (0 = fully transparent). Default: 0 */\n\tgradientToOpacity?: number;\n\t/**\n\t * Vertical extent of the fill gradient (0–1). `1` fades across the full\n\t * height; lower values compress the gradient toward the top.\n\t */\n\tgradientSpan?: number;\n\t/**\n\t * Fade the area fill (and stroke) toward transparent at the chart edges.\n\t * - `true` fades both edges, `false` disables the fade entirely.\n\t * - `\"left\"` / `\"right\"` fades only that side — useful when the opposite\n\t * edge butts up against another element you don't want to fade into.\n\t * Default: false\n\t */\n\tfadeEdges?: FadeEdges;\n\t/** Render scatter-style circle markers at each data point. Default: false */\n\tshowMarkers?: boolean;\n\t/** Marker styling (same options as Scatter). */\n\tmarkers?: SeriesPointMarkerStyle;\n\t/**\n\t * Data index from which the line stroke becomes dashed (inclusive).\n\t * Useful for projecting incomplete periods, e.g. dashed from yesterday through today.\n\t */\n\tdashFromIndex?: number;\n\t/** Dash pattern for the tail segment when `dashFromIndex` is set. Default: \"6,4\" */\n\tdashArray?: string;\n\t/** Pulse stroke color while chart is loading. Default: var(--foreground) */\n\tloadingStroke?: string;\n\t/** Pulse stroke opacity while chart is loading. Default: 0.5 */\n\tloadingStrokeOpacity?: number;\n\t/**\n\t * Show the loading pulse overlay. Default: follows chart loading phase.\n\t * Set `false` to disable even during loading.\n\t */\n\tloading?: boolean;\n\t/** Override pulse animation mode (loop / exit / enter). */\n\tloadingPulseMode?: LineLoadingPulseMode;\n\t/**\n\t * Loading animation while the chart is in loading status: the default\n\t * traveling `\"pulse\"`, or a diagonal `\"sweep\"` shimmer across the skeleton\n\t * area. Default: `\"pulse\"`.\n\t */\n\tloadingStyle?: LoadingStyle;\n}\n\nfunction useAreaLoadingPulseState(\n\tchartPhase: ChartPhase,\n\tloading: boolean | undefined,\n\tloadingPulseMode: LineLoadingPulseMode | undefined,\n\tnotifyLoadingPulseComplete?: () => void,\n) {\n\tconst phasePulseMode = resolveLineLoadingPulseMode(chartPhase);\n\tconst pulseMode =\n\t\tloading === false\n\t\t\t? null\n\t\t\t: (loadingPulseMode ?? (loading === true ? \"loop\" : phasePulseMode));\n\tconst showLoadingPulse = pulseMode != null;\n\tconst showSeriesContent =\n\t\tchartPhase === \"revealing\" ||\n\t\tchartPhase === \"ready\" ||\n\t\tchartPhase === \"exitingReady\";\n\tconst [pulseEpoch, setPulseEpoch] = useState(0);\n\n\tconst handleLoadingPulseComplete = useCallback(() => {\n\t\tif (pulseMode === \"loop\") {\n\t\t\twindow.setTimeout(() => {\n\t\t\t\tsetPulseEpoch((epoch) => epoch + 1);\n\t\t\t}, LINE_LOADING_LOOP_PAUSE_MS);\n\t\t\treturn;\n\t\t}\n\t\tnotifyLoadingPulseComplete?.();\n\t}, [notifyLoadingPulseComplete, pulseMode]);\n\n\treturn {\n\t\thandleLoadingPulseComplete,\n\t\tpulseMode,\n\t\tpulseEpoch,\n\t\tshowLoadingPulse,\n\t\tshowSeriesContent,\n\t};\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: mirrors Line series layout (fill, stroke, dash, markers, pulse)\nexport function Area({\n\tdataKey,\n\tyAxisId,\n\tfill = chartCssVars.linePrimary,\n\tfillOpacity = 0.4,\n\tstroke,\n\tstrokeWidth = 2,\n\tcurve = curveMonotoneX,\n\tanimate = true,\n\tshowLine = true,\n\tshowHighlight = true,\n\tgradientToOpacity = 0,\n\tgradientSpan = 1,\n\tfadeEdges = false,\n\tshowMarkers = false,\n\tmarkers,\n\tdashFromIndex,\n\tdashArray = \"6,4\",\n\tloading,\n\tloadingStroke = chartCssVars.foreground,\n\tloadingStrokeOpacity = 0.5,\n\tloadingPulseMode,\n\tloadingStyle = \"pulse\",\n}: AreaProps) {\n\t// Stable slice only: hover state lives inside `<SeriesHoverDim>` and\n\t// `<SeriesHighlightLayer>` so this component (and its expensive\n\t// <SeriesDashTailOverlay> child) does not re-render on cursor motion.\n\t// The reveal-clip is now a single shared clipPath at the chart-shell\n\t// level (`time-series-chart-shell.tsx`); we no longer render a per-area\n\t// `<ChartRevealClip>` or read `revealEpoch` here.\n\tconst {\n\t\tdata,\n\t\trenderData,\n\t\txScale,\n\t\tinnerHeight,\n\t\tinnerWidth,\n\t\txAccessor,\n\t\tlines,\n\t\tchartPhase,\n\t\tnotifyLoadingPulseComplete,\n\t} = useChartStable();\n\tconst yScale = useYScale(yAxisId);\n\tconst {\n\t\thandleLoadingPulseComplete,\n\t\tpulseMode,\n\t\tpulseEpoch,\n\t\tshowLoadingPulse,\n\t\tshowSeriesContent,\n\t} = useAreaLoadingPulseState(\n\t\tchartPhase,\n\t\tloading,\n\t\tloadingPulseMode,\n\t\tnotifyLoadingPulseComplete,\n\t);\n\n\tconst seriesIndex = useMemo(() => {\n\t\tconst index = lines.findIndex((line) => line.dataKey === dataKey);\n\t\treturn index >= 0 ? index : 0;\n\t}, [lines, dataKey]);\n\n\tconst pathRef = useRef<SVGPathElement>(null);\n\tconst { pathLength, pathD } = usePathStrokeMetrics(pathRef, [\n\t\trenderData,\n\t\tinnerWidth,\n\t\tdashFromIndex,\n\t\tshowLine,\n\t\tshowSeriesContent,\n\t\tshowLoadingPulse,\n\t]);\n\n\t// Unique IDs for this area\n\tconst uniqueId = useId();\n\tconst gradientId = `area-gradient-${dataKey}-${uniqueId}`;\n\tconst strokeGradientId = `area-stroke-gradient-${dataKey}-${uniqueId}`;\n\tconst edgeMaskId = `area-edge-mask-${dataKey}-${uniqueId}`;\n\tconst edgeGradientId = `${edgeMaskId}-gradient`;\n\n\tconst isPatternFill = fill.startsWith(\"url(\");\n\tconst showAreaFill = isPatternFill || fillOpacity > 0;\n\tconst areaFill = isPatternFill ? fill : `url(#${gradientId})`;\n\n\t// Resolved stroke color (defaults to fill; pattern URLs need a real color)\n\tconst resolvedStroke =\n\t\tstroke || (isPatternFill ? chartCssVars.linePrimary : fill);\n\n\tconst getY = useCallback(\n\t\t(d: Record<string, unknown>) => {\n\t\t\tconst value = d[dataKey];\n\t\t\treturn typeof value === \"number\" ? (yScale(value) ?? 0) : 0;\n\t\t},\n\t\t[dataKey, yScale],\n\t);\n\n\tconst hasDashTail = resolveDashTailBounds(dashFromIndex, data.length);\n\t// The stroke gradient is only emitted when at least one edge fades, so fall\n\t// back to the resolved solid color otherwise — avoids an invalid url(#...).\n\tconst fadeSides = resolveFadeSides(fadeEdges);\n\tconst useViewportEdgeFade = fadeSides.any && !isPatternFill;\n\tlet strokePaint = resolvedStroke;\n\tif (!useViewportEdgeFade && fadeSides.any) {\n\t\tstrokePaint = `url(#${strokeGradientId})`;\n\t}\n\tconst highlightEnabled =\n\t\tshowHighlight && showLine && !showLoadingPulse && showSeriesContent;\n\tconst showSeriesStroke = showSeriesContent && showLine;\n\tlet visibleStroke = \"transparent\";\n\tif (showSeriesStroke && !hasDashTail) {\n\t\tvisibleStroke = strokePaint;\n\t}\n\tconst shouldMeasurePath = showLine && (showSeriesContent || showLoadingPulse);\n\n\tconst seriesLayers = (\n\t\t<>\n\t\t\t{showSeriesContent && showAreaFill ? (\n\t\t\t\t<AreaClosed\n\t\t\t\t\tcurve={curve}\n\t\t\t\t\tdata={renderData}\n\t\t\t\t\tfill={areaFill}\n\t\t\t\t\tx={(d) => xScale(xAccessor(d)) ?? 0}\n\t\t\t\t\ty={getY}\n\t\t\t\t\tyScale={yScale}\n\t\t\t\t/>\n\t\t\t) : null}\n\n\t\t\t{shouldMeasurePath ? (\n\t\t\t\t<>\n\t\t\t\t\t<LinePath\n\t\t\t\t\t\tcurve={curve}\n\t\t\t\t\t\tdata={renderData}\n\t\t\t\t\t\tinnerRef={pathRef}\n\t\t\t\t\t\tstroke={visibleStroke}\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\t\tx={(d) => xScale(xAccessor(d)) ?? 0}\n\t\t\t\t\t\ty={getY}\n\t\t\t\t\t/>\n\t\t\t\t\t{showSeriesStroke ? (\n\t\t\t\t\t\t<SeriesDashTailOverlay\n\t\t\t\t\t\t\tdashArray={dashArray}\n\t\t\t\t\t\t\tdashFromIndex={dashFromIndex}\n\t\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\t\tinnerHeight={innerHeight}\n\t\t\t\t\t\t\tinnerWidth={innerWidth}\n\t\t\t\t\t\t\tpathD={pathD}\n\t\t\t\t\t\t\tpathLength={pathLength}\n\t\t\t\t\t\t\tstroke={strokePaint}\n\t\t\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\t\t\txAccessor={xAccessor}\n\t\t\t\t\t\t\txScale={xScale}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\n\t\t\t\t</>\n\t\t\t) : null}\n\t\t</>\n\t);\n\n\t// Sweep style owns all loading modes (loop + the exit/enter transitions),\n\t// drawing its own silhouette; the pulse covers the default style.\n\tconst sweepLoading =\n\t\tshowLoadingPulse && innerWidth > 0 && loadingStyle === \"sweep\";\n\tconst pulseLoading = showLoadingPulse && innerWidth > 0 && !sweepLoading;\n\n\treturn (\n\t\t<>\n\t\t\t<AreaGradientDefs\n\t\t\t\tedgeGradientId={edgeGradientId}\n\t\t\t\tedgeMaskId={edgeMaskId}\n\t\t\t\tfadeEdges={fadeEdges}\n\t\t\t\tfill={fill}\n\t\t\t\tfillOpacity={fillOpacity}\n\t\t\t\tgradientId={gradientId}\n\t\t\t\tgradientSpan={gradientSpan}\n\t\t\t\tgradientToOpacity={gradientToOpacity}\n\t\t\t\tinnerHeight={innerHeight}\n\t\t\t\tinnerWidth={innerWidth}\n\t\t\t\tisPatternFill={isPatternFill}\n\t\t\t\tresolvedStroke={resolvedStroke}\n\t\t\t\tstrokeGradientId={strokeGradientId}\n\t\t\t/>\n\n\t\t\t<SeriesHoverDim\n\t\t\t\tdimOpacity={0.6}\n\t\t\t\tenabled={showHighlight}\n\t\t\t\tseriesIndex={seriesIndex}\n\t\t\t>\n\t\t\t\t{useViewportEdgeFade ? (\n\t\t\t\t\t<g mask={`url(#${edgeMaskId})`}>{seriesLayers}</g>\n\t\t\t\t) : (\n\t\t\t\t\tseriesLayers\n\t\t\t\t)}\n\t\t\t</SeriesHoverDim>\n\n\t\t\t{/* Highlight segment on hover — isolated hover subscriber. */}\n\t\t\t<SeriesHighlightLayer\n\t\t\t\tenabled={highlightEnabled}\n\t\t\t\theight={innerHeight}\n\t\t\t\tpathRef={pathRef}\n\t\t\t\tstroke={resolvedStroke}\n\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t/>\n\n\t\t\t{showMarkers && showSeriesContent ? (\n\t\t\t\t<SeriesMarkers\n\t\t\t\t\tanimate={animate}\n\t\t\t\t\tdataKey={dataKey}\n\t\t\t\t\t{...markers}\n\t\t\t\t\tfill={markers?.fill ?? resolvedStroke}\n\t\t\t\t\tstroke={markers?.stroke ?? markers?.fill ?? resolvedStroke}\n\t\t\t\t/>\n\t\t\t) : null}\n\n\t\t\t{sweepLoading ? (\n\t\t\t\t<LineLoadingSweep\n\t\t\t\t\tcurve={curve}\n\t\t\t\t\tkey=\"loading-sweep\"\n\t\t\t\t\tmode={pulseMode ?? \"loop\"}\n\t\t\t\t\tonTransitionComplete={handleLoadingPulseComplete}\n\t\t\t\t\tstroke={loadingStroke}\n\t\t\t\t\tstrokeOpacity={loadingStrokeOpacity}\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\twithArea\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{pulseLoading && pathD ? (\n\t\t\t\t<LineLoadingPulseStroke\n\t\t\t\t\tkey=\"loading-pulse\"\n\t\t\t\t\tloopEpoch={pulseEpoch}\n\t\t\t\t\tmode={pulseMode ?? undefined}\n\t\t\t\t\tonCycleComplete={handleLoadingPulseComplete}\n\t\t\t\t\tpathD={pathD}\n\t\t\t\t\tstroke={loadingStroke}\n\t\t\t\t\tstrokeOpacity={loadingStrokeOpacity}\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</>\n\t);\n}\n\nArea.displayName = \"Area\";\n\nexport default Area;\n","\"use client\";\n\nimport { motion, useReducedMotion, type Variants } from \"motion/react\";\nimport { type ComponentProps, useCallback } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport type ShimmeringTextProps = Omit<\n\tComponentProps<typeof motion.span>,\n\t\"children\"\n> & {\n\t/** The text to render with the shimmering effect. */\n\ttext: string;\n\t/**\n\t * Duration in seconds for one shimmer cycle.\n\t * @defaultValue 1\n\t */\n\tduration?: number;\n\t/**\n\t * Pause the shimmer (e.g. when the hero leaves the viewport).\n\t * @defaultValue false\n\t */\n\tpaused?: boolean;\n\t/**\n\t * Legacy alias for `paused`.\n\t * @defaultValue false\n\t */\n\tisStopped?: boolean;\n};\n\nexport function ShimmeringText({\n\ttext,\n\tduration = 1,\n\tisStopped = false,\n\tpaused = false,\n\tclassName,\n\t...props\n}: ShimmeringTextProps) {\n\tconst reducedMotion = useReducedMotion();\n\tconst stopped = isStopped || paused || reducedMotion === true;\n\n\tconst createCharVariants = useCallback(\n\t\t(charIndex: number): Variants => ({\n\t\t\trunning: {\n\t\t\t\tcolor: [\"var(--color)\", \"var(--shimmering-color)\", \"var(--color)\"],\n\t\t\t\ttransition: {\n\t\t\t\t\tduration,\n\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\trepeatType: \"loop\",\n\t\t\t\t\trepeatDelay: text.length * 0.05,\n\t\t\t\t\tdelay: (charIndex * duration) / text.length,\n\t\t\t\t\tease: \"easeInOut\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tstopped: {\n\t\t\t\tcolor: \"var(--color)\",\n\t\t\t\ttransition: {\n\t\t\t\t\tduration: duration * 0.5,\n\t\t\t\t\tease: \"easeOut\",\n\t\t\t\t},\n\t\t\t},\n\t\t}),\n\t\t[duration, text.length],\n\t);\n\n\treturn (\n\t\t<motion.span\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex select-none items-center leading-none\",\n\t\t\t\t\"[--color:var(--muted-foreground)] [--shimmering-color:var(--foreground)]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{text.split(\"\").map((char, index) => (\n\t\t\t\t<motion.span\n\t\t\t\t\tanimate={stopped ? \"stopped\" : \"running\"}\n\t\t\t\t\taria-hidden\n\t\t\t\t\tclassName=\"inline-block whitespace-pre leading-none\"\n\t\t\t\t\tinitial=\"stopped\"\n\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: static label text, order never changes\n\t\t\t\t\tkey={index}\n\t\t\t\t\tvariants={createCharVariants(index)}\n\t\t\t\t>\n\t\t\t\t\t{char}\n\t\t\t\t</motion.span>\n\t\t\t))}\n\t\t\t<span className=\"sr-only\">{text}</span>\n\t\t</motion.span>\n\t);\n}\n","\"use client\";\n\nimport { motion } from \"motion/react\";\nimport { cn } from \"@/lib/utils\";\nimport { ShimmeringText } from \"../shimmering-text\";\nimport {\n\tLINE_LOADING_PULSE_EASE,\n\tLOADING_LABEL_EXIT_S,\n\tLOADING_LABEL_EXIT_Y_PX,\n} from \"./line-loading-timing\";\n\nexport interface ChartLoadingLabelProps {\n\t/** Label shown centered over the chart. */\n\ttext?: string;\n\tclassName?: string;\n\t/** Animate down, fade, and blur during loading → ready handoff. */\n\texiting?: boolean;\n}\n\nexport function ChartLoadingLabel({\n\ttext = \"Loading\",\n\tclassName,\n\texiting = false,\n}: ChartLoadingLabelProps) {\n\tif (!text.trim()) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<motion.div\n\t\t\tanimate={{\n\t\t\t\ty: exiting ? LOADING_LABEL_EXIT_Y_PX : 0,\n\t\t\t\topacity: exiting ? 0 : 1,\n\t\t\t\tfilter: exiting ? \"blur(2px)\" : \"blur(0px)\",\n\t\t\t}}\n\t\t\taria-live=\"polite\"\n\t\t\tclassName={cn(\n\t\t\t\t\"pointer-events-none absolute inset-0 flex items-center justify-center\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tinitial={false}\n\t\t\trole=\"status\"\n\t\t\ttransition={{\n\t\t\t\tduration: LOADING_LABEL_EXIT_S,\n\t\t\t\tease: [...LINE_LOADING_PULSE_EASE],\n\t\t\t}}\n\t\t>\n\t\t\t<ShimmeringText\n\t\t\t\tclassName=\"font-medium text-sm tracking-wide [--color:var(--muted-foreground)] [--shimmering-color:var(--foreground)]\"\n\t\t\t\ttext={text}\n\t\t\t/>\n\t\t</motion.div>\n\t);\n}\n\nexport default ChartLoadingLabel;\n","export type ChartStatus = \"loading\" | \"ready\";\n\n/** Loading animation style: the default traveling pulse, or a diagonal\n * shimmer that sweeps across the skeleton. */\nexport type LoadingStyle = \"pulse\" | \"sweep\";\n\n/**\n * Internal visual lifecycle phase. Forward and reverse transitions add\n * intermediate phases in later stack branches.\n */\nexport type ChartPhase =\n\t| \"loading\"\n\t| \"exiting\"\n\t| \"gridTweenReady\"\n\t| \"revealing\"\n\t| \"ready\"\n\t| \"exitingReady\"\n\t| \"gridTweenLoading\"\n\t| \"revealingLoading\";\n\nexport const DEFAULT_CHART_STATUS: ChartStatus = \"ready\";\n\n/** Default Y-domain tween when transitioning loading ↔ ready (ms). */\nexport const DEFAULT_Y_DOMAIN_TWEEN_MS = 500;\n\n/** Relative domain delta below which Y tween may be skipped (see plan). */\nexport const Y_DOMAIN_TWEEN_SKIP_THRESHOLD = 0.02;\n\n/** Resting phase for a given status before transition orchestration runs. */\nexport function resolveRestingChartPhase(status: ChartStatus): ChartPhase {\n\treturn status === \"loading\" ? \"loading\" : \"ready\";\n}\n\nexport function isChartInteractionPhase(phase: ChartPhase): boolean {\n\treturn phase === \"ready\";\n}\n\nexport const DEFAULT_CHART_LIFECYCLE = {\n\tchartPhase: \"ready\",\n\tchartStatus: \"ready\",\n\tloadingLabel: undefined,\n\tyDomainTweenDuration: DEFAULT_Y_DOMAIN_TWEEN_MS,\n\tyDomainSkeletonByAxis: { left: [0, 100] as [number, number] },\n\tyDomainTargetByAxis: { left: [0, 100] as [number, number] },\n} as const satisfies {\n\tchartPhase: ChartPhase;\n\tchartStatus: ChartStatus;\n\tloadingLabel: undefined;\n\tyDomainTweenDuration: number;\n\tyDomainSkeletonByAxis: Record<string, [number, number]>;\n\tyDomainTargetByAxis: Record<string, [number, number]>;\n};\n","\"use client\";\n\nimport { curveMonotoneX } from \"@visx/curve\";\nimport { AreaClosed } from \"@visx/shape\";\nimport type { CurveFactory } from \"d3-shape\";\nimport { useChartStable } from \"./chart-context\";\n\nexport interface PatternAreaProps {\n\t/** Key in data to use for y values */\n\tdataKey: string;\n\t/** Fill color or pattern URL (e.g. `url(#pattern-id)`) */\n\tfill: string;\n\t/** Curve function. Default: curveMonotoneX */\n\tcurve?: CurveFactory;\n\t/** @deprecated Pattern fill is not clip-revealed; only the stroke `Area` animates. */\n\tanimate?: boolean;\n}\n\n/**\n * Filled area using an SVG pattern (`url(#id)`).\n * Pair with `PatternLines` in `AreaChart` children and an `Area` with `fillOpacity={0}` for the stroke line.\n */\nexport function PatternArea({\n\tdataKey,\n\tfill,\n\tcurve = curveMonotoneX,\n}: PatternAreaProps) {\n\tconst { renderData, xScale, yScale, xAccessor } = useChartStable();\n\n\treturn (\n\t\t<AreaClosed\n\t\t\tcurve={curve}\n\t\t\tdata={renderData}\n\t\t\tfill={fill}\n\t\t\tx={(d) => xScale(xAccessor(d)) ?? 0}\n\t\t\ty={(d) => {\n\t\t\t\tconst v = d[dataKey];\n\t\t\t\treturn typeof v === \"number\" ? (yScale(v) ?? 0) : 0;\n\t\t\t}}\n\t\t\tyScale={yScale}\n\t\t/>\n\t);\n}\n\nPatternArea.displayName = \"PatternArea\";\n\nexport default PatternArea;\n","import {\n\tChildren,\n\tcloneElement,\n\tFragment,\n\tisValidElement,\n\ttype ReactElement,\n\ttype ReactNode,\n} from \"react\";\n\n/** Marker on wrapper components whose single child should inherit clip classification. */\nexport const CHART_CLIP_PASSTHROUGH = \"__chartClipPassthrough\" as const;\n\nexport function isChartClipPassthrough(type: unknown): boolean {\n\treturn (\n\t\ttypeof type === \"function\" &&\n\t\t(type as { [CHART_CLIP_PASSTHROUGH]?: boolean })[CHART_CLIP_PASSTHROUGH] ===\n\t\t\ttrue\n\t);\n}\n\n/** Unwrap visibility wrappers so `Grid` / axes stay outside the series clip. */\nexport function resolveChartChildElement(child: ReactElement): ReactElement {\n\tif (isChartClipPassthrough(child.type)) {\n\t\tconst inner = (child.props as { children?: unknown }).children;\n\t\tif (isValidElement(inner)) {\n\t\t\treturn resolveChartChildElement(inner);\n\t\t}\n\t}\n\treturn child;\n}\n\n/** Walk chart children, flattening React fragments (studio often groups layers in `<>...</>`). */\nexport function forEachChartChild(\n\tchildren: ReactNode,\n\tcallback: (child: ReactElement, index: number) => void,\n) {\n\tlet index = 0;\n\tconst visit = (nodes: ReactNode) => {\n\t\tChildren.forEach(nodes, (child) => {\n\t\t\tif (!isValidElement(child)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (child.type === Fragment) {\n\t\t\t\tvisit((child.props as { children?: ReactNode }).children);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcallback(child, index);\n\t\t\tindex += 1;\n\t\t});\n\t};\n\tvisit(children);\n}\n\nconst CLIP_EXCLUDED_COMPONENT_NAMES = new Set([\n\t\"Background\",\n\t\"Grid\",\n\t\"XAxis\",\n\t\"YAxis\",\n\t\"BarXAxis\",\n\t\"BarYAxis\",\n\t\"LiveXAxis\",\n\t\"LiveYAxis\",\n]);\n\nconst UNDERLAY_COMPONENT_NAMES = new Set([\"ReferenceArea\", \"BarColumnTrack\"]);\n\n/** Markers render after the interaction overlay so they stay clickable. */\nexport function isPostOverlayComponent(child: ReactElement): boolean {\n\tconst childType = child.type as {\n\t\tdisplayName?: string;\n\t\tname?: string;\n\t\t__isChartMarkers?: boolean;\n\t\t__isPostOverlay?: boolean;\n\t};\n\n\tif (childType.__isChartMarkers || childType.__isPostOverlay) {\n\t\treturn true;\n\t}\n\n\tconst componentName =\n\t\ttypeof child.type === \"function\"\n\t\t\t? childType.displayName || childType.name || \"\"\n\t\t\t: \"\";\n\n\treturn (\n\t\tcomponentName === \"ChartMarkers\" ||\n\t\tcomponentName === \"MarkerGroup\" ||\n\t\tcomponentName === \"ChartBrush\"\n\t);\n}\n\n/** Renders above grid/axes but below series; excluded from grow-clip reveal. */\nexport function isUnderlayComponent(child: ReactElement): boolean {\n\tconst childType = child.type as { displayName?: string; name?: string };\n\tconst componentName =\n\t\ttypeof child.type === \"function\"\n\t\t\t? childType.displayName || childType.name || \"\"\n\t\t\t: \"\";\n\treturn UNDERLAY_COMPONENT_NAMES.has(componentName);\n}\n\n/** Grid and axes stay visible during series clip reveal (e.g. loading → ready). */\nexport function isClipExcludedComponent(child: ReactElement): boolean {\n\tconst childType = child.type as { displayName?: string; name?: string };\n\tconst componentName =\n\t\ttypeof child.type === \"function\"\n\t\t\t? childType.displayName || childType.name || \"\"\n\t\t\t: \"\";\n\treturn CLIP_EXCLUDED_COMPONENT_NAMES.has(componentName);\n}\n\n/** SVG layer lists from chart shells need stable keys when rendered as arrays. */\nexport function renderKeyedChartLayers(children: ReactElement[]) {\n\treturn children.map((child, index) =>\n\t\tcloneElement(child, { key: child.key ?? `chart-layer-${index}` }),\n\t);\n}\n","import {\n\tChildren,\n\tisValidElement,\n\ttype ReactElement,\n\ttype ReactNode,\n} from \"react\";\n\nexport function getChartChildComponentName(child: ReactElement): string {\n\tconst childType = child.type as { displayName?: string; name?: string };\n\treturn typeof child.type === \"function\"\n\t\t? childType.displayName || childType.name || \"\"\n\t\t: \"\";\n}\n\nconst VISX_PATTERN_COMPONENT_NAMES = new Set([\n\t\"Lines\",\n\t\"Circles\",\n\t\"Waves\",\n\t\"Hexagons\",\n\t\"Path\",\n\t\"Pattern\",\n]);\n\n/** @visx/pattern default exports use short names (e.g. `Lines`); also match *Pattern* displayNames. */\nexport function isPatternDefComponent(child: ReactElement): boolean {\n\tconst name = getChartChildComponentName(child);\n\treturn name.includes(\"Pattern\") || VISX_PATTERN_COMPONENT_NAMES.has(name);\n}\n\nexport function isGradientDefComponent(child: ReactElement): boolean {\n\tconst name = getChartChildComponentName(child);\n\treturn (\n\t\tname.includes(\"Gradient\") ||\n\t\tname === \"LinearGradient\" ||\n\t\tname === \"RadialGradient\"\n\t);\n}\n\nexport function isChartDefsComponent(child: ReactElement): boolean {\n\treturn isPatternDefComponent(child) || isGradientDefComponent(child);\n}\n\n/** Split hoisted defs: @visx/pattern nodes already wrap `<defs>` and render at the svg root. */\nexport function partitionChartDefNodes(defNodes: ReactElement[]): {\n\tpatternDefNodes: ReactElement[];\n\tgradientDefNodes: ReactElement[];\n} {\n\tconst patternDefNodes: ReactElement[] = [];\n\tconst gradientDefNodes: ReactElement[] = [];\n\n\tfor (const node of defNodes) {\n\t\tif (isPatternDefComponent(node)) {\n\t\t\tpatternDefNodes.push(node);\n\t\t} else {\n\t\t\tgradientDefNodes.push(node);\n\t\t}\n\t}\n\n\treturn { patternDefNodes, gradientDefNodes };\n}\n\nexport function collectChartDefsChildren(children: ReactNode): ReactElement[] {\n\tconst defNodes: ReactElement[] = [];\n\n\tChildren.forEach(children, (child) => {\n\t\tif (isValidElement(child) && isChartDefsComponent(child)) {\n\t\t\tdefNodes.push(child);\n\t\t}\n\t});\n\n\treturn defNodes;\n}\n","export const shortDateFmt = new Intl.DateTimeFormat(\"en-US\", {\n\tmonth: \"short\",\n\tday: \"numeric\",\n});\n\nexport const weekdayDateFmt = new Intl.DateTimeFormat(\"en-US\", {\n\tweekday: \"short\",\n\tmonth: \"short\",\n\tday: \"numeric\",\n});\n\nexport const hmsTimeFmt = new Intl.DateTimeFormat(\"en-US\", {\n\thour: \"2-digit\",\n\tminute: \"2-digit\",\n\tsecond: \"2-digit\",\n\thour12: false,\n});\n\n// `Intl.NumberFormat.prototype.format` is a bound getter — safe to extract.\nexport const intFmt = new Intl.NumberFormat(\"en-US\").format;\n","\"use client\";\n\nimport type { Transition } from \"motion/react\";\nimport { motion } from \"motion/react\";\nimport { clipRevealTransition } from \"./animation\";\n\nexport type ChartRevealClipMode = \"reveal\" | \"conceal\";\n\nexport interface ChartRevealClipProps {\n\tclipPathId: string;\n\theight: number;\n\ttargetWidth: number;\n\tenterTransition?: Transition;\n\t/** Bumps when motion settings change to replay the reveal. */\n\trevealEpoch: number;\n\t/** Extra inset around the clip rect so edge glyphs are not cut off. */\n\tpadding?: number;\n\t/** When false, clip stays at full width (no grow animation). */\n\tanimating?: boolean;\n\t/** Reveal grows 0 → full; conceal shrinks full → 0 (ready → loading). */\n\tmode?: ChartRevealClipMode;\n\t/** Called when a conceal animation finishes. */\n\tonComplete?: () => void;\n}\n\n/**\n * Left-to-right clip reveal for cartesian series.\n * Grows clip rect width from 0 → full (true LTR; scaleX is avoided — it reveals from center).\n */\nexport function ChartRevealClip({\n\tclipPathId,\n\theight,\n\ttargetWidth,\n\tenterTransition,\n\trevealEpoch,\n\tpadding = 0,\n\tanimating = true,\n\tmode = \"reveal\",\n\tonComplete,\n}: ChartRevealClipProps) {\n\tconst transition = clipRevealTransition(enterTransition);\n\tconst paddedWidth = Math.max(0, targetWidth + padding * 2);\n\tconst paddedHeight = height + padding * 2;\n\n\tif (!animating) {\n\t\treturn (\n\t\t\t<clipPath id={clipPathId}>\n\t\t\t\t<rect\n\t\t\t\t\theight={paddedHeight}\n\t\t\t\t\twidth={paddedWidth}\n\t\t\t\t\tx={-padding}\n\t\t\t\t\ty={-padding}\n\t\t\t\t/>\n\t\t\t</clipPath>\n\t\t);\n\t}\n\n\tif (mode === \"conceal\") {\n\t\t// Mirror the LTR reveal: advance the clip's left edge rightward while width\n\t\t// shrinks (same geometry as `LineLoadingPulseStroke` exit half-cycle).\n\t\tconst rightEdge = -padding + paddedWidth;\n\n\t\treturn (\n\t\t\t<clipPath id={clipPathId}>\n\t\t\t\t<motion.rect\n\t\t\t\t\tanimate={{ width: 0, x: rightEdge }}\n\t\t\t\t\theight={paddedHeight}\n\t\t\t\t\tinitial={{ width: paddedWidth, x: -padding }}\n\t\t\t\t\tkey={`conceal-${revealEpoch}`}\n\t\t\t\t\tonAnimationComplete={() => onComplete?.()}\n\t\t\t\t\ttransition={transition}\n\t\t\t\t\ty={-padding}\n\t\t\t\t/>\n\t\t\t</clipPath>\n\t\t);\n\t}\n\n\treturn (\n\t\t<clipPath id={clipPathId}>\n\t\t\t<motion.rect\n\t\t\t\tanimate={{ width: paddedWidth }}\n\t\t\t\theight={paddedHeight}\n\t\t\t\tinitial={{ width: 0 }}\n\t\t\t\tkey={`reveal-${revealEpoch}`}\n\t\t\t\ttransition={transition}\n\t\t\t\twidth={paddedWidth}\n\t\t\t\tx={-padding}\n\t\t\t\ty={-padding}\n\t\t\t/>\n\t\t</clipPath>\n\t);\n}\n","export function decimateTimeSeries<T extends Record<string, unknown>>(\n\tdata: T[],\n\tmaxPoints: number,\n\tvalueKeys: string[] = [],\n): T[] {\n\tconst len = data.length;\n\tif (maxPoints >= len || maxPoints < 3) {\n\t\treturn data;\n\t}\n\n\tconst getY = (point: T, index: number): number => {\n\t\tif (valueKeys.length === 0) {\n\t\t\tfor (const val of Object.values(point)) {\n\t\t\t\tif (typeof val === \"number\") {\n\t\t\t\t\treturn val;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn index;\n\t\t}\n\n\t\tlet sum = 0;\n\t\tlet count = 0;\n\t\tfor (const key of valueKeys) {\n\t\t\tconst val = point[key];\n\t\t\tif (typeof val === \"number\") {\n\t\t\t\tsum += val;\n\t\t\t\tcount++;\n\t\t\t}\n\t\t}\n\t\treturn count > 0 ? sum / count : index;\n\t};\n\n\tconst sampled: T[] = [data[0] as T];\n\tconst bucketSize = (len - 2) / (maxPoints - 2);\n\tlet previousIndex = 0;\n\n\tfor (let i = 0; i < maxPoints - 2; i++) {\n\t\tconst rangeStart = Math.floor((i + 1) * bucketSize) + 1;\n\t\tconst rangeEnd = Math.min(Math.floor((i + 2) * bucketSize) + 1, len - 1);\n\n\t\tconst nextRangeStart = Math.floor((i + 2) * bucketSize) + 1;\n\t\tconst nextRangeEnd = Math.min(Math.floor((i + 3) * bucketSize) + 1, len);\n\t\tconst nextCount = Math.max(0, nextRangeEnd - nextRangeStart);\n\n\t\tlet avgX = len - 1;\n\t\tlet avgY = getY(data[len - 1] as T, len - 1);\n\t\tif (nextCount > 0) {\n\t\t\tavgX = 0;\n\t\t\tavgY = 0;\n\t\t\tfor (let j = nextRangeStart; j < nextRangeEnd; j++) {\n\t\t\t\tavgX += j;\n\t\t\t\tavgY += getY(data[j] as T, j);\n\t\t\t}\n\t\t\tavgX /= nextCount;\n\t\t\tavgY /= nextCount;\n\t\t}\n\n\t\tconst pointA = data[previousIndex] as T;\n\t\tconst ax = previousIndex;\n\t\tconst ay = getY(pointA, previousIndex);\n\n\t\tlet maxArea = -1;\n\t\tlet maxIndex = rangeStart;\n\n\t\tfor (let j = rangeStart; j < rangeEnd; j++) {\n\t\t\tconst area =\n\t\t\t\tMath.abs(\n\t\t\t\t\t(ax - avgX) * (getY(data[j] as T, j) - ay) - (ax - j) * (avgY - ay),\n\t\t\t\t) * 0.5;\n\t\t\tif (area > maxArea) {\n\t\t\t\tmaxArea = area;\n\t\t\t\tmaxIndex = j;\n\t\t\t}\n\t\t}\n\n\t\tsampled.push(data[maxIndex] as T);\n\t\tpreviousIndex = maxIndex;\n\t}\n\n\tsampled.push(data[len - 1] as T);\n\treturn sampled;\n}\n\n/** ~1.5 points per pixel — enough for crisp curves without over-drawing. */\nexport function maxRenderPointsForWidth(innerWidth: number): number {\n\treturn Math.max(64, Math.ceil(innerWidth * 1.5));\n}\n\n/** Bucket OHLC rows into fewer candles while preserving high/low extremes. */\nexport function decimateOhlcData<T extends Record<string, unknown>>(\n\tdata: T[],\n\tmaxPoints: number,\n): T[] {\n\tconst len = data.length;\n\tif (maxPoints >= len || maxPoints < 2) {\n\t\treturn data;\n\t}\n\n\tconst bucketSize = len / maxPoints;\n\tconst sampled: T[] = [];\n\n\tfor (let i = 0; i < maxPoints; i++) {\n\t\tconst start = Math.floor(i * bucketSize);\n\t\tconst end = Math.min(len, Math.floor((i + 1) * bucketSize));\n\t\tif (start >= end) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst bucket = data.slice(start, end);\n\t\tconst first = bucket[0] as T;\n\t\tconst last = bucket.at(-1) as T;\n\n\t\tlet high = Number.NEGATIVE_INFINITY;\n\t\tlet low = Number.POSITIVE_INFINITY;\n\t\tfor (const row of bucket) {\n\t\t\tconst rowHigh = row.high;\n\t\t\tconst rowLow = row.low;\n\t\t\tif (typeof rowHigh === \"number\" && rowHigh > high) {\n\t\t\t\thigh = rowHigh;\n\t\t\t}\n\t\t\tif (typeof rowLow === \"number\" && rowLow < low) {\n\t\t\t\tlow = rowLow;\n\t\t\t}\n\t\t}\n\n\t\tsampled.push({\n\t\t\t...last,\n\t\t\topen: first.open,\n\t\t\thigh: Number.isFinite(high) ? high : last.high,\n\t\t\tlow: Number.isFinite(low) ? low : last.low,\n\t\t\tclose: last.close,\n\t\t} as T);\n\t}\n\n\treturn sampled;\n}\n","export function filterDataByXDomain(\n\tdata: Record<string, unknown>[],\n\txDomain: [Date, Date],\n\txAccessor: (d: Record<string, unknown>) => Date,\n): Record<string, unknown>[] {\n\tconst start = xDomain[0].getTime();\n\tconst end = xDomain[1].getTime();\n\tconst minTime = Math.min(start, end);\n\tconst maxTime = Math.max(start, end);\n\n\treturn data.filter((d) => {\n\t\tconst time = xAccessor(d).getTime();\n\t\treturn time >= minTime && time <= maxTime;\n\t});\n}\n\nexport function resolveDataXExtent(\n\tdata: Record<string, unknown>[],\n\txAccessor: (d: Record<string, unknown>) => Date,\n): [Date, Date] | null {\n\tif (data.length === 0) {\n\t\treturn null;\n\t}\n\n\tlet minTime = Number.POSITIVE_INFINITY;\n\tlet maxTime = Number.NEGATIVE_INFINITY;\n\n\tfor (const point of data) {\n\t\tconst time = xAccessor(point).getTime();\n\t\tif (time < minTime) {\n\t\t\tminTime = time;\n\t\t}\n\t\tif (time > maxTime) {\n\t\t\tmaxTime = time;\n\t\t}\n\t}\n\n\tif (minTime === Number.POSITIVE_INFINITY) {\n\t\treturn null;\n\t}\n\n\treturn [new Date(minTime), new Date(maxTime)];\n}\n\n/** Brush track extent — optionally extends past the last data row (e.g. projections). */\nexport function resolveBrushTrackXExtent(\n\tdata: Record<string, unknown>[],\n\txAccessor: (d: Record<string, unknown>) => Date,\n\txExtentMax?: Date,\n): [Date, Date] | null {\n\tconst extent = resolveDataXExtent(data, xAccessor);\n\tif (!extent) {\n\t\treturn null;\n\t}\n\tif (!xExtentMax || xExtentMax.getTime() <= extent[1].getTime()) {\n\t\treturn extent;\n\t}\n\treturn [extent[0], xExtentMax];\n}\n","const DEFAULT_SKELETON_DATA_KEY = \"value\";\nconst DEFAULT_SKELETON_POINT_COUNT = 7;\n\nexport interface GenerateChartSkeletonDataOptions {\n\t/** Key used for y values in each row. Default: `\"value\"`. */\n\tdataKey?: string;\n\t/** Number of points. Default: 7. */\n\tpointCount?: number;\n\t/** Start date for the x axis. Default: 2025-01-01. */\n\tbaseDate?: Date;\n}\n\n/** Placeholder series used while `status=\"loading\"` and data is empty. */\nexport function generateChartSkeletonData(\n\toptions: GenerateChartSkeletonDataOptions = {},\n): Record<string, unknown>[] {\n\tconst dataKey = options.dataKey ?? DEFAULT_SKELETON_DATA_KEY;\n\tconst pointCount = options.pointCount ?? DEFAULT_SKELETON_POINT_COUNT;\n\tconst baseDate = options.baseDate ?? new Date(\"2025-01-01\");\n\n\treturn Array.from({ length: pointCount }, (_, index) => {\n\t\tconst date = new Date(baseDate);\n\t\tdate.setDate(baseDate.getDate() + index);\n\t\treturn {\n\t\t\tdate,\n\t\t\t[dataKey]: Math.round(110 + Math.sin(index * 1.15) * 36 + index * 9),\n\t\t};\n\t});\n}\n\n/** Skeleton rows that mirror target dates/count with lower magnitudes for Y tween. */\nexport function generateChartSkeletonFromTarget(\n\ttargetData: Record<string, unknown>[],\n\tdataKey: string,\n): Record<string, unknown>[] {\n\treturn targetData.map((row, index) => ({\n\t\t...row,\n\t\t[dataKey]: Math.round(95 + Math.sin(index * 1.05) * 28 + index * 7),\n\t}));\n}\n\nexport { DEFAULT_SKELETON_DATA_KEY, DEFAULT_SKELETON_POINT_COUNT };\n","export type ProjectionMode = \"auto\" | \"target\" | \"manual\";\nexport type ProjectionAutoMethod = \"linearRegression\" | \"lastSegment\";\n/** How the projection segment is drawn between anchor and horizon. */\nexport type ProjectionCurveKind = \"linear\" | \"bezier\";\n/** @deprecated Stepped density removed — projections always anchor → horizon. */\nexport type ProjectionPathDensity = \"stepped\" | \"endpoints\";\n\nexport interface ProjectionPoint {\n\tdate: Date;\n\tvalue: number;\n}\n\nexport interface BuildProjectionPathOptions {\n\tsourceData: Record<string, unknown>[];\n\tseriesKey: string;\n\txDataKey?: string;\n\tmode: ProjectionMode;\n\tautoMethod?: ProjectionAutoMethod;\n\t/** Auto mode: stepped points per interval, or anchor + end only. Default: stepped */\n\tpathDensity?: ProjectionPathDensity;\n\t/** Index in sourceData where projection anchors (default: last point). */\n\tstartIndex?: number;\n\t/** How many future points to generate (matches source cadence). */\n\thorizonPoints?: number;\n\t/** Target Y at the final projected date (target mode). */\n\tendValue?: number;\n\t/** Full manual path — anchor + future points (manual mode). */\n\tpoints?: ProjectionPoint[];\n}\n\nfunction readDate(row: Record<string, unknown>, xDataKey: string): Date | null {\n\tconst raw = row[xDataKey];\n\tif (raw instanceof Date && !Number.isNaN(raw.getTime())) {\n\t\treturn raw;\n\t}\n\tif (typeof raw === \"number\" && Number.isFinite(raw)) {\n\t\tconst date = new Date(raw);\n\t\treturn Number.isNaN(date.getTime()) ? null : date;\n\t}\n\tif (typeof raw === \"string\") {\n\t\tconst date = new Date(raw);\n\t\treturn Number.isNaN(date.getTime()) ? null : date;\n\t}\n\treturn null;\n}\n\nfunction readValue(\n\trow: Record<string, unknown>,\n\tseriesKey: string,\n): number | null {\n\tconst raw = row[seriesKey];\n\treturn typeof raw === \"number\" && Number.isFinite(raw) ? raw : null;\n}\n\nfunction resolveStartIndex(\n\tsourceData: Record<string, unknown>[],\n\tstartIndex: number | undefined,\n): number {\n\tif (startIndex == null || !Number.isFinite(startIndex)) {\n\t\treturn Math.max(0, sourceData.length - 1);\n\t}\n\treturn Math.min(Math.max(0, Math.floor(startIndex)), sourceData.length - 1);\n}\n\nfunction intervalFromAdjacentRows(\n\tsourceData: Record<string, unknown>[],\n\txDataKey: string,\n\tstartIndex: number,\n): number | null {\n\tif (startIndex < 1) {\n\t\treturn null;\n\t}\n\tconst prevRow = sourceData[startIndex - 1];\n\tconst currentRow = sourceData[startIndex];\n\tconst prev = prevRow ? readDate(prevRow, xDataKey) : null;\n\tconst current = currentRow ? readDate(currentRow, xDataKey) : null;\n\tif (!(prev && current)) {\n\t\treturn null;\n\t}\n\tconst delta = current.getTime() - prev.getTime();\n\treturn delta > 0 ? delta : null;\n}\n\nfunction intervalFromSeriesSpan(\n\tsourceData: Record<string, unknown>[],\n\txDataKey: string,\n): number | null {\n\tif (sourceData.length < 2) {\n\t\treturn null;\n\t}\n\tconst firstRow = sourceData[0];\n\tconst lastRow = sourceData.at(-1);\n\tconst first = firstRow ? readDate(firstRow, xDataKey) : null;\n\tconst last = lastRow ? readDate(lastRow, xDataKey) : null;\n\tif (!(first && last)) {\n\t\treturn null;\n\t}\n\tconst span = last.getTime() - first.getTime();\n\treturn span > 0 ? span / (sourceData.length - 1) : null;\n}\n\nfunction resolveIntervalMs(\n\tsourceData: Record<string, unknown>[],\n\txDataKey: string,\n\tstartIndex: number,\n): number {\n\treturn (\n\t\tintervalFromAdjacentRows(sourceData, xDataKey, startIndex) ??\n\t\tintervalFromSeriesSpan(sourceData, xDataKey) ??\n\t\t86_400_000\n\t);\n}\n\nfunction linearRegressionSlope(points: { t: number; y: number }[]): number {\n\tif (points.length < 2) {\n\t\treturn 0;\n\t}\n\tconst n = points.length;\n\tlet sumT = 0;\n\tlet sumY = 0;\n\tlet sumTY = 0;\n\tlet sumTT = 0;\n\tfor (const { t, y } of points) {\n\t\tsumT += t;\n\t\tsumY += y;\n\t\tsumTY += t * y;\n\t\tsumTT += t * t;\n\t}\n\tconst denom = n * sumTT - sumT * sumT;\n\tif (Math.abs(denom) < 1e-12) {\n\t\treturn 0;\n\t}\n\treturn (n * sumTY - sumT * sumY) / denom;\n}\n\nfunction buildAutoFutureValues(options: {\n\tanchorTime: number;\n\tanchorValue: number;\n\tautoMethod: ProjectionAutoMethod;\n\thistoryPoints: { t: number; y: number }[];\n\thorizonPoints: number;\n\tintervalMs: number;\n\tpathDensity: ProjectionPathDensity;\n}): ProjectionPoint[] {\n\tconst {\n\t\tanchorTime,\n\t\tanchorValue,\n\t\tautoMethod,\n\t\thistoryPoints,\n\t\thorizonPoints,\n\t\tintervalMs,\n\t\tpathDensity,\n\t} = options;\n\n\tconst slope =\n\t\tautoMethod === \"lastSegment\" && historyPoints.length >= 2\n\t\t\t? (() => {\n\t\t\t\t\tconst prev = historyPoints.at(-2);\n\t\t\t\t\tconst last = historyPoints.at(-1);\n\t\t\t\t\tif (!(prev && last)) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tconst dt = last.t - prev.t;\n\t\t\t\t\treturn dt === 0 ? 0 : (last.y - prev.y) / dt;\n\t\t\t\t})()\n\t\t\t: linearRegressionSlope(historyPoints);\n\n\tif (pathDensity === \"endpoints\") {\n\t\tconst endTime = anchorTime + intervalMs * horizonPoints;\n\t\tconst endValue = anchorValue + slope * intervalMs * horizonPoints;\n\t\treturn [\n\t\t\t{ date: new Date(anchorTime), value: anchorValue },\n\t\t\t{ date: new Date(endTime), value: endValue },\n\t\t];\n\t}\n\n\tconst result: ProjectionPoint[] = [\n\t\t{ date: new Date(anchorTime), value: anchorValue },\n\t];\n\n\tfor (let i = 1; i <= horizonPoints; i++) {\n\t\tconst t = anchorTime + intervalMs * i;\n\t\tconst value = anchorValue + slope * intervalMs * i;\n\t\tresult.push({ date: new Date(t), value });\n\t}\n\n\treturn result;\n}\n\n/** Slope (value change per ms) at the projection anchor from the last data segment. */\nexport function computeProjectionAnchorTangentSlope(\n\tsourceData: Record<string, unknown>[],\n\tseriesKey: string,\n\txDataKey = \"date\",\n\tstartIndexProp?: number,\n): number {\n\tif (sourceData.length < 2) {\n\t\treturn 0;\n\t}\n\tconst startIndex = resolveStartIndex(sourceData, startIndexProp);\n\tconst historyPoints: { t: number; y: number }[] = [];\n\tfor (let i = 0; i <= startIndex; i++) {\n\t\tconst row = sourceData[i];\n\t\tif (!row) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst date = readDate(row, xDataKey);\n\t\tconst value = readValue(row, seriesKey);\n\t\tif (date && value != null) {\n\t\t\thistoryPoints.push({ t: date.getTime(), y: value });\n\t\t}\n\t}\n\tif (historyPoints.length < 2) {\n\t\treturn 0;\n\t}\n\tconst prev = historyPoints.at(-2);\n\tconst last = historyPoints.at(-1);\n\tif (!(prev && last)) {\n\t\treturn 0;\n\t}\n\tconst dt = last.t - prev.t;\n\treturn dt === 0 ? 0 : (last.y - prev.y) / dt;\n}\n\n/** Cubic bezier with horizontal tangents at start and end (price-target S-curve). */\nexport function buildHorizontalTangentBezierPath(\n\tx0: number,\n\ty0: number,\n\tx1: number,\n\ty1: number,\n\t/** How far control points sit along the x span (0–0.5). Default: 0.45 */\n\ttension = 0.45,\n): string {\n\tconst dx = x1 - x0;\n\tif (Math.abs(dx) < 1e-6) {\n\t\treturn `M ${x0},${y0} L ${x1},${y1}`;\n\t}\n\tconst t = Math.min(0.5, Math.max(0.05, tension));\n\tconst c1x = x0 + dx * t;\n\tconst c2x = x1 - dx * t;\n\treturn `M ${x0},${y0} C ${c1x},${y0} ${c2x},${y1} ${x1},${y1}`;\n}\n\nfunction buildTargetPath(options: {\n\tanchorTime: number;\n\tanchorValue: number;\n\tendValue: number;\n\thorizonPoints: number;\n\tintervalMs: number;\n}): ProjectionPoint[] {\n\tconst { anchorTime, anchorValue, endValue, horizonPoints, intervalMs } =\n\t\toptions;\n\tconst endTime = anchorTime + intervalMs * horizonPoints;\n\treturn [\n\t\t{ date: new Date(anchorTime), value: anchorValue },\n\t\t{ date: new Date(endTime), value: endValue },\n\t];\n}\n\n/** Build a projection path from historical chart data or explicit points. */\nexport function buildProjectionPath(\n\toptions: BuildProjectionPathOptions,\n): ProjectionPoint[] {\n\tconst {\n\t\tsourceData,\n\t\tseriesKey,\n\t\txDataKey = \"date\",\n\t\tmode,\n\t\tautoMethod = \"linearRegression\",\n\t\tpathDensity = \"endpoints\",\n\t\tstartIndex: startIndexProp,\n\t\thorizonPoints = 6,\n\t\tendValue,\n\t\tpoints,\n\t} = options;\n\n\tif (mode === \"manual\" && points && points.length >= 2) {\n\t\treturn points.map((point) => ({\n\t\t\tdate: new Date(point.date),\n\t\t\tvalue: point.value,\n\t\t}));\n\t}\n\n\tif (sourceData.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst startIndex = resolveStartIndex(sourceData, startIndexProp);\n\tconst anchorRow = sourceData[startIndex];\n\tif (!anchorRow) {\n\t\treturn [];\n\t}\n\n\tconst anchorDate = readDate(anchorRow, xDataKey);\n\tconst anchorValue = readValue(anchorRow, seriesKey);\n\tif (!anchorDate || anchorValue == null) {\n\t\treturn [];\n\t}\n\n\tconst intervalMs = resolveIntervalMs(sourceData, xDataKey, startIndex);\n\tconst anchorTime = anchorDate.getTime();\n\n\tconst historyPoints: { t: number; y: number }[] = [];\n\tfor (let i = 0; i <= startIndex; i++) {\n\t\tconst row = sourceData[i];\n\t\tif (!row) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst date = readDate(row, xDataKey);\n\t\tconst value = readValue(row, seriesKey);\n\t\tif (date && value != null) {\n\t\t\thistoryPoints.push({ t: date.getTime(), y: value });\n\t\t}\n\t}\n\n\tif (mode === \"target\" && endValue != null && Number.isFinite(endValue)) {\n\t\treturn buildTargetPath({\n\t\t\tanchorTime,\n\t\t\tanchorValue,\n\t\t\tendValue,\n\t\t\thorizonPoints,\n\t\t\tintervalMs,\n\t\t});\n\t}\n\n\treturn buildAutoFutureValues({\n\t\tanchorTime,\n\t\tanchorValue,\n\t\tautoMethod,\n\t\thistoryPoints,\n\t\thorizonPoints,\n\t\tintervalMs,\n\t\tpathDensity,\n\t});\n}\n\n/** Collect numeric Y extents from projection point arrays. */\nexport function projectionValueExtents(\n\tpaths: ProjectionPoint[][],\n): { minValue: number; maxValue: number } | null {\n\tlet minValue = Number.POSITIVE_INFINITY;\n\tlet maxValue = Number.NEGATIVE_INFINITY;\n\n\tfor (const path of paths) {\n\t\tfor (const point of path) {\n\t\t\tif (point.value < minValue) {\n\t\t\t\tminValue = point.value;\n\t\t\t}\n\t\t\tif (point.value > maxValue) {\n\t\t\t\tmaxValue = point.value;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (minValue === Number.POSITIVE_INFINITY) {\n\t\treturn null;\n\t}\n\n\treturn { minValue, maxValue };\n}\n\n/** Collect date extents from projection point arrays. */\nexport function projectionDateExtents(\n\tpaths: ProjectionPoint[][],\n): { minTime: number; maxTime: number } | null {\n\tlet minTime = Number.POSITIVE_INFINITY;\n\tlet maxTime = Number.NEGATIVE_INFINITY;\n\n\tfor (const path of paths) {\n\t\tfor (const point of path) {\n\t\t\tconst time = point.date.getTime();\n\t\t\tif (time < minTime) {\n\t\t\t\tminTime = time;\n\t\t\t}\n\t\t\tif (time > maxTime) {\n\t\t\t\tmaxTime = time;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (minTime === Number.POSITIVE_INFINITY) {\n\t\treturn null;\n\t}\n\n\treturn { minTime, maxTime };\n}\n","import {\n\tChildren,\n\tFragment,\n\tisValidElement,\n\ttype ReactElement,\n\ttype ReactNode,\n} from \"react\";\nimport { isChartClipPassthrough } from \"./chart-child-passthrough\";\nimport type { ProjectionPoint } from \"./projection-utils\";\nimport {\n\tprojectionDateExtents,\n\tprojectionValueExtents,\n} from \"./projection-utils\";\nimport { normalizeYAxisId } from \"./y-axis-scales\";\n\nexport interface ProjectionLineConfig {\n\tyAxisId: string;\n\tdata: ProjectionPoint[];\n}\n\ninterface ProjectionLineConfigProps {\n\tdata?: ProjectionPoint[];\n\tyAxisId?: string | number;\n}\n\nfunction getChildComponentName(child: ReactElement) {\n\tconst childType = child.type as { displayName?: string; name?: string };\n\treturn typeof child.type === \"function\"\n\t\t? childType.displayName || childType.name || \"\"\n\t\t: \"\";\n}\n\nfunction isProjectionLineElement(child: ReactElement): boolean {\n\treturn getChildComponentName(child) === \"ProjectionLine\";\n}\n\nfunction normalizeProjectionData(\n\tdata: ProjectionPoint[] | undefined,\n): ProjectionPoint[] {\n\tif (!data?.length) {\n\t\treturn [];\n\t}\n\treturn data.map((point) => ({\n\t\tdate: point.date instanceof Date ? point.date : new Date(point.date),\n\t\tvalue: point.value,\n\t}));\n}\n\n/** Collect {@link ProjectionLine} props from chart children for domain extension. */\nexport function extractProjectionLineConfigs(\n\tchildren: ReactNode,\n): ProjectionLineConfig[] {\n\tconst configs: ProjectionLineConfig[] = [];\n\n\tconst visit = (node: ReactNode) => {\n\t\tChildren.forEach(node, (child) => {\n\t\t\tif (!isValidElement(child)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (child.type === Fragment) {\n\t\t\t\tvisit((child.props as { children?: ReactNode }).children);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isProjectionLineElement(child)) {\n\t\t\t\tconst props = child.props as ProjectionLineConfigProps | undefined;\n\t\t\t\tconst data = normalizeProjectionData(props?.data);\n\t\t\t\tif (data.length >= 2) {\n\t\t\t\t\tconfigs.push({\n\t\t\t\t\t\tyAxisId: normalizeYAxisId(props?.yAxisId),\n\t\t\t\t\t\tdata,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isChartClipPassthrough(child.type)) {\n\t\t\t\tvisit((child.props as { children?: ReactNode }).children);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst childProps = child.props as { children?: ReactNode } | undefined;\n\t\t\tif (childProps?.children) {\n\t\t\t\tvisit(childProps.children);\n\t\t\t}\n\t\t});\n\t};\n\n\tvisit(children);\n\treturn configs;\n}\n\nexport function mergeProjectionYDomain(\n\tdomain: [number, number],\n\tconfigs: ProjectionLineConfig[],\n\tyAxisId: string,\n): [number, number] {\n\tconst paths = configs\n\t\t.filter((config) => config.yAxisId === yAxisId)\n\t\t.map((config) => config.data);\n\tconst extents = projectionValueExtents(paths);\n\tif (!extents) {\n\t\treturn domain;\n\t}\n\n\tconst [min, max] = domain;\n\tconst nextMin = Math.min(min, extents.minValue);\n\tconst nextMax = Math.max(max, extents.maxValue);\n\n\tif (nextMin >= 0 && min >= 0) {\n\t\treturn [0, nextMax <= 0 ? 100 : nextMax * 1.1];\n\t}\n\n\tconst padding = (nextMax - nextMin) * 0.05 || 1;\n\treturn [nextMin - padding, nextMax + padding];\n}\n\nexport function mergeProjectionXDomainMax(\n\tmaxTime: number,\n\tconfigs: ProjectionLineConfig[],\n): number {\n\tconst paths = configs.map((config) => config.data);\n\tconst extents = projectionDateExtents(paths);\n\tif (!extents) {\n\t\treturn maxTime;\n\t}\n\treturn Math.max(maxTime, extents.maxTime);\n}\n","import {\n\tChildren,\n\tisValidElement,\n\ttype ReactElement,\n\ttype ReactNode,\n} from \"react\";\nimport { normalizeYAxisId } from \"./y-axis-scales\";\n\nexport interface ReferenceAreaConfig {\n\tyAxisId: string;\n\ty1?: number;\n\ty2?: number;\n\taxisLabelColor?: string;\n}\n\ninterface ReferenceAreaConfigProps {\n\tyAxisId?: string | number;\n\ty1?: number;\n\ty2?: number;\n\taxisLabelColor?: string;\n}\n\nfunction getChildComponentName(child: ReactElement) {\n\tconst childType = child.type as { displayName?: string; name?: string };\n\treturn typeof child.type === \"function\"\n\t\t? childType.displayName || childType.name || \"\"\n\t\t: \"\";\n}\n\nfunction isReferenceAreaElement(child: ReactElement): boolean {\n\treturn getChildComponentName(child) === \"ReferenceArea\";\n}\n\n/** Collect {@link ReferenceArea} props from chart children for axis label styling. */\nexport function extractReferenceAreaConfigs(\n\tchildren: ReactNode,\n): ReferenceAreaConfig[] {\n\tconst configs: ReferenceAreaConfig[] = [];\n\n\tconst visit = (node: ReactNode) => {\n\t\tChildren.forEach(node, (child) => {\n\t\t\tif (!isValidElement(child)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isReferenceAreaElement(child)) {\n\t\t\t\tconst props = child.props as ReferenceAreaConfigProps | undefined;\n\t\t\t\tif (props) {\n\t\t\t\t\tconfigs.push({\n\t\t\t\t\t\tyAxisId: normalizeYAxisId(props.yAxisId),\n\t\t\t\t\t\ty1: props.y1,\n\t\t\t\t\t\ty2: props.y2,\n\t\t\t\t\t\taxisLabelColor: props.axisLabelColor,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst childProps = child.props as { children?: ReactNode } | undefined;\n\t\t\tif (childProps?.children) {\n\t\t\t\tvisit(childProps.children);\n\t\t\t}\n\t\t});\n\t};\n\n\tvisit(children);\n\treturn configs;\n}\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { ReferenceAreaConfig } from \"./reference-area-config\";\n\nexport interface ReferenceAreaRegistrationContextValue {\n\tregisterReferenceArea: (id: string, config: ReferenceAreaConfig) => void;\n\tunregisterReferenceArea: (id: string) => void;\n}\n\nexport const ReferenceAreaRegistrationContext =\n\tcreateContext<ReferenceAreaRegistrationContextValue | null>(null);\n\nexport function useReferenceAreaRegistration(): ReferenceAreaRegistrationContextValue | null {\n\treturn useContext(ReferenceAreaRegistrationContext);\n}\n","export function computeSeriesBarWidth(input: {\n\tinnerWidth: number;\n\tdataLength: number;\n\tcolumnWidth: number;\n\tseriesCount: number;\n\tcomposedBarSize?: number;\n\tcomposedMaxBarSize?: number;\n\tcomposedBarGap?: number;\n\tstacked?: boolean;\n}): number {\n\tconst {\n\t\tinnerWidth,\n\t\tdataLength,\n\t\tcolumnWidth,\n\t\tseriesCount,\n\t\tcomposedBarSize,\n\t\tcomposedMaxBarSize,\n\t\tcomposedBarGap = 4,\n\t\tstacked = false,\n\t} = input;\n\n\tconst gap = composedBarGap;\n\tconst groupCount = stacked ? 1 : Math.max(1, seriesCount);\n\tlet slot = columnWidth;\n\tif (slot <= 0) {\n\t\tslot = dataLength < 2 ? innerWidth : innerWidth / (dataLength - 1);\n\t}\n\n\tlet width =\n\t\tcomposedBarSize ??\n\t\tMath.min(slot * 0.88, composedMaxBarSize ?? Number.POSITIVE_INFINITY);\n\tif (composedMaxBarSize != null) {\n\t\twidth = Math.min(width, composedMaxBarSize);\n\t}\n\tif (groupCount > 1) {\n\t\tconst maxGroup = slot * 0.92;\n\t\tconst needed = groupCount * width + (groupCount - 1) * gap;\n\t\tif (needed > maxGroup && maxGroup > 0) {\n\t\t\twidth = Math.max(4, (maxGroup - (groupCount - 1) * gap) / groupCount);\n\t\t}\n\t}\n\n\treturn Math.max(2, width);\n}\n\n/** Half-width of the bar group at each x — used to pad reveal clips. */\nexport function computeSeriesBarRevealClipPadding(input: {\n\tbarWidth: number;\n\tseriesCount: number;\n\tgap?: number;\n\tstacked?: boolean;\n}): number {\n\tconst { barWidth, seriesCount, gap = 4, stacked = false } = input;\n\n\tif (stacked || seriesCount <= 1) {\n\t\treturn Math.ceil(barWidth / 2);\n\t}\n\n\tconst groupWidth = seriesCount * barWidth + (seriesCount - 1) * gap;\n\treturn Math.ceil(groupWidth / 2);\n}\n","\"use client\";\n\nimport { createContext, type ReactNode, useContext } from \"react\";\n\nconst StaticChartPreviewContext = createContext(false);\n\n/** Disables cartesian reveal clip-path for static docs previews. */\nexport function StaticChartPreviewProvider({\n\tchildren,\n}: {\n\tchildren: ReactNode;\n}) {\n\treturn (\n\t\t<StaticChartPreviewContext.Provider value={true}>\n\t\t\t{children}\n\t\t</StaticChartPreviewContext.Provider>\n\t);\n}\n\nexport function useStaticChartPreview() {\n\treturn useContext(StaticChartPreviewContext);\n}\n","import { scaleLinear } from \"@visx/scale\";\nimport type { LineConfig } from \"./chart-context\";\nimport { type ChartPhase, Y_DOMAIN_TWEEN_SKIP_THRESHOLD } from \"./chart-phase\";\nimport { groupLinesByYAxisId, normalizeYAxisId } from \"./y-axis-scales\";\n\nexport type YDomain = [number, number];\n\n/** Apply visx `nice()` to raw domain endpoints for stable grid ticks. */\nexport function niceYDomain(domain: YDomain): YDomain {\n\tconst scale = scaleLinear({ domain, range: [0, 1], nice: true });\n\tconst niceDomain = scale.domain();\n\treturn [niceDomain[0] ?? domain[0], niceDomain[1] ?? domain[1]];\n}\n\n/**\n * Skip Y tween when both endpoints move less than the threshold relative to span.\n * When in doubt callers should tween — beauty wins over micro-optimization.\n */\nexport function shouldTweenYDomain(from: YDomain, to: YDomain): boolean {\n\tconst span = Math.max(\n\t\tMath.abs(to[1] - to[0]),\n\t\tMath.abs(from[1] - from[0]),\n\t\t1,\n\t);\n\tconst deltaMin = Math.abs(to[0] - from[0]) / span;\n\tconst deltaMax = Math.abs(to[1] - from[1]) / span;\n\treturn (\n\t\tdeltaMin >= Y_DOMAIN_TWEEN_SKIP_THRESHOLD ||\n\t\tdeltaMax >= Y_DOMAIN_TWEEN_SKIP_THRESHOLD\n\t);\n}\n\n/** Phases where the chart shows loading chrome (shimmer, pulse, label). */\nexport function isLoadingChromePhase(phase: ChartPhase): boolean {\n\treturn phase === \"loading\" || phase === \"revealingLoading\";\n}\n\n/** Phases where grid lines use loading stroke styling (muted / dashed chrome). */\nexport function isLoadingGridChromePhase(phase: ChartPhase): boolean {\n\treturn (\n\t\tphase === \"loading\" || phase === \"exiting\" || phase === \"gridTweenLoading\"\n\t);\n}\n\n/** Phases where Y-domain tween runs after the series has exited. */\nexport function isYDomainTweenPhase(phase: ChartPhase): boolean {\n\treturn phase === \"gridTweenLoading\" || phase === \"gridTweenReady\";\n}\n\n/** Phases where {@link ReferenceArea} bands are shown (fade in/out on transitions). */\nexport function isReferenceAreaVisiblePhase(phase: ChartPhase): boolean {\n\treturn (\n\t\tphase === \"ready\" || phase === \"revealing\" || phase === \"gridTweenReady\"\n\t);\n}\n\nexport function resolveAnimatedYDestinationDomains(\n\tchartPhase: ChartPhase,\n\tskeletonByAxis: Record<string, YDomain>,\n\ttargetByAxis: Record<string, YDomain>,\n): Record<string, YDomain> {\n\tswitch (chartPhase) {\n\t\tcase \"loading\":\n\t\tcase \"exiting\":\n\t\tcase \"gridTweenLoading\":\n\t\t\treturn skeletonByAxis;\n\t\tcase \"exitingReady\":\n\t\tcase \"gridTweenReady\":\n\t\tcase \"revealing\":\n\t\tcase \"ready\":\n\t\t\treturn targetByAxis;\n\t\tdefault:\n\t\t\treturn targetByAxis;\n\t}\n}\n\nexport function computeYDomainsByAxis({\n\tlines,\n\tresolveDomain,\n}: {\n\tlines: LineConfig[];\n\tresolveDomain: (dataKeys: string[]) => YDomain;\n}): Record<string, YDomain> {\n\tconst groups = groupLinesByYAxisId(lines);\n\tconst domains: Record<string, YDomain> = {};\n\n\tfor (const [axisId, axisLines] of groups) {\n\t\tconst dataKeys = axisLines.map((line) => line.dataKey);\n\t\tdomains[normalizeYAxisId(axisId)] = niceYDomain(resolveDomain(dataKeys));\n\t}\n\n\tif (!domains.left) {\n\t\tdomains.left = niceYDomain([0, 100]);\n\t}\n\n\treturn domains;\n}\n\n/** Merge domain maps, normalizing axis ids to strings. */\nexport function mergeYDomainRecords(\n\t...records: Record<string, YDomain>[]\n): Record<string, YDomain> {\n\tconst merged: Record<string, YDomain> = {};\n\tfor (const record of records) {\n\t\tfor (const [axisId, domain] of Object.entries(record)) {\n\t\t\tmerged[normalizeYAxisId(axisId)] = domain;\n\t\t}\n\t}\n\treturn merged;\n}\n\nexport function domainsEqual(\n\tleft: Record<string, YDomain>,\n\tright: Record<string, YDomain>,\n): boolean {\n\tconst leftKeys = Object.keys(left);\n\tconst rightKeys = Object.keys(right);\n\tif (leftKeys.length !== rightKeys.length) {\n\t\treturn false;\n\t}\n\n\tfor (const axisId of leftKeys) {\n\t\tconst from = left[axisId];\n\t\tconst to = right[axisId];\n\t\tif (!(from && to) || from[0] !== to[0] || from[1] !== to[1]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n","\"use client\";\n\nimport { animate, useReducedMotion } from \"motion/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { ChartPhase } from \"./chart-phase\";\nimport { LINE_LOADING_PULSE_EASE } from \"./line-loading-timing\";\nimport {\n\tdomainsEqual,\n\tisYDomainTweenPhase,\n\tresolveAnimatedYDestinationDomains,\n\tshouldTweenYDomain,\n\ttype YDomain,\n} from \"./y-domain-utils\";\n\nfunction lerpDomain(from: YDomain, to: YDomain, progress: number): YDomain {\n\treturn [\n\t\tfrom[0] + (to[0] - from[0]) * progress,\n\t\tfrom[1] + (to[1] - from[1]) * progress,\n\t];\n}\n\nfunction snapDomains(\n\tdomains: Record<string, YDomain>,\n\tsetAnimatedByAxis: (domains: Record<string, YDomain>) => void,\n\tanimatedRef: { current: Record<string, YDomain> },\n) {\n\tif (domainsEqual(animatedRef.current, domains)) {\n\t\treturn;\n\t}\n\tsetAnimatedByAxis(domains);\n\tanimatedRef.current = domains;\n}\n\nfunction tweenDomains({\n\tdestination,\n\tdurationMs,\n\tenabled,\n\treducedMotion,\n\tanimatedRef,\n\tsetAnimatedByAxis,\n\tonSettled,\n}: {\n\tdestination: Record<string, YDomain>;\n\tdurationMs: number;\n\tenabled: boolean;\n\treducedMotion: boolean | null;\n\tanimatedRef: { current: Record<string, YDomain> };\n\tsetAnimatedByAxis: (domains: Record<string, YDomain>) => void;\n\tonSettled?: () => void;\n}) {\n\tif (domainsEqual(animatedRef.current, destination)) {\n\t\tonSettled?.();\n\t\treturn;\n\t}\n\n\tif (!enabled || reducedMotion) {\n\t\tsnapDomains(destination, setAnimatedByAxis, animatedRef);\n\t\tonSettled?.();\n\t\treturn;\n\t}\n\n\tconst axisIds = Object.keys(destination);\n\tconst fromSnapshot = animatedRef.current;\n\n\tlet needsTween = false;\n\tfor (const axisId of axisIds) {\n\t\tconst from =\n\t\t\tfromSnapshot[axisId] ?? destination[axisId] ?? ([0, 100] as YDomain);\n\t\tconst to = destination[axisId] ?? from;\n\t\tif (shouldTweenYDomain(from, to)) {\n\t\t\tneedsTween = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!needsTween) {\n\t\tsnapDomains(destination, setAnimatedByAxis, animatedRef);\n\t\tonSettled?.();\n\t\treturn;\n\t}\n\n\tconst fromByAxis: Record<string, YDomain> = {};\n\tfor (const axisId of axisIds) {\n\t\tfromByAxis[axisId] = fromSnapshot[axisId] ??\n\t\t\tdestination[axisId] ?? [0, 100];\n\t}\n\n\tconst control = animate(0, 1, {\n\t\tduration: durationMs / 1000,\n\t\tease: [...LINE_LOADING_PULSE_EASE],\n\t\tonUpdate: (progress) => {\n\t\t\tconst next: Record<string, YDomain> = {};\n\t\t\tfor (const axisId of axisIds) {\n\t\t\t\tconst from =\n\t\t\t\t\tfromByAxis[axisId] ?? destination[axisId] ?? ([0, 100] as YDomain);\n\t\t\t\tconst to = destination[axisId] ?? from;\n\t\t\t\tnext[axisId] = shouldTweenYDomain(from, to)\n\t\t\t\t\t? lerpDomain(from, to, progress)\n\t\t\t\t\t: to;\n\t\t\t}\n\t\t\tanimatedRef.current = next;\n\t\t\tsetAnimatedByAxis(next);\n\t\t},\n\t\tonComplete: () => {\n\t\t\tsnapDomains(destination, setAnimatedByAxis, animatedRef);\n\t\t\tonSettled?.();\n\t\t},\n\t});\n\n\treturn control;\n}\n\nexport interface UseAnimatedYDomainsOptions {\n\tenabled: boolean;\n\tdurationMs: number;\n\tchartPhase: ChartPhase;\n\tskeletonByAxis: Record<string, YDomain>;\n\ttargetByAxis: Record<string, YDomain>;\n\tonSettled?: () => void;\n\t/** When true, tweens y-domains on target changes while the chart is in the ready phase (e.g. brush zoom). */\n\ttweenOnTargetChange?: boolean;\n}\n\nexport function useAnimatedYDomains({\n\tenabled,\n\tdurationMs,\n\tchartPhase,\n\tskeletonByAxis,\n\ttargetByAxis,\n\tonSettled,\n\ttweenOnTargetChange = false,\n}: UseAnimatedYDomainsOptions): Record<string, YDomain> {\n\tconst reducedMotion = useReducedMotion();\n\tconst destinationByAxis = resolveAnimatedYDestinationDomains(\n\t\tchartPhase,\n\t\tskeletonByAxis,\n\t\ttargetByAxis,\n\t);\n\tconst destinationRef = useRef(destinationByAxis);\n\tdestinationRef.current = destinationByAxis;\n\tconst skeletonRef = useRef(skeletonByAxis);\n\tskeletonRef.current = skeletonByAxis;\n\tconst targetRef = useRef(targetByAxis);\n\ttargetRef.current = targetByAxis;\n\n\tconst [animatedByAxis, setAnimatedByAxis] = useState(destinationByAxis);\n\tconst animatedRef = useRef(animatedByAxis);\n\tconst prevPhaseRef = useRef(chartPhase);\n\tconst onSettledRef = useRef(onSettled);\n\tonSettledRef.current = onSettled;\n\n\tuseEffect(() => {\n\t\tanimatedRef.current = animatedByAxis;\n\t}, [animatedByAxis]);\n\n\tuseEffect(() => {\n\t\tif (prevPhaseRef.current === chartPhase) {\n\t\t\treturn;\n\t\t}\n\t\tprevPhaseRef.current = chartPhase;\n\n\t\tconst settle = () => {\n\t\t\tonSettledRef.current?.();\n\t\t};\n\n\t\t// Keep grid spacing frozen while the series exits the viewport.\n\t\tif (chartPhase === \"exiting\") {\n\t\t\tsnapDomains(skeletonRef.current, setAnimatedByAxis, animatedRef);\n\t\t\treturn;\n\t\t}\n\t\tif (chartPhase === \"exitingReady\") {\n\t\t\tsnapDomains(targetRef.current, setAnimatedByAxis, animatedRef);\n\t\t\treturn;\n\t\t}\n\t\tif (chartPhase === \"loading\") {\n\t\t\tsnapDomains(skeletonRef.current, setAnimatedByAxis, animatedRef);\n\t\t\treturn;\n\t\t}\n\t\tif (chartPhase === \"revealing\" || chartPhase === \"ready\") {\n\t\t\tsnapDomains(targetRef.current, setAnimatedByAxis, animatedRef);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!isYDomainTweenPhase(chartPhase)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst control = tweenDomains({\n\t\t\tdestination: destinationRef.current,\n\t\t\tdurationMs,\n\t\t\tenabled,\n\t\t\treducedMotion,\n\t\t\tanimatedRef,\n\t\t\tsetAnimatedByAxis,\n\t\t\tonSettled: settle,\n\t\t});\n\n\t\treturn () => control?.stop();\n\t}, [chartPhase, durationMs, enabled, reducedMotion]);\n\n\tconst targetSignature = JSON.stringify(targetByAxis);\n\tconst prevTargetSignatureRef = useRef(targetSignature);\n\n\tuseEffect(() => {\n\t\tconst inLivePhase = chartPhase === \"ready\" || chartPhase === \"revealing\";\n\n\t\tif (!inLivePhase) {\n\t\t\tprevTargetSignatureRef.current = targetSignature;\n\t\t\treturn;\n\t\t}\n\n\t\tif (prevTargetSignatureRef.current === targetSignature) {\n\t\t\treturn;\n\t\t}\n\t\tprevTargetSignatureRef.current = targetSignature;\n\n\t\tif (tweenOnTargetChange && chartPhase === \"ready\") {\n\t\t\tconst control = tweenDomains({\n\t\t\t\tdestination: targetRef.current,\n\t\t\t\tdurationMs,\n\t\t\t\tenabled,\n\t\t\t\treducedMotion,\n\t\t\t\tanimatedRef,\n\t\t\t\tsetAnimatedByAxis,\n\t\t\t\tonSettled: () => onSettledRef.current?.(),\n\t\t\t});\n\n\t\t\treturn () => control?.stop();\n\t\t}\n\n\t\tsnapDomains(targetRef.current, setAnimatedByAxis, animatedRef);\n\t}, [\n\t\tchartPhase,\n\t\tdurationMs,\n\t\tenabled,\n\t\treducedMotion,\n\t\ttargetSignature,\n\t\ttweenOnTargetChange,\n\t]);\n\n\treturn animatedByAxis;\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport interface ScheduledTooltipControls<T> {\n\ttooltipData: T | null;\n\tsetTooltipData: React.Dispatch<React.SetStateAction<T | null>>;\n\tscheduleTooltip: (tooltip: T, dedupeKey?: string) => void;\n\tclearTooltip: () => void;\n\tresetTooltipDedupe: () => void;\n}\n\nfunction defaultDedupeKey<T>(tooltip: T): string {\n\tif (\n\t\ttypeof tooltip === \"object\" &&\n\t\ttooltip !== null &&\n\t\t\"index\" in tooltip &&\n\t\ttypeof (tooltip as { index: unknown }).index === \"number\"\n\t) {\n\t\tconst { index, x } = tooltip as { index: number; x?: number };\n\t\tif (typeof x === \"number\") {\n\t\t\treturn `${index}:${Math.round(x)}`;\n\t\t}\n\t\treturn String(index);\n\t}\n\treturn JSON.stringify(tooltip);\n}\n\nexport function useScheduledTooltip<T>(): ScheduledTooltipControls<T> {\n\tconst [tooltipData, setTooltipData] = useState<T | null>(null);\n\tconst lastKeyRef = useRef<string | null>(null);\n\tconst pendingRef = useRef<T | null>(null);\n\tconst rafRef = useRef<number | null>(null);\n\tconst pendingKeyRef = useRef<string | null>(null);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (rafRef.current !== null) {\n\t\t\t\tcancelAnimationFrame(rafRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\tconst commitTooltip = useCallback((tooltip: T, dedupeKey: string) => {\n\t\tif (dedupeKey === lastKeyRef.current) {\n\t\t\treturn;\n\t\t}\n\t\tlastKeyRef.current = dedupeKey;\n\t\tsetTooltipData(tooltip);\n\t}, []);\n\n\tconst scheduleTooltip = useCallback(\n\t\t(tooltip: T, dedupeKey?: string) => {\n\t\t\tconst key = dedupeKey ?? defaultDedupeKey(tooltip);\n\t\t\tpendingRef.current = tooltip;\n\t\t\tpendingKeyRef.current = key;\n\t\t\tif (key === lastKeyRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (rafRef.current !== null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\trafRef.current = requestAnimationFrame(() => {\n\t\t\t\trafRef.current = null;\n\t\t\t\tconst next = pendingRef.current;\n\t\t\t\tconst nextKey = pendingKeyRef.current;\n\t\t\t\tif (next && nextKey) {\n\t\t\t\t\tcommitTooltip(next, nextKey);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t[commitTooltip],\n\t);\n\n\tconst clearTooltip = useCallback(() => {\n\t\tif (rafRef.current !== null) {\n\t\t\tcancelAnimationFrame(rafRef.current);\n\t\t\trafRef.current = null;\n\t\t}\n\t\tpendingRef.current = null;\n\t\tpendingKeyRef.current = null;\n\t\tlastKeyRef.current = null;\n\t\tsetTooltipData(null);\n\t}, []);\n\n\tconst resetTooltipDedupe = useCallback(() => {\n\t\tlastKeyRef.current = null;\n\t}, []);\n\n\treturn {\n\t\ttooltipData,\n\t\tsetTooltipData,\n\t\tscheduleTooltip,\n\t\tclearTooltip,\n\t\tresetTooltipDedupe,\n\t};\n}\n","\"use client\";\n\nimport { localPoint } from \"@visx/event\";\nimport type { scaleLinear, scaleTime } from \"@visx/scale\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { LineConfig, Margin, TooltipData } from \"./chart-context\";\nimport { useScheduledTooltip } from \"./use-scheduled-tooltip\";\nimport { normalizeYAxisId } from \"./y-axis-scales\";\n\ntype ScaleTime = ReturnType<typeof scaleTime<number>>;\ntype ScaleLinear = ReturnType<typeof scaleLinear<number>>;\n\nexport interface ChartSelection {\n\tstartX: number;\n\tendX: number;\n\tstartIndex: number;\n\tendIndex: number;\n\tactive: boolean;\n}\n\ninterface UseChartInteractionParams {\n\txScale: ScaleTime;\n\tyScale: ScaleLinear;\n\tyScales: Record<string, ScaleLinear>;\n\tdata: Record<string, unknown>[];\n\tlines: LineConfig[];\n\tmargin: Margin;\n\txAccessor: (d: Record<string, unknown>) => Date;\n\tbisectDate: (\n\t\tdata: Record<string, unknown>[],\n\t\tdate: Date,\n\t\tlo: number,\n\t) => number;\n\tcanInteract: boolean;\n}\n\ninterface ChartInteractionResult {\n\ttooltipData: TooltipData | null;\n\tsetTooltipData: React.Dispatch<React.SetStateAction<TooltipData | null>>;\n\tselection: ChartSelection | null;\n\tclearSelection: () => void;\n\tinteractionHandlers: {\n\t\tonMouseMove?: (event: React.MouseEvent<SVGGElement>) => void;\n\t\tonMouseLeave?: () => void;\n\t\tonMouseDown?: (event: React.MouseEvent<SVGGElement>) => void;\n\t\tonMouseUp?: () => void;\n\t\tonTouchStart?: (event: React.TouchEvent<SVGGElement>) => void;\n\t\tonTouchMove?: (event: React.TouchEvent<SVGGElement>) => void;\n\t\tonTouchEnd?: () => void;\n\t};\n\tinteractionStyle: React.CSSProperties;\n}\n\nexport function useChartInteraction({\n\txScale,\n\tyScale,\n\tyScales,\n\tdata,\n\tlines,\n\tmargin,\n\txAccessor,\n\tbisectDate,\n\tcanInteract,\n}: UseChartInteractionParams): ChartInteractionResult {\n\tconst [selection, setSelection] = useState<ChartSelection | null>(null);\n\tconst {\n\t\ttooltipData,\n\t\tsetTooltipData,\n\t\tscheduleTooltip,\n\t\tclearTooltip,\n\t\tresetTooltipDedupe,\n\t} = useScheduledTooltip<TooltipData>();\n\n\tconst isDraggingRef = useRef(false);\n\tconst dragStartXRef = useRef<number>(0);\n\tconst lastHoveredXRef = useRef<number | null>(null);\n\n\tconst resolveTooltipFromX = useCallback(\n\t\t(pixelX: number): TooltipData | null => {\n\t\t\tconst x0 = xScale.invert(pixelX);\n\t\t\tconst index = bisectDate(data, x0, 1);\n\t\t\tconst d0 = data[index - 1];\n\t\t\tconst d1 = data[index];\n\n\t\t\tif (!d0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet d = d0;\n\t\t\tlet finalIndex = index - 1;\n\t\t\tif (d1) {\n\t\t\t\tconst d0Time = xAccessor(d0).getTime();\n\t\t\t\tconst d1Time = xAccessor(d1).getTime();\n\t\t\t\tif (x0.getTime() - d0Time > d1Time - x0.getTime()) {\n\t\t\t\t\td = d1;\n\t\t\t\t\tfinalIndex = index;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst yPositions: Record<string, number> = {};\n\t\t\tfor (const line of lines) {\n\t\t\t\tconst value = d[line.dataKey];\n\t\t\t\tif (typeof value === \"number\") {\n\t\t\t\t\tconst axisScale = yScales[normalizeYAxisId(line.yAxisId)] ?? yScale;\n\t\t\t\t\tyPositions[line.dataKey] = axisScale(value) ?? 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tpoint: d,\n\t\t\t\tindex: finalIndex,\n\t\t\t\tx: xScale(xAccessor(d)) ?? 0,\n\t\t\t\tyPositions,\n\t\t\t};\n\t\t},\n\t\t[xScale, yScale, yScales, data, lines, xAccessor, bisectDate],\n\t);\n\n\tconst resolveIndexFromX = useCallback(\n\t\t(pixelX: number): number => {\n\t\t\tconst x0 = xScale.invert(pixelX);\n\t\t\tconst index = bisectDate(data, x0, 1);\n\t\t\tconst d0 = data[index - 1];\n\t\t\tconst d1 = data[index];\n\t\t\tif (!d0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tif (d1) {\n\t\t\t\tconst d0Time = xAccessor(d0).getTime();\n\t\t\t\tconst d1Time = xAccessor(d1).getTime();\n\t\t\t\tif (x0.getTime() - d0Time > d1Time - x0.getTime()) {\n\t\t\t\t\treturn index;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn index - 1;\n\t\t},\n\t\t[xScale, data, xAccessor, bisectDate],\n\t);\n\n\tconst getChartX = useCallback(\n\t\t(\n\t\t\tevent: React.MouseEvent<SVGGElement> | React.TouchEvent<SVGGElement>,\n\t\t\ttouchIndex = 0,\n\t\t): number | null => {\n\t\t\tlet point: { x: number; y: number } | null = null;\n\n\t\t\tif (\"touches\" in event) {\n\t\t\t\tconst touch = event.touches[touchIndex];\n\t\t\t\tif (!touch) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst svg = event.currentTarget.ownerSVGElement;\n\t\t\t\tif (!svg) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tpoint = localPoint(svg, touch as unknown as MouseEvent);\n\t\t\t} else {\n\t\t\t\tpoint = localPoint(event);\n\t\t\t}\n\n\t\t\tif (!point) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn point.x - margin.left;\n\t\t},\n\t\t[margin.left],\n\t);\n\n\tconst handleMouseMove = useCallback(\n\t\t(event: React.MouseEvent<SVGGElement>) => {\n\t\t\tconst chartX = getChartX(event);\n\t\t\tif (chartX === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isDraggingRef.current) {\n\t\t\t\tconst startX = Math.min(dragStartXRef.current, chartX);\n\t\t\t\tconst endX = Math.max(dragStartXRef.current, chartX);\n\t\t\t\tsetSelection({\n\t\t\t\t\tstartX,\n\t\t\t\t\tendX,\n\t\t\t\t\tstartIndex: resolveIndexFromX(startX),\n\t\t\t\t\tendIndex: resolveIndexFromX(endX),\n\t\t\t\t\tactive: true,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlastHoveredXRef.current = chartX;\n\t\t\tconst tooltip = resolveTooltipFromX(chartX);\n\t\t\tif (tooltip) {\n\t\t\t\tscheduleTooltip(tooltip);\n\t\t\t}\n\t\t},\n\t\t[getChartX, resolveTooltipFromX, resolveIndexFromX, scheduleTooltip],\n\t);\n\n\tconst handleMouseLeave = useCallback(() => {\n\t\tlastHoveredXRef.current = null;\n\t\tclearTooltip();\n\t\tif (isDraggingRef.current) {\n\t\t\tisDraggingRef.current = false;\n\t\t}\n\t\tsetSelection(null);\n\t}, [clearTooltip]);\n\n\tconst handleMouseDown = useCallback(\n\t\t(event: React.MouseEvent<SVGGElement>) => {\n\t\t\tconst chartX = getChartX(event);\n\t\t\tif (chartX === null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tisDraggingRef.current = true;\n\t\t\tdragStartXRef.current = chartX;\n\t\t\tclearTooltip();\n\t\t\tsetSelection(null);\n\t\t},\n\t\t[getChartX, clearTooltip],\n\t);\n\n\tconst handleMouseUp = useCallback(() => {\n\t\tif (isDraggingRef.current) {\n\t\t\tisDraggingRef.current = false;\n\t\t}\n\t\tsetSelection(null);\n\t}, []);\n\n\tconst handleTouchStart = useCallback(\n\t\t(event: React.TouchEvent<SVGGElement>) => {\n\t\t\tif (event.touches.length === 1) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst chartX = getChartX(event, 0);\n\t\t\t\tif (chartX === null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlastHoveredXRef.current = chartX;\n\t\t\t\tconst tooltip = resolveTooltipFromX(chartX);\n\t\t\t\tif (tooltip) {\n\t\t\t\t\tscheduleTooltip(tooltip);\n\t\t\t\t}\n\t\t\t} else if (event.touches.length === 2) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tresetTooltipDedupe();\n\t\t\t\tclearTooltip();\n\t\t\t\tconst x0 = getChartX(event, 0);\n\t\t\t\tconst x1 = getChartX(event, 1);\n\t\t\t\tif (x0 === null || x1 === null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst startX = Math.min(x0, x1);\n\t\t\t\tconst endX = Math.max(x0, x1);\n\t\t\t\tsetSelection({\n\t\t\t\t\tstartX,\n\t\t\t\t\tendX,\n\t\t\t\t\tstartIndex: resolveIndexFromX(startX),\n\t\t\t\t\tendIndex: resolveIndexFromX(endX),\n\t\t\t\t\tactive: true,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tgetChartX,\n\t\t\tresolveTooltipFromX,\n\t\t\tresolveIndexFromX,\n\t\t\tscheduleTooltip,\n\t\t\tresetTooltipDedupe,\n\t\t\tclearTooltip,\n\t\t],\n\t);\n\n\tconst handleTouchMove = useCallback(\n\t\t(event: React.TouchEvent<SVGGElement>) => {\n\t\t\tif (event.touches.length === 1) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst chartX = getChartX(event, 0);\n\t\t\t\tif (chartX === null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlastHoveredXRef.current = chartX;\n\t\t\t\tconst tooltip = resolveTooltipFromX(chartX);\n\t\t\t\tif (tooltip) {\n\t\t\t\t\tscheduleTooltip(tooltip);\n\t\t\t\t}\n\t\t\t} else if (event.touches.length === 2) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst x0 = getChartX(event, 0);\n\t\t\t\tconst x1 = getChartX(event, 1);\n\t\t\t\tif (x0 === null || x1 === null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst startX = Math.min(x0, x1);\n\t\t\t\tconst endX = Math.max(x0, x1);\n\t\t\t\tsetSelection({\n\t\t\t\t\tstartX,\n\t\t\t\t\tendX,\n\t\t\t\t\tstartIndex: resolveIndexFromX(startX),\n\t\t\t\t\tendIndex: resolveIndexFromX(endX),\n\t\t\t\t\tactive: true,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[getChartX, resolveTooltipFromX, resolveIndexFromX, scheduleTooltip],\n\t);\n\n\tconst handleTouchEnd = useCallback(() => {\n\t\tclearTooltip();\n\t\tsetSelection(null);\n\t}, [clearTooltip]);\n\n\tconst clearSelection = useCallback(() => {\n\t\tsetSelection(null);\n\t}, []);\n\n\t// Re-anchor tooltip/crosshair when x-scale or visible data changes (e.g. brush zoom commit).\n\tuseEffect(() => {\n\t\tif (!canInteract || lastHoveredXRef.current === null) {\n\t\t\treturn;\n\t\t}\n\t\tconst tooltip = resolveTooltipFromX(lastHoveredXRef.current);\n\t\tif (tooltip) {\n\t\t\tscheduleTooltip(tooltip, `${tooltip.index}:${Math.round(tooltip.x)}`);\n\t\t\treturn;\n\t\t}\n\t\tclearTooltip();\n\t}, [canInteract, clearTooltip, resolveTooltipFromX, scheduleTooltip]);\n\n\tconst interactionHandlers = canInteract\n\t\t? {\n\t\t\t\tonMouseMove: handleMouseMove,\n\t\t\t\tonMouseLeave: handleMouseLeave,\n\t\t\t\tonMouseDown: handleMouseDown,\n\t\t\t\tonMouseUp: handleMouseUp,\n\t\t\t\tonTouchStart: handleTouchStart,\n\t\t\t\tonTouchMove: handleTouchMove,\n\t\t\t\tonTouchEnd: handleTouchEnd,\n\t\t\t}\n\t\t: {};\n\n\tconst interactionStyle: React.CSSProperties = {\n\t\tcursor: canInteract ? \"crosshair\" : \"default\",\n\t\ttouchAction: \"none\",\n\t};\n\n\treturn {\n\t\ttooltipData,\n\t\tsetTooltipData,\n\t\tselection,\n\t\tclearSelection,\n\t\tinteractionHandlers,\n\t\tinteractionStyle,\n\t};\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n\ttype ChartPhase,\n\ttype ChartStatus,\n\tresolveRestingChartPhase,\n} from \"./chart-phase\";\n\nexport interface UseChartPhaseOrchestratorOptions {\n\tchartStatus: ChartStatus;\n\ttargetData: Record<string, unknown>[];\n\tskeletonData: Record<string, unknown>[];\n\tanimationDuration: number;\n\tyDomainTweenDuration: number;\n\t/** Signature of motion URL state — replays clip reveal in Studio. */\n\trevealSignature?: string;\n\t/** Skip mount/signature enter reveal (static docs previews). */\n\tskipEnterReveal?: boolean;\n}\n\nexport function useChartPhaseOrchestrator({\n\tchartStatus,\n\ttargetData,\n\tskeletonData,\n\tanimationDuration,\n\tyDomainTweenDuration,\n\trevealSignature = \"\",\n\tskipEnterReveal = false,\n}: UseChartPhaseOrchestratorOptions) {\n\tconst [chartPhase, setChartPhase] = useState<ChartPhase>(() =>\n\t\tresolveRestingChartPhase(chartStatus),\n\t);\n\tconst [plotData, setPlotData] = useState<Record<string, unknown>[]>(() =>\n\t\tchartStatus === \"loading\" ? skeletonData : targetData,\n\t);\n\tconst [revealEpoch, setRevealEpoch] = useState(0);\n\tconst [concealEpoch, setConcealEpoch] = useState(0);\n\tconst [isLoaded, setIsLoaded] = useState(() => chartStatus === \"ready\");\n\tconst prevStatusRef = useRef(chartStatus);\n\tconst phaseRef = useRef(chartPhase);\n\tphaseRef.current = chartPhase;\n\n\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: status transition branches for animation durations\n\tuseEffect(() => {\n\t\tconst prevStatus = prevStatusRef.current;\n\t\tif (prevStatus === chartStatus) {\n\t\t\treturn;\n\t\t}\n\t\tprevStatusRef.current = chartStatus;\n\n\t\tif (chartStatus === \"ready\" && prevStatus === \"loading\") {\n\t\t\tsetIsLoaded(false);\n\t\t\tif (animationDuration <= 0) {\n\t\t\t\tif (yDomainTweenDuration <= 0) {\n\t\t\t\t\tsetPlotData(targetData);\n\t\t\t\t\tsetChartPhase(\"revealing\");\n\t\t\t\t} else {\n\t\t\t\t\tsetChartPhase(\"gridTweenReady\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsetChartPhase(\"exiting\");\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (chartStatus === \"loading\" && prevStatus === \"ready\") {\n\t\t\tsetIsLoaded(false);\n\t\t\tif (animationDuration <= 0) {\n\t\t\t\tif (yDomainTweenDuration <= 0) {\n\t\t\t\t\tsetPlotData(skeletonData);\n\t\t\t\t\tsetChartPhase(\"loading\");\n\t\t\t\t} else {\n\t\t\t\t\tsetChartPhase(\"gridTweenLoading\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsetConcealEpoch((epoch) => epoch + 1);\n\t\t\t\tsetChartPhase(\"exitingReady\");\n\t\t\t}\n\t\t}\n\t}, [\n\t\tanimationDuration,\n\t\tchartStatus,\n\t\tskeletonData,\n\t\ttargetData,\n\t\tyDomainTweenDuration,\n\t]);\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: revealSignature replays enter\n\tuseEffect(() => {\n\t\tif (skipEnterReveal) {\n\t\t\treturn;\n\t\t}\n\t\tif (chartStatus !== \"ready\") {\n\t\t\treturn;\n\t\t}\n\t\tif (phaseRef.current !== \"ready\") {\n\t\t\treturn;\n\t\t}\n\n\t\tsetChartPhase(\"revealing\");\n\t\tsetIsLoaded(false);\n\t}, [animationDuration, chartStatus, revealSignature, skipEnterReveal]);\n\n\tuseEffect(() => {\n\t\tswitch (chartPhase) {\n\t\t\tcase \"loading\":\n\t\t\t\tif (chartStatus === \"loading\") {\n\t\t\t\t\tsetPlotData(skeletonData);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"exiting\":\n\t\t\t\tsetPlotData(skeletonData);\n\t\t\t\tbreak;\n\t\t\tcase \"exitingReady\":\n\t\t\tcase \"gridTweenLoading\":\n\t\t\tcase \"gridTweenReady\":\n\t\t\tcase \"revealing\":\n\t\t\tcase \"ready\":\n\t\t\t\tsetPlotData(targetData);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}, [chartPhase, chartStatus, skeletonData, targetData]);\n\n\t/** Loading pulse exit finished — tween grid to ready spacing next. */\n\tconst notifyLoadingPulseComplete = useCallback(() => {\n\t\tif (phaseRef.current !== \"exiting\") {\n\t\t\treturn;\n\t\t}\n\t\tsetChartPhase(\"gridTweenReady\");\n\t}, []);\n\n\t/** Ready series conceal finished — tween grid to loading spacing next. */\n\tconst notifyRevealConcealComplete = useCallback(() => {\n\t\tif (phaseRef.current !== \"exitingReady\") {\n\t\t\treturn;\n\t\t}\n\t\tsetChartPhase(\"gridTweenLoading\");\n\t}, []);\n\n\t/** Grid tween finished — enter the next resting phase. */\n\tconst notifyYDomainTweenComplete = useCallback(() => {\n\t\tif (phaseRef.current === \"gridTweenLoading\") {\n\t\t\tsetChartPhase(\"loading\");\n\t\t\treturn;\n\t\t}\n\t\tif (phaseRef.current === \"gridTweenReady\") {\n\t\t\tsetChartPhase(\"revealing\");\n\t\t}\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (chartPhase !== \"revealing\") {\n\t\t\treturn;\n\t\t}\n\n\t\tsetRevealEpoch((epoch) => epoch + 1);\n\t\tif (animationDuration <= 0) {\n\t\t\tsetChartPhase(\"ready\");\n\t\t\tsetIsLoaded(true);\n\t\t\treturn;\n\t\t}\n\n\t\tconst timer = window.setTimeout(() => {\n\t\t\tsetChartPhase(\"ready\");\n\t\t\tsetIsLoaded(true);\n\t\t}, animationDuration);\n\t\treturn () => window.clearTimeout(timer);\n\t}, [animationDuration, chartPhase]);\n\n\treturn {\n\t\tchartPhase,\n\t\tplotData,\n\t\trevealEpoch,\n\t\tconcealEpoch,\n\t\tisLoaded,\n\t\tnotifyLoadingPulseComplete,\n\t\tnotifyRevealConcealComplete,\n\t\tnotifyYDomainTweenComplete,\n\t};\n}\n","\"use client\";\n\nimport { scaleLinear, scaleTime } from \"@visx/scale\";\nimport { bisector, extent } from \"d3-array\";\nimport type { Transition } from \"motion/react\";\nimport {\n\tChildren,\n\tcloneElement,\n\tisValidElement,\n\tmemo,\n\ttype ReactElement,\n\ttype ReactNode,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n} from \"react\";\nimport {\n\tDEFAULT_ANIMATION_EASING,\n\tDEFAULT_CHART_ENTER_TRANSITION,\n} from \"./animation\";\nimport {\n\tisClipExcludedComponent,\n\tisPostOverlayComponent,\n\tisUnderlayComponent,\n\tresolveChartChildElement,\n} from \"./chart-child-passthrough\";\nimport { ChartProvider, type LineConfig, type Margin } from \"./chart-context\";\nimport { isGradientDefComponent, isPatternDefComponent } from \"./chart-defs\";\nimport { shortDateFmt } from \"./chart-formatters\";\nimport {\n\ttype ChartPhase,\n\ttype ChartStatus,\n\tDEFAULT_CHART_STATUS,\n\tDEFAULT_Y_DOMAIN_TWEEN_MS,\n\tisChartInteractionPhase,\n} from \"./chart-phase\";\nimport { ChartRevealClip } from \"./chart-reveal-clip\";\nimport {\n\tdecimateTimeSeries,\n\tmaxRenderPointsForWidth,\n} from \"./decimate-time-series\";\nimport { filterDataByXDomain } from \"./filter-data-by-x-domain\";\nimport {\n\tgenerateChartSkeletonData,\n\tgenerateChartSkeletonFromTarget,\n} from \"./generate-chart-skeleton-data\";\nimport {\n\textractProjectionLineConfigs,\n\tmergeProjectionXDomainMax,\n\tmergeProjectionYDomain,\n} from \"./projection-config\";\nimport {\n\textractReferenceAreaConfigs,\n\ttype ReferenceAreaConfig,\n} from \"./reference-area-config\";\nimport { ReferenceAreaRegistrationContext } from \"./reference-area-registration-context\";\nimport {\n\tcomputeSeriesBarRevealClipPadding,\n\tcomputeSeriesBarWidth,\n} from \"./series-bar-layout\";\nimport { useStaticChartPreview } from \"./static-chart-preview-context\";\nimport { useAnimatedYDomains } from \"./use-animated-y-domains\";\nimport { useChartInteraction } from \"./use-chart-interaction\";\nimport { useChartPhaseOrchestrator } from \"./use-chart-phase-orchestrator\";\nimport {\n\tbuildYScalesFromDomains,\n\tDEFAULT_Y_AXIS_ID,\n\tgetPrimaryYScale,\n\tgroupLinesByYAxisId,\n} from \"./y-axis-scales\";\nimport { computeYDomainsByAxis } from \"./y-domain-utils\";\n\nfunction collectNumericExtents(\n\tdata: Record<string, unknown>[],\n\tdataKeys: string[],\n) {\n\tlet minValue = Number.POSITIVE_INFINITY;\n\tlet maxValue = Number.NEGATIVE_INFINITY;\n\n\tfor (const d of data) {\n\t\tfor (const key of dataKeys) {\n\t\t\tconst value = d[key];\n\t\t\tif (typeof value === \"number\") {\n\t\t\t\tif (value < minValue) {\n\t\t\t\t\tminValue = value;\n\t\t\t\t}\n\t\t\t\tif (value > maxValue) {\n\t\t\t\t\tmaxValue = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (minValue === Number.POSITIVE_INFINITY) {\n\t\treturn { minValue: 0, maxValue: 100 };\n\t}\n\n\treturn { minValue, maxValue };\n}\n\nfunction resolveTimeSeriesYDomain(\n\tdata: Record<string, unknown>[],\n\tdataKeys: string[],\n\tyScaleDomainMax: number | undefined,\n): [number, number] {\n\tif (yScaleDomainMax != null && yScaleDomainMax > 0) {\n\t\treturn [0, yScaleDomainMax * 1.1];\n\t}\n\n\tconst { minValue, maxValue } = collectNumericExtents(data, dataKeys);\n\n\tif (minValue >= 0) {\n\t\tconst top = maxValue <= 0 ? 100 : maxValue * 1.1;\n\t\treturn [0, top];\n\t}\n\n\tconst padding = (maxValue - minValue) * 0.05 || 1;\n\treturn [minValue - padding, maxValue + padding];\n}\n\nfunction ensureChildKey(child: ReactElement, index: number): ReactElement {\n\tif (child.key != null) {\n\t\treturn child;\n\t}\n\treturn cloneElement(child, { key: `chart-child-${index}` });\n}\n\nexport interface TimeSeriesChartInnerProps {\n\twidth: number;\n\theight: number;\n\tdata: Record<string, unknown>[];\n\txDataKey: string;\n\tmargin: Margin;\n\tanimationDuration: number;\n\tanimationEasing?: string;\n\tenterTransition?: Transition;\n\t/** Signature of motion URL state — triggers reveal replay when it changes. */\n\trevealSignature?: string;\n\tchildren: ReactNode;\n\tcontainerRef: React.RefObject<HTMLDivElement | null>;\n\t/** Series keys driving y-domain and tooltip (Line / Area / SeriesBar configs). */\n\tlines: LineConfig[];\n\t/** SVG clipPath id for grow animation. */\n\tclipPathId: string;\n\t/** Optional ComposedChart bar layout (forwarded into context). */\n\tcomposedBarDataKeys?: string[];\n\tcomposedBarSize?: number;\n\tcomposedMaxBarSize?: number;\n\tcomposedBarGap?: number;\n\tcomposedStacked?: boolean;\n\tcomposedStackOffsets?: Map<number, Map<string, number>>;\n\tcomposedStackGap?: number;\n\t/** When set, drives the y-axis max instead of scanning `lines` (e.g. stacked bar totals). */\n\tyScaleDomainMax?: number;\n\t/** Loading vs ready — drives chart phase until transition orchestration lands. */\n\tchartStatus?: ChartStatus;\n\tloadingLabel?: string;\n\t/** Animate y-domain on status / data transitions. Default: true */\n\tyDomainTween?: boolean;\n\tyDomainTweenDuration?: number;\n\t/** Visible x-domain for brush zoom. When set, y-domain and series use data in this range. */\n\txDomain?: [Date, Date];\n\t/** Full dataset length for x-scale padding when `xDomain` is set. */\n\txDomainSlotCount?: number;\n\t/** Tween y-domain when the visible x-range changes during the ready phase. */\n\ttweenYDomainOnXDomainChange?: boolean;\n\tonPhaseChange?: (phase: ChartPhase) => void;\n}\n\nexport function TimeSeriesChartInner(props: TimeSeriesChartInnerProps) {\n\tconst { width, height } = props;\n\tif (width < 10 || height < 10) {\n\t\treturn null;\n\t}\n\treturn <TimeSeriesChartCore {...props} />;\n}\n\nconst TimeSeriesChartCore = memo(function TimeSeriesChartCore({\n\twidth,\n\theight,\n\tdata,\n\txDataKey,\n\tmargin,\n\tanimationDuration,\n\tanimationEasing = DEFAULT_ANIMATION_EASING,\n\tenterTransition,\n\trevealSignature = \"\",\n\tchildren,\n\tcontainerRef,\n\tlines,\n\tclipPathId,\n\tcomposedBarDataKeys,\n\tcomposedBarSize,\n\tcomposedMaxBarSize,\n\tcomposedBarGap,\n\tcomposedStacked,\n\tcomposedStackOffsets,\n\tcomposedStackGap,\n\tyScaleDomainMax,\n\tchartStatus = DEFAULT_CHART_STATUS,\n\tloadingLabel,\n\tyDomainTween = true,\n\tyDomainTweenDuration = DEFAULT_Y_DOMAIN_TWEEN_MS,\n\txDomain,\n\txDomainSlotCount,\n\ttweenYDomainOnXDomainChange = false,\n\tonPhaseChange,\n}: TimeSeriesChartInnerProps) {\n\tconst staticPreview = useStaticChartPreview();\n\tconst innerWidth = width - margin.left - margin.right;\n\tconst innerHeight = height - margin.top - margin.bottom;\n\n\tconst resolveYDomain = useCallback(\n\t\t(sourceData: Record<string, unknown>[], dataKeys: string[]) => {\n\t\t\tconst axisGroups = groupLinesByYAxisId(lines);\n\t\t\tconst usesDefaultOnly =\n\t\t\t\taxisGroups.size === 1 && axisGroups.has(DEFAULT_Y_AXIS_ID);\n\t\t\tconst domainMax =\n\t\t\t\tusesDefaultOnly && yScaleDomainMax != null\n\t\t\t\t\t? yScaleDomainMax\n\t\t\t\t\t: undefined;\n\t\t\treturn resolveTimeSeriesYDomain(sourceData, dataKeys, domainMax);\n\t\t},\n\t\t[lines, yScaleDomainMax],\n\t);\n\n\tconst skeletonData = useMemo(() => {\n\t\tconst primaryKey = lines[0]?.dataKey ?? \"value\";\n\t\tif (data.length === 0) {\n\t\t\treturn generateChartSkeletonData({ dataKey: primaryKey });\n\t\t}\n\t\treturn generateChartSkeletonFromTarget(data, primaryKey);\n\t}, [data, lines]);\n\n\tconst {\n\t\tchartPhase,\n\t\tplotData,\n\t\trevealEpoch,\n\t\tconcealEpoch,\n\t\tisLoaded,\n\t\tnotifyLoadingPulseComplete,\n\t\tnotifyRevealConcealComplete,\n\t\tnotifyYDomainTweenComplete,\n\t} = useChartPhaseOrchestrator({\n\t\tanimationDuration,\n\t\tchartStatus,\n\t\trevealSignature,\n\t\tskeletonData,\n\t\tskipEnterReveal: staticPreview,\n\t\ttargetData: data,\n\t\tyDomainTweenDuration,\n\t});\n\n\tuseEffect(() => {\n\t\tonPhaseChange?.(chartPhase);\n\t}, [chartPhase, onPhaseChange]);\n\n\tconst xAccessor = useCallback(\n\t\t(d: Record<string, unknown>): Date => {\n\t\t\tconst value = d[xDataKey];\n\t\t\treturn value instanceof Date ? value : new Date(value as string | number);\n\t\t},\n\t\t[xDataKey],\n\t);\n\n\tconst bisectDate = useMemo(\n\t\t() => bisector<Record<string, unknown>, Date>((d) => xAccessor(d)).left,\n\t\t[xAccessor],\n\t);\n\n\tconst visiblePlotData = useMemo(() => {\n\t\tif (!xDomain) {\n\t\t\treturn plotData;\n\t\t}\n\t\treturn filterDataByXDomain(plotData, xDomain, xAccessor);\n\t}, [plotData, xDomain, xAccessor]);\n\n\tconst projectionConfigs = useMemo(\n\t\t() => extractProjectionLineConfigs(children),\n\t\t[children],\n\t);\n\n\tconst xScale = useMemo(() => {\n\t\tconst minTime = xDomain\n\t\t\t? xDomain[0].getTime()\n\t\t\t: (extent(plotData, (d) => xAccessor(d).getTime())[0] ?? 0);\n\t\tlet maxTime = xDomain\n\t\t\t? xDomain[1].getTime()\n\t\t\t: (extent(plotData, (d) => xAccessor(d).getTime())[1] ?? minTime);\n\t\t// Brush defines the viewport — projection horizon is included via brush\n\t\t// track extent, not by extending past the selection on the main chart.\n\t\tif (!xDomain) {\n\t\t\tmaxTime = mergeProjectionXDomainMax(maxTime, projectionConfigs);\n\t\t}\n\n\t\treturn scaleTime({\n\t\t\trange: [0, innerWidth],\n\t\t\tdomain: [minTime, maxTime],\n\t\t});\n\t}, [innerWidth, plotData, projectionConfigs, xAccessor, xDomain]);\n\n\t// When brushing, keep the full series for path rendering so edge fades stay\n\t// anchored to the viewport while the line pans through them. Y-domain and\n\t// interaction still use the filtered visible slice.\n\tconst seriesSourceData = xDomain ? plotData : visiblePlotData;\n\n\tconst renderData = useMemo(() => {\n\t\tconst valueKeys = lines.map((line) => line.dataKey);\n\t\treturn decimateTimeSeries(\n\t\t\tseriesSourceData,\n\t\t\tmaxRenderPointsForWidth(innerWidth),\n\t\t\tvalueKeys,\n\t\t);\n\t}, [seriesSourceData, innerWidth, lines]);\n\n\tconst columnWidth = useMemo(() => {\n\t\tconst slotCount =\n\t\t\txDomain && xDomainSlotCount != null\n\t\t\t\t? xDomainSlotCount\n\t\t\t\t: visiblePlotData.length;\n\t\tif (slotCount < 2) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn innerWidth / (slotCount - 1);\n\t}, [innerWidth, visiblePlotData.length, xDomain, xDomainSlotCount]);\n\n\tconst yDomainSkeletonByAxis = useMemo(\n\t\t() =>\n\t\t\tcomputeYDomainsByAxis({\n\t\t\t\tlines,\n\t\t\t\tresolveDomain: (dataKeys) => resolveYDomain(skeletonData, dataKeys),\n\t\t\t}),\n\t\t[lines, resolveYDomain, skeletonData],\n\t);\n\n\tconst yDomainTargetByAxis = useMemo(() => {\n\t\tconst base = computeYDomainsByAxis({\n\t\t\tlines,\n\t\t\tresolveDomain: (dataKeys) =>\n\t\t\t\tresolveYDomain(xDomain ? visiblePlotData : data, dataKeys),\n\t\t});\n\t\tif (projectionConfigs.length === 0) {\n\t\t\treturn base;\n\t\t}\n\t\tconst merged: Record<string, [number, number]> = { ...base };\n\t\tfor (const axisId of Object.keys(base)) {\n\t\t\tmerged[axisId] = mergeProjectionYDomain(\n\t\t\t\tbase[axisId] ?? [0, 100],\n\t\t\t\tprojectionConfigs,\n\t\t\t\taxisId,\n\t\t\t);\n\t\t}\n\t\tfor (const config of projectionConfigs) {\n\t\t\tif (!merged[config.yAxisId]) {\n\t\t\t\tmerged[config.yAxisId] = mergeProjectionYDomain(\n\t\t\t\t\t[0, 100],\n\t\t\t\t\tprojectionConfigs,\n\t\t\t\t\tconfig.yAxisId,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn merged;\n\t}, [\n\t\tdata,\n\t\tlines,\n\t\tprojectionConfigs,\n\t\tresolveYDomain,\n\t\tvisiblePlotData,\n\t\txDomain,\n\t]);\n\n\tconst animatedYDomainsByAxis = useAnimatedYDomains({\n\t\tchartPhase,\n\t\tdurationMs: yDomainTweenDuration,\n\t\tenabled: yDomainTween,\n\t\tonSettled: notifyYDomainTweenComplete,\n\t\tskeletonByAxis: yDomainSkeletonByAxis,\n\t\ttargetByAxis: yDomainTargetByAxis,\n\t\ttweenOnTargetChange:\n\t\t\tyDomainTween || (tweenYDomainOnXDomainChange && xDomain != null),\n\t});\n\n\tconst yDomainsForScales = animatedYDomainsByAxis;\n\n\tconst yScales = useMemo(\n\t\t() =>\n\t\t\tbuildYScalesFromDomains({\n\t\t\t\tdomainsByAxis: yDomainsForScales,\n\t\t\t\tinnerHeight,\n\t\t\t\tlines,\n\t\t\t}),\n\t\t[yDomainsForScales, innerHeight, lines],\n\t);\n\n\tconst yScale = getPrimaryYScale(\n\t\tyScales,\n\t\tscaleLinear({ range: [innerHeight, 0], domain: [0, 100], nice: true }),\n\t);\n\n\tconst dateLabels = useMemo(\n\t\t() => visiblePlotData.map((d) => shortDateFmt.format(xAccessor(d))),\n\t\t[visiblePlotData, xAccessor],\n\t);\n\n\tconst canInteract = isLoaded && isChartInteractionPhase(chartPhase);\n\n\tconst {\n\t\ttooltipData,\n\t\tsetTooltipData,\n\t\tselection,\n\t\tclearSelection,\n\t\tinteractionHandlers,\n\t\tinteractionStyle,\n\t} = useChartInteraction({\n\t\tbisectDate,\n\t\tcanInteract,\n\t\tdata: visiblePlotData,\n\t\tlines,\n\t\tmargin,\n\t\txAccessor,\n\t\txScale,\n\t\tyScale,\n\t\tyScales,\n\t});\n\n\tconst defsChildren: ReactElement[] = [];\n\tconst clipExcludedChildren: ReactElement[] = [];\n\tconst underlayChildren: ReactElement[] = [];\n\tconst preOverlayChildren: ReactElement[] = [];\n\tconst postOverlayChildren: ReactElement[] = [];\n\n\tChildren.forEach(children, (child, index) => {\n\t\tif (!isValidElement(child)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst keyedChild = ensureChildKey(child, index);\n\t\tconst resolvedChild = resolveChartChildElement(keyedChild);\n\n\t\tif (isGradientDefComponent(resolvedChild)) {\n\t\t\tdefsChildren.push(resolvedChild);\n\t\t} else if (isPatternDefComponent(resolvedChild)) {\n\t\t\tpreOverlayChildren.push(resolvedChild);\n\t\t} else if (isPostOverlayComponent(resolvedChild)) {\n\t\t\tpostOverlayChildren.push(resolvedChild);\n\t\t} else if (isClipExcludedComponent(resolvedChild)) {\n\t\t\tclipExcludedChildren.push(resolvedChild);\n\t\t} else if (isUnderlayComponent(resolvedChild)) {\n\t\t\tunderlayChildren.push(resolvedChild);\n\t\t} else {\n\t\t\tpreOverlayChildren.push(resolvedChild);\n\t\t}\n\t});\n\n\tconst [registeredReferenceAreas, setRegisteredReferenceAreas] = useState(\n\t\t() => new Map<string, ReferenceAreaConfig>(),\n\t);\n\n\tconst registerReferenceArea = useCallback(\n\t\t(id: string, config: ReferenceAreaConfig) => {\n\t\t\tsetRegisteredReferenceAreas((prev) => {\n\t\t\t\tconst existing = prev.get(id);\n\t\t\t\tif (\n\t\t\t\t\texisting &&\n\t\t\t\t\texisting.yAxisId === config.yAxisId &&\n\t\t\t\t\texisting.y1 === config.y1 &&\n\t\t\t\t\texisting.y2 === config.y2 &&\n\t\t\t\t\texisting.axisLabelColor === config.axisLabelColor\n\t\t\t\t) {\n\t\t\t\t\treturn prev;\n\t\t\t\t}\n\t\t\t\tconst next = new Map(prev);\n\t\t\t\tnext.set(id, config);\n\t\t\t\treturn next;\n\t\t\t});\n\t\t},\n\t\t[],\n\t);\n\n\tconst unregisterReferenceArea = useCallback((id: string) => {\n\t\tsetRegisteredReferenceAreas((prev) => {\n\t\t\tif (!prev.has(id)) {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\tconst next = new Map(prev);\n\t\t\tnext.delete(id);\n\t\t\treturn next;\n\t\t});\n\t}, []);\n\n\tconst referenceAreaRegistration = useMemo(\n\t\t() => ({ registerReferenceArea, unregisterReferenceArea }),\n\t\t[registerReferenceArea, unregisterReferenceArea],\n\t);\n\n\tconst referenceAreas = useMemo(() => {\n\t\tconst extracted = extractReferenceAreaConfigs(children);\n\t\tconst registered = [...registeredReferenceAreas.values()];\n\t\tif (registered.length === 0) {\n\t\t\treturn extracted;\n\t\t}\n\t\tif (extracted.length === 0) {\n\t\t\treturn registered;\n\t\t}\n\t\treturn [...extracted, ...registered];\n\t}, [children, registeredReferenceAreas]);\n\n\tconst contextValue = useMemo(\n\t\t() => ({\n\t\t\tdata: visiblePlotData,\n\t\t\trenderData,\n\t\t\txScale,\n\t\t\tyScale,\n\t\t\tyScales,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tinnerWidth,\n\t\t\tinnerHeight,\n\t\t\tmargin,\n\t\t\tcolumnWidth,\n\t\t\ttooltipData,\n\t\t\tsetTooltipData,\n\t\t\tcontainerRef,\n\t\t\tlines,\n\t\t\treferenceAreas,\n\t\t\tchartPhase,\n\t\t\tchartStatus,\n\t\t\tloadingLabel,\n\t\t\tyDomainTweenDuration,\n\t\t\tyDomainSkeletonByAxis,\n\t\t\tyDomainTargetByAxis,\n\t\t\tisLoaded,\n\t\t\tanimationDuration,\n\t\t\tanimationEasing,\n\t\t\tenterTransition,\n\t\t\trevealEpoch,\n\t\t\tnotifyLoadingPulseComplete,\n\t\t\txAccessor,\n\t\t\tdateLabels,\n\t\t\txDomain,\n\t\t\txDomainSlotCount,\n\t\t\tselection,\n\t\t\tclearSelection,\n\t\t\tcomposedBarDataKeys,\n\t\t\tcomposedBarSize,\n\t\t\tcomposedMaxBarSize,\n\t\t\tcomposedBarGap,\n\t\t\tcomposedStacked,\n\t\t\tcomposedStackOffsets,\n\t\t\tcomposedStackGap,\n\t\t}),\n\t\t[\n\t\t\tvisiblePlotData,\n\t\t\trenderData,\n\t\t\txScale,\n\t\t\tyScale,\n\t\t\tyScales,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tinnerWidth,\n\t\t\tinnerHeight,\n\t\t\tmargin,\n\t\t\tcolumnWidth,\n\t\t\ttooltipData,\n\t\t\tsetTooltipData,\n\t\t\tcontainerRef,\n\t\t\tlines,\n\t\t\treferenceAreas,\n\t\t\tchartPhase,\n\t\t\tchartStatus,\n\t\t\tloadingLabel,\n\t\t\tyDomainTweenDuration,\n\t\t\tyDomainSkeletonByAxis,\n\t\t\tyDomainTargetByAxis,\n\t\t\tisLoaded,\n\t\t\tanimationDuration,\n\t\t\tanimationEasing,\n\t\t\tenterTransition,\n\t\t\trevealEpoch,\n\t\t\tnotifyLoadingPulseComplete,\n\t\t\txAccessor,\n\t\t\tdateLabels,\n\t\t\txDomain,\n\t\t\txDomainSlotCount,\n\t\t\tselection,\n\t\t\tclearSelection,\n\t\t\tcomposedBarDataKeys,\n\t\t\tcomposedBarSize,\n\t\t\tcomposedMaxBarSize,\n\t\t\tcomposedBarGap,\n\t\t\tcomposedStacked,\n\t\t\tcomposedStackOffsets,\n\t\t\tcomposedStackGap,\n\t\t],\n\t);\n\n\tconst useClipReveal =\n\t\t!staticPreview &&\n\t\trenderData.length > 1 &&\n\t\tinnerWidth > 0 &&\n\t\tanimationDuration > 0;\n\tconst isRevealAnimating = chartPhase === \"revealing\";\n\tconst isRevealConcealing =\n\t\tchartPhase === \"exitingReady\" && animationDuration > 0;\n\n\tconst effectiveEnterTransition: Transition =\n\t\tenterTransition ??\n\t\t({\n\t\t\t...DEFAULT_CHART_ENTER_TRANSITION,\n\t\t\tduration: animationDuration / 1000,\n\t\t} satisfies Transition);\n\n\tconst revealClipPadding = useMemo(() => {\n\t\tif (!composedBarDataKeys?.length) {\n\t\t\treturn 0;\n\t\t}\n\t\tconst barWidth = computeSeriesBarWidth({\n\t\t\tcolumnWidth,\n\t\t\tcomposedBarGap,\n\t\t\tcomposedBarSize,\n\t\t\tcomposedMaxBarSize,\n\t\t\tdataLength: plotData.length,\n\t\t\tinnerWidth,\n\t\t\tseriesCount: composedBarDataKeys.length,\n\t\t\tstacked: composedStacked,\n\t\t});\n\t\treturn computeSeriesBarRevealClipPadding({\n\t\t\tbarWidth,\n\t\t\tgap: composedBarGap,\n\t\t\tseriesCount: composedBarDataKeys.length,\n\t\t\tstacked: composedStacked,\n\t\t});\n\t}, [\n\t\tcolumnWidth,\n\t\tcomposedBarDataKeys,\n\t\tcomposedBarGap,\n\t\tcomposedBarSize,\n\t\tcomposedMaxBarSize,\n\t\tcomposedStacked,\n\t\tinnerWidth,\n\t\tplotData.length,\n\t]);\n\n\treturn (\n\t\t<ReferenceAreaRegistrationContext.Provider\n\t\t\tvalue={referenceAreaRegistration}\n\t\t>\n\t\t\t<ChartProvider value={contextValue}>\n\t\t\t\t<svg aria-hidden=\"true\" height={height} width={width}>\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t{defsChildren}\n\t\t\t\t\t\t{useClipReveal ? (\n\t\t\t\t\t\t\t<ChartRevealClip\n\t\t\t\t\t\t\t\tanimating={isRevealAnimating || isRevealConcealing}\n\t\t\t\t\t\t\t\tclipPathId={clipPathId}\n\t\t\t\t\t\t\t\tenterTransition={effectiveEnterTransition}\n\t\t\t\t\t\t\t\theight={innerHeight + 20}\n\t\t\t\t\t\t\t\tmode={isRevealConcealing ? \"conceal\" : \"reveal\"}\n\t\t\t\t\t\t\t\tonComplete={\n\t\t\t\t\t\t\t\t\tisRevealConcealing ? notifyRevealConcealComplete : undefined\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpadding={revealClipPadding}\n\t\t\t\t\t\t\t\trevealEpoch={isRevealConcealing ? concealEpoch : revealEpoch}\n\t\t\t\t\t\t\t\ttargetWidth={innerWidth}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</defs>\n\n\t\t\t\t\t<rect fill=\"transparent\" height={height} width={width} x={0} y={0} />\n\n\t\t\t\t\t<g\n\t\t\t\t\t\t{...interactionHandlers}\n\t\t\t\t\t\tstyle={interactionStyle}\n\t\t\t\t\t\ttransform={`translate(${margin.left},${margin.top})`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\tfill=\"transparent\"\n\t\t\t\t\t\t\theight={innerHeight}\n\t\t\t\t\t\t\twidth={innerWidth}\n\t\t\t\t\t\t\tx={0}\n\t\t\t\t\t\t\ty={0}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{clipExcludedChildren}\n\t\t\t\t\t\t{underlayChildren}\n\t\t\t\t\t\t{useClipReveal ? (\n\t\t\t\t\t\t\t<g clipPath={`url(#${clipPathId})`}>{preOverlayChildren}</g>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tpreOverlayChildren\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{postOverlayChildren}\n\t\t\t\t\t</g>\n\t\t\t\t</svg>\n\t\t\t</ChartProvider>\n\t\t</ReferenceAreaRegistrationContext.Provider>\n\t);\n});\n","\"use client\";\n\nimport { ParentSize } from \"@visx/responsive\";\nimport type { Transition } from \"motion/react\";\nimport {\n\tChildren,\n\ttype CSSProperties,\n\tisValidElement,\n\ttype ReactNode,\n\tuseCallback,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Area, type AreaProps } from \"./area\";\nimport type { LineConfig, Margin } from \"./chart-context\";\nimport { ChartLoadingLabel } from \"./chart-loading-label\";\nimport {\n\ttype ChartPhase,\n\ttype ChartStatus,\n\tDEFAULT_CHART_STATUS,\n\tDEFAULT_Y_DOMAIN_TWEEN_MS,\n\tresolveRestingChartPhase,\n} from \"./chart-phase\";\nimport { PatternArea } from \"./pattern-area\";\nimport { TimeSeriesChartInner } from \"./time-series-chart-shell\";\n\nexport interface AreaChartProps {\n\t/** Data array - each item should have a date field and numeric values */\n\tdata: Record<string, unknown>[];\n\t/** Key in data for the x-axis (date). Default: \"date\" */\n\txDataKey?: string;\n\t/** Chart margins */\n\tmargin?: Partial<Margin>;\n\t/** Animation duration in milliseconds. Default: 1100 */\n\tanimationDuration?: number;\n\t/** CSS easing for clip-reveal. Default: cubic-bezier(0.85, 0, 0.15, 1) */\n\tanimationEasing?: string;\n\t/** Motion enter transition (spring or cubic-bezier tween). */\n\tenterTransition?: Transition;\n\t/** Signature of motion URL state — triggers reveal replay when it changes. */\n\trevealSignature?: string;\n\t/** Aspect ratio as \"width / height\". Default: \"2 / 1\" */\n\taspectRatio?: string;\n\t/** Additional class name for the container */\n\tclassName?: string;\n\t/** Loading vs ready — drives chart phase and loading chrome. Default: `\"ready\"`. */\n\tstatus?: ChartStatus;\n\t/** Centered shimmer label while loading. */\n\tloadingLabel?: string;\n\t/** Animate y-domain over this duration (ms) on status transitions. Default: 500. */\n\tyDomainTweenDuration?: number;\n\t/** Animate y-domain when status or target domain changes. Default: true */\n\tyDomainTween?: boolean;\n\t/** Visible x-domain for brush zoom. */\n\txDomain?: [Date, Date];\n\t/** Full dataset length for x-scale padding when `xDomain` is set. */\n\txDomainSlotCount?: number;\n\t/** Tween y-domain when brush changes the visible x-range. Default: false */\n\ttweenYDomainOnXDomainChange?: boolean;\n\t/** Inline container styles (e.g. fixed height for brush strip). */\n\tstyle?: CSSProperties;\n\t/** Fires when the internal chart phase changes (e.g. OG capture readiness). */\n\tonPhaseChange?: (phase: ChartPhase) => void;\n\t/** Child components (Area, Grid, ChartTooltip, etc.) */\n\tchildren: ReactNode;\n}\n\nconst DEFAULT_MARGIN: Margin = { top: 40, right: 40, bottom: 40, left: 40 };\n\nfunction extractAreaConfigs(children: ReactNode): LineConfig[] {\n\tconst configs: LineConfig[] = [];\n\n\tChildren.forEach(children, (child) => {\n\t\tif (!isValidElement(child)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst childType = child.type as {\n\t\t\tdisplayName?: string;\n\t\t\tname?: string;\n\t\t};\n\t\tconst componentName =\n\t\t\ttypeof child.type === \"function\"\n\t\t\t\t? childType.displayName || childType.name || \"\"\n\t\t\t\t: \"\";\n\n\t\tconst props = child.props as AreaProps | undefined;\n\t\tconst isPatternArea =\n\t\t\tcomponentName === \"PatternArea\" || child.type === PatternArea;\n\t\tconst isAreaComponent =\n\t\t\tcomponentName === \"Area\" ||\n\t\t\tchild.type === Area ||\n\t\t\t(props &&\n\t\t\t\ttypeof props.dataKey === \"string\" &&\n\t\t\t\tprops.dataKey.length > 0 &&\n\t\t\t\t!isPatternArea);\n\n\t\tif (isAreaComponent && props?.dataKey) {\n\t\t\tconfigs.push({\n\t\t\t\tdataKey: props.dataKey,\n\t\t\t\tstroke: props.stroke || props.fill || \"var(--chart-line-primary)\",\n\t\t\t\tstrokeWidth: props.strokeWidth || 2,\n\t\t\t\tyAxisId: props.yAxisId,\n\t\t\t});\n\t\t}\n\t});\n\n\treturn configs;\n}\n\ninterface ChartInnerProps {\n\twidth: number;\n\theight: number;\n\tdata: Record<string, unknown>[];\n\txDataKey: string;\n\tmargin: Margin;\n\tanimationDuration: number;\n\tanimationEasing?: string;\n\tenterTransition?: Transition;\n\trevealSignature?: string;\n\tchartStatus: ChartStatus;\n\tloadingLabel?: string;\n\tyDomainTweenDuration: number;\n\tyDomainTween: boolean;\n\txDomain?: [Date, Date];\n\txDomainSlotCount?: number;\n\ttweenYDomainOnXDomainChange?: boolean;\n\tchildren: ReactNode;\n\tcontainerRef: React.RefObject<HTMLDivElement | null>;\n\tonPhaseChange: (phase: ChartPhase) => void;\n}\n\nfunction ChartInner({\n\twidth,\n\theight,\n\tdata,\n\txDataKey,\n\tmargin,\n\tanimationDuration,\n\tanimationEasing,\n\tenterTransition,\n\trevealSignature,\n\tchartStatus,\n\tloadingLabel,\n\tyDomainTweenDuration,\n\tyDomainTween,\n\txDomain,\n\txDomainSlotCount,\n\ttweenYDomainOnXDomainChange,\n\tchildren,\n\tcontainerRef,\n\tonPhaseChange,\n}: ChartInnerProps) {\n\tconst lines = useMemo(() => extractAreaConfigs(children), [children]);\n\n\treturn (\n\t\t<TimeSeriesChartInner\n\t\t\tanimationDuration={animationDuration}\n\t\t\tanimationEasing={animationEasing}\n\t\t\tchartStatus={chartStatus}\n\t\t\tclipPathId=\"chart-area-grow-clip\"\n\t\t\tcontainerRef={containerRef}\n\t\t\tdata={data}\n\t\t\tenterTransition={enterTransition}\n\t\t\theight={height}\n\t\t\tlines={lines}\n\t\t\tloadingLabel={loadingLabel}\n\t\t\tmargin={margin}\n\t\t\tonPhaseChange={onPhaseChange}\n\t\t\trevealSignature={revealSignature}\n\t\t\ttweenYDomainOnXDomainChange={tweenYDomainOnXDomainChange}\n\t\t\twidth={width}\n\t\t\txDataKey={xDataKey}\n\t\t\txDomain={xDomain}\n\t\t\txDomainSlotCount={xDomainSlotCount}\n\t\t\tyDomainTween={yDomainTween}\n\t\t\tyDomainTweenDuration={yDomainTweenDuration}\n\t\t>\n\t\t\t{children}\n\t\t</TimeSeriesChartInner>\n\t);\n}\n\nexport function AreaChart({\n\tdata,\n\txDataKey = \"date\",\n\tmargin: marginProp,\n\tanimationDuration = 1100,\n\tanimationEasing,\n\tenterTransition,\n\trevealSignature,\n\taspectRatio = \"2 / 1\",\n\tclassName = \"\",\n\tstatus = DEFAULT_CHART_STATUS,\n\tloadingLabel,\n\tyDomainTweenDuration = DEFAULT_Y_DOMAIN_TWEEN_MS,\n\tyDomainTween = true,\n\txDomain,\n\txDomainSlotCount,\n\ttweenYDomainOnXDomainChange = false,\n\tstyle,\n\tonPhaseChange,\n\tchildren,\n}: AreaChartProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst margin = { ...DEFAULT_MARGIN, ...marginProp };\n\tconst [chartPhase, setChartPhase] = useState<ChartPhase>(() =>\n\t\tresolveRestingChartPhase(status),\n\t);\n\tconst handlePhaseChange = useCallback(\n\t\t(phase: ChartPhase) => {\n\t\t\tsetChartPhase(phase);\n\t\t\tonPhaseChange?.(phase);\n\t\t},\n\t\t[onPhaseChange],\n\t);\n\n\tconst showLoadingLabel = Boolean(\n\t\tloadingLabel?.trim() &&\n\t\t(chartPhase === \"loading\" ||\n\t\t\tchartPhase === \"exiting\" ||\n\t\t\tchartPhase === \"gridTweenReady\" ||\n\t\t\tchartPhase === \"revealingLoading\"),\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"relative w-full\", className)}\n\t\t\tref={containerRef}\n\t\t\tstyle={{ aspectRatio, touchAction: \"none\", ...style }}\n\t\t>\n\t\t\t<ParentSize debounceTime={10}>\n\t\t\t\t{({ width, height }) => (\n\t\t\t\t\t<ChartInner\n\t\t\t\t\t\tanimationDuration={animationDuration}\n\t\t\t\t\t\tanimationEasing={animationEasing}\n\t\t\t\t\t\tchartStatus={status}\n\t\t\t\t\t\tcontainerRef={containerRef}\n\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\tenterTransition={enterTransition}\n\t\t\t\t\t\theight={height}\n\t\t\t\t\t\tloadingLabel={loadingLabel}\n\t\t\t\t\t\tmargin={margin}\n\t\t\t\t\t\tonPhaseChange={handlePhaseChange}\n\t\t\t\t\t\trevealSignature={revealSignature}\n\t\t\t\t\t\ttweenYDomainOnXDomainChange={tweenYDomainOnXDomainChange}\n\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\txDataKey={xDataKey}\n\t\t\t\t\t\txDomain={xDomain}\n\t\t\t\t\t\txDomainSlotCount={xDomainSlotCount}\n\t\t\t\t\t\tyDomainTween={yDomainTween}\n\t\t\t\t\t\tyDomainTweenDuration={yDomainTweenDuration}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</ChartInner>\n\t\t\t\t)}\n\t\t\t</ParentSize>\n\t\t\t{showLoadingLabel ? (\n\t\t\t\t<ChartLoadingLabel\n\t\t\t\t\texiting={chartPhase !== \"loading\"}\n\t\t\t\t\ttext={loadingLabel}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n\nexport { Area, type AreaProps } from \"./area\";\n\nexport default AreaChart;\n","import { type CurveFactory, line as d3Line } from \"d3-shape\";\n\nexport interface SeriesPathPoint {\n\tx: number;\n\ty: number;\n\tkey: string;\n}\n\nexport function computeSeriesPathPoints(\n\tdata: Record<string, unknown>[],\n\txAccessor: (datum: Record<string, unknown>) => Date,\n\txScale: (value: Date) => number | undefined,\n\tyScale: (value: number) => number | undefined,\n\tdataKey: string,\n): SeriesPathPoint[] {\n\treturn data.map((datum, index) => {\n\t\tconst xValue = xAccessor(datum);\n\t\tconst yValue = datum[dataKey];\n\t\treturn {\n\t\t\tx: xScale(xValue) ?? 0,\n\t\t\ty: typeof yValue === \"number\" ? (yScale(yValue) ?? 0) : 0,\n\t\t\tkey: String(xValue.getTime?.() ?? index),\n\t\t};\n\t});\n}\n\nexport function interpolateSeriesPathPoints(\n\tfrom: SeriesPathPoint[],\n\tto: SeriesPathPoint[],\n\tprogress: number,\n): SeriesPathPoint[] {\n\tif (progress >= 1) {\n\t\treturn to;\n\t}\n\tif (progress <= 0) {\n\t\treturn from.length > 0 ? from : to;\n\t}\n\n\tconst fromByKey = new Map(from.map((point) => [point.key, point]));\n\n\treturn to.map((target, index) => {\n\t\tconst source = fromByKey.get(target.key);\n\t\tif (source) {\n\t\t\treturn {\n\t\t\t\tkey: target.key,\n\t\t\t\tx: source.x + (target.x - source.x) * progress,\n\t\t\t\ty: source.y + (target.y - source.y) * progress,\n\t\t\t};\n\t\t}\n\n\t\tconst previousTarget = index > 0 ? to[index - 1] : undefined;\n\t\tconst previousSource = previousTarget\n\t\t\t? fromByKey.get(previousTarget.key)\n\t\t\t: undefined;\n\t\tconst nextTarget = index < to.length - 1 ? to[index + 1] : undefined;\n\t\tconst nextSource = nextTarget ? fromByKey.get(nextTarget.key) : undefined;\n\t\tconst anchor = previousSource ?? nextSource ?? from[0] ?? target;\n\n\t\treturn {\n\t\t\tkey: target.key,\n\t\t\tx: anchor.x + (target.x - anchor.x) * progress,\n\t\t\ty: anchor.y + (target.y - anchor.y) * progress,\n\t\t};\n\t});\n}\n\nexport function seriesPathFromPoints(\n\tpoints: SeriesPathPoint[],\n\tcurve: CurveFactory,\n): string {\n\tif (points.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst generator = d3Line<SeriesPathPoint>()\n\t\t.x((point) => point.x)\n\t\t.y((point) => point.y)\n\t\t.curve(curve);\n\n\treturn generator(points) ?? \"\";\n}\n\nexport function seriesPathTransitionSignature({\n\trenderData,\n\txAccessor,\n\tdataKey,\n\tinnerWidth,\n\txDomainMin,\n\txDomainMax,\n}: {\n\trenderData: Record<string, unknown>[];\n\txAccessor: (datum: Record<string, unknown>) => Date;\n\tdataKey: string;\n\tinnerWidth: number;\n\txDomainMin: number;\n\txDomainMax: number;\n}): string {\n\tconst values = renderData.map((datum) => {\n\t\tconst xValue = xAccessor(datum);\n\t\tconst yValue = datum[dataKey];\n\t\treturn `${xValue.getTime()}:${typeof yValue === \"number\" ? yValue : \"\"}`;\n\t});\n\n\treturn `${innerWidth}|${xDomainMin}|${xDomainMax}|${values.join(\",\")}`;\n}\n","\"use client\";\n\nimport type { CurveFactory } from \"d3-shape\";\nimport { animate, useReducedMotion } from \"motion/react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { LINE_LOADING_PULSE_EASE } from \"./line-loading-timing\";\nimport {\n\tcomputeSeriesPathPoints,\n\tinterpolateSeriesPathPoints,\n\ttype SeriesPathPoint,\n\tseriesPathFromPoints,\n\tseriesPathTransitionSignature,\n} from \"./series-path-utils\";\n\nexport interface UseAnimatedSeriesPathOptions {\n\trenderData: Record<string, unknown>[];\n\txAccessor: (datum: Record<string, unknown>) => Date;\n\txScale: (value: Date) => number | undefined;\n\tyScale: (value: number) => number | undefined;\n\tdataKey: string;\n\tcurve: CurveFactory;\n\tchartPhase: string;\n\tdurationMs: number;\n\tinnerWidth: number;\n\tenabled: boolean;\n}\n\nexport function useAnimatedSeriesPath({\n\trenderData,\n\txAccessor,\n\txScale,\n\tyScale,\n\tdataKey,\n\tcurve,\n\tchartPhase,\n\tdurationMs,\n\tinnerWidth,\n\tenabled,\n}: UseAnimatedSeriesPathOptions) {\n\tconst reducedMotion = useReducedMotion();\n\tconst [animatedPoints, setAnimatedPoints] = useState<\n\t\tSeriesPathPoint[] | null\n\t>(null);\n\tconst displayedPointsRef = useRef<SeriesPathPoint[] | null>(null);\n\tconst animatingRef = useRef(false);\n\n\tconst xScaleDomain = useMemo(() => {\n\t\tconst scaleWithDomain = xScale as { domain?: () => [Date, Date] };\n\t\treturn scaleWithDomain.domain?.() ?? [new Date(0), new Date(0)];\n\t}, [xScale]);\n\n\tconst transitionSignature = useMemo(\n\t\t() =>\n\t\t\tseriesPathTransitionSignature({\n\t\t\t\trenderData,\n\t\t\t\txAccessor,\n\t\t\t\tdataKey,\n\t\t\t\tinnerWidth,\n\t\t\t\txDomainMin: xScaleDomain[0]?.getTime?.() ?? 0,\n\t\t\t\txDomainMax: xScaleDomain[1]?.getTime?.() ?? 0,\n\t\t\t}),\n\t\t[renderData, xAccessor, dataKey, innerWidth, xScaleDomain],\n\t);\n\n\tconst targetPoints = useMemo(\n\t\t() =>\n\t\t\tcomputeSeriesPathPoints(renderData, xAccessor, xScale, yScale, dataKey),\n\t\t[renderData, xAccessor, xScale, yScale, dataKey],\n\t);\n\n\tconst prevTransitionSignatureRef = useRef(transitionSignature);\n\n\tuseEffect(() => {\n\t\tif (!animatingRef.current) {\n\t\t\tdisplayedPointsRef.current = targetPoints;\n\t\t}\n\t}, [targetPoints]);\n\n\tuseEffect(() => {\n\t\tconst shouldAnimate =\n\t\t\tenabled &&\n\t\t\t!reducedMotion &&\n\t\t\tchartPhase === \"ready\" &&\n\t\t\tdurationMs > 0 &&\n\t\t\trenderData.length > 0;\n\n\t\tif (!shouldAnimate) {\n\t\t\tanimatingRef.current = false;\n\t\t\tsetAnimatedPoints(null);\n\t\t\tdisplayedPointsRef.current = targetPoints;\n\t\t\tprevTransitionSignatureRef.current = transitionSignature;\n\t\t\treturn;\n\t\t}\n\n\t\tif (prevTransitionSignatureRef.current === transitionSignature) {\n\t\t\treturn;\n\t\t}\n\t\tprevTransitionSignatureRef.current = transitionSignature;\n\n\t\tconst fromPoints = displayedPointsRef.current ?? targetPoints;\n\t\tif (fromPoints.length === 0) {\n\t\t\tdisplayedPointsRef.current = targetPoints;\n\t\t\treturn;\n\t\t}\n\n\t\tanimatingRef.current = true;\n\t\tconst fromSnapshot = fromPoints;\n\n\t\tconst control = animate(0, 1, {\n\t\t\tduration: durationMs / 1000,\n\t\t\tease: [...LINE_LOADING_PULSE_EASE],\n\t\t\tonUpdate: (progress) => {\n\t\t\t\tconst currentTarget = computeSeriesPathPoints(\n\t\t\t\t\trenderData,\n\t\t\t\t\txAccessor,\n\t\t\t\t\txScale,\n\t\t\t\t\tyScale,\n\t\t\t\t\tdataKey,\n\t\t\t\t);\n\t\t\t\tconst next = interpolateSeriesPathPoints(\n\t\t\t\t\tfromSnapshot,\n\t\t\t\t\tcurrentTarget,\n\t\t\t\t\tprogress,\n\t\t\t\t);\n\t\t\t\tdisplayedPointsRef.current = next;\n\t\t\t\tsetAnimatedPoints(next);\n\t\t\t},\n\t\t\tonComplete: () => {\n\t\t\t\tanimatingRef.current = false;\n\t\t\t\tdisplayedPointsRef.current = targetPoints;\n\t\t\t\tsetAnimatedPoints(null);\n\t\t\t},\n\t\t});\n\n\t\treturn () => {\n\t\t\tcontrol.stop();\n\t\t\tanimatingRef.current = false;\n\t\t};\n\t}, [\n\t\ttransitionSignature,\n\t\tchartPhase,\n\t\tdurationMs,\n\t\tenabled,\n\t\treducedMotion,\n\t\trenderData,\n\t\txAccessor,\n\t\txScale,\n\t\tyScale,\n\t\tdataKey,\n\t\ttargetPoints,\n\t]);\n\n\tconst activePoints = animatedPoints ?? targetPoints;\n\tconst pathD = useMemo(\n\t\t() => seriesPathFromPoints(activePoints, curve),\n\t\t[activePoints, curve],\n\t);\n\n\treturn {\n\t\tpathD,\n\t\tisPathAnimating: animatedPoints != null,\n\t};\n}\n","\"use client\";\n\nimport { curveNatural } from \"@visx/curve\";\nimport { LinePath } from \"@visx/shape\";\nimport type { CurveFactory } from \"d3-shape\";\nimport {\n\ttype RefObject,\n\tuseCallback,\n\tuseId,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { chartCssVars, useChartStable, useYScale } from \"./chart-context\";\nimport type { LoadingStyle } from \"./chart-phase\";\nimport {\n\ttype FadeEdges,\n\tfadeGradientStops,\n\tresolveFadeSides,\n\tviewportFadeGradientAttrs,\n} from \"./fade-edges\";\nimport {\n\ttype LineLoadingPulseMode,\n\tLineLoadingPulseStroke,\n\tresolveLineLoadingPulseMode,\n} from \"./line-loading-pulse\";\nimport { LINE_LOADING_LOOP_PAUSE_MS } from \"./line-loading-timing\";\nimport { LineLoadingSweep } from \"./loading-sweep\";\nimport {\n\tresolveDashTailBounds,\n\tusePathStrokeMetrics,\n} from \"./path-stroke-utils\";\nimport { SeriesDashTailOverlay } from \"./series-dash-tail-overlay\";\nimport { SeriesHighlightLayer } from \"./series-highlight-layer\";\nimport { SeriesHoverDim } from \"./series-hover-dim\";\nimport { SeriesMarkers } from \"./series-markers\";\nimport type { SeriesPointMarkerStyle } from \"./series-point-marker\";\nimport { useAnimatedSeriesPath } from \"./use-animated-series-path\";\n\nexport interface LineProps {\n\t/** Key in data to use for y values */\n\tdataKey: string;\n\t/** Y-scale group id (Recharts `yAxisId`). Default: `\"left\"`. */\n\tyAxisId?: string | number;\n\t/** Stroke color. Default: var(--chart-line-primary) */\n\tstroke?: string;\n\t/** Stroke width. Default: 2.5 */\n\tstrokeWidth?: number;\n\t/** Curve function. Default: curveNatural */\n\tcurve?: CurveFactory;\n\t/** Whether to animate the line. Default: true */\n\tanimate?: boolean;\n\t/**\n\t * Fade the line stroke toward transparent at the chart edges.\n\t * - `true` fades both edges, `false` disables the fade entirely.\n\t * - `\"left\"` / `\"right\"` fades only that side.\n\t * Default: true\n\t */\n\tfadeEdges?: FadeEdges;\n\t/** Whether to show highlight segment on hover. Default: true */\n\tshowHighlight?: boolean;\n\t/** Render scatter-style circle markers at each data point. Default: false */\n\tshowMarkers?: boolean;\n\t/** Marker styling (same options as Scatter). */\n\tmarkers?: SeriesPointMarkerStyle;\n\t/**\n\t * Data index from which the line stroke becomes dashed (inclusive).\n\t * Useful for projecting incomplete periods, e.g. dashed from yesterday through today.\n\t */\n\tdashFromIndex?: number;\n\t/** Dash pattern for the tail segment when `dashFromIndex` is set. Default: \"6,4\" */\n\tdashArray?: string;\n\t/**\n\t * Show the loading pulse overlay. Default: follows chart loading phase.\n\t * Set `false` to disable even during loading.\n\t */\n\tloading?: boolean;\n\t/** Stroke color for the loading pulse overlay. Default: var(--foreground) */\n\tloadingStroke?: string;\n\t/** Loading pulse stroke opacity. Default: 0.5 */\n\tloadingStrokeOpacity?: number;\n\t/** Override pulse animation mode (loop / exit / enter). */\n\tloadingPulseMode?: LineLoadingPulseMode;\n\t/** Called when a loop-mode pulse cycle completes. */\n\tonLoadingPulseCycleComplete?: () => void;\n\t/**\n\t * Loading animation while the chart is in loading status: the default\n\t * traveling `\"pulse\"`, or a diagonal `\"sweep\"` shimmer across the skeleton\n\t * line. Default: `\"pulse\"`.\n\t */\n\tloadingStyle?: LoadingStyle;\n}\n\nfunction LineSeriesStroke({\n\tanimatedPathD,\n\tcurve,\n\tgetY,\n\tpathRef,\n\trenderData,\n\tstrokeWidth,\n\tuseDataTransitionPath,\n\tvisibleStroke,\n\txAccessor,\n\txScale,\n}: {\n\tanimatedPathD: string;\n\tcurve: CurveFactory;\n\tgetY: (datum: Record<string, unknown>) => number;\n\tpathRef: RefObject<SVGPathElement | null>;\n\trenderData: Record<string, unknown>[];\n\tstrokeWidth: number;\n\tuseDataTransitionPath: boolean;\n\tvisibleStroke: string;\n\txAccessor: (datum: Record<string, unknown>) => Date;\n\txScale: (value: Date) => number | undefined;\n}) {\n\tif (useDataTransitionPath && animatedPathD) {\n\t\treturn (\n\t\t\t<path\n\t\t\t\td={animatedPathD}\n\t\t\t\tfill=\"none\"\n\t\t\t\tref={pathRef}\n\t\t\t\tstroke={visibleStroke}\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<LinePath\n\t\t\tcurve={curve}\n\t\t\tdata={renderData}\n\t\t\tinnerRef={pathRef}\n\t\t\tstroke={visibleStroke}\n\t\t\tstrokeLinecap=\"round\"\n\t\t\tstrokeWidth={strokeWidth}\n\t\t\tx={(d) => xScale(xAccessor(d)) ?? 0}\n\t\t\ty={getY}\n\t\t/>\n\t);\n}\n\nfunction LineLoadingOverlays({\n\tcurve,\n\thandleLoadingPulseComplete,\n\tinnerWidth,\n\tloadingStroke,\n\tloadingStrokeOpacity,\n\tloadingStyle,\n\tpathD,\n\tpulseEpoch,\n\tpulseMode,\n\tshowLoadingPulse,\n\tstrokeWidth,\n}: {\n\tcurve: CurveFactory;\n\thandleLoadingPulseComplete: () => void;\n\tinnerWidth: number;\n\tloadingStroke: string;\n\tloadingStrokeOpacity: number;\n\tloadingStyle: LoadingStyle;\n\tpathD: string | null;\n\tpulseEpoch: number;\n\tpulseMode: LineLoadingPulseMode | null;\n\tshowLoadingPulse: boolean;\n\tstrokeWidth: number;\n}) {\n\tconst sweepLoading =\n\t\tshowLoadingPulse && innerWidth > 0 && loadingStyle === \"sweep\";\n\tconst pulseLoading = showLoadingPulse && innerWidth > 0 && !sweepLoading;\n\n\treturn (\n\t\t<>\n\t\t\t{sweepLoading ? (\n\t\t\t\t<LineLoadingSweep\n\t\t\t\t\tcurve={curve}\n\t\t\t\t\tkey=\"loading-sweep\"\n\t\t\t\t\tmode={pulseMode ?? \"loop\"}\n\t\t\t\t\tonTransitionComplete={handleLoadingPulseComplete}\n\t\t\t\t\tstroke={loadingStroke}\n\t\t\t\t\tstrokeOpacity={loadingStrokeOpacity}\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{pulseLoading && pathD ? (\n\t\t\t\t<LineLoadingPulseStroke\n\t\t\t\t\tkey=\"loading-pulse\"\n\t\t\t\t\tloopEpoch={pulseEpoch}\n\t\t\t\t\tmode={pulseMode ?? undefined}\n\t\t\t\t\tonCycleComplete={handleLoadingPulseComplete}\n\t\t\t\t\tpathD={pathD}\n\t\t\t\t\tstroke={loadingStroke}\n\t\t\t\t\tstrokeOpacity={loadingStrokeOpacity}\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</>\n\t);\n}\n\nexport function Line({\n\tdataKey,\n\tyAxisId,\n\tstroke = chartCssVars.linePrimary,\n\tstrokeWidth = 2.5,\n\tcurve = curveNatural,\n\tanimate = true,\n\tfadeEdges = true,\n\tshowHighlight = true,\n\tshowMarkers = false,\n\tmarkers,\n\tdashFromIndex,\n\tdashArray = \"6,4\",\n\tloading,\n\tloadingStroke = chartCssVars.foreground,\n\tloadingStrokeOpacity = 0.5,\n\tloadingPulseMode,\n\tonLoadingPulseCycleComplete,\n\tloadingStyle = \"pulse\",\n}: LineProps) {\n\t// Stable slice only: hover state lives inside `<SeriesHoverDim>` and\n\t// `<SeriesHighlightLayer>` so this component (and its expensive\n\t// <SeriesDashTailOverlay> child) does not re-render on cursor motion.\n\t// The reveal-clip is now a single shared clipPath at the chart-shell\n\t// level (`time-series-chart-shell.tsx`); we no longer render a per-line\n\t// `<ChartRevealClip>` or read `revealEpoch` here.\n\tconst {\n\t\tdata,\n\t\trenderData,\n\t\txScale,\n\t\tinnerHeight,\n\t\tinnerWidth,\n\t\txAccessor,\n\t\tlines,\n\t\tchartPhase,\n\t\tnotifyLoadingPulseComplete,\n\t\tyDomainTweenDuration,\n\t} = useChartStable();\n\tconst yScale = useYScale(yAxisId);\n\tconst useDataTransitionPath = animate && chartPhase === \"ready\";\n\tconst { pathD: animatedPathD } = useAnimatedSeriesPath({\n\t\tchartPhase,\n\t\tcurve,\n\t\tdataKey,\n\t\tdurationMs: yDomainTweenDuration,\n\t\tenabled: useDataTransitionPath,\n\t\tinnerWidth,\n\t\trenderData,\n\t\txAccessor,\n\t\txScale,\n\t\tyScale,\n\t});\n\n\tconst phasePulseMode = resolveLineLoadingPulseMode(chartPhase);\n\tconst pulseMode =\n\t\tloading === false\n\t\t\t? null\n\t\t\t: (loadingPulseMode ?? (loading === true ? \"loop\" : phasePulseMode));\n\tconst showLoadingPulse = pulseMode != null;\n\tconst [pulseEpoch, setPulseEpoch] = useState(0);\n\tconst effectiveShowHighlight = showHighlight && !showLoadingPulse;\n\n\tconst handleLoadingPulseComplete = useCallback(() => {\n\t\tonLoadingPulseCycleComplete?.();\n\t\tif (pulseMode === \"loop\") {\n\t\t\twindow.setTimeout(() => {\n\t\t\t\tsetPulseEpoch((epoch) => epoch + 1);\n\t\t\t}, LINE_LOADING_LOOP_PAUSE_MS);\n\t\t\treturn;\n\t\t}\n\t\tnotifyLoadingPulseComplete?.();\n\t}, [notifyLoadingPulseComplete, onLoadingPulseCycleComplete, pulseMode]);\n\n\tconst seriesIndex = useMemo(() => {\n\t\tconst index = lines.findIndex((line) => line.dataKey === dataKey);\n\t\treturn index >= 0 ? index : 0;\n\t}, [lines, dataKey]);\n\n\tconst pathRef = useRef<SVGPathElement>(null);\n\tconst { pathLength, pathD } = usePathStrokeMetrics(pathRef, [\n\t\trenderData,\n\t\tinnerWidth,\n\t\tdashFromIndex,\n\t\tanimate,\n\t\tuseDataTransitionPath ? animatedPathD : null,\n\t]);\n\n\tconst reactId = useId();\n\tconst gradientId = `line-gradient-${dataKey}-${reactId}`;\n\n\tconst getY = useCallback(\n\t\t(d: Record<string, unknown>) => {\n\t\t\tconst value = d[dataKey];\n\t\t\treturn typeof value === \"number\" ? (yScale(value) ?? 0) : 0;\n\t\t},\n\t\t[dataKey, yScale],\n\t);\n\n\tconst hasDashTail = resolveDashTailBounds(dashFromIndex, data.length);\n\tconst fadeSides = resolveFadeSides(fadeEdges);\n\tconst lineStroke = fadeSides.any ? `url(#${gradientId})` : stroke;\n\tconst fadeStops = fadeSides.any ? fadeGradientStops(fadeSides) : null;\n\tconst showSeriesStroke =\n\t\tchartPhase === \"revealing\" ||\n\t\tchartPhase === \"ready\" ||\n\t\tchartPhase === \"exitingReady\";\n\tlet visibleStroke = \"transparent\";\n\tif (showSeriesStroke && !hasDashTail) {\n\t\tvisibleStroke = lineStroke;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{fadeStops ? (\n\t\t\t\t<defs>\n\t\t\t\t\t<linearGradient\n\t\t\t\t\t\tid={gradientId}\n\t\t\t\t\t\t{...viewportFadeGradientAttrs(innerWidth)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{fadeStops.map((stop) => (\n\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\tkey={stop.offset}\n\t\t\t\t\t\t\t\toffset={stop.offset}\n\t\t\t\t\t\t\t\tstyle={{ stopColor: stroke, stopOpacity: stop.opacity }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</linearGradient>\n\t\t\t\t</defs>\n\t\t\t) : null}\n\n\t\t\t<SeriesHoverDim\n\t\t\t\tdimOpacity={0.3}\n\t\t\t\tenabled={effectiveShowHighlight}\n\t\t\t\tseriesIndex={seriesIndex}\n\t\t\t>\n\t\t\t\t<LineSeriesStroke\n\t\t\t\t\tanimatedPathD={animatedPathD}\n\t\t\t\t\tcurve={curve}\n\t\t\t\t\tgetY={getY}\n\t\t\t\t\tpathRef={pathRef}\n\t\t\t\t\trenderData={renderData}\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\tuseDataTransitionPath={useDataTransitionPath}\n\t\t\t\t\tvisibleStroke={visibleStroke}\n\t\t\t\t\txAccessor={xAccessor}\n\t\t\t\t\txScale={xScale}\n\t\t\t\t/>\n\n\t\t\t\t<SeriesDashTailOverlay\n\t\t\t\t\tdashArray={dashArray}\n\t\t\t\t\tdashFromIndex={dashFromIndex}\n\t\t\t\t\tdata={data}\n\t\t\t\t\tinnerHeight={innerHeight}\n\t\t\t\t\tinnerWidth={innerWidth}\n\t\t\t\t\tpathD={pathD}\n\t\t\t\t\tpathLength={pathLength}\n\t\t\t\t\tstroke={lineStroke}\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\txAccessor={xAccessor}\n\t\t\t\t\txScale={xScale}\n\t\t\t\t/>\n\t\t\t</SeriesHoverDim>\n\n\t\t\t{showMarkers ? (\n\t\t\t\t<SeriesMarkers\n\t\t\t\t\tanimate={animate}\n\t\t\t\t\tdataKey={dataKey}\n\t\t\t\t\t{...markers}\n\t\t\t\t\tfill={markers?.fill ?? stroke}\n\t\t\t\t\tstroke={markers?.stroke ?? markers?.fill ?? stroke}\n\t\t\t\t/>\n\t\t\t) : null}\n\n\t\t\t<SeriesHighlightLayer\n\t\t\t\tenabled={effectiveShowHighlight}\n\t\t\t\theight={innerHeight}\n\t\t\t\tpathRef={pathRef}\n\t\t\t\tstroke={stroke}\n\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t/>\n\n\t\t\t<LineLoadingOverlays\n\t\t\t\tcurve={curve}\n\t\t\t\thandleLoadingPulseComplete={handleLoadingPulseComplete}\n\t\t\t\tinnerWidth={innerWidth}\n\t\t\t\tloadingStroke={loadingStroke}\n\t\t\t\tloadingStrokeOpacity={loadingStrokeOpacity}\n\t\t\t\tloadingStyle={loadingStyle}\n\t\t\t\tpathD={pathD}\n\t\t\t\tpulseEpoch={pulseEpoch}\n\t\t\t\tpulseMode={pulseMode}\n\t\t\t\tshowLoadingPulse={showLoadingPulse}\n\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nLine.displayName = \"Line\";\n\nexport default Line;\n","\"use client\";\n\nimport { ParentSize } from \"@visx/responsive\";\nimport type { Transition } from \"motion/react\";\nimport {\n\tChildren,\n\ttype CSSProperties,\n\tisValidElement,\n\ttype ReactElement,\n\ttype ReactNode,\n\tuseCallback,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport type { LineConfig, Margin } from \"./chart-context\";\nimport { ChartLoadingLabel } from \"./chart-loading-label\";\nimport {\n\ttype ChartPhase,\n\ttype ChartStatus,\n\tDEFAULT_CHART_STATUS,\n\tDEFAULT_Y_DOMAIN_TWEEN_MS,\n\tresolveRestingChartPhase,\n} from \"./chart-phase\";\nimport { Line, type LineProps } from \"./line\";\nimport { TimeSeriesChartInner } from \"./time-series-chart-shell\";\n\nexport interface LineChartProps {\n\t/** Data array - each item should have a date field and numeric values */\n\tdata: Record<string, unknown>[];\n\t/** Key in data for the x-axis (date). Default: \"date\" */\n\txDataKey?: string;\n\t/** Chart margins */\n\tmargin?: Partial<Margin>;\n\t/** Animation duration in milliseconds. Default: 1100 */\n\tanimationDuration?: number;\n\t/** CSS easing for clip-reveal. Default: cubic-bezier(0.85, 0, 0.15, 1) */\n\tanimationEasing?: string;\n\tenterTransition?: Transition;\n\trevealSignature?: string;\n\t/** Aspect ratio as \"width / height\". Default: \"2 / 1\". Omit to fill a sized parent. */\n\taspectRatio?: string;\n\t/** Additional class name for the container */\n\tclassName?: string;\n\t/** Loading vs ready — drives chart phase and loading chrome. Default: `\"ready\"`. */\n\tstatus?: ChartStatus;\n\t/** Centered shimmer label while loading. */\n\tloadingLabel?: string;\n\t/** Animate y-domain over this duration (ms) on status transitions. Default: 500. */\n\tyDomainTweenDuration?: number;\n\t/** Animate y-domain when status or target domain changes. Default: true */\n\tyDomainTween?: boolean;\n\t/** Visible x-domain for brush zoom. */\n\txDomain?: [Date, Date];\n\t/** Full dataset length for x-scale padding when `xDomain` is set. */\n\txDomainSlotCount?: number;\n\t/** Tween y-domain when brush changes the visible x-range. Default: false */\n\ttweenYDomainOnXDomainChange?: boolean;\n\t/** Inline container styles (e.g. fixed height for brush strip). */\n\tstyle?: CSSProperties;\n\t/** Fires when the internal chart phase changes (e.g. OG capture readiness). */\n\tonPhaseChange?: (phase: ChartPhase) => void;\n\t/** Child components (Line, Grid, ChartTooltip, etc.) */\n\tchildren: ReactNode;\n}\n\nconst DEFAULT_MARGIN: Margin = { top: 40, right: 40, bottom: 40, left: 40 };\n\n/** Series renderers that carry a dataKey but must not drive the shared y-domain. */\nconst LINE_DOMAIN_EXCLUDED_NAMES = new Set([\n\t\"ProfitLossLine\",\n\t\"LineSeriesTerminalMarker\",\n\t\"Area\",\n\t\"SeriesBar\",\n\t\"Scatter\",\n\t\"Candlestick\",\n\t\"Bar\",\n\t\"PatternArea\",\n]);\n\nfunction getChildComponentName(child: ReactElement) {\n\tconst childType = child.type as { displayName?: string; name?: string };\n\treturn typeof child.type === \"function\"\n\t\t? childType.displayName || childType.name || \"\"\n\t\t: \"\";\n}\n\nfunction registersLineDomain(\n\tchild: ReactElement,\n\tprops: LineProps | undefined,\n) {\n\tif (!props?.dataKey) {\n\t\treturn false;\n\t}\n\n\tconst componentName = getChildComponentName(child);\n\tif (componentName === \"Line\" || child.type === Line) {\n\t\treturn true;\n\t}\n\tif (LINE_DOMAIN_EXCLUDED_NAMES.has(componentName)) {\n\t\treturn false;\n\t}\n\t// MDX / duplicate bundle instances may not share the same `Line` reference.\n\treturn typeof props.dataKey === \"string\" && props.dataKey.length > 0;\n}\n\nfunction extractLineConfigs(children: ReactNode): LineConfig[] {\n\tconst configs: LineConfig[] = [];\n\n\tconst visit = (node: ReactNode) => {\n\t\tChildren.forEach(node, (child) => {\n\t\t\tif (!isValidElement(child)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst props = child.props as LineProps | undefined;\n\n\t\t\tif (registersLineDomain(child, props) && props?.dataKey) {\n\t\t\t\tconfigs.push({\n\t\t\t\t\tdataKey: props.dataKey,\n\t\t\t\t\tstroke: props.stroke || \"var(--chart-line-primary)\",\n\t\t\t\t\tstrokeWidth: props.strokeWidth || 2.5,\n\t\t\t\t\tyAxisId: props.yAxisId,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst childProps = child.props as { children?: ReactNode } | undefined;\n\t\t\tif (childProps?.children) {\n\t\t\t\tvisit(childProps.children);\n\t\t\t}\n\t\t});\n\t};\n\n\tvisit(children);\n\treturn configs;\n}\n\ninterface ChartInnerProps {\n\twidth: number;\n\theight: number;\n\tdata: Record<string, unknown>[];\n\txDataKey: string;\n\tmargin: Margin;\n\tanimationDuration: number;\n\tanimationEasing?: string;\n\tenterTransition?: Transition;\n\trevealSignature?: string;\n\tchartStatus: ChartStatus;\n\tloadingLabel?: string;\n\tyDomainTweenDuration: number;\n\tyDomainTween: boolean;\n\txDomain?: [Date, Date];\n\txDomainSlotCount?: number;\n\ttweenYDomainOnXDomainChange?: boolean;\n\tchildren: ReactNode;\n\tcontainerRef: React.RefObject<HTMLDivElement | null>;\n\tonPhaseChange: (phase: ChartPhase) => void;\n}\n\nfunction ChartInner({\n\twidth,\n\theight,\n\tdata,\n\txDataKey,\n\tmargin,\n\tanimationDuration,\n\tanimationEasing,\n\tenterTransition,\n\trevealSignature,\n\tchartStatus,\n\tloadingLabel,\n\tyDomainTweenDuration,\n\tyDomainTween,\n\txDomain,\n\txDomainSlotCount,\n\ttweenYDomainOnXDomainChange,\n\tchildren,\n\tcontainerRef,\n\tonPhaseChange,\n}: ChartInnerProps) {\n\tconst lines = useMemo(() => extractLineConfigs(children), [children]);\n\n\treturn (\n\t\t<TimeSeriesChartInner\n\t\t\tanimationDuration={animationDuration}\n\t\t\tanimationEasing={animationEasing}\n\t\t\tchartStatus={chartStatus}\n\t\t\tclipPathId=\"chart-grow-clip\"\n\t\t\tcontainerRef={containerRef}\n\t\t\tdata={data}\n\t\t\tenterTransition={enterTransition}\n\t\t\theight={height}\n\t\t\tlines={lines}\n\t\t\tloadingLabel={loadingLabel}\n\t\t\tmargin={margin}\n\t\t\tonPhaseChange={onPhaseChange}\n\t\t\trevealSignature={revealSignature}\n\t\t\ttweenYDomainOnXDomainChange={tweenYDomainOnXDomainChange}\n\t\t\twidth={width}\n\t\t\txDataKey={xDataKey}\n\t\t\txDomain={xDomain}\n\t\t\txDomainSlotCount={xDomainSlotCount}\n\t\t\tyDomainTween={yDomainTween}\n\t\t\tyDomainTweenDuration={yDomainTweenDuration}\n\t\t>\n\t\t\t{children}\n\t\t</TimeSeriesChartInner>\n\t);\n}\n\nexport function LineChart({\n\tdata,\n\txDataKey = \"date\",\n\tmargin: marginProp,\n\tanimationDuration = 1100,\n\tanimationEasing,\n\tenterTransition,\n\trevealSignature,\n\taspectRatio = \"2 / 1\",\n\tclassName = \"\",\n\tstatus = DEFAULT_CHART_STATUS,\n\tloadingLabel,\n\tyDomainTweenDuration = DEFAULT_Y_DOMAIN_TWEEN_MS,\n\tyDomainTween = true,\n\txDomain,\n\txDomainSlotCount,\n\ttweenYDomainOnXDomainChange = false,\n\tstyle,\n\tonPhaseChange,\n\tchildren,\n}: LineChartProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst margin = { ...DEFAULT_MARGIN, ...marginProp };\n\tconst [chartPhase, setChartPhase] = useState<ChartPhase>(() =>\n\t\tresolveRestingChartPhase(status),\n\t);\n\tconst handlePhaseChange = useCallback(\n\t\t(phase: ChartPhase) => {\n\t\t\tsetChartPhase(phase);\n\t\t\tonPhaseChange?.(phase);\n\t\t},\n\t\t[onPhaseChange],\n\t);\n\n\tconst showLoadingLabel = Boolean(\n\t\tloadingLabel?.trim() &&\n\t\t(chartPhase === \"loading\" ||\n\t\t\tchartPhase === \"exiting\" ||\n\t\t\tchartPhase === \"gridTweenReady\" ||\n\t\t\tchartPhase === \"revealingLoading\"),\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"relative w-full\", className)}\n\t\t\tref={containerRef}\n\t\t\tstyle={{\n\t\t\t\t...(aspectRatio ? { aspectRatio } : undefined),\n\t\t\t\ttouchAction: \"none\",\n\t\t\t\t...style,\n\t\t\t}}\n\t\t>\n\t\t\t<ParentSize debounceTime={10}>\n\t\t\t\t{({ width, height }) => (\n\t\t\t\t\t<ChartInner\n\t\t\t\t\t\tanimationDuration={animationDuration}\n\t\t\t\t\t\tanimationEasing={animationEasing}\n\t\t\t\t\t\tchartStatus={status}\n\t\t\t\t\t\tcontainerRef={containerRef}\n\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\tenterTransition={enterTransition}\n\t\t\t\t\t\theight={height}\n\t\t\t\t\t\tloadingLabel={loadingLabel}\n\t\t\t\t\t\tmargin={margin}\n\t\t\t\t\t\tonPhaseChange={handlePhaseChange}\n\t\t\t\t\t\trevealSignature={revealSignature}\n\t\t\t\t\t\ttweenYDomainOnXDomainChange={tweenYDomainOnXDomainChange}\n\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\txDataKey={xDataKey}\n\t\t\t\t\t\txDomain={xDomain}\n\t\t\t\t\t\txDomainSlotCount={xDomainSlotCount}\n\t\t\t\t\t\tyDomainTween={yDomainTween}\n\t\t\t\t\t\tyDomainTweenDuration={yDomainTweenDuration}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</ChartInner>\n\t\t\t\t)}\n\t\t\t</ParentSize>\n\t\t\t{showLoadingLabel ? (\n\t\t\t\t<ChartLoadingLabel\n\t\t\t\t\texiting={chartPhase !== \"loading\"}\n\t\t\t\t\ttext={loadingLabel}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n\nexport { Line, type LineProps } from \"./line\";\n\nexport default LineChart;\n","export interface SquareColumnLayout {\n\t/** Number of squares in the column */\n\tcount: number;\n\t/** Top-left Y of each square, bottom square first (relative to bar top at 0) */\n\tpositions: number[];\n\t/** Quantized column height in pixels */\n\tcolumnHeight: number;\n\tsquareSize: number;\n\t/** Effective gap between squares (may differ when fit mode redistributes) */\n\tgap: number;\n}\n\nexport interface SquareColumnInput {\n\t/** Raw bar length in pixels (baseline − value) */\n\tbarLengthPx: number;\n\t/** Square width/height — typically equals bar width */\n\tsquareSize: number;\n\t/** Gap between stacked squares in pixels */\n\tgap: number;\n\t/** When true, redistribute gap so column height matches barLengthPx exactly */\n\tfit?: boolean;\n}\n\n/** Quantize bar length into a stack of square cells. */\nexport function computeSquareColumn({\n\tbarLengthPx,\n\tsquareSize,\n\tgap,\n\tfit = false,\n}: SquareColumnInput): SquareColumnLayout {\n\tif (barLengthPx <= 0 || squareSize <= 0) {\n\t\treturn { count: 0, positions: [], columnHeight: 0, squareSize, gap };\n\t}\n\n\tif (fit) {\n\t\tconst count = Math.max(\n\t\t\t1,\n\t\t\tMath.floor((barLengthPx + gap) / (squareSize + gap)),\n\t\t);\n\t\tconst effectiveGap =\n\t\t\tcount > 1\n\t\t\t\t? Math.max(0, (barLengthPx - count * squareSize) / (count - 1))\n\t\t\t\t: 0;\n\t\tconst step = squareSize + effectiveGap;\n\t\tconst columnHeight = barLengthPx;\n\t\tconst positions: number[] = [];\n\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tpositions.push(columnHeight - squareSize - i * step);\n\t\t}\n\n\t\treturn {\n\t\t\tcount,\n\t\t\tpositions,\n\t\t\tcolumnHeight,\n\t\t\tsquareSize,\n\t\t\tgap: effectiveGap,\n\t\t};\n\t}\n\n\tconst step = squareSize + gap;\n\tconst count = Math.max(1, Math.round(barLengthPx / step));\n\tconst columnHeight = count * squareSize + Math.max(0, count - 1) * gap;\n\n\tconst positions: number[] = [];\n\tfor (let i = 0; i < count; i++) {\n\t\tconst offsetFromBottom = i * step;\n\t\tpositions.push(columnHeight - squareSize - offsetFromBottom);\n\t}\n\n\treturn { count, positions, columnHeight, squareSize, gap };\n}\n\n/** Y center of the topmost square in a vertical column. */\nexport function topSquareCenterY({\n\tbaselineY,\n\tbarLengthPx,\n\tsquareSize,\n\tgap,\n\tfit = false,\n}: SquareColumnInput & { baselineY: number }): number {\n\tconst {\n\t\tcount,\n\t\tsquareSize: size,\n\t\tcolumnHeight,\n\t} = computeSquareColumn({\n\t\tbarLengthPx,\n\t\tsquareSize,\n\t\tgap,\n\t\tfit,\n\t});\n\n\tif (count === 0) {\n\t\treturn baselineY;\n\t}\n\n\tconst topY = baselineY - columnHeight;\n\treturn topY + size / 2;\n}\n","\"use client\";\n\nimport { localPoint } from \"@visx/event\";\nimport { ParentSize } from \"@visx/responsive\";\nimport { scaleBand, scaleLinear } from \"@visx/scale\";\nimport type { Transition } from \"motion/react\";\nimport {\n\tmemo,\n\ttype ReactElement,\n\ttype ReactNode,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { DEFAULT_ANIMATION_EASING } from \"./animation\";\nimport type { BarProps } from \"./bar\";\nimport { topSquareCenterY } from \"./bar-squares-layout\";\nimport {\n\tforEachChartChild,\n\tisChartClipPassthrough,\n\tisClipExcludedComponent,\n\tisPostOverlayComponent,\n\tisUnderlayComponent,\n\trenderKeyedChartLayers,\n\tresolveChartChildElement,\n} from \"./chart-child-passthrough\";\nimport {\n\tChartProvider,\n\ttype LineConfig,\n\ttype Margin,\n\ttype TooltipData,\n} from \"./chart-context\";\nimport { isGradientDefComponent, isPatternDefComponent } from \"./chart-defs\";\nimport { shortDateFmt } from \"./chart-formatters\";\nimport {\n\ttype ChartPhase,\n\ttype ChartStatus,\n\tDEFAULT_CHART_LIFECYCLE,\n\tresolveRestingChartPhase,\n} from \"./chart-phase\";\nimport { BarLoadingSkeleton } from \"./loading-sweep\";\nimport { extractReferenceAreaConfigs } from \"./reference-area-config\";\nimport { useScheduledTooltip } from \"./use-scheduled-tooltip\";\nimport {\n\tbuildYScalesForLines,\n\tgetPrimaryYScale,\n\tnormalizeYAxisId,\n\twrapSingleYScale,\n} from \"./y-axis-scales\";\n\n/** Skeleton bars to show when `status=\"loading\"` and `data` is empty. */\nconst FALLBACK_LOADING_BARS = 12;\n\nexport type BarOrientation = \"vertical\" | \"horizontal\";\n\nexport interface BarChartProps {\n\t/** Data array - each item should have an x-axis key and numeric values */\n\tdata: Record<string, unknown>[];\n\t/** Key in data for the categorical axis. Default: \"name\" */\n\txDataKey?: string;\n\t/** Chart margins */\n\tmargin?: Partial<Margin>;\n\t/** Animation duration in milliseconds. Default: 1100 */\n\tanimationDuration?: number;\n\t/** CSS easing for bar grow transitions. */\n\tanimationEasing?: string;\n\t/** Motion enter transition (spring or cubic-bezier tween). */\n\tenterTransition?: Transition;\n\t/** Signature of motion URL state — triggers enter replay when it changes. */\n\trevealSignature?: string;\n\t/** Aspect ratio as \"width / height\". Default: \"2 / 1\" */\n\taspectRatio?: string;\n\t/** Additional class name for the container */\n\tclassName?: string;\n\t/** Gap between bar groups as a fraction of band width (0-1). Default: 0.2 */\n\tbarGap?: number;\n\t/** Fixed bar width in pixels. If not set, bars auto-size to fill the band. */\n\tbarWidth?: number;\n\t/** Bar chart orientation. Default: \"vertical\" */\n\torientation?: BarOrientation;\n\t/** Whether to stack bars instead of grouping them. Default: false */\n\tstacked?: boolean;\n\t/** Gap between stacked bar segments in pixels. Default: 0 */\n\tstackGap?: number;\n\t/** When set, tooltip Y positions snap to the top square center (shape variant). */\n\tsquareSnap?: { squareGap: number; groupGap?: number; fit?: boolean };\n\t/** Child components (Bar, Grid, ChartTooltip, etc.). Optional — omit for a\n\t * pure `status=\"loading\"` skeleton. */\n\tchildren?: ReactNode;\n\t/** Reports reveal lifecycle for OG screenshots and loading orchestration. */\n\tonPhaseChange?: (phase: ChartPhase) => void;\n\t/** Fetch / display status. When `\"loading\"`, a shimmer skeleton replaces the\n\t * bars (no chart data required). Default: `\"ready\"`. */\n\tstatus?: ChartStatus;\n}\n\nconst DEFAULT_MARGIN: Margin = { top: 40, right: 40, bottom: 40, left: 40 };\n\n// Extract bar configs from children synchronously\nfunction extractBarConfigs(children: ReactNode): LineConfig[] {\n\tconst configs: LineConfig[] = [];\n\n\tforEachChartChild(children, (child) => {\n\t\tconst childType = child.type as {\n\t\t\tdisplayName?: string;\n\t\t\tname?: string;\n\t\t\t__isBarDepthLayer?: boolean;\n\t\t};\n\t\t// Bar-depth surface layers (BarDepthBack/Front, BarPulse) carry a\n\t\t// `dataKey` to pair with a Bar but are not series themselves — skip them\n\t\t// so they don't inflate the series count and shrink the real bars.\n\t\tif (childType.__isBarDepthLayer) {\n\t\t\treturn;\n\t\t}\n\t\tconst componentName =\n\t\t\ttypeof child.type === \"function\"\n\t\t\t\t? childType.displayName || childType.name || \"\"\n\t\t\t\t: \"\";\n\n\t\tconst props = child.props as BarProps | undefined;\n\t\tconst isBarComponent =\n\t\t\tcomponentName === \"Bar\" ||\n\t\t\tcomponentName === \"BarSquares\" ||\n\t\t\t(props && typeof props.dataKey === \"string\" && props.dataKey.length > 0);\n\n\t\tif (isBarComponent && props?.dataKey) {\n\t\t\t// Use stroke for tooltip dot color if provided, otherwise fall back to fill\n\t\t\t// This allows gradient/pattern fills to have a solid dot color\n\t\t\tconst dotColor =\n\t\t\t\tprops.stroke || props.fill || \"var(--chart-line-primary)\";\n\t\t\tconfigs.push({\n\t\t\t\tdataKey: props.dataKey,\n\t\t\t\tstroke: dotColor,\n\t\t\t\tstrokeWidth: 0,\n\t\t\t\tyAxisId: props.yAxisId,\n\t\t\t});\n\t\t}\n\t});\n\n\treturn configs;\n}\n\ninterface ChartInnerProps {\n\twidth: number;\n\theight: number;\n\tdata: Record<string, unknown>[];\n\txDataKey: string;\n\tmargin: Margin;\n\tanimationDuration: number;\n\tanimationEasing: string;\n\tenterTransition?: Transition;\n\trevealSignature?: string;\n\tbarGap: number;\n\tbarWidthProp?: number;\n\torientation: BarOrientation;\n\tstacked: boolean;\n\tstackGap: number;\n\tsquareSnap?: { squareGap: number; groupGap?: number; fit?: boolean };\n\tchildren: ReactNode;\n\tcontainerRef: React.RefObject<HTMLDivElement | null>;\n\tonPhaseChange?: (phase: ChartPhase) => void;\n\tstatus: ChartStatus;\n}\n\nfunction ChartInner(props: ChartInnerProps) {\n\tconst { width, height } = props;\n\tif (width < 10 || height < 10) {\n\t\treturn null;\n\t}\n\treturn <ChartCore {...props} />;\n}\n\nconst ChartCore = memo(function ChartCore({\n\twidth,\n\theight,\n\tdata,\n\txDataKey,\n\tmargin,\n\tanimationDuration,\n\tanimationEasing,\n\tenterTransition,\n\trevealSignature = \"\",\n\tbarGap,\n\tbarWidthProp,\n\torientation,\n\tstacked,\n\tstackGap,\n\tsquareSnap,\n\tchildren,\n\tcontainerRef,\n\tonPhaseChange,\n\tstatus,\n}: ChartInnerProps) {\n\tconst { tooltipData, setTooltipData, scheduleTooltip, clearTooltip } =\n\t\tuseScheduledTooltip<TooltipData>();\n\tconst [isLoaded, setIsLoaded] = useState(false);\n\tconst [revealEpoch, setRevealEpoch] = useState(0);\n\tconst hoveredBarIndex = tooltipData?.index ?? null;\n\n\tconst isHorizontal = orientation === \"horizontal\";\n\n\t// Extract bar configs synchronously from children\n\tconst lines = useMemo(() => extractBarConfigs(children), [children]);\n\n\tconst innerWidth = width - margin.left - margin.right;\n\tconst innerHeight = height - margin.top - margin.bottom;\n\n\t// Category accessor function - returns string for categorical scale\n\tconst categoryAccessor = useCallback(\n\t\t(d: Record<string, unknown>): string => {\n\t\t\tconst value = d[xDataKey];\n\t\t\tif (value instanceof Date) {\n\t\t\t\treturn shortDateFmt.format(value);\n\t\t\t}\n\t\t\treturn String(value ?? \"\");\n\t\t},\n\t\t[xDataKey],\n\t);\n\n\t// For compatibility with ChartContext, provide a Date-based xAccessor\n\tconst xAccessorDate = useCallback(\n\t\t(d: Record<string, unknown>): Date => {\n\t\t\tconst value = d[xDataKey];\n\t\t\tif (value instanceof Date) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\treturn new Date();\n\t\t},\n\t\t[xDataKey],\n\t);\n\n\t// Category scale (band) - for the categorical axis\n\tconst categoryScale = useMemo(() => {\n\t\tconst domain = data.map((d) => categoryAccessor(d));\n\t\tconst range: [number, number] = isHorizontal\n\t\t\t? [0, innerHeight]\n\t\t\t: [0, innerWidth];\n\t\treturn scaleBand<string>({\n\t\t\trange,\n\t\t\tdomain,\n\t\t\tpadding: barGap,\n\t\t});\n\t}, [innerWidth, innerHeight, data, categoryAccessor, barGap, isHorizontal]);\n\n\t// Band width for bars - use prop if provided, otherwise use scale's bandwidth\n\tconst bandWidth = barWidthProp ?? categoryScale.bandwidth();\n\n\t// Compute max value considering stacking\n\tconst maxValue = useMemo(() => {\n\t\tif (stacked) {\n\t\t\t// For stacked bars, sum all values at each data point\n\t\t\tlet max = 0;\n\t\t\tfor (const d of data) {\n\t\t\t\tlet sum = 0;\n\t\t\t\tfor (const line of lines) {\n\t\t\t\t\tconst value = d[line.dataKey];\n\t\t\t\t\tif (typeof value === \"number\") {\n\t\t\t\t\t\tsum += value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (sum > max) {\n\t\t\t\t\tmax = sum;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn max || 100;\n\t\t}\n\t\t// For grouped bars, find max single value\n\t\tlet max = 0;\n\t\tfor (const line of lines) {\n\t\t\tfor (const d of data) {\n\t\t\t\tconst value = d[line.dataKey];\n\t\t\t\tif (typeof value === \"number\" && value > max) {\n\t\t\t\t\tmax = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn max || 100;\n\t}, [data, lines, stacked]);\n\n\t// Value scale (linear) - for the value axis\n\tconst valueScale = useMemo(() => {\n\t\tconst range = isHorizontal ? [0, innerWidth] : [innerHeight, 0];\n\t\treturn scaleLinear({\n\t\t\trange,\n\t\t\tdomain: [0, maxValue * 1.1],\n\t\t\tnice: true,\n\t\t});\n\t}, [innerWidth, innerHeight, maxValue, isHorizontal]);\n\n\tconst yScales = useMemo(() => {\n\t\tif (isHorizontal) {\n\t\t\treturn wrapSingleYScale(valueScale);\n\t\t}\n\t\treturn buildYScalesForLines({\n\t\t\tlines,\n\t\t\tdata,\n\t\t\tinnerHeight,\n\t\t\tresolveDomain: (dataKeys) => {\n\t\t\t\tlet max = 0;\n\t\t\t\tfor (const d of data) {\n\t\t\t\t\tfor (const key of dataKeys) {\n\t\t\t\t\t\tconst value = d[key];\n\t\t\t\t\t\tif (typeof value === \"number\" && value > max) {\n\t\t\t\t\t\t\tmax = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [0, (max || 100) * 1.1];\n\t\t\t},\n\t\t});\n\t}, [data, innerHeight, isHorizontal, lines, valueScale]);\n\n\tconst primaryYScale = getPrimaryYScale(yScales, valueScale);\n\n\t// Compute stack offsets for stacked bars\n\tconst stackOffsets = useMemo(() => {\n\t\tif (!stacked) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst offsets = new Map<number, Map<string, number>>();\n\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\tconst d = data[i];\n\t\t\tif (!d) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst pointOffsets = new Map<string, number>();\n\t\t\tlet cumulative = 0;\n\t\t\tfor (const line of lines) {\n\t\t\t\tpointOffsets.set(line.dataKey, cumulative);\n\t\t\t\tconst value = d[line.dataKey];\n\t\t\t\tif (typeof value === \"number\") {\n\t\t\t\t\tcumulative += value;\n\t\t\t\t}\n\t\t\t}\n\t\t\toffsets.set(i, pointOffsets);\n\t\t}\n\t\treturn offsets;\n\t}, [data, lines, stacked]);\n\n\t// Column width for tooltip indicator\n\tconst columnWidth = useMemo(() => {\n\t\tif (data.length < 1) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn isHorizontal ? innerHeight / data.length : innerWidth / data.length;\n\t}, [innerWidth, innerHeight, data.length, isHorizontal]);\n\n\t// Pre-compute labels for ticker animation\n\tconst dateLabels = useMemo(\n\t\t() => data.map((d) => categoryAccessor(d)),\n\t\t[data, categoryAccessor],\n\t);\n\n\t// Create a fake time scale for compatibility with ChartContext\n\tconst fakeTimeScale = useMemo(() => {\n\t\tconst now = Date.now();\n\t\tconst start = now - data.length * 24 * 60 * 60 * 1000;\n\t\tconst scale = {\n\t\t\t...categoryScale,\n\t\t\tdomain: () => [new Date(start), new Date(now)],\n\t\t\trange: () => [0, innerWidth] as [number, number],\n\t\t\tinvert: (x: number) => new Date(start + (x / innerWidth) * (now - start)),\n\t\t\tcopy: () => scale,\n\t\t};\n\t\treturn scale;\n\t}, [categoryScale, innerWidth, data.length]);\n\n\t// Animation timing — replay when motion settings change\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: revealSignature\n\tuseEffect(() => {\n\t\tsetRevealEpoch((n) => n + 1);\n\t\tsetIsLoaded(false);\n\t\t// While loading, hold the skeleton (no reveal, no interaction). When\n\t\t// status flips to \"ready\" this effect re-runs and plays the grow reveal.\n\t\tif (status === \"loading\") {\n\t\t\treturn;\n\t\t}\n\t\tconst staggerMs = data.length > 1 ? animationDuration * 0.4 : 0;\n\t\tconst timer = setTimeout(() => {\n\t\t\tsetIsLoaded(true);\n\t\t}, animationDuration + staggerMs);\n\t\treturn () => clearTimeout(timer);\n\t}, [animationDuration, revealSignature, status]);\n\n\tuseEffect(() => {\n\t\tonPhaseChange?.(isLoaded ? \"ready\" : \"revealing\");\n\t}, [isLoaded, onPhaseChange]);\n\n\t// Mouse move handler\n\tconst handleMouseMove = useCallback(\n\t\t(event: React.MouseEvent<SVGGElement>) => {\n\t\t\tconst point = localPoint(event);\n\t\t\tif (!point) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst pos = isHorizontal ? point.y - margin.top : point.x - margin.left;\n\n\t\t\t// Find which band the mouse is over\n\t\t\tconst bandIndex = Math.floor(pos / columnWidth);\n\t\t\tconst clampedIndex = Math.max(0, Math.min(data.length - 1, bandIndex));\n\t\t\tconst d = data[clampedIndex];\n\n\t\t\tif (!d) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Calculate positions for each bar\n\t\t\tconst yPositions: Record<string, number> = {};\n\t\t\tconst xPositions: Record<string, number> = {};\n\t\t\tconst barPos = categoryScale(categoryAccessor(d)) ?? 0;\n\n\t\t\tif (isHorizontal) {\n\t\t\t\t// Horizontal bars: dots at end of bar (x = value), centered vertically in band\n\t\t\t\tconst seriesCount = lines.length;\n\t\t\t\tconst groupGap = seriesCount > 1 ? 4 : 0;\n\t\t\t\tconst individualBarHeight =\n\t\t\t\t\tseriesCount > 0\n\t\t\t\t\t\t? (bandWidth - groupGap * (seriesCount - 1)) / seriesCount\n\t\t\t\t\t\t: bandWidth;\n\n\t\t\t\tif (stacked) {\n\t\t\t\t\t// Stacked horizontal: all bars same y, x at cumulative end\n\t\t\t\t\tlet cumulative = 0;\n\t\t\t\t\tfor (const line of lines) {\n\t\t\t\t\t\tconst value = d[line.dataKey];\n\t\t\t\t\t\tif (typeof value === \"number\") {\n\t\t\t\t\t\t\tcumulative += value;\n\t\t\t\t\t\t\tconst axisScale =\n\t\t\t\t\t\t\t\tyScales[normalizeYAxisId(line.yAxisId)] ?? valueScale;\n\t\t\t\t\t\t\txPositions[line.dataKey] = axisScale(cumulative) ?? 0;\n\t\t\t\t\t\t\tyPositions[line.dataKey] = barPos + bandWidth / 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Grouped horizontal: each bar at its own y position\n\t\t\t\t\tlines.forEach((line, idx) => {\n\t\t\t\t\t\tconst value = d[line.dataKey];\n\t\t\t\t\t\tif (typeof value === \"number\") {\n\t\t\t\t\t\t\tconst axisScale =\n\t\t\t\t\t\t\t\tyScales[normalizeYAxisId(line.yAxisId)] ?? valueScale;\n\t\t\t\t\t\t\txPositions[line.dataKey] = axisScale(value) ?? 0;\n\t\t\t\t\t\t\tyPositions[line.dataKey] =\n\t\t\t\t\t\t\t\tbarPos +\n\t\t\t\t\t\t\t\tidx * (individualBarHeight + groupGap) +\n\t\t\t\t\t\t\t\tindividualBarHeight / 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (stacked) {\n\t\t\t\t// Vertical stacked bars\n\t\t\t\tlet cumulative = 0;\n\t\t\t\tlet seriesIdx = 0;\n\t\t\t\tfor (const line of lines) {\n\t\t\t\t\tconst value = d[line.dataKey];\n\t\t\t\t\tif (typeof value === \"number\") {\n\t\t\t\t\t\tcumulative += value;\n\t\t\t\t\t\tconst axisScale =\n\t\t\t\t\t\t\tyScales[normalizeYAxisId(line.yAxisId)] ?? primaryYScale;\n\t\t\t\t\t\tconst gapOffset = seriesIdx * stackGap;\n\t\t\t\t\t\tyPositions[line.dataKey] = (axisScale(cumulative) ?? 0) - gapOffset;\n\t\t\t\t\t\tseriesIdx++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Vertical grouped bars\n\t\t\t\tconst seriesCount = lines.length;\n\t\t\t\tconst groupGap = seriesCount > 1 ? 4 : 0;\n\t\t\t\tconst individualBarWidth =\n\t\t\t\t\tseriesCount > 0\n\t\t\t\t\t\t? (bandWidth - groupGap * (seriesCount - 1)) / seriesCount\n\t\t\t\t\t\t: bandWidth;\n\n\t\t\t\tlines.forEach((line, idx) => {\n\t\t\t\t\tconst value = d[line.dataKey];\n\t\t\t\t\tif (typeof value === \"number\") {\n\t\t\t\t\t\tconst axisScale =\n\t\t\t\t\t\t\tyScales[normalizeYAxisId(line.yAxisId)] ?? primaryYScale;\n\t\t\t\t\t\tconst baselineY = axisScale(0) ?? innerHeight;\n\t\t\t\t\t\tconst valueY = axisScale(value) ?? 0;\n\t\t\t\t\t\tconst barLengthPx = baselineY - valueY;\n\n\t\t\t\t\t\tif (squareSnap && !isHorizontal && value > 0) {\n\t\t\t\t\t\t\tyPositions[line.dataKey] = topSquareCenterY({\n\t\t\t\t\t\t\t\tbaselineY,\n\t\t\t\t\t\t\t\tbarLengthPx,\n\t\t\t\t\t\t\t\tsquareSize: individualBarWidth,\n\t\t\t\t\t\t\t\tgap: squareSnap.squareGap,\n\t\t\t\t\t\t\t\tfit: squareSnap.fit,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tyPositions[line.dataKey] = valueY;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\txPositions[line.dataKey] =\n\t\t\t\t\t\t\tbarPos +\n\t\t\t\t\t\t\tidx * (individualBarWidth + groupGap) +\n\t\t\t\t\t\t\tindividualBarWidth / 2;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Tooltip position: for horizontal, position at max bar end; for vertical, center of band\n\t\t\tlet tooltipX: number;\n\t\t\tif (isHorizontal) {\n\t\t\t\t// Position tooltip at the end of the longest bar\n\t\t\t\tconst maxX = Math.max(...Object.values(xPositions), 0);\n\t\t\t\ttooltipX = maxX;\n\t\t\t} else {\n\t\t\t\ttooltipX = barPos + bandWidth / 2;\n\t\t\t}\n\n\t\t\tscheduleTooltip({\n\t\t\t\tpoint: d,\n\t\t\t\tindex: clampedIndex,\n\t\t\t\tx: tooltipX,\n\t\t\t\tyPositions,\n\t\t\t\txPositions: Object.keys(xPositions).length > 0 ? xPositions : undefined,\n\t\t\t});\n\t\t},\n\t\t[\n\t\t\tcategoryScale,\n\t\t\tvalueScale,\n\t\t\tdata,\n\t\t\tlines,\n\t\t\tmargin.left,\n\t\t\tmargin.top,\n\t\t\tcategoryAccessor,\n\t\t\tcolumnWidth,\n\t\t\tbandWidth,\n\t\t\tisHorizontal,\n\t\t\tstacked,\n\t\t\tstackGap,\n\t\t\tscheduleTooltip,\n\t\t\tyScales,\n\t\t\tprimaryYScale,\n\t\t\tsquareSnap,\n\t\t\tinnerHeight,\n\t\t],\n\t);\n\n\tconst handleMouseLeave = useCallback(() => {\n\t\tclearTooltip();\n\t}, [clearTooltip]);\n\n\tconst canInteract = isLoaded;\n\n\t// Separate children into defs, pre-overlay, and post-overlay\n\tconst defsChildren: ReactElement[] = [];\n\tconst clipExcludedChildren: ReactElement[] = [];\n\tconst underlayChildren: ReactElement[] = [];\n\tconst preOverlayChildren: ReactElement[] = [];\n\tconst postOverlayChildren: ReactElement[] = [];\n\n\tforEachChartChild(children, (child) => {\n\t\tconst resolvedChild = resolveChartChildElement(child);\n\n\t\tif (isGradientDefComponent(child)) {\n\t\t\tdefsChildren.push(child);\n\t\t} else if (isPatternDefComponent(child)) {\n\t\t\tpreOverlayChildren.push(child);\n\t\t} else if (isPostOverlayComponent(resolvedChild)) {\n\t\t\tpostOverlayChildren.push(resolvedChild);\n\t\t} else if (isClipExcludedComponent(resolvedChild)) {\n\t\t\tclipExcludedChildren.push(\n\t\t\t\tisChartClipPassthrough(child.type) ? resolvedChild : child,\n\t\t\t);\n\t\t} else if (isUnderlayComponent(resolvedChild)) {\n\t\t\tunderlayChildren.push(resolvedChild);\n\t\t} else {\n\t\t\tpreOverlayChildren.push(child);\n\t\t}\n\t});\n\n\tconst referenceAreas = useMemo(\n\t\t() => extractReferenceAreaConfigs(children),\n\t\t[children],\n\t);\n\n\tconst contextValue = {\n\t\t...DEFAULT_CHART_LIFECYCLE,\n\t\tchartPhase: resolveRestingChartPhase(status),\n\t\tchartStatus: status,\n\t\tdata,\n\t\trenderData: data,\n\t\txScale: fakeTimeScale as unknown as ReturnType<\n\t\t\ttypeof import(\"@visx/scale\").scaleTime<number>\n\t\t>,\n\t\tyScale: isHorizontal ? valueScale : primaryYScale,\n\t\tyScales,\n\t\twidth,\n\t\theight,\n\t\tinnerWidth,\n\t\tinnerHeight,\n\t\tmargin,\n\t\tcolumnWidth,\n\t\ttooltipData,\n\t\tsetTooltipData,\n\t\tcontainerRef,\n\t\tlines,\n\t\treferenceAreas,\n\t\tisLoaded,\n\t\tanimationDuration,\n\t\tanimationEasing,\n\t\tenterTransition,\n\t\trevealEpoch,\n\t\txAccessor: xAccessorDate,\n\t\tdateLabels,\n\t\t// Bar-specific properties\n\t\tbarScale: categoryScale,\n\t\tbandWidth,\n\t\thoveredBarIndex,\n\t\tbarXAccessor: categoryAccessor,\n\t\torientation,\n\t\tstacked,\n\t\tstackOffsets,\n\t\tsquareSnap,\n\t};\n\n\treturn (\n\t\t<ChartProvider value={contextValue}>\n\t\t\t<svg\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tclassName=\"overflow-visible\"\n\t\t\t\theight={height}\n\t\t\t\twidth={width}\n\t\t\t>\n\t\t\t\t{/* Gradient and pattern definitions */}\n\t\t\t\t{defsChildren.length > 0 && <defs>{defsChildren}</defs>}\n\n\t\t\t\t<rect fill=\"transparent\" height={height} width={width} x={0} y={0} />\n\n\t\t\t\t{/* biome-ignore lint/a11y/noStaticElementInteractions: Chart interaction area */}\n\t\t\t\t<g\n\t\t\t\t\tonMouseLeave={canInteract ? handleMouseLeave : undefined}\n\t\t\t\t\tonMouseMove={canInteract ? handleMouseMove : undefined}\n\t\t\t\t\tstyle={{ cursor: canInteract ? \"crosshair\" : \"default\" }}\n\t\t\t\t\ttransform={`translate(${margin.left},${margin.top})`}\n\t\t\t\t>\n\t\t\t\t\t{/* Background rect for mouse event detection */}\n\t\t\t\t\t<rect\n\t\t\t\t\t\tfill=\"transparent\"\n\t\t\t\t\t\theight={innerHeight}\n\t\t\t\t\t\twidth={innerWidth}\n\t\t\t\t\t\tx={0}\n\t\t\t\t\t\ty={0}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{renderKeyedChartLayers(clipExcludedChildren)}\n\t\t\t\t\t{renderKeyedChartLayers(underlayChildren)}\n\t\t\t\t\t{status === \"loading\" ? (\n\t\t\t\t\t\t<BarLoadingSkeleton\n\t\t\t\t\t\t\tbarCount={data.length || FALLBACK_LOADING_BARS}\n\t\t\t\t\t\t\tinnerHeight={innerHeight}\n\t\t\t\t\t\t\tinnerWidth={innerWidth}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\trenderKeyedChartLayers(preOverlayChildren)\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Markers rendered last so they're on top for interaction */}\n\t\t\t\t\t{renderKeyedChartLayers(postOverlayChildren)}\n\t\t\t\t</g>\n\t\t\t</svg>\n\t\t</ChartProvider>\n\t);\n});\n\nexport function BarChart({\n\tdata,\n\txDataKey = \"name\",\n\tmargin: marginProp,\n\tanimationDuration = 1100,\n\tanimationEasing = DEFAULT_ANIMATION_EASING,\n\tenterTransition,\n\trevealSignature,\n\taspectRatio = \"2 / 1\",\n\tclassName = \"\",\n\tbarGap = 0.2,\n\tbarWidth,\n\torientation = \"vertical\",\n\tstacked = false,\n\tstackGap = 0,\n\tsquareSnap,\n\tchildren,\n\tonPhaseChange,\n\tstatus = \"ready\",\n}: BarChartProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst margin = { ...DEFAULT_MARGIN, ...marginProp };\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"relative w-full overflow-visible\", className)}\n\t\t\tref={containerRef}\n\t\t\tstyle={{ aspectRatio }}\n\t\t>\n\t\t\t<ParentSize debounceTime={10}>\n\t\t\t\t{({ width, height }) => (\n\t\t\t\t\t<ChartInner\n\t\t\t\t\t\tanimationDuration={animationDuration}\n\t\t\t\t\t\tanimationEasing={animationEasing}\n\t\t\t\t\t\tbarGap={barGap}\n\t\t\t\t\t\tbarWidthProp={barWidth}\n\t\t\t\t\t\tcontainerRef={containerRef}\n\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\tenterTransition={enterTransition}\n\t\t\t\t\t\theight={height}\n\t\t\t\t\t\tmargin={margin}\n\t\t\t\t\t\tonPhaseChange={onPhaseChange}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\trevealSignature={revealSignature}\n\t\t\t\t\t\tsquareSnap={squareSnap}\n\t\t\t\t\t\tstacked={stacked}\n\t\t\t\t\t\tstackGap={stackGap}\n\t\t\t\t\t\tstatus={status}\n\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\txDataKey={xDataKey}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</ChartInner>\n\t\t\t\t)}\n\t\t\t</ParentSize>\n\t\t</div>\n\t);\n}\n\nBarChart.displayName = \"BarChart\";\n\nexport default BarChart;\n","export const BAR_DEPTH_MAX_PX = 7;\n/** The side parallelogram's back edge lifts by `depth * this ratio`, giving a\n * subtle head-on perspective slope. */\nexport const BAR_DEPTH_PERSPECTIVE_RATIO = 0.45;\n\n/**\n * Maximum side-face depth in px for a chart, clamped so depth never spills past\n * the gap between bars. `stepWidth` is d3-scaleBand's `step()` (bandwidth +\n * gap); `bandWidth` is a single bar's width. Returns 0 for gapless/dense charts.\n */\nexport function barDepthMaxDepth(stepWidth: number, bandWidth: number): number {\n\tconst gap = Math.max(0, stepWidth - bandWidth);\n\treturn Math.min(bandWidth * 0.22, Math.max(0, gap - 1), BAR_DEPTH_MAX_PX);\n}\n\n/**\n * Per-bar side-face depth + perspective rise.\n *\n * - `absOffset` ∈ [0, 1]: the bar's normalized distance from the chart's\n * horizontal center. 0 = dead center (no depth); 1 = chart edge (full depth).\n * - `naturalHeight`: the bar's pixel height. Depth is capped by it so a short\n * bar's side never reads wider than the bar is tall.\n * - `maxDepth`: from `barDepthMaxDepth`.\n */\nexport function barDepthAndRise(\n\tabsOffset: number,\n\tnaturalHeight: number,\n\tmaxDepth: number,\n): { depth: number; perspectiveRise: number } {\n\tconst offset = Math.min(1, Math.max(0, absOffset));\n\tconst cappedMaxDepth = Math.min(maxDepth, Math.max(0, naturalHeight));\n\tconst depth = offset * cappedMaxDepth;\n\treturn { depth, perspectiveRise: depth * BAR_DEPTH_PERSPECTIVE_RATIO };\n}\n","import type { Transition } from \"motion/react\";\nimport { DEFAULT_CHART_ENTER_TRANSITION } from \"./animation\";\n\nexport function transitionWithDelay(\n\ttransition: Transition | undefined,\n\tdelaySeconds: number,\n\tfallback: Transition = DEFAULT_CHART_ENTER_TRANSITION,\n): Transition {\n\tconst base = transition ?? fallback;\n\treturn { ...base, delay: delaySeconds };\n}\n\nexport interface SpringOptions {\n\tstiffness: number;\n\tdamping: number;\n\tmass?: number;\n}\n\nexport function springOptionsFromTransition(\n\ttransition?: Transition,\n\tfallback: SpringOptions = { stiffness: 60, damping: 20 },\n): SpringOptions {\n\tif (!transition) {\n\t\treturn fallback;\n\t}\n\tif (transition.type === \"spring\") {\n\t\tconst bounce =\n\t\t\ttypeof transition.bounce === \"number\" ? transition.bounce : undefined;\n\t\tconst baseStiffness =\n\t\t\ttypeof transition.stiffness === \"number\"\n\t\t\t\t? transition.stiffness\n\t\t\t\t: fallback.stiffness;\n\t\tconst baseDamping =\n\t\t\ttypeof transition.damping === \"number\"\n\t\t\t\t? transition.damping\n\t\t\t\t: fallback.damping;\n\t\treturn {\n\t\t\tstiffness:\n\t\t\t\tbounce == null\n\t\t\t\t\t? baseStiffness\n\t\t\t\t\t: Math.min(400, Math.max(80, baseStiffness * (1 + bounce * 0.35))),\n\t\t\tdamping:\n\t\t\t\tbounce == null\n\t\t\t\t\t? baseDamping\n\t\t\t\t\t: Math.max(8, baseDamping * (1 - bounce * 0.25)),\n\t\t\tmass:\n\t\t\t\ttypeof transition.mass === \"number\" ? transition.mass : fallback.mass,\n\t\t};\n\t}\n\tconst duration =\n\t\t\"duration\" in transition && typeof transition.duration === \"number\"\n\t\t\t? transition.duration\n\t\t\t: 0.8;\n\treturn {\n\t\tstiffness: Math.min(500, Math.max(40, 280 / duration)),\n\t\tdamping: Math.min(40, Math.max(12, 18 + duration * 4)),\n\t};\n}\n","\"use client\";\n\nimport type { scaleBand } from \"@visx/scale\";\nimport type { Transition } from \"motion/react\";\nimport { motion } from \"motion/react\";\nimport { memo, useId, useMemo } from \"react\";\nimport { barDepthAndRise, barDepthMaxDepth } from \"./bar-depth-geometry\";\nimport {\n\tchartCssVars,\n\tuseChart,\n\tuseChartStable,\n\tuseYScale,\n} from \"./chart-context\";\nimport { useChartLegendHover } from \"./chart-legend-hover\";\nimport { transitionWithDelay } from \"./motion-utils\";\n\ntype ScaleBand<Domain extends { toString(): string }> = ReturnType<\n\ttypeof scaleBand<Domain>\n>;\n\nexport type BarLineCap = \"round\" | \"butt\" | number;\nexport type BarAnimationType = \"grow\" | \"fade\";\n\n// ── Bar-depth perspective trim ───────────────────────────────────────────\n// Uses the SHARED geometry (`bar-depth-geometry.ts`) so a\n// `<Bar perspective>` front face lines up exactly with\n// `<BarDepthBack>`'s lid — the formula lives in one place for both.\n\n/** perspectiveRise for a positive bar whose visual top sits at `topY`.\n * Returns 0 for a dead-center bar or a dense chart (degenerate depth). */\nfunction barDepthPerspectiveRise(\n\tbarScale: ScaleBand<string>,\n\tbandWidth: number,\n\tbarXAccessor: (d: Record<string, unknown>) => string,\n\tinnerWidth: number,\n\tdatum: Record<string, unknown>,\n\ttopY: number,\n\tbaselineY: number,\n): number {\n\tconst centerX = innerWidth / 2;\n\tif (centerX <= 0) {\n\t\treturn 0;\n\t}\n\tconst step =\n\t\t(barScale as unknown as { step?: () => number }).step?.() ?? bandWidth;\n\tconst maxDepth = barDepthMaxDepth(step, bandWidth);\n\tconst bandX = barScale(barXAccessor(datum)) ?? 0;\n\tconst cx = bandX + bandWidth / 2;\n\tconst absOffset = Math.min(1, Math.abs((cx - centerX) / centerX));\n\tconst naturalHeight = Math.abs(baselineY - topY);\n\treturn barDepthAndRise(absOffset, naturalHeight, maxDepth).perspectiveRise;\n}\n\nexport interface BarProps {\n\t/** Key in data to use for y values */\n\tdataKey: string;\n\t/** Y-scale group id for vertical bars (Recharts `yAxisId`). Default: `\"left\"`. */\n\tyAxisId?: string | number;\n\t/** Fill color for the bar. Can be a color, gradient url, or pattern url. Default: var(--chart-line-primary) */\n\tfill?: string;\n\t/** Color for tooltip dot. Use when fill is a gradient/pattern. Default: uses fill value */\n\tstroke?: string;\n\t/** Line cap style for bar ends: \"round\", \"butt\", or a number for custom radius. Default: \"round\" */\n\tlineCap?: BarLineCap;\n\t/** Whether to animate the bars. Default: true */\n\tanimate?: boolean;\n\t/** Animation type: \"grow\" (height) or \"fade\" (opacity + blur). Default: \"grow\" */\n\tanimationType?: BarAnimationType;\n\t/** Opacity when not hovered (when another bar is hovered). Default: 0.3 */\n\tfadedOpacity?: number;\n\t/** Stagger delay between bars in seconds. Auto-calculated if not provided. */\n\tstaggerDelay?: number;\n\t/** Gap between stacked bars in pixels. Default: 0 */\n\tstackGap?: number;\n\t/** Gap between grouped bars in pixels. Default: 4 */\n\tgroupGap?: number;\n\t/** Shrink each positive bar's top by its perspective rise so the front face\n\t * lines up with `<BarDepthBack>`'s lid (instead of the lid sitting above the\n\t * front face). Pass `true` whenever the chart also renders the bar-depth 3D\n\t * surfaces. Default: false */\n\tperspective?: boolean;\n\t/** Minimum rendered bar height in px (non-stacked, vertical). Floors short or\n\t * zero-value bars so they stay visible. Pair with the same value on\n\t * `<BarDepthProvider minBarHeight>` when using the 3D surfaces. Default: 0 */\n\tminBarHeight?: number;\n}\n\ninterface BarInnerProps extends BarProps {\n\tbarScale: ScaleBand<string>;\n\tbandWidth: number;\n\tbarXAccessor: (d: Record<string, unknown>) => string;\n}\n\ninterface AnimatedBarProps {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n\tfill: string;\n\trx: number;\n\try: number;\n\tindex: number;\n\tisFaded: boolean;\n\tanimationType: BarAnimationType;\n\tinnerHeight: number;\n\tfadedOpacity: number;\n\tstaggerDelay: number;\n\tenterTransition?: Transition;\n\trevealEpoch: number;\n\tisHorizontal: boolean;\n}\n\nfunction AnimatedBar({\n\tx,\n\ty,\n\twidth,\n\theight,\n\tfill,\n\trx,\n\try,\n\tindex,\n\tisFaded,\n\tanimationType,\n\tinnerHeight,\n\tfadedOpacity,\n\tstaggerDelay,\n\tenterTransition,\n\trevealEpoch,\n\tisHorizontal,\n}: AnimatedBarProps) {\n\tconst enterAnim = transitionWithDelay(enterTransition, index * staggerDelay);\n\n\tif (animationType === \"fade\") {\n\t\treturn (\n\t\t\t<motion.rect\n\t\t\t\tanimate={{\n\t\t\t\t\topacity: isFaded ? fadedOpacity : 1,\n\t\t\t\t\tfilter: \"blur(0px)\",\n\t\t\t\t}}\n\t\t\t\tfill={fill}\n\t\t\t\theight={height}\n\t\t\t\tinitial={{ opacity: 0, filter: \"blur(2px)\" }}\n\t\t\t\tkey={`fade-${index}-${revealEpoch}`}\n\t\t\t\trx={rx}\n\t\t\t\try={ry}\n\t\t\t\ttransition={enterAnim}\n\t\t\t\twidth={width}\n\t\t\t\tx={x}\n\t\t\t\ty={y}\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst initial = isHorizontal\n\t\t? { width: 0, height, x: 0, y }\n\t\t: { width, height: 0, x, y: innerHeight };\n\tconst target = isHorizontal\n\t\t? { width, height, x: 0, y }\n\t\t: { width, height, x, y };\n\n\treturn (\n\t\t<g\n\t\t\topacity={isFaded ? fadedOpacity : 1}\n\t\t\tstyle={{ transition: \"opacity 0.15s ease-in-out\" }}\n\t\t>\n\t\t\t<motion.rect\n\t\t\t\tanimate={target}\n\t\t\t\tfill={fill}\n\t\t\t\tinitial={initial}\n\t\t\t\tkey={`grow-${index}-${revealEpoch}`}\n\t\t\t\trx={rx}\n\t\t\t\try={ry}\n\t\t\t\ttransition={enterAnim}\n\t\t\t/>\n\t\t</g>\n\t);\n}\n\nconst BarInner = memo(function BarInner({\n\tdataKey,\n\tyAxisId,\n\tfill = chartCssVars.linePrimary,\n\tlineCap = \"round\",\n\tanimate = true,\n\tanimationType = \"grow\",\n\tfadedOpacity = 0.3,\n\tstaggerDelay,\n\tstackGap = 0,\n\tgroupGap = 4,\n\tperspective = false,\n\tminBarHeight = 0,\n\tbarScale,\n\tbandWidth,\n\tbarXAccessor,\n}: BarInnerProps) {\n\tconst {\n\t\tdata,\n\t\tyScale: chartYScale,\n\t\tinnerHeight,\n\t\tinnerWidth,\n\t\tisLoaded,\n\t\thoveredBarIndex,\n\t\tlines,\n\t\torientation,\n\t\tstacked,\n\t\tstackOffsets,\n\t\tanimationDuration,\n\t\tenterTransition,\n\t\trevealEpoch = 0,\n\t} = useChart();\n\n\t// Calculate stagger delay automatically if not provided\n\t// Total animation duration is ~1200ms, with 40% for stagger spread and 60% for bar animation\n\tconst totalAnimDuration = animationDuration || 1100;\n\tconst staggerSpread = totalAnimDuration * 0.4; // 40% of time for stagger spread\n\tconst calculatedStaggerDelay =\n\t\tstaggerDelay ?? (data.length > 1 ? staggerSpread / 1000 / data.length : 0);\n\tconst uniqueId = useId();\n\n\tconst isHorizontal = orientation === \"horizontal\";\n\n\t// Find the index of this bar series among all bar series\n\tconst { hoveredIndex: legendHoveredIndex } = useChartLegendHover();\n\n\tconst seriesIndex = useMemo(() => {\n\t\tconst idx = lines.findIndex((l) => l.dataKey === dataKey);\n\t\treturn idx >= 0 ? idx : 0;\n\t}, [lines, dataKey]);\n\n\tconst seriesConfig = lines[seriesIndex];\n\tconst valueScale = useYScale(yAxisId ?? seriesConfig?.yAxisId);\n\n\tconst isLegendDimmed =\n\t\tlegendHoveredIndex !== null && legendHoveredIndex !== seriesIndex;\n\n\tconst seriesCount = lines.length;\n\tconst isLastSeries = seriesIndex === seriesCount - 1;\n\n\t// Calculate the width for each bar within a group (for non-stacked)\n\tconst barWidth = useMemo(() => {\n\t\tif (!bandWidth || seriesCount === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (stacked) {\n\t\t\t// Stacked bars use full band width\n\t\t\treturn bandWidth;\n\t\t}\n\t\t// Leave a gap between grouped bars (controlled by groupGap prop)\n\t\tconst effectiveGroupGap = seriesCount > 1 ? groupGap : 0;\n\t\treturn (bandWidth - effectiveGroupGap * (seriesCount - 1)) / seriesCount;\n\t}, [bandWidth, seriesCount, stacked, groupGap]);\n\n\t// Calculate corner radius based on lineCap. Perspective bars force a flat\n\t// top (radius 0) so the 3D lid from `<BarDepthBack>` meets the bar with no\n\t// gap — rounded corners would leave a wedge, so `perspective` overrides it.\n\tconst cornerRadius = useMemo(() => {\n\t\tif (perspective) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (typeof lineCap === \"number\") {\n\t\t\treturn lineCap;\n\t\t}\n\t\tif (lineCap === \"round\" && barWidth) {\n\t\t\treturn Math.min(barWidth / 2, 8);\n\t\t}\n\t\treturn 0;\n\t}, [lineCap, barWidth, perspective]);\n\n\treturn (\n\t\t<g className={`bar-series-${uniqueId}`}>\n\t\t\t{data.map((d, i) => {\n\t\t\t\tconst value = d[dataKey];\n\t\t\t\tif (typeof value !== \"number\") {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst categoryValue = barXAccessor(d);\n\t\t\t\tconst bandPos = barScale(categoryValue) ?? 0;\n\n\t\t\t\tlet x: number;\n\t\t\t\tlet y: number;\n\t\t\t\tlet barHeight: number;\n\t\t\t\tlet barW: number;\n\n\t\t\t\tconst scale = isHorizontal ? chartYScale : valueScale;\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t// Horizontal bars: category on y-axis, value on x-axis\n\t\t\t\t\tconst valuePos = scale(value) ?? 0;\n\t\t\t\t\tbarW = valuePos; // Width is the value position (grows from left)\n\t\t\t\t\tbarHeight = barWidth;\n\n\t\t\t\t\tif (stacked && stackOffsets) {\n\t\t\t\t\t\tconst offset = stackOffsets.get(i)?.get(dataKey) ?? 0;\n\t\t\t\t\t\tx = scale(offset) ?? 0;\n\t\t\t\t\t\tbarW = valuePos - x;\n\t\t\t\t\t\t// Apply stack gap for horizontal: shift right and reduce width\n\t\t\t\t\t\tconst gapOffset = seriesIndex * stackGap;\n\t\t\t\t\t\tx += gapOffset;\n\t\t\t\t\t\tif (!isLastSeries && stackGap > 0) {\n\t\t\t\t\t\t\tbarW = Math.max(0, barW - stackGap);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t// For grouped bars, offset y position\n\t\t\t\t\t\tconst effectiveGroupGap = seriesCount > 1 ? groupGap : 0;\n\t\t\t\t\t\ty = bandPos + seriesIndex * (barWidth + effectiveGroupGap);\n\t\t\t\t\t}\n\t\t\t\t\ty = stacked\n\t\t\t\t\t\t? bandPos\n\t\t\t\t\t\t: bandPos +\n\t\t\t\t\t\t\tseriesIndex * (barWidth + (seriesCount > 1 ? groupGap : 0));\n\t\t\t\t} else {\n\t\t\t\t\t// Vertical bars: category on x-axis, value on y-axis\n\t\t\t\t\tconst valuePos = scale(value) ?? 0;\n\t\t\t\t\tbarHeight = innerHeight - valuePos;\n\t\t\t\t\tbarW = barWidth;\n\n\t\t\t\t\tif (stacked && stackOffsets) {\n\t\t\t\t\t\tconst offset = stackOffsets.get(i)?.get(dataKey) ?? 0;\n\t\t\t\t\t\tconst offsetY = scale(offset) ?? innerHeight;\n\t\t\t\t\t\t// Apply stack gap: shift up and reduce height\n\t\t\t\t\t\tconst gapOffset = seriesIndex * stackGap;\n\t\t\t\t\t\ty = offsetY - barHeight - gapOffset;\n\t\t\t\t\t\t// Reduce height slightly for non-last bars to create visual gap\n\t\t\t\t\t\tif (!isLastSeries && stackGap > 0) {\n\t\t\t\t\t\t\tbarHeight = Math.max(0, barHeight - stackGap);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ty = valuePos;\n\t\t\t\t\t\t// For grouped bars, offset x position\n\t\t\t\t\t\tconst effectiveGroupGap = seriesCount > 1 ? groupGap : 0;\n\t\t\t\t\t\tx = bandPos + seriesIndex * (barWidth + effectiveGroupGap);\n\t\t\t\t\t}\n\t\t\t\t\tx = stacked\n\t\t\t\t\t\t? bandPos\n\t\t\t\t\t\t: bandPos +\n\t\t\t\t\t\t\tseriesIndex * (barWidth + (seriesCount > 1 ? groupGap : 0));\n\n\t\t\t\t\t// Minimum visible height — floor short/zero non-stacked bars so a\n\t\t\t\t\t// zero-value data point still reads as a tiny bar instead of\n\t\t\t\t\t// vanishing. Grows up from the baseline. Floored bars skip the\n\t\t\t\t\t// perspective trim (sub-pixel on a 3px bar; keeps the front aligned\n\t\t\t\t\t// with bar-depth, which also skips trim for floored bars).\n\t\t\t\t\tlet isFloored = false;\n\t\t\t\t\tif (\n\t\t\t\t\t\t!stacked &&\n\t\t\t\t\t\tminBarHeight > 0 &&\n\t\t\t\t\t\tvalue >= 0 &&\n\t\t\t\t\t\tbarHeight < minBarHeight\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst baselineY = scale(0) ?? innerHeight;\n\t\t\t\t\t\tbarHeight = minBarHeight;\n\t\t\t\t\t\ty = baselineY - minBarHeight;\n\t\t\t\t\t\tisFloored = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Perspective trim — shrink the topmost positive bar's front-face\n\t\t\t\t\t// top down by its perspective rise so it meets `<BarDepthBack>`'s\n\t\t\t\t\t// lid back edge. Stacked: only the last (topmost) series; grouped or\n\t\t\t\t\t// single: every positive bar. Clamped to `barHeight - 1` so very\n\t\t\t\t\t// short bars keep a positive height (matches bar-depth's clamp).\n\t\t\t\t\tif (\n\t\t\t\t\t\tperspective &&\n\t\t\t\t\t\tvalue > 0 &&\n\t\t\t\t\t\t!isFloored &&\n\t\t\t\t\t\t(!stacked || isLastSeries)\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst baselineY = scale(0) ?? innerHeight;\n\t\t\t\t\t\tconst rise = barDepthPerspectiveRise(\n\t\t\t\t\t\t\tbarScale,\n\t\t\t\t\t\t\tbandWidth,\n\t\t\t\t\t\t\tbarXAccessor,\n\t\t\t\t\t\t\tinnerWidth,\n\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\tbaselineY,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst trim = Math.min(rise, Math.max(0, barHeight - 1));\n\t\t\t\t\t\ty += trim;\n\t\t\t\t\t\tbarHeight -= trim;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst isFaded =\n\t\t\t\t\t(hoveredBarIndex !== null && hoveredBarIndex !== i) || isLegendDimmed;\n\n\t\t\t\t// Use categoryValue as key since it's the unique identifier from data\n\t\t\t\tconst barKey = `bar-${dataKey}-${categoryValue}`;\n\n\t\t\t\t// Apply rounded corners:\n\t\t\t\t// - For non-stacked: always apply\n\t\t\t\t// - For stacked with gap: apply to all bars\n\t\t\t\t// - For stacked without gap: only apply to the last series\n\t\t\t\tconst applyRounding = !stacked || stackGap > 0 || isLastSeries;\n\t\t\t\tconst effectiveRx = applyRounding ? cornerRadius : 0;\n\t\t\t\tconst effectiveRy = applyRounding ? cornerRadius : 0;\n\n\t\t\t\tif (animate && !isLoaded) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<AnimatedBar\n\t\t\t\t\t\t\tanimationType={animationType}\n\t\t\t\t\t\t\tenterTransition={enterTransition}\n\t\t\t\t\t\t\tfadedOpacity={fadedOpacity}\n\t\t\t\t\t\t\tfill={fill}\n\t\t\t\t\t\t\theight={barHeight}\n\t\t\t\t\t\t\tindex={i}\n\t\t\t\t\t\t\tinnerHeight={innerHeight}\n\t\t\t\t\t\t\tisFaded={isFaded}\n\t\t\t\t\t\t\tisHorizontal={isHorizontal}\n\t\t\t\t\t\t\tkey={barKey}\n\t\t\t\t\t\t\trevealEpoch={revealEpoch}\n\t\t\t\t\t\t\trx={effectiveRx}\n\t\t\t\t\t\t\try={effectiveRy}\n\t\t\t\t\t\t\tstaggerDelay={calculatedStaggerDelay}\n\t\t\t\t\t\t\twidth={barW}\n\t\t\t\t\t\t\tx={x}\n\t\t\t\t\t\t\ty={y}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Static bar after animation completes\n\t\t\t\treturn (\n\t\t\t\t\t<rect\n\t\t\t\t\t\tfill={fill}\n\t\t\t\t\t\theight={barHeight}\n\t\t\t\t\t\tkey={barKey}\n\t\t\t\t\t\topacity={isFaded ? fadedOpacity : 1}\n\t\t\t\t\t\trx={effectiveRx}\n\t\t\t\t\t\try={effectiveRy}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tcursor: \"default\",\n\t\t\t\t\t\t\ttransition: \"opacity 0.15s ease-in-out\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\twidth={barW}\n\t\t\t\t\t\tx={x}\n\t\t\t\t\t\ty={y}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t})}\n\t\t</g>\n\t);\n});\n\nexport function Bar(props: BarProps) {\n\tconst { barScale, bandWidth, barXAccessor } = useChartStable();\n\n\tif (!(barScale && bandWidth && barXAccessor)) {\n\t\tconsole.warn(\"Bar component must be used within a BarChart\");\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<BarInner\n\t\t\t{...props}\n\t\t\tbandWidth={bandWidth}\n\t\t\tbarScale={barScale}\n\t\t\tbarXAccessor={barXAccessor}\n\t\t/>\n\t);\n}\n\nBar.displayName = \"Bar\";\n\nexport default Bar;\n","\"use client\";\n\nimport type { Transition } from \"motion/react\";\nimport { motion } from \"motion/react\";\nimport { useMemo } from \"react\";\nimport { chartCssVars, useChart } from \"./chart-context\";\nimport { useChartLegendHover } from \"./chart-legend-hover\";\nimport { transitionWithDelay } from \"./motion-utils\";\nimport { computeSeriesBarWidth } from \"./series-bar-layout\";\n\nfunction computeSeriesBarLayout(input: {\n\tstacked: boolean;\n\tcomposedStackOffsets: Map<number, Map<string, number>> | undefined;\n\trowIndex: number;\n\tdataKey: string;\n\tvalue: number;\n\tyScale: (n: number) => number | undefined;\n\tinnerHeight: number;\n\txCenter: number;\n\tbarWidth: number;\n\tseriesCount: number;\n\tgap: number;\n\tseriesIndex: number;\n\tstackGap: number;\n\tisLastSeries: boolean;\n\tradius: number;\n}): {\n\tbarLeft: number;\n\tbarHeight: number;\n\teffectiveRadius: number;\n\tvalueY: number;\n} {\n\tconst {\n\t\tstacked,\n\t\tcomposedStackOffsets,\n\t\trowIndex,\n\t\tdataKey,\n\t\tvalue,\n\t\tyScale,\n\t\tinnerHeight,\n\t\txCenter,\n\t\tbarWidth,\n\t\tseriesCount,\n\t\tgap,\n\t\tseriesIndex,\n\t\tstackGap,\n\t\tisLastSeries,\n\t\tradius,\n\t} = input;\n\n\tif (stacked && composedStackOffsets) {\n\t\tconst offset = composedStackOffsets.get(rowIndex)?.get(dataKey) ?? 0;\n\t\tconst valuePos = yScale(value) ?? 0;\n\t\tlet barHeight = innerHeight - valuePos;\n\t\tconst offsetY = yScale(offset) ?? innerHeight;\n\t\tconst gapOffset = seriesIndex * stackGap;\n\t\tconst valueY = offsetY - barHeight - gapOffset;\n\t\tif (!isLastSeries && stackGap > 0) {\n\t\t\tbarHeight = Math.max(0, barHeight - stackGap);\n\t\t}\n\t\tconst barLeft = xCenter - barWidth / 2;\n\t\tconst applyRounding = stackGap > 0 || isLastSeries;\n\t\treturn {\n\t\t\tbarLeft,\n\t\t\tbarHeight,\n\t\t\teffectiveRadius: applyRounding ? radius : 0,\n\t\t\tvalueY,\n\t\t};\n\t}\n\n\tconst groupWidth =\n\t\tseriesCount * barWidth + (seriesCount > 1 ? (seriesCount - 1) * gap : 0);\n\tconst valueY = yScale(value) ?? innerHeight;\n\treturn {\n\t\tbarLeft: xCenter - groupWidth / 2 + seriesIndex * (barWidth + gap),\n\t\tbarHeight: innerHeight - valueY,\n\t\teffectiveRadius: radius,\n\t\tvalueY,\n\t};\n}\n\nexport interface SeriesBarProps {\n\t/** Key in data for bar height (y value) */\n\tdataKey: string;\n\t/** Fill color. Default: var(--chart-line-primary) */\n\tfill?: string;\n\t/** Tooltip dot color when fill is gradient/pattern. Default: fill */\n\tstroke?: string;\n\t/** Corner radius for bar top corners. Default: 0 (square tops, similar to Bar lineCap=\"butt\") */\n\tradius?: number;\n\t/** Animate grow from baseline. Default: true */\n\tanimate?: boolean;\n\t/** Opacity for non-hovered bars when another point is hovered (matches BarChart). Default: 0.3 */\n\tfadedOpacity?: number;\n}\n\nexport function SeriesBar({\n\tdataKey,\n\tfill = chartCssVars.linePrimary,\n\tradius = 0,\n\tanimate = true,\n\tfadedOpacity = 0.3,\n}: SeriesBarProps) {\n\tconst {\n\t\tdata,\n\t\txScale,\n\t\tyScale,\n\t\txAccessor,\n\t\tinnerHeight,\n\t\tinnerWidth,\n\t\tcolumnWidth,\n\t\tisLoaded,\n\t\tanimationDuration,\n\t\tenterTransition,\n\t\trevealEpoch = 0,\n\t\tbarScale,\n\t\tcomposedBarDataKeys,\n\t\tcomposedBarSize,\n\t\tcomposedMaxBarSize,\n\t\tcomposedBarGap,\n\t\tcomposedStacked,\n\t\tcomposedStackOffsets,\n\t\tcomposedStackGap,\n\t\ttooltipData,\n\t} = useChart();\n\n\tconst barKeys = useMemo(() => {\n\t\tif (composedBarDataKeys && composedBarDataKeys.length > 0) {\n\t\t\treturn composedBarDataKeys;\n\t\t}\n\t\treturn [dataKey];\n\t}, [composedBarDataKeys, dataKey]);\n\n\tconst seriesIndex = useMemo(() => {\n\t\tconst idx = barKeys.indexOf(dataKey);\n\t\treturn idx >= 0 ? idx : 0;\n\t}, [barKeys, dataKey]);\n\n\tconst n = barKeys.length;\n\tconst gap = composedBarGap ?? 4;\n\tconst stackGap = composedStackGap ?? 0;\n\n\tconst stacked =\n\t\tBoolean(composedStacked) &&\n\t\tcomposedStackOffsets != null &&\n\t\tcomposedBarDataKeys != null &&\n\t\tcomposedBarDataKeys.length > 0;\n\n\tconst isLastSeries = seriesIndex === n - 1;\n\n\tconst barWidth = useMemo(\n\t\t() =>\n\t\t\tcomputeSeriesBarWidth({\n\t\t\t\tinnerWidth,\n\t\t\t\tdataLength: data.length,\n\t\t\t\tcolumnWidth,\n\t\t\t\tseriesCount: n,\n\t\t\t\tcomposedBarSize,\n\t\t\t\tcomposedMaxBarSize,\n\t\t\t\tcomposedBarGap: gap,\n\t\t\t\tstacked,\n\t\t\t}),\n\t\t[\n\t\t\tcolumnWidth,\n\t\t\tcomposedBarSize,\n\t\t\tcomposedMaxBarSize,\n\t\t\tdata.length,\n\t\t\tgap,\n\t\t\tinnerWidth,\n\t\t\tn,\n\t\t\tstacked,\n\t\t],\n\t);\n\n\tconst totalAnimDuration = animationDuration || 1100;\n\tconst staggerSpread = totalAnimDuration * 0.4;\n\tconst calculatedStaggerDelay =\n\t\tdata.length > 1 ? staggerSpread / 1000 / data.length : 0;\n\tconst { hoveredIndex: legendHoveredIndex } = useChartLegendHover();\n\tconst isLegendDimmed =\n\t\tlegendHoveredIndex !== null && legendHoveredIndex !== seriesIndex;\n\tconst hoveredIndex = tooltipData?.index ?? null;\n\n\tif (barScale) {\n\t\tconsole.warn(\n\t\t\t\"SeriesBar is for time-based ComposedChart / LineChart context. Use Bar inside BarChart for categorical x.\",\n\t\t);\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<g className=\"series-bar\">\n\t\t\t{data.map((d, i) => {\n\t\t\t\tconst value = d[dataKey];\n\t\t\t\tif (typeof value !== \"number\") {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst xCenter = xScale(xAccessor(d)) ?? 0;\n\n\t\t\t\tconst { barLeft, valueY, barHeight, effectiveRadius } =\n\t\t\t\t\tcomputeSeriesBarLayout({\n\t\t\t\t\t\tstacked,\n\t\t\t\t\t\tcomposedStackOffsets,\n\t\t\t\t\t\trowIndex: i,\n\t\t\t\t\t\tdataKey,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tyScale,\n\t\t\t\t\t\tinnerHeight,\n\t\t\t\t\t\txCenter,\n\t\t\t\t\t\tbarWidth,\n\t\t\t\t\t\tseriesCount: n,\n\t\t\t\t\t\tgap,\n\t\t\t\t\t\tseriesIndex,\n\t\t\t\t\t\tstackGap,\n\t\t\t\t\t\tisLastSeries,\n\t\t\t\t\t\tradius,\n\t\t\t\t\t});\n\n\t\t\t\tconst categoryLabel = String(xAccessor(d).getTime());\n\t\t\t\tconst isFaded =\n\t\t\t\t\t(hoveredIndex !== null && hoveredIndex !== i) || isLegendDimmed;\n\n\t\t\t\tif (animate && !isLoaded) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<SeriesBarRect\n\t\t\t\t\t\t\tbarHeight={barHeight}\n\t\t\t\t\t\t\tbarWidth={barWidth}\n\t\t\t\t\t\t\tcalculatedStaggerDelay={calculatedStaggerDelay}\n\t\t\t\t\t\t\tenterTransition={enterTransition}\n\t\t\t\t\t\t\tfadedOpacity={fadedOpacity}\n\t\t\t\t\t\t\tfill={fill}\n\t\t\t\t\t\t\tindex={i}\n\t\t\t\t\t\t\tinnerHeight={innerHeight}\n\t\t\t\t\t\t\tisFaded={isFaded}\n\t\t\t\t\t\t\tkey={`${dataKey}-${categoryLabel}-${revealEpoch}`}\n\t\t\t\t\t\t\tradius={effectiveRadius}\n\t\t\t\t\t\t\trevealEpoch={revealEpoch}\n\t\t\t\t\t\t\tx={barLeft}\n\t\t\t\t\t\t\ty={valueY}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<motion.rect\n\t\t\t\t\t\tanimate={{ opacity: isFaded ? fadedOpacity : 1 }}\n\t\t\t\t\t\tfill={fill}\n\t\t\t\t\t\theight={barHeight}\n\t\t\t\t\t\tkey={`${dataKey}-${categoryLabel}`}\n\t\t\t\t\t\trx={effectiveRadius}\n\t\t\t\t\t\try={effectiveRadius}\n\t\t\t\t\t\ttransition={{ opacity: { duration: 0.12 } }}\n\t\t\t\t\t\twidth={barWidth}\n\t\t\t\t\t\tx={barLeft}\n\t\t\t\t\t\ty={valueY}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t})}\n\t\t</g>\n\t);\n}\n\nSeriesBar.displayName = \"SeriesBar\";\n\ninterface SeriesBarRectProps {\n\tx: number;\n\ty: number;\n\tbarWidth: number;\n\tbarHeight: number;\n\tfill: string;\n\tradius: number;\n\tindex: number;\n\tinnerHeight: number;\n\tcalculatedStaggerDelay: number;\n\tenterTransition?: Transition;\n\trevealEpoch: number;\n\tisFaded: boolean;\n\tfadedOpacity: number;\n}\n\nfunction SeriesBarRect({\n\tx,\n\ty,\n\tbarWidth,\n\tbarHeight,\n\tfill,\n\tradius,\n\tindex,\n\tinnerHeight,\n\tcalculatedStaggerDelay,\n\tenterTransition,\n\trevealEpoch,\n\tisFaded,\n\tfadedOpacity,\n}: SeriesBarRectProps) {\n\tconst enterAnim = transitionWithDelay(\n\t\tenterTransition,\n\t\tindex * calculatedStaggerDelay,\n\t);\n\n\treturn (\n\t\t<motion.rect\n\t\t\tanimate={{\n\t\t\t\theight: barHeight,\n\t\t\t\ty,\n\t\t\t\topacity: isFaded ? fadedOpacity : 1,\n\t\t\t}}\n\t\t\tfill={fill}\n\t\t\tinitial={{ height: 0, y: innerHeight, opacity: 1 }}\n\t\t\tkey={`series-bar-${index}-${revealEpoch}`}\n\t\t\trx={radius}\n\t\t\try={radius}\n\t\t\ttransition={enterAnim}\n\t\t\twidth={barWidth}\n\t\t\tx={x}\n\t\t/>\n\t);\n}\n\nexport default SeriesBar;\n","\"use client\";\n\nimport { ParentSize } from \"@visx/responsive\";\nimport type { Transition } from \"motion/react\";\nimport {\n\tChildren,\n\tisValidElement,\n\ttype ReactElement,\n\ttype ReactNode,\n\tuseMemo,\n\tuseRef,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Area, type AreaProps } from \"./area\";\nimport type { LineConfig, Margin } from \"./chart-context\";\nimport type { ChartPhase } from \"./chart-phase\";\nimport { Line, type LineProps } from \"./line\";\nimport { SeriesBar, type SeriesBarProps } from \"./series-bar\";\nimport { TimeSeriesChartInner } from \"./time-series-chart-shell\";\n\nexport interface ComposedChartProps {\n\t/** Data array — each row typically has a date and multiple numeric series */\n\tdata: Record<string, unknown>[];\n\t/** Key for the x-axis (time). Default: \"date\" */\n\txDataKey?: string;\n\tmargin?: Partial<Margin>;\n\tanimationDuration?: number;\n\tanimationEasing?: string;\n\tenterTransition?: Transition;\n\t/** Signature of motion URL state — triggers reveal replay when it changes. */\n\trevealSignature?: string;\n\taspectRatio?: string;\n\tclassName?: string;\n\tchildren: ReactNode;\n\t/** Target bar width in px (Recharts-style `barSize`). */\n\tbarSize?: number;\n\t/** Maximum bar width in px (`maxBarSize`). */\n\tmaxBarSize?: number;\n\t/** Gap between grouped `SeriesBar` series in px. Default: 4 */\n\tbarGap?: number;\n\t/** Stack `SeriesBar` segments in child order at each x (line/area are not stacked). */\n\tstacked?: boolean;\n\t/** Gap in px between stacked segments. Default: 0 */\n\tstackGap?: number;\n\tonPhaseChange?: (phase: ChartPhase) => void;\n}\n\nconst DEFAULT_MARGIN: Margin = { top: 40, right: 40, bottom: 40, left: 40 };\n\nfunction getChildComponentName(child: ReactElement): string {\n\tconst childType = child.type as { displayName?: string; name?: string };\n\treturn typeof child.type === \"function\"\n\t\t? childType.displayName || childType.name || \"\"\n\t\t: \"\";\n}\n\nfunction upsertLineConfig(lines: LineConfig[], config: LineConfig): void {\n\tconst index = lines.findIndex((line) => line.dataKey === config.dataKey);\n\tif (index === -1) {\n\t\tlines.push(config);\n\t\treturn;\n\t}\n\t// Area+Line pairs share a dataKey — keep the later config (Line over Area).\n\tlines[index] = config;\n}\n\nfunction tryAppendSeriesBar(\n\tchild: ReactElement,\n\tlines: LineConfig[],\n\tbarDataKeys: string[],\n): boolean {\n\tconst name = getChildComponentName(child);\n\tif (!(child.type === SeriesBar || name === \"SeriesBar\")) {\n\t\treturn false;\n\t}\n\tconst props = child.props as SeriesBarProps;\n\tif (!props.dataKey) {\n\t\treturn true;\n\t}\n\tbarDataKeys.push(props.dataKey);\n\tupsertLineConfig(lines, {\n\t\tdataKey: props.dataKey,\n\t\tstroke: props.stroke || props.fill || \"var(--chart-line-primary)\",\n\t\tstrokeWidth: 0,\n\t});\n\treturn true;\n}\n\nfunction tryAppendLine(child: ReactElement, lines: LineConfig[]): boolean {\n\tconst name = getChildComponentName(child);\n\tif (!(child.type === Line || name === \"Line\")) {\n\t\treturn false;\n\t}\n\tconst props = child.props as LineProps;\n\tif (props.dataKey) {\n\t\tupsertLineConfig(lines, {\n\t\t\tdataKey: props.dataKey,\n\t\t\tstroke: props.stroke || \"var(--chart-line-primary)\",\n\t\t\tstrokeWidth: props.strokeWidth ?? 2.5,\n\t\t\tyAxisId: props.yAxisId,\n\t\t});\n\t}\n\treturn true;\n}\n\nfunction tryAppendArea(child: ReactElement, lines: LineConfig[]): boolean {\n\tconst name = getChildComponentName(child);\n\tif (!(child.type === Area || name === \"Area\")) {\n\t\treturn false;\n\t}\n\tconst props = child.props as AreaProps;\n\tif (props.dataKey) {\n\t\tupsertLineConfig(lines, {\n\t\t\tdataKey: props.dataKey,\n\t\t\tstroke: props.stroke || props.fill || \"var(--chart-line-primary)\",\n\t\t\tstrokeWidth: props.strokeWidth ?? 2,\n\t\t\tyAxisId: props.yAxisId,\n\t\t});\n\t}\n\treturn true;\n}\n\nfunction extractComposedSeries(children: ReactNode): {\n\tlines: LineConfig[];\n\tbarDataKeys: string[];\n} {\n\tconst lines: LineConfig[] = [];\n\tconst barDataKeys: string[] = [];\n\n\tChildren.forEach(children, (child) => {\n\t\tif (!isValidElement(child)) {\n\t\t\treturn;\n\t\t}\n\t\tif (tryAppendSeriesBar(child, lines, barDataKeys)) {\n\t\t\treturn;\n\t\t}\n\t\tif (tryAppendLine(child, lines)) {\n\t\t\treturn;\n\t\t}\n\t\ttryAppendArea(child, lines);\n\t});\n\n\treturn { lines, barDataKeys };\n}\n\nfunction computeComposedYScaleDomainMax(\n\tdata: Record<string, unknown>[],\n\tlines: LineConfig[],\n\tbarDataKeys: string[],\n): number | undefined {\n\tconst barSet = new Set(barDataKeys);\n\tlet max = 0;\n\tfor (const d of data) {\n\t\tlet barSum = 0;\n\t\tfor (const k of barDataKeys) {\n\t\t\tconst v = d[k];\n\t\t\tif (typeof v === \"number\") {\n\t\t\t\tbarSum += v;\n\t\t\t}\n\t\t}\n\t\tlet rowMaxOther = 0;\n\t\tfor (const line of lines) {\n\t\t\tif (barSet.has(line.dataKey)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst v = d[line.dataKey];\n\t\t\tif (typeof v === \"number\") {\n\t\t\t\trowMaxOther = Math.max(rowMaxOther, v);\n\t\t\t}\n\t\t}\n\t\tmax = Math.max(max, barSum, rowMaxOther);\n\t}\n\treturn max > 0 ? max : undefined;\n}\n\ninterface ChartInnerProps {\n\twidth: number;\n\theight: number;\n\tdata: Record<string, unknown>[];\n\txDataKey: string;\n\tmargin: Margin;\n\tanimationDuration: number;\n\tanimationEasing?: string;\n\tenterTransition?: Transition;\n\trevealSignature?: string;\n\tchildren: ReactNode;\n\tcontainerRef: React.RefObject<HTMLDivElement | null>;\n\tbarSize?: number;\n\tmaxBarSize?: number;\n\tbarGap?: number;\n\tstacked?: boolean;\n\tstackGap?: number;\n\tonPhaseChange?: (phase: ChartPhase) => void;\n}\n\nfunction ChartInner({\n\twidth,\n\theight,\n\tdata,\n\txDataKey,\n\tmargin,\n\tanimationDuration,\n\tanimationEasing,\n\tenterTransition,\n\trevealSignature,\n\tchildren,\n\tcontainerRef,\n\tbarSize,\n\tmaxBarSize,\n\tbarGap,\n\tstacked = false,\n\tstackGap = 0,\n\tonPhaseChange,\n}: ChartInnerProps) {\n\tconst { lines, barDataKeys } = useMemo(\n\t\t() => extractComposedSeries(children),\n\t\t[children],\n\t);\n\n\tconst composedStackOffsets = useMemo(() => {\n\t\tif (!(stacked && barDataKeys.length > 0)) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst offsets = new Map<number, Map<string, number>>();\n\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\tconst d = data[i];\n\t\t\tif (!d) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst pointOffsets = new Map<string, number>();\n\t\t\tlet cumulative = 0;\n\t\t\tfor (const key of barDataKeys) {\n\t\t\t\tpointOffsets.set(key, cumulative);\n\t\t\t\tconst v = d[key];\n\t\t\t\tif (typeof v === \"number\") {\n\t\t\t\t\tcumulative += v;\n\t\t\t\t}\n\t\t\t}\n\t\t\toffsets.set(i, pointOffsets);\n\t\t}\n\t\treturn offsets;\n\t}, [data, barDataKeys, stacked]);\n\n\tconst yScaleDomainMax = useMemo(\n\t\t() =>\n\t\t\tstacked && barDataKeys.length > 0\n\t\t\t\t? computeComposedYScaleDomainMax(data, lines, barDataKeys)\n\t\t\t\t: undefined,\n\t\t[data, lines, barDataKeys, stacked],\n\t);\n\n\treturn (\n\t\t<TimeSeriesChartInner\n\t\t\tanimationDuration={animationDuration}\n\t\t\tanimationEasing={animationEasing}\n\t\t\tclipPathId=\"composed-chart-grow-clip\"\n\t\t\tcomposedBarDataKeys={barDataKeys.length > 0 ? barDataKeys : undefined}\n\t\t\tcomposedBarGap={barGap}\n\t\t\tcomposedBarSize={barSize}\n\t\t\tcomposedMaxBarSize={maxBarSize}\n\t\t\tcomposedStacked={stacked}\n\t\t\tcomposedStackGap={stackGap}\n\t\t\tcomposedStackOffsets={composedStackOffsets}\n\t\t\tcontainerRef={containerRef}\n\t\t\tdata={data}\n\t\t\tenterTransition={enterTransition}\n\t\t\theight={height}\n\t\t\tlines={lines}\n\t\t\tmargin={margin}\n\t\t\tonPhaseChange={onPhaseChange}\n\t\t\trevealSignature={revealSignature}\n\t\t\twidth={width}\n\t\t\txDataKey={xDataKey}\n\t\t\tyScaleDomainMax={yScaleDomainMax}\n\t\t>\n\t\t\t{children}\n\t\t</TimeSeriesChartInner>\n\t);\n}\n\nexport function ComposedChart({\n\tdata,\n\txDataKey = \"date\",\n\tmargin: marginProp,\n\tanimationDuration = 1100,\n\tanimationEasing,\n\tenterTransition,\n\trevealSignature,\n\taspectRatio = \"2 / 1\",\n\tclassName = \"\",\n\tchildren,\n\tbarSize,\n\tmaxBarSize,\n\tbarGap = 4,\n\tstacked = false,\n\tstackGap = 0,\n\tonPhaseChange,\n}: ComposedChartProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst margin = { ...DEFAULT_MARGIN, ...marginProp };\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"relative w-full\", className)}\n\t\t\tref={containerRef}\n\t\t\tstyle={{ aspectRatio, touchAction: \"none\" }}\n\t\t>\n\t\t\t<ParentSize debounceTime={10}>\n\t\t\t\t{({ width, height }) => (\n\t\t\t\t\t<ChartInner\n\t\t\t\t\t\tanimationDuration={animationDuration}\n\t\t\t\t\t\tanimationEasing={animationEasing}\n\t\t\t\t\t\tbarGap={barGap}\n\t\t\t\t\t\tbarSize={barSize}\n\t\t\t\t\t\tcontainerRef={containerRef}\n\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\tenterTransition={enterTransition}\n\t\t\t\t\t\theight={height}\n\t\t\t\t\t\tmargin={margin}\n\t\t\t\t\t\tmaxBarSize={maxBarSize}\n\t\t\t\t\t\tonPhaseChange={onPhaseChange}\n\t\t\t\t\t\trevealSignature={revealSignature}\n\t\t\t\t\t\tstacked={stacked}\n\t\t\t\t\t\tstackGap={stackGap}\n\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\txDataKey={xDataKey}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</ChartInner>\n\t\t\t\t)}\n\t\t\t</ParentSize>\n\t\t</div>\n\t);\n}\n\nComposedChart.displayName = \"ComposedChart\";\n\nexport default ComposedChart;\n","\"use client\";\n\nimport { localPoint } from \"@visx/event\";\nimport { ParentSize } from \"@visx/responsive\";\nimport { scaleLinear, scaleTime } from \"@visx/scale\";\nimport { bisector } from \"d3-array\";\nimport {\n\tChildren,\n\tisValidElement,\n\tmemo,\n\ttype ReactElement,\n\ttype ReactNode,\n\tstartTransition,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport {\n\tisClipExcludedComponent,\n\tisUnderlayComponent,\n} from \"./chart-child-passthrough\";\nimport {\n\tChartProvider,\n\ttype LineConfig,\n\ttype Margin,\n\ttype TooltipData,\n} from \"./chart-context\";\nimport { hmsTimeFmt } from \"./chart-formatters\";\nimport { DEFAULT_CHART_LIFECYCLE } from \"./chart-phase\";\nimport type { LiveLineProps } from \"./live-line\";\nimport { extractReferenceAreaConfigs } from \"./reference-area-config\";\nimport { wrapSingleYScale } from \"./y-axis-scales\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface LiveLinePoint {\n\ttime: number;\n\tvalue: number;\n}\n\nexport interface LiveLineChartProps {\n\t/** Streaming data — array of { time: unixSeconds, value } */\n\tdata: LiveLinePoint[];\n\t/** Latest value (smoothly interpolated to) */\n\tvalue: number;\n\t/** Key used for the value field in context data. Default: \"value\" */\n\tdataKey?: string;\n\t/** Visible time window in seconds. Default: 30 */\n\twindow?: number;\n\t/** Number of X-axis ticks (used to compute leading offset). Default: 5 */\n\tnumXTicks?: number;\n\t/** Leading offset in X-tick units (0 = now at right edge). Default: 0 */\n\tnowOffsetUnits?: number;\n\t/** Tight Y-axis. Default: false */\n\texaggerate?: boolean;\n\t/** Interpolation speed (0–1). Default: 0.08 */\n\tlerpSpeed?: number;\n\t/** Chart margins */\n\tmargin?: Partial<Margin>;\n\t/** Freeze chart scrolling. Default: false */\n\tpaused?: boolean;\n\t/** Child components (LiveLine, Grid, ChartTooltip, LiveXAxis, LiveYAxis, etc.) */\n\tchildren: ReactNode;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst LERP_SPEED = 0.08;\nconst DEFAULT_MARGIN: Margin = { top: 24, right: 16, bottom: 32, left: 16 };\n/** React commit interval for the live animation loop (~30fps). */\nconst LIVE_FRAME_COMMIT_MS = 32;\n\ninterface AnimFrame {\n\tnow: number;\n\tyMin: number;\n\tyMax: number;\n\tdisplayValue: number;\n}\n\nfunction computeTargetRange(\n\tdata: LiveLinePoint[],\n\tvalue: number,\n\texaggerate: boolean,\n) {\n\tif (data.length === 0) {\n\t\treturn { yMin: 0, yMax: 100 };\n\t}\n\tlet min = Number.POSITIVE_INFINITY;\n\tlet max = Number.NEGATIVE_INFINITY;\n\tfor (const d of data) {\n\t\tif (d.value < min) {\n\t\t\tmin = d.value;\n\t\t}\n\t\tif (d.value > max) {\n\t\t\tmax = d.value;\n\t\t}\n\t}\n\tif (value < min) {\n\t\tmin = value;\n\t}\n\tif (value > max) {\n\t\tmax = value;\n\t}\n\tconst rawRange = max - min;\n\tconst paddingFactor = exaggerate ? 0.03 : 0.15;\n\tconst rangePad = rawRange * paddingFactor || (exaggerate ? 0.04 : 10);\n\treturn { yMin: min - rangePad, yMax: max + rangePad };\n}\n\nfunction nextAnimFrame(\n\tprev: AnimFrame,\n\ttargetRange: { yMin: number; yMax: number },\n\ttargetValue: number,\n\tspeed: number,\n\tisPaused: boolean,\n): AnimFrame {\n\tconst nextNow = isPaused ? prev.now : Date.now();\n\tconst nextYMin =\n\t\ttargetRange.yMin < prev.yMin\n\t\t\t? targetRange.yMin\n\t\t\t: prev.yMin + (targetRange.yMin - prev.yMin) * speed;\n\tconst nextYMax =\n\t\ttargetRange.yMax > prev.yMax\n\t\t\t? targetRange.yMax\n\t\t\t: prev.yMax + (targetRange.yMax - prev.yMax) * speed;\n\tconst nextValue =\n\t\tprev.displayValue + (targetValue - prev.displayValue) * speed;\n\treturn {\n\t\tnow: nextNow,\n\t\tyMin: nextYMin,\n\t\tyMax: nextYMax,\n\t\tdisplayValue: nextValue,\n\t};\n}\n\nfunction interpolateAtTime(\n\tpoints: LiveLinePoint[],\n\ttimeSec: number,\n): number | null {\n\tif (points.length === 0) {\n\t\treturn null;\n\t}\n\tconst firstPt = points[0] as LiveLinePoint;\n\tconst lastPt = points.at(-1) as LiveLinePoint;\n\tif (timeSec <= firstPt.time) {\n\t\treturn firstPt.value;\n\t}\n\tif (timeSec >= lastPt.time) {\n\t\treturn lastPt.value;\n\t}\n\tlet lo = 0;\n\tlet hi = points.length - 1;\n\twhile (hi - lo > 1) {\n\t\tconst mid = Math.floor((lo + hi) / 2);\n\t\tconst midPt = points[mid];\n\t\tif (midPt && midPt.time <= timeSec) {\n\t\t\tlo = mid;\n\t\t} else {\n\t\t\thi = mid;\n\t\t}\n\t}\n\tconst p1 = points[lo];\n\tif (!p1) {\n\t\treturn null;\n\t}\n\tconst p2 = points[hi];\n\tif (!p2) {\n\t\treturn null;\n\t}\n\tconst dt = p2.time - p1.time;\n\tif (dt === 0) {\n\t\treturn p1.value;\n\t}\n\tconst t = (timeSec - p1.time) / dt;\n\treturn p1.value + (p2.value - p1.value) * t;\n}\n\nconst bisectTime = bisector<LiveLinePoint, number>((d) => d.time).left;\n\nfunction extractLiveLineConfigs(children: ReactNode): LineConfig[] {\n\tconst configs: LineConfig[] = [];\n\tChildren.forEach(children, (child) => {\n\t\tif (!isValidElement(child)) {\n\t\t\treturn;\n\t\t}\n\t\tconst childType = child.type as { displayName?: string; name?: string };\n\t\tconst name =\n\t\t\ttypeof child.type === \"function\"\n\t\t\t\t? childType.displayName || childType.name || \"\"\n\t\t\t\t: \"\";\n\t\tconst props = child.props as LiveLineProps | undefined;\n\t\tif (\n\t\t\t(name === \"LiveLine\" || (props && \"dataKey\" in props)) &&\n\t\t\tprops?.dataKey\n\t\t) {\n\t\t\tconfigs.push({\n\t\t\t\tdataKey: props.dataKey,\n\t\t\t\tstroke: props.stroke || \"var(--chart-line-primary)\",\n\t\t\t\tstrokeWidth: props.strokeWidth || 2,\n\t\t\t});\n\t\t}\n\t});\n\treturn configs;\n}\n\n// ---------------------------------------------------------------------------\n// Inner chart\n// ---------------------------------------------------------------------------\n\nfunction liveTooltipKey(\n\ttooltip: TooltipData | null,\n\tdataKey: string,\n): string | null {\n\tif (!tooltip) {\n\t\treturn null;\n\t}\n\treturn `${Math.round(tooltip.x)}:${Math.round(tooltip.yPositions[dataKey] ?? 0)}`;\n}\n\nfunction resolveLiveTooltip(\n\tcursorX: number | null,\n\tinnerWidth: number,\n\tinnerHeight: number,\n\tframe: AnimFrame,\n\tleadingMs: number,\n\twindowMs: number,\n\txTickUnitMs: number,\n\tdata: LiveLinePoint[],\n\tdataKey: string,\n): TooltipData | null {\n\tif (cursorX === null || innerWidth <= 0 || innerHeight <= 0) {\n\t\treturn null;\n\t}\n\n\tconst domainEndMs = frame.now + leadingMs;\n\tconst xScaleNext = scaleTime({\n\t\tdomain: [new Date(domainEndMs - windowMs), new Date(domainEndMs)],\n\t\trange: [0, innerWidth],\n\t});\n\tconst yScaleNext = scaleLinear({\n\t\tdomain: [frame.yMin, frame.yMax],\n\t\trange: [innerHeight, 0],\n\t\tnice: true,\n\t});\n\tconst timeMs = xScaleNext.invert(cursorX).getTime();\n\tconst timeSec = timeMs / 1000;\n\tconst visible = data.filter((p) => p.time >= (domainEndMs - windowMs) / 1000);\n\tvisible.push({ time: frame.now / 1000, value: frame.displayValue });\n\tvisible.push({\n\t\ttime: (frame.now + xTickUnitMs) / 1000,\n\t\tvalue: frame.displayValue,\n\t});\n\tconst val = interpolateAtTime(visible, timeSec);\n\tif (val === null) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tpoint: { date: new Date(timeMs), [dataKey]: val },\n\t\tindex: 0,\n\t\tx: cursorX,\n\t\tyPositions: { [dataKey]: yScaleNext(val) ?? 0 },\n\t};\n}\n\nfunction shouldCommitLiveUpdates(\n\tnow: number,\n\tlastFrameCommit: number,\n\ttooltipKey: string | null,\n\tlastTooltipKey: string | null,\n): { commitFrame: boolean; commitTooltip: boolean } {\n\tconst commitFrame = now - lastFrameCommit >= LIVE_FRAME_COMMIT_MS;\n\tconst commitTooltip = tooltipKey !== lastTooltipKey;\n\treturn { commitFrame, commitTooltip };\n}\n\ninterface InnerProps {\n\tdata: LiveLinePoint[];\n\tvalue: number;\n\tdataKey: string;\n\twindowSecs: number;\n\tnumXTicks: number;\n\tnowOffsetUnits: number;\n\texaggerate: boolean;\n\tlerpSpeed: number;\n\tmargin: Margin;\n\tpaused: boolean;\n\twidth: number;\n\theight: number;\n\tcontainerRef: React.RefObject<HTMLDivElement | null>;\n\tchildren: ReactNode;\n}\n\nfunction LiveLineChartInner(props: InnerProps) {\n\tconst { width, height, margin } = props;\n\tconst innerWidth = width - margin.left - margin.right;\n\tconst innerHeight = height - margin.top - margin.bottom;\n\n\tif (innerWidth <= 0 || innerHeight <= 0) {\n\t\treturn null;\n\t}\n\n\treturn <LiveLineChartCore {...props} />;\n}\n\nconst LiveLineChartCore = memo(function LiveLineChartCore({\n\tdata,\n\tvalue,\n\tdataKey,\n\twindowSecs,\n\tnumXTicks,\n\tnowOffsetUnits,\n\texaggerate,\n\tlerpSpeed,\n\tmargin,\n\tpaused,\n\twidth,\n\theight,\n\tcontainerRef,\n\tchildren,\n}: InnerProps) {\n\tconst windowMs = windowSecs * 1000;\n\tconst innerWidth = width - margin.left - margin.right;\n\tconst innerHeight = height - margin.top - margin.bottom;\n\n\t// ---- Animation state ----\n\tconst animRef = useRef<AnimFrame>({\n\t\tnow: Date.now(),\n\t\tyMin: 0,\n\t\tyMax: 100,\n\t\tdisplayValue: value,\n\t});\n\tconst [frame, setFrame] = useState<AnimFrame>({\n\t\tnow: Date.now(),\n\t\tyMin: 0,\n\t\tyMax: 100,\n\t\tdisplayValue: value,\n\t});\n\n\tconst pausedRef = useRef(paused);\n\tconst dataRef = useRef(data);\n\tconst dataKeyRef = useRef(dataKey);\n\tdataRef.current = data;\n\tdataKeyRef.current = dataKey;\n\n\tuseEffect(() => {\n\t\tpausedRef.current = paused;\n\t}, [paused]);\n\n\tconst targetRange = useMemo(\n\t\t() => computeTargetRange(data, value, exaggerate),\n\t\t[data, value, exaggerate],\n\t);\n\n\tconst lines = useMemo(() => extractLiveLineConfigs(children), [children]);\n\n\t// Leading offset (used in rAF for tooltip)\n\tconst xTickUnitMs = windowMs / (numXTicks - 1);\n\tconst leadingMs = nowOffsetUnits * xTickUnitMs;\n\n\t// ---- rAF loop: update frame and tooltip in one place to avoid effect→setState loops ----\n\tconst cursorXRef = useRef<number | null>(null);\n\tconst [tooltipData, setTooltipData] = useState<TooltipData | null>(null);\n\tconst lastFrameCommitRef = useRef(0);\n\tconst lastTooltipKeyRef = useRef<string | null>(null);\n\n\tuseEffect(() => {\n\t\tlet raf: number;\n\t\tconst tick = () => {\n\t\t\tconst next = nextAnimFrame(\n\t\t\t\tanimRef.current,\n\t\t\t\ttargetRange,\n\t\t\t\tvalue,\n\t\t\t\tlerpSpeed,\n\t\t\t\tpausedRef.current,\n\t\t\t);\n\t\t\tanimRef.current = next;\n\n\t\t\tconst nextTooltip = resolveLiveTooltip(\n\t\t\t\tcursorXRef.current,\n\t\t\t\tinnerWidth,\n\t\t\t\tinnerHeight,\n\t\t\t\tnext,\n\t\t\t\tleadingMs,\n\t\t\t\twindowMs,\n\t\t\t\txTickUnitMs,\n\t\t\t\tdataRef.current,\n\t\t\t\tdataKeyRef.current,\n\t\t\t);\n\t\t\tconst now = performance.now();\n\t\t\tconst tooltipKey = liveTooltipKey(nextTooltip, dataKeyRef.current);\n\t\t\tconst { commitFrame, commitTooltip } = shouldCommitLiveUpdates(\n\t\t\t\tnow,\n\t\t\t\tlastFrameCommitRef.current,\n\t\t\t\ttooltipKey,\n\t\t\t\tlastTooltipKeyRef.current,\n\t\t\t);\n\n\t\t\tif (!(commitFrame || commitTooltip)) {\n\t\t\t\traf = requestAnimationFrame(tick);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (commitFrame) {\n\t\t\t\tlastFrameCommitRef.current = now;\n\t\t\t}\n\t\t\tif (commitTooltip) {\n\t\t\t\tlastTooltipKeyRef.current = tooltipKey;\n\t\t\t}\n\n\t\t\tstartTransition(() => {\n\t\t\t\tif (commitFrame) {\n\t\t\t\t\tsetFrame(next);\n\t\t\t\t}\n\t\t\t\tif (commitTooltip) {\n\t\t\t\t\tsetTooltipData(nextTooltip);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\traf = requestAnimationFrame(tick);\n\t\t};\n\t\traf = requestAnimationFrame(tick);\n\t\treturn () => cancelAnimationFrame(raf);\n\t}, [\n\t\ttargetRange,\n\t\tvalue,\n\t\tlerpSpeed,\n\t\tleadingMs,\n\t\twindowMs,\n\t\txTickUnitMs,\n\t\tinnerWidth,\n\t\tinnerHeight,\n\t]);\n\n\tconst domainEndMs = frame.now + leadingMs;\n\n\t// ---- Scales ----\n\tconst xScale = useMemo(\n\t\t() =>\n\t\t\tscaleTime({\n\t\t\t\tdomain: [new Date(domainEndMs - windowMs), new Date(domainEndMs)],\n\t\t\t\trange: [0, innerWidth],\n\t\t\t}),\n\t\t[domainEndMs, windowMs, innerWidth],\n\t);\n\n\tconst yScale = useMemo(\n\t\t() =>\n\t\t\tscaleLinear({\n\t\t\t\tdomain: [frame.yMin, frame.yMax],\n\t\t\t\trange: [innerHeight, 0],\n\t\t\t\tnice: true,\n\t\t\t}),\n\t\t[frame.yMin, frame.yMax, innerHeight],\n\t);\n\n\t// ---- Build context-compatible data ----\n\t// Convert LiveLinePoint[] to Record<string, unknown>[] with 2 virtual points:\n\t// 1. At \"now\" — the live tip where the dot sits\n\t// 2. At \"now + 1 unit\" — a queued point that the line fades into\n\tconst contextData = useMemo(() => {\n\t\tconst windowStart = domainEndMs - windowMs;\n\t\tlet startIdx = bisectTime(data, windowStart / 1000, 0);\n\t\tif (startIdx > 0) {\n\t\t\tstartIdx--;\n\t\t}\n\t\tconst sliced = data.slice(startIdx);\n\t\tconst records: Record<string, unknown>[] = sliced.map((p) => ({\n\t\t\tdate: new Date(p.time * 1000),\n\t\t\t[dataKey]: p.value,\n\t\t}));\n\t\t// Virtual point 1: the \"now\" position (where the live dot sits)\n\t\trecords.push({\n\t\t\tdate: new Date(frame.now),\n\t\t\t[dataKey]: frame.displayValue,\n\t\t});\n\t\t// Virtual point 2: queued ahead (the line extends and fades into this)\n\t\trecords.push({\n\t\t\tdate: new Date(frame.now + xTickUnitMs),\n\t\t\t[dataKey]: frame.displayValue,\n\t\t});\n\t\treturn records;\n\t}, [\n\t\tdata,\n\t\tframe.now,\n\t\tframe.displayValue,\n\t\tdomainEndMs,\n\t\twindowMs,\n\t\tdataKey,\n\t\txTickUnitMs,\n\t]);\n\n\t// ---- X accessor ----\n\tconst xAccessor = useCallback(\n\t\t(d: Record<string, unknown>): Date =>\n\t\t\td.date instanceof Date ? d.date : new Date(d.date as number),\n\t\t[],\n\t);\n\n\tconst handleMouseMove = useCallback(\n\t\t(event: React.MouseEvent<SVGGElement>) => {\n\t\t\tconst coords = localPoint(event);\n\t\t\tif (!coords) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst x = coords.x - margin.left;\n\t\t\tcursorXRef.current = x >= 0 && x <= innerWidth ? x : null;\n\t\t},\n\t\t[margin.left, innerWidth],\n\t);\n\n\tconst handleMouseLeave = useCallback(() => {\n\t\tcursorXRef.current = null;\n\t\tlastTooltipKeyRef.current = null;\n\t\tsetTooltipData(null);\n\t}, []);\n\n\t// Date labels (for ChartTooltip's DateTicker — not used in live but needed for context)\n\tconst dateLabels = useMemo(\n\t\t() => contextData.map((d) => hmsTimeFmt.format(xAccessor(d))),\n\t\t[contextData, xAccessor],\n\t);\n\n\tconst columnWidth = useMemo(() => {\n\t\tif (contextData.length < 2) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn innerWidth / (contextData.length - 1);\n\t}, [innerWidth, contextData.length]);\n\n\tconst clipExcludedChildren: ReactElement[] = [];\n\tconst underlayChildren: ReactElement[] = [];\n\tconst seriesChildren: ReactElement[] = [];\n\tChildren.forEach(children, (child) => {\n\t\tif (!isValidElement(child)) {\n\t\t\treturn;\n\t\t}\n\t\tif (isClipExcludedComponent(child)) {\n\t\t\tclipExcludedChildren.push(child);\n\t\t} else if (isUnderlayComponent(child)) {\n\t\t\tunderlayChildren.push(child);\n\t\t} else {\n\t\t\tseriesChildren.push(child);\n\t\t}\n\t});\n\n\tconst referenceAreas = useMemo(\n\t\t() => extractReferenceAreaConfigs(children),\n\t\t[children],\n\t);\n\n\tconst contextValue = useMemo(\n\t\t() => ({\n\t\t\t...DEFAULT_CHART_LIFECYCLE,\n\t\t\tdata: contextData,\n\t\t\trenderData: contextData,\n\t\t\txScale,\n\t\t\tyScale,\n\t\t\tyScales: wrapSingleYScale(yScale),\n\t\t\twidth,\n\t\t\theight,\n\t\t\tinnerWidth,\n\t\t\tinnerHeight,\n\t\t\tmargin,\n\t\t\tcolumnWidth,\n\t\t\ttooltipData,\n\t\t\tsetTooltipData,\n\t\t\tcontainerRef,\n\t\t\tlines,\n\t\t\treferenceAreas,\n\t\t\tisLoaded: true,\n\t\t\tanimationDuration: 0,\n\t\t\txAccessor,\n\t\t\tdateLabels,\n\t\t}),\n\t\t[\n\t\t\tcontextData,\n\t\t\txScale,\n\t\t\tyScale,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tinnerWidth,\n\t\t\tinnerHeight,\n\t\t\tmargin,\n\t\t\tcolumnWidth,\n\t\t\ttooltipData,\n\t\t\tcontainerRef,\n\t\t\tlines,\n\t\t\treferenceAreas,\n\t\t\txAccessor,\n\t\t\tdateLabels,\n\t\t],\n\t);\n\n\treturn (\n\t\t<ChartProvider value={contextValue}>\n\t\t\t<svg\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tclassName=\"overflow-visible\"\n\t\t\t\theight={height}\n\t\t\t\twidth={width}\n\t\t\t>\n\t\t\t\t{/* biome-ignore lint/a11y/noStaticElementInteractions: SVG group for mouse tracking */}\n\t\t\t\t<g\n\t\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\t\tonMouseMove={handleMouseMove}\n\t\t\t\t\tstyle={{ cursor: \"crosshair\" }}\n\t\t\t\t\ttransform={`translate(${margin.left},${margin.top})`}\n\t\t\t\t>\n\t\t\t\t\t<rect\n\t\t\t\t\t\tfill=\"transparent\"\n\t\t\t\t\t\theight={innerHeight}\n\t\t\t\t\t\twidth={innerWidth}\n\t\t\t\t\t\tx={0}\n\t\t\t\t\t\ty={0}\n\t\t\t\t\t/>\n\t\t\t\t\t{clipExcludedChildren}\n\t\t\t\t\t{underlayChildren}\n\t\t\t\t\t{seriesChildren}\n\t\t\t\t</g>\n\t\t\t</svg>\n\t\t</ChartProvider>\n\t);\n});\n\n// ---------------------------------------------------------------------------\n// Public component\n// ---------------------------------------------------------------------------\n\nexport function LiveLineChart({\n\tdata,\n\tvalue,\n\tdataKey = \"value\",\n\twindow: windowSecs = 30,\n\tnumXTicks = 5,\n\tnowOffsetUnits = 0,\n\texaggerate = false,\n\tlerpSpeed = LERP_SPEED,\n\tmargin: marginProp,\n\tpaused = false,\n\tchildren,\n\tclassName,\n\tstyle,\n}: LiveLineChartProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst margin = { ...DEFAULT_MARGIN, ...marginProp };\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"relative w-full\", className)}\n\t\t\tref={containerRef}\n\t\t\tstyle={{ height: 300, touchAction: \"none\", ...style }}\n\t\t>\n\t\t\t<ParentSize debounceTime={10}>\n\t\t\t\t{({ width, height }) => (\n\t\t\t\t\t<LiveLineChartInner\n\t\t\t\t\t\tcontainerRef={containerRef}\n\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\tdataKey={dataKey}\n\t\t\t\t\t\texaggerate={exaggerate}\n\t\t\t\t\t\theight={height}\n\t\t\t\t\t\tlerpSpeed={lerpSpeed}\n\t\t\t\t\t\tmargin={margin}\n\t\t\t\t\t\tnowOffsetUnits={nowOffsetUnits}\n\t\t\t\t\t\tnumXTicks={numXTicks}\n\t\t\t\t\t\tpaused={paused}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\twindowSecs={windowSecs}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</LiveLineChartInner>\n\t\t\t\t)}\n\t\t\t</ParentSize>\n\t\t</div>\n\t);\n}\n\nexport default LiveLineChart;\n","\"use client\";\n\nimport { curveMonotoneX } from \"@visx/curve\";\nimport { AreaClosed, LinePath } from \"@visx/shape\";\nimport type { CurveFactory } from \"d3-shape\";\nimport { motion } from \"motion/react\";\nimport { useCallback, useId, useMemo } from \"react\";\nimport { chartCssVars, useChart } from \"./chart-context\";\n\nexport type Momentum = \"up\" | \"down\" | \"flat\";\n\nexport interface MomentumColors {\n\tup: string;\n\tdown: string;\n\tflat: string;\n}\n\nexport function detectMomentum(\n\tdata: Record<string, unknown>[],\n\tdataKey: string,\n\tlookback = 20,\n): Momentum {\n\tif (data.length < 5) {\n\t\treturn \"flat\";\n\t}\n\tconst start = Math.max(0, data.length - lookback);\n\tlet min = Number.POSITIVE_INFINITY;\n\tlet max = Number.NEGATIVE_INFINITY;\n\tfor (let i = start; i < data.length; i++) {\n\t\tconst v = data[i]?.[dataKey];\n\t\tif (typeof v === \"number\") {\n\t\t\tif (v < min) {\n\t\t\t\tmin = v;\n\t\t\t}\n\t\t\tif (v > max) {\n\t\t\t\tmax = v;\n\t\t\t}\n\t\t}\n\t}\n\tconst range = max - min;\n\tif (range === 0) {\n\t\treturn \"flat\";\n\t}\n\tconst tailStart = Math.max(start, data.length - 5);\n\tconst first = (data[tailStart]?.[dataKey] as number) ?? 0;\n\tconst last = (data.at(-1)?.[dataKey] as number) ?? 0;\n\tconst delta = last - first;\n\tconst threshold = range * 0.12;\n\tif (delta > threshold) {\n\t\treturn \"up\";\n\t}\n\tif (delta < -threshold) {\n\t\treturn \"down\";\n\t}\n\treturn \"flat\";\n}\n\nexport interface LiveLineProps {\n\t/** Key in data to use for y values */\n\tdataKey: string;\n\t/** Stroke color. Default: var(--chart-line-primary) */\n\tstroke?: string;\n\t/** Stroke width. Default: 2 */\n\tstrokeWidth?: number;\n\t/** Curve function. Default: curveMonotoneX */\n\tcurve?: CurveFactory;\n\t/** Show gradient fill under the curve. Default: true */\n\tfill?: boolean;\n\t/** Show pulsing live dot at the right edge. Default: true */\n\tpulse?: boolean;\n\t/** Radius of the live dot. Default: 4 */\n\tdotSize?: number;\n\t/** Show value badge pill at the live tip. Default: true */\n\tbadge?: boolean;\n\t/** Value label formatter for the badge */\n\tformatValue?: (v: number) => string;\n\t/**\n\t * When set, the line/fill color changes based on momentum direction.\n\t * Overrides `stroke` for the line and fill (dot always uses momentum colors).\n\t */\n\tmomentumColors?: MomentumColors;\n}\n\nLiveLine.displayName = \"LiveLine\";\n\nexport function LiveLine({\n\tdataKey,\n\tstroke = chartCssVars.linePrimary,\n\tstrokeWidth = 2,\n\tcurve = curveMonotoneX,\n\tfill = true,\n\tpulse = true,\n\tdotSize = 4,\n\tbadge = true,\n\tformatValue = (v: number) => v.toFixed(2),\n\tmomentumColors,\n}: LiveLineProps) {\n\tconst {\n\t\tdata,\n\t\txScale,\n\t\tyScale,\n\t\tinnerWidth,\n\t\tinnerHeight,\n\t\txAccessor,\n\t\tlines,\n\t\ttooltipData,\n\t} = useChart();\n\n\tconst isScrubbing = tooltipData !== null;\n\n\tconst uid = useId();\n\tconst gradientId = `live-line-grad-${uid}`;\n\tconst areaGradientId = `live-area-grad-${uid}`;\n\tconst fadeId = `live-fade-${uid}`;\n\tconst fadeMaskId = `live-fade-mask-${uid}`;\n\n\tconst getX = useCallback(\n\t\t(d: Record<string, unknown>) => xScale(xAccessor(d)) ?? 0,\n\t\t[xScale, xAccessor],\n\t);\n\n\tconst getY = useCallback(\n\t\t(d: Record<string, unknown>) => {\n\t\t\tconst v = d[dataKey];\n\t\t\treturn typeof v === \"number\" ? (yScale(v) ?? 0) : 0;\n\t\t},\n\t\t[dataKey, yScale],\n\t);\n\n\t// The second-to-last point is the \"now\" position (live tip).\n\t// The last point is the queued future point for the fade-out zone.\n\tconst nowPoint = data.length >= 2 ? data.at(-2) : data.at(-1);\n\tconst liveValue =\n\t\tnowPoint && typeof nowPoint[dataKey] === \"number\"\n\t\t\t? (nowPoint[dataKey] as number)\n\t\t\t: 0;\n\n\tconst liveDotX = nowPoint ? (xScale(xAccessor(nowPoint)) ?? 0) : innerWidth;\n\tconst liveDotY = yScale(liveValue) ?? 0;\n\n\tconst momentum = useMemo(\n\t\t() => detectMomentum(data, dataKey),\n\t\t[data, dataKey],\n\t);\n\n\tconst defaultMomentumColors: MomentumColors = {\n\t\tup: \"var(--chart-1)\",\n\t\tdown: \"var(--chart-5)\",\n\t\tflat: stroke,\n\t};\n\tconst dotMomentumColors = momentumColors ?? defaultMomentumColors;\n\tconst dotColor = dotMomentumColors[momentum];\n\n\t// Find the line config for this dataKey to get the resolved stroke\n\tconst lineConfig = lines.find((l) => l.dataKey === dataKey);\n\tconst baseStroke = lineConfig?.stroke ?? stroke;\n\tconst resolvedStroke = momentumColors ? momentumColors[momentum] : baseStroke;\n\n\treturn (\n\t\t<>\n\t\t\t<defs>\n\t\t\t\t<linearGradient id={gradientId} x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n\t\t\t\t\t<stop offset=\"0%\" stopColor={resolvedStroke} stopOpacity={1} />\n\t\t\t\t\t<stop offset=\"100%\" stopColor={resolvedStroke} stopOpacity={0.6} />\n\t\t\t\t</linearGradient>\n\t\t\t\t<linearGradient id={areaGradientId} x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n\t\t\t\t\t<stop offset=\"0%\" stopColor={resolvedStroke} stopOpacity={0.1} />\n\t\t\t\t\t<stop offset=\"100%\" stopColor={resolvedStroke} stopOpacity={0} />\n\t\t\t\t</linearGradient>\n\t\t\t\t<linearGradient id={fadeId} x1=\"0\" x2=\"1\" y1=\"0\" y2=\"0\">\n\t\t\t\t\t<stop offset=\"0%\" stopColor=\"white\" stopOpacity={0} />\n\t\t\t\t\t<stop offset=\"4%\" stopColor=\"white\" stopOpacity={1} />\n\t\t\t\t\t{liveDotX < innerWidth - 1 ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\toffset={`${(liveDotX / innerWidth) * 100}%`}\n\t\t\t\t\t\t\t\tstopColor=\"white\"\n\t\t\t\t\t\t\t\tstopOpacity={1}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<stop offset=\"100%\" stopColor=\"white\" stopOpacity={0} />\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<stop offset=\"100%\" stopColor=\"white\" stopOpacity={1} />\n\t\t\t\t\t)}\n\t\t\t\t</linearGradient>\n\t\t\t\t<mask id={fadeMaskId}>\n\t\t\t\t\t<rect\n\t\t\t\t\t\tfill={`url(#${fadeId})`}\n\t\t\t\t\t\theight={innerHeight + 40}\n\t\t\t\t\t\twidth={innerWidth}\n\t\t\t\t\t\tx={0}\n\t\t\t\t\t\ty={-20}\n\t\t\t\t\t/>\n\t\t\t\t</mask>\n\t\t\t</defs>\n\n\t\t\t{/* Area fill */}\n\t\t\t{fill && data.length > 1 && (\n\t\t\t\t<g mask={`url(#${fadeMaskId})`}>\n\t\t\t\t\t<AreaClosed\n\t\t\t\t\t\tcurve={curve}\n\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\tfill={`url(#${areaGradientId})`}\n\t\t\t\t\t\tstrokeWidth={0}\n\t\t\t\t\t\tx={getX}\n\t\t\t\t\t\ty={getY}\n\t\t\t\t\t\tyScale={yScale}\n\t\t\t\t\t/>\n\t\t\t\t</g>\n\t\t\t)}\n\n\t\t\t{/* Line */}\n\t\t\t{data.length > 1 && (\n\t\t\t\t<g mask={`url(#${fadeMaskId})`}>\n\t\t\t\t\t<LinePath\n\t\t\t\t\t\tcurve={curve}\n\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\tstroke={`url(#${gradientId})`}\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\t\tx={getX}\n\t\t\t\t\t\ty={getY}\n\t\t\t\t\t/>\n\t\t\t\t</g>\n\t\t\t)}\n\n\t\t\t{/* Dashed horizontal line at current value */}\n\t\t\t<line\n\t\t\t\topacity={0.25}\n\t\t\t\tstroke={resolvedStroke}\n\t\t\t\tstrokeDasharray=\"4,4\"\n\t\t\t\tstrokeWidth={1}\n\t\t\t\tx1={0}\n\t\t\t\tx2={innerWidth}\n\t\t\t\ty1={liveDotY}\n\t\t\t\ty2={liveDotY}\n\t\t\t/>\n\n\t\t\t{/* Live indicator (dot + badge) — dims when crosshair is active */}\n\t\t\t<motion.g\n\t\t\t\tanimate={{ opacity: isScrubbing ? 0.25 : 1 }}\n\t\t\t\ttransition={{ duration: 0.3, ease: \"easeInOut\" }}\n\t\t\t>\n\t\t\t\t{/* Pulsing dot */}\n\t\t\t\t<g>\n\t\t\t\t\t{pulse && (\n\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\tcx={liveDotX}\n\t\t\t\t\t\t\tcy={liveDotY}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\topacity={0.4}\n\t\t\t\t\t\t\tr={dotSize * 2}\n\t\t\t\t\t\t\tstroke={dotColor}\n\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\tattributeName=\"r\"\n\t\t\t\t\t\t\t\tdur=\"1.5s\"\n\t\t\t\t\t\t\t\tfrom={String(dotSize)}\n\t\t\t\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\t\t\t\tto={String(dotSize * 3.5)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\tattributeName=\"opacity\"\n\t\t\t\t\t\t\t\tdur=\"1.5s\"\n\t\t\t\t\t\t\t\tfrom=\"0.5\"\n\t\t\t\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\t\t\t\tto=\"0\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</circle>\n\t\t\t\t\t)}\n\t\t\t\t\t<circle\n\t\t\t\t\t\tcx={liveDotX}\n\t\t\t\t\t\tcy={liveDotY}\n\t\t\t\t\t\tfill={dotColor}\n\t\t\t\t\t\topacity={0.1}\n\t\t\t\t\t\tr={dotSize + 2}\n\t\t\t\t\t/>\n\t\t\t\t\t<circle\n\t\t\t\t\t\tcx={liveDotX}\n\t\t\t\t\t\tcy={liveDotY}\n\t\t\t\t\t\tfill={dotColor}\n\t\t\t\t\t\tr={dotSize}\n\t\t\t\t\t\tstroke={chartCssVars.background}\n\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t/>\n\t\t\t\t</g>\n\n\t\t\t\t{/* Badge — use popover vars so text is never white-on-white */}\n\t\t\t\t{badge && (\n\t\t\t\t\t<g transform={`translate(${liveDotX + 12},${liveDotY})`}>\n\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\tfill=\"var(--popover)\"\n\t\t\t\t\t\t\theight={24}\n\t\t\t\t\t\t\topacity={0.95}\n\t\t\t\t\t\t\trx={6}\n\t\t\t\t\t\t\twidth={formatValue(liveValue).length * 7.5 + 16}\n\t\t\t\t\t\t\tx={0}\n\t\t\t\t\t\t\ty={-12}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<text\n\t\t\t\t\t\t\tfill=\"var(--popover-foreground)\"\n\t\t\t\t\t\t\tfontFamily=\"SF Mono, Menlo, Monaco, monospace\"\n\t\t\t\t\t\t\tfontSize={11}\n\t\t\t\t\t\t\tfontWeight={500}\n\t\t\t\t\t\t\tx={8}\n\t\t\t\t\t\t\ty={4}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{formatValue(liveValue)}\n\t\t\t\t\t\t</text>\n\t\t\t\t\t</g>\n\t\t\t\t)}\n\t\t\t</motion.g>\n\t\t</>\n\t);\n}\n\nexport default LiveLine;\n","\"use client\";\n\nimport type { MotionValue } from \"motion/react\";\nimport { useEffect, useState } from \"react\";\n\n/**\n * Returns true once a mount-progress MotionValue reaches 1.\n * Use to swap animated MotionValue-driven props for static values after\n * enter completes — drops per-frame subscriptions during pan/hover.\n */\nexport function useEnterComplete(mountProgress: MotionValue<number>): boolean {\n\tconst [complete, setComplete] = useState(() => mountProgress.get() >= 1);\n\n\tuseEffect(() => {\n\t\tif (mountProgress.get() >= 1) {\n\t\t\tsetComplete(true);\n\t\t\treturn;\n\t\t}\n\n\t\treturn mountProgress.on(\"change\", (value) => {\n\t\t\tif (value >= 1) {\n\t\t\t\tsetComplete(true);\n\t\t\t}\n\t\t});\n\t}, [mountProgress]);\n\n\treturn complete;\n}\n","\"use client\";\n\nimport { animate, type Transition, useMotionValue } from \"motion/react\";\nimport { useEffect, useRef } from \"react\";\nimport { DEFAULT_CHART_ENTER_TRANSITION } from \"./animation\";\n\n/** Drives 0→1 enter progress using the studio motion transition (spring or tween). */\nexport function useMountProgress(\n\tenterTransition: Transition | undefined,\n\tdelaySeconds: number,\n\treplayKey: number | string,\n) {\n\tconst progress = useMotionValue(0);\n\tconst transitionRef = useRef(enterTransition);\n\ttransitionRef.current = enterTransition;\n\n\t// replayKey intentionally retriggers enter when motion settings change\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: replayKey\n\tuseEffect(() => {\n\t\tprogress.set(0);\n\t\tconst controls = animate(progress, 1, {\n\t\t\t...(transitionRef.current ?? DEFAULT_CHART_ENTER_TRANSITION),\n\t\t\tdelay: delaySeconds,\n\t\t});\n\t\treturn () => controls.stop();\n\t}, [delaySeconds, replayKey, progress]);\n\n\treturn progress;\n}\n","\"use client\";\n\nimport type { Transition } from \"motion/react\";\nimport { motion, useTransform } from \"motion/react\";\nimport {\n\ttype CSSProperties,\n\ttype ReactNode,\n\tuseCallback,\n\tuseEffect,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useEnterComplete } from \"./use-enter-complete\";\nimport { useMountProgress } from \"./use-mount-progress\";\n\n// ─── Public types ───────────────────────────────────────────────────\n\nexport interface FunnelGradientStop {\n\toffset: string | number;\n\tcolor: string;\n}\n\nexport interface FunnelStage {\n\tlabel: string;\n\tvalue: number;\n\tdisplayValue?: string;\n\t/** Override the chart-level color for this segment */\n\tcolor?: string;\n\t/**\n\t * Apply a linear gradient to this segment.\n\t * Provide an array of color stops, e.g. `[{ offset: \"0%\", color: \"#8B5CF6\" }, { offset: \"100%\", color: \"#3B82F6\" }]`.\n\t * When set, this takes priority over the segment and chart-level `color` for the innermost ring.\n\t * Outer halo rings use the first stop color as their solid color.\n\t */\n\tgradient?: FunnelGradientStop[];\n}\n\nexport interface FunnelChartProps {\n\tdata: FunnelStage[];\n\torientation?: \"horizontal\" | \"vertical\";\n\tcolor?: string;\n\tlayers?: number;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n\tshowPercentage?: boolean;\n\tshowValues?: boolean;\n\tshowLabels?: boolean;\n\t/** Controlled hover state — index of the hovered segment */\n\thoveredIndex?: number | null;\n\t/** Callback when hover state changes */\n\tonHoverChange?: (index: number | null) => void;\n\tformatPercentage?: (pct: number) => string;\n\tformatValue?: (value: number) => string;\n\t/** Stagger delay between segments in seconds. Default 0.12 */\n\tstaggerDelay?: number;\n\t/** Framer Motion transition for segment enter animation */\n\tenterTransition?: Transition;\n\t/** Gap between segments in pixels. Default 4 */\n\tgap?: number;\n\t/**\n\t * Render a visx pattern definition. Receives a unique `id` string per segment\n\t * and the resolved `color`. Return a `<PatternLines>` (or any visx pattern)\n\t * inside an SVG `<defs>`. The component will use `fill=\"url(#id)\"` on the\n\t * innermost ring while keeping outer halo rings as solid color.\n\t */\n\trenderPattern?: (id: string, color: string) => ReactNode;\n\t/** Edge style for the funnel segments. Default \"curved\" */\n\tedges?: \"curved\" | \"straight\";\n\t/**\n\t * Controls how segment labels (value, percentage, stage name) are arranged.\n\t * - \"spread\": Value/percentage/label are spread apart (top/center/bottom for horizontal,\n\t * left/center/right for vertical). This is the default.\n\t * - \"grouped\": All label items stack together in a tight group.\n\t *\n\t * When \"grouped\", use `labelOrientation` and `labelAlign` for full control.\n\t */\n\tlabelLayout?: \"spread\" | \"grouped\";\n\t/**\n\t * Stack direction of the label group. Only applies when `labelLayout=\"grouped\"`.\n\t * - \"vertical\": Items stack top-to-bottom. Default for horizontal funnels.\n\t * - \"horizontal\": Items stack left-to-right. Default for vertical funnels.\n\t */\n\tlabelOrientation?: \"vertical\" | \"horizontal\";\n\t/**\n\t * Where the label group sits within the segment cell.\n\t * - \"center\" (default), \"start\", \"end\"\n\t * For horizontal funnel: start=top, end=bottom.\n\t * For vertical funnel: start=left, end=right.\n\t */\n\tlabelAlign?: \"center\" | \"start\" | \"end\";\n\t/** Grid configuration. Pass `true` for default bands + lines, or an object for fine control. */\n\tgrid?:\n\t\t| boolean\n\t\t| {\n\t\t\t\t/** Show alternating background bands behind each segment. Default true */\n\t\t\t\tbands?: boolean;\n\t\t\t\t/** Color of the background bands. Default \"var(--color-muted)\" */\n\t\t\t\tbandColor?: string;\n\t\t\t\t/** Show grid lines at each gap between segments. Default true */\n\t\t\t\tlines?: boolean;\n\t\t\t\t/** Color of the grid lines. Default \"var(--chart-grid)\" */\n\t\t\t\tlineColor?: string;\n\t\t\t\t/** Opacity of the grid lines. Default 1 */\n\t\t\t\tlineOpacity?: number;\n\t\t\t\t/** Width of the grid lines in pixels. Default 1 */\n\t\t\t\tlineWidth?: number;\n\t\t };\n}\n\n// ─── Defaults ───────────────────────────────────────────────────────\n\nimport { intFmt } from \"./chart-formatters\";\n\nconst fmtPct = (p: number) => `${Math.round(p)}%`;\nconst fmtVal = intFmt;\n\n// ─── SVG helpers ────────────────────────────────────────────────────\n\n/**\n * Builds a single segment path for one stage in the funnel.\n * Each segment is a smooth trapezoid-like shape transitioning from\n * the height of the current norm to the next norm.\n */\nfunction hSegmentPath(\n\tnormStart: number,\n\tnormEnd: number,\n\tsegW: number,\n\tH: number,\n\tlayerScale: number,\n\tstraight = false,\n) {\n\tconst my = H / 2;\n\tconst h0 = normStart * H * 0.44 * layerScale;\n\tconst h1 = normEnd * H * 0.44 * layerScale;\n\n\tif (straight) {\n\t\treturn `M 0 ${my - h0} L ${segW} ${my - h1} L ${segW} ${my + h1} L 0 ${my + h0} Z`;\n\t}\n\n\tconst cx = segW * 0.55;\n\tconst top = `M 0 ${my - h0} C ${cx} ${my - h0}, ${segW - cx} ${my - h1}, ${segW} ${my - h1}`;\n\tconst bot = `L ${segW} ${my + h1} C ${segW - cx} ${my + h1}, ${cx} ${my + h0}, 0 ${my + h0}`;\n\treturn `${top} ${bot} Z`;\n}\n\nfunction vSegmentPath(\n\tnormStart: number,\n\tnormEnd: number,\n\tsegH: number,\n\tW: number,\n\tlayerScale: number,\n\tstraight = false,\n) {\n\tconst mx = W / 2;\n\tconst w0 = normStart * W * 0.44 * layerScale;\n\tconst w1 = normEnd * W * 0.44 * layerScale;\n\n\tif (straight) {\n\t\treturn `M ${mx - w0} 0 L ${mx - w1} ${segH} L ${mx + w1} ${segH} L ${mx + w0} 0 Z`;\n\t}\n\n\tconst cy = segH * 0.55;\n\tconst left = `M ${mx - w0} 0 C ${mx - w0} ${cy}, ${mx - w1} ${segH - cy}, ${mx - w1} ${segH}`;\n\tconst right = `L ${mx + w1} ${segH} C ${mx + w1} ${segH - cy}, ${mx + w0} ${cy}, ${mx + w0} 0`;\n\treturn `${left} ${right} Z`;\n}\n\n// ─── Animated Segment ───────────────────────────────────────────────\n\nfunction HRing({\n\td,\n\tcolor,\n\tfill,\n\topacity,\n\thovered,\n\tringIndex,\n\ttotalRings,\n}: {\n\td: string;\n\tcolor: string;\n\tfill?: string;\n\topacity: number;\n\thovered: boolean;\n\tringIndex: number;\n\ttotalRings: number;\n}) {\n\tconst extraScale = 1 + (ringIndex / Math.max(totalRings - 1, 1)) * 0.12;\n\n\treturn (\n\t\t<motion.path\n\t\t\tanimate={{ scaleY: hovered ? extraScale : 1 }}\n\t\t\td={d}\n\t\t\tfill={fill ?? color}\n\t\t\topacity={opacity}\n\t\t\tstyle={{ transformOrigin: \"center center\" }}\n\t\t\ttransition={{\n\t\t\t\ttype: \"spring\",\n\t\t\t\tstiffness: 300 - ringIndex * 60,\n\t\t\t\tdamping: 24 - ringIndex * 3,\n\t\t\t}}\n\t\t/>\n\t);\n}\n\nfunction HSegment({\n\tindex,\n\tnormStart,\n\tnormEnd,\n\tsegW,\n\tfullH,\n\tcolor,\n\tlayers,\n\tstaggerDelay,\n\tenterTransition,\n\thovered,\n\tdimmed,\n\trenderPattern,\n\tstraight,\n\tgradientStops,\n}: {\n\tindex: number;\n\tnormStart: number;\n\tnormEnd: number;\n\tsegW: number;\n\tfullH: number;\n\tcolor: string;\n\tlayers: number;\n\tstaggerDelay: number;\n\tenterTransition?: Transition;\n\thovered: boolean;\n\tdimmed: boolean;\n\trenderPattern?: (id: string, color: string) => ReactNode;\n\tstraight: boolean;\n\tgradientStops?: FunnelGradientStop[];\n}) {\n\tconst patternId = `funnel-h-pattern-${index}`;\n\tconst gradientId = `funnel-h-grad-${index}`;\n\tconst mountProgress = useMountProgress(\n\t\tenterTransition,\n\t\tindex * staggerDelay,\n\t\tindex,\n\t);\n\tconst enterComplete = useEnterComplete(mountProgress);\n\tconst entranceScaleX = useTransform(mountProgress, [0, 1], [0, 1]);\n\tconst entranceScaleY = useTransform(mountProgress, [0, 1], [0, 1]);\n\n\tconst rings = Array.from({ length: layers }, (_, l) => {\n\t\tconst scale = 1 - (l / layers) * 0.35;\n\t\tconst opacity = 0.18 + (l / (layers - 1 || 1)) * 0.65;\n\t\treturn {\n\t\t\td: hSegmentPath(normStart, normEnd, segW, fullH, scale, straight),\n\t\t\topacity,\n\t\t};\n\t});\n\n\treturn (\n\t\t<motion.div\n\t\t\tanimate={{ opacity: dimmed ? 0.4 : 1 }}\n\t\t\tclassName=\"pointer-events-none relative shrink-0 overflow-visible\"\n\t\t\tstyle={{\n\t\t\t\twidth: segW,\n\t\t\t\theight: fullH,\n\t\t\t\tzIndex: hovered ? 10 : 1,\n\t\t\t}}\n\t\t\ttransition={{ opacity: { duration: 0.15 } }}\n\t\t>\n\t\t\t{enterComplete ? (\n\t\t\t\t<div className=\"absolute inset-0 overflow-visible\">\n\t\t\t\t\t<svg\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tclassName=\"absolute inset-0 h-full w-full overflow-visible\"\n\t\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t\tviewBox={`0 0 ${segW} ${fullH}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<defs>\n\t\t\t\t\t\t\t{gradientStops && (\n\t\t\t\t\t\t\t\t<linearGradient id={gradientId} x1=\"0\" x2=\"1\" y1=\"0\" y2=\"0\">\n\t\t\t\t\t\t\t\t\t{gradientStops.map((stop) => (\n\t\t\t\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\t\t\t\tkey={`${stop.offset}-${stop.color}`}\n\t\t\t\t\t\t\t\t\t\t\toffset={\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof stop.offset === \"number\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `${stop.offset * 100}%`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: stop.offset\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tstopColor={stop.color}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{renderPattern?.(patternId, color)}\n\t\t\t\t\t\t</defs>\n\t\t\t\t\t\t{rings.map((r, i) => {\n\t\t\t\t\t\t\tconst isInnermost = i === rings.length - 1;\n\t\t\t\t\t\t\tlet ringFill: string | undefined;\n\t\t\t\t\t\t\tif (isInnermost && renderPattern) {\n\t\t\t\t\t\t\t\tringFill = `url(#${patternId})`;\n\t\t\t\t\t\t\t} else if (isInnermost && gradientStops) {\n\t\t\t\t\t\t\t\tringFill = `url(#${gradientId})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst ringKey = `h-ring-${r.opacity.toFixed(2)}`;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<HRing\n\t\t\t\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\t\t\t\td={r.d}\n\t\t\t\t\t\t\t\t\tfill={ringFill}\n\t\t\t\t\t\t\t\t\thovered={hovered}\n\t\t\t\t\t\t\t\t\tkey={ringKey}\n\t\t\t\t\t\t\t\t\topacity={r.opacity}\n\t\t\t\t\t\t\t\t\tringIndex={i}\n\t\t\t\t\t\t\t\t\ttotalRings={layers}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</svg>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName=\"absolute inset-0 overflow-visible\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tscaleX: entranceScaleX,\n\t\t\t\t\t\tscaleY: entranceScaleY,\n\t\t\t\t\t\ttransformOrigin: \"left center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tclassName=\"absolute inset-0 h-full w-full overflow-visible\"\n\t\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t\tviewBox={`0 0 ${segW} ${fullH}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<defs>\n\t\t\t\t\t\t\t{gradientStops && (\n\t\t\t\t\t\t\t\t<linearGradient id={gradientId} x1=\"0\" x2=\"1\" y1=\"0\" y2=\"0\">\n\t\t\t\t\t\t\t\t\t{gradientStops.map((stop) => (\n\t\t\t\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\t\t\t\tkey={`${stop.offset}-${stop.color}`}\n\t\t\t\t\t\t\t\t\t\t\toffset={\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof stop.offset === \"number\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `${stop.offset * 100}%`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: stop.offset\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tstopColor={stop.color}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{renderPattern?.(patternId, color)}\n\t\t\t\t\t\t</defs>\n\t\t\t\t\t\t{rings.map((r, i) => {\n\t\t\t\t\t\t\tconst isInnermost = i === rings.length - 1;\n\t\t\t\t\t\t\tlet ringFill: string | undefined;\n\t\t\t\t\t\t\tif (isInnermost && renderPattern) {\n\t\t\t\t\t\t\t\tringFill = `url(#${patternId})`;\n\t\t\t\t\t\t\t} else if (isInnermost && gradientStops) {\n\t\t\t\t\t\t\t\tringFill = `url(#${gradientId})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst ringKey = `h-ring-${r.opacity.toFixed(2)}`;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<HRing\n\t\t\t\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\t\t\t\td={r.d}\n\t\t\t\t\t\t\t\t\tfill={ringFill}\n\t\t\t\t\t\t\t\t\thovered={hovered}\n\t\t\t\t\t\t\t\t\tkey={ringKey}\n\t\t\t\t\t\t\t\t\topacity={r.opacity}\n\t\t\t\t\t\t\t\t\tringIndex={i}\n\t\t\t\t\t\t\t\t\ttotalRings={layers}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</svg>\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</motion.div>\n\t);\n}\n\nfunction VRing({\n\td,\n\tcolor,\n\tfill,\n\topacity,\n\thovered,\n\tringIndex,\n\ttotalRings,\n}: {\n\td: string;\n\tcolor: string;\n\tfill?: string;\n\topacity: number;\n\thovered: boolean;\n\tringIndex: number;\n\ttotalRings: number;\n}) {\n\tconst extraScale = 1 + (ringIndex / Math.max(totalRings - 1, 1)) * 0.12;\n\n\treturn (\n\t\t<motion.path\n\t\t\tanimate={{ scaleX: hovered ? extraScale : 1 }}\n\t\t\td={d}\n\t\t\tfill={fill ?? color}\n\t\t\topacity={opacity}\n\t\t\tstyle={{ transformOrigin: \"center center\" }}\n\t\t\ttransition={{\n\t\t\t\ttype: \"spring\",\n\t\t\t\tstiffness: 300 - ringIndex * 60,\n\t\t\t\tdamping: 24 - ringIndex * 3,\n\t\t\t}}\n\t\t/>\n\t);\n}\n\nfunction VSegment({\n\tindex,\n\tnormStart,\n\tnormEnd,\n\tsegH,\n\tfullW,\n\tcolor,\n\tlayers,\n\tstaggerDelay,\n\tenterTransition,\n\thovered,\n\tdimmed,\n\trenderPattern,\n\tstraight,\n\tgradientStops,\n}: {\n\tindex: number;\n\tnormStart: number;\n\tnormEnd: number;\n\tsegH: number;\n\tfullW: number;\n\tcolor: string;\n\tlayers: number;\n\tstaggerDelay: number;\n\tenterTransition?: Transition;\n\thovered: boolean;\n\tdimmed: boolean;\n\trenderPattern?: (id: string, color: string) => ReactNode;\n\tstraight: boolean;\n\tgradientStops?: FunnelGradientStop[];\n}) {\n\tconst patternId = `funnel-v-pattern-${index}`;\n\tconst gradientId = `funnel-v-grad-${index}`;\n\tconst mountProgress = useMountProgress(\n\t\tenterTransition,\n\t\tindex * staggerDelay,\n\t\tindex,\n\t);\n\tconst enterComplete = useEnterComplete(mountProgress);\n\tconst entranceScaleY = useTransform(mountProgress, [0, 1], [0, 1]);\n\tconst entranceScaleX = useTransform(mountProgress, [0, 1], [0, 1]);\n\n\tconst rings = Array.from({ length: layers }, (_, l) => {\n\t\tconst scale = 1 - (l / layers) * 0.35;\n\t\tconst opacity = 0.18 + (l / (layers - 1 || 1)) * 0.65;\n\t\treturn {\n\t\t\td: vSegmentPath(normStart, normEnd, segH, fullW, scale, straight),\n\t\t\topacity,\n\t\t};\n\t});\n\n\treturn (\n\t\t<motion.div\n\t\t\tanimate={{ opacity: dimmed ? 0.4 : 1 }}\n\t\t\tclassName=\"pointer-events-none relative shrink-0 overflow-visible\"\n\t\t\tstyle={{\n\t\t\t\twidth: fullW,\n\t\t\t\theight: segH,\n\t\t\t\tzIndex: hovered ? 10 : 1,\n\t\t\t}}\n\t\t\ttransition={{ opacity: { duration: 0.15 } }}\n\t\t>\n\t\t\t{enterComplete ? (\n\t\t\t\t<div className=\"absolute inset-0 overflow-visible\">\n\t\t\t\t\t<svg\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tclassName=\"absolute inset-0 h-full w-full overflow-visible\"\n\t\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t\tviewBox={`0 0 ${fullW} ${segH}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<defs>\n\t\t\t\t\t\t\t{gradientStops && (\n\t\t\t\t\t\t\t\t<linearGradient id={gradientId} x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n\t\t\t\t\t\t\t\t\t{gradientStops.map((stop) => (\n\t\t\t\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\t\t\t\tkey={`${stop.offset}-${stop.color}`}\n\t\t\t\t\t\t\t\t\t\t\toffset={\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof stop.offset === \"number\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `${stop.offset * 100}%`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: stop.offset\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tstopColor={stop.color}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{renderPattern?.(patternId, color)}\n\t\t\t\t\t\t</defs>\n\t\t\t\t\t\t{rings.map((r, i) => {\n\t\t\t\t\t\t\tconst isInnermost = i === rings.length - 1;\n\t\t\t\t\t\t\tlet ringFill: string | undefined;\n\t\t\t\t\t\t\tif (isInnermost && renderPattern) {\n\t\t\t\t\t\t\t\tringFill = `url(#${patternId})`;\n\t\t\t\t\t\t\t} else if (isInnermost && gradientStops) {\n\t\t\t\t\t\t\t\tringFill = `url(#${gradientId})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst ringKey = `v-ring-${r.opacity.toFixed(2)}`;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<VRing\n\t\t\t\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\t\t\t\td={r.d}\n\t\t\t\t\t\t\t\t\tfill={ringFill}\n\t\t\t\t\t\t\t\t\thovered={hovered}\n\t\t\t\t\t\t\t\t\tkey={ringKey}\n\t\t\t\t\t\t\t\t\topacity={r.opacity}\n\t\t\t\t\t\t\t\t\tringIndex={i}\n\t\t\t\t\t\t\t\t\ttotalRings={layers}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</svg>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName=\"absolute inset-0 overflow-visible\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tscaleY: entranceScaleY,\n\t\t\t\t\t\tscaleX: entranceScaleX,\n\t\t\t\t\t\ttransformOrigin: \"center top\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tclassName=\"absolute inset-0 h-full w-full overflow-visible\"\n\t\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t\tviewBox={`0 0 ${fullW} ${segH}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<defs>\n\t\t\t\t\t\t\t{gradientStops && (\n\t\t\t\t\t\t\t\t<linearGradient id={gradientId} x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n\t\t\t\t\t\t\t\t\t{gradientStops.map((stop) => (\n\t\t\t\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\t\t\t\tkey={`${stop.offset}-${stop.color}`}\n\t\t\t\t\t\t\t\t\t\t\toffset={\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof stop.offset === \"number\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `${stop.offset * 100}%`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: stop.offset\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tstopColor={stop.color}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{renderPattern?.(patternId, color)}\n\t\t\t\t\t\t</defs>\n\t\t\t\t\t\t{rings.map((r, i) => {\n\t\t\t\t\t\t\tconst isInnermost = i === rings.length - 1;\n\t\t\t\t\t\t\tlet ringFill: string | undefined;\n\t\t\t\t\t\t\tif (isInnermost && renderPattern) {\n\t\t\t\t\t\t\t\tringFill = `url(#${patternId})`;\n\t\t\t\t\t\t\t} else if (isInnermost && gradientStops) {\n\t\t\t\t\t\t\t\tringFill = `url(#${gradientId})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst ringKey = `v-ring-${r.opacity.toFixed(2)}`;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<VRing\n\t\t\t\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\t\t\t\td={r.d}\n\t\t\t\t\t\t\t\t\tfill={ringFill}\n\t\t\t\t\t\t\t\t\thovered={hovered}\n\t\t\t\t\t\t\t\t\tkey={ringKey}\n\t\t\t\t\t\t\t\t\topacity={r.opacity}\n\t\t\t\t\t\t\t\t\tringIndex={i}\n\t\t\t\t\t\t\t\t\ttotalRings={layers}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</svg>\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</motion.div>\n\t);\n}\n\n// ─── Label overlay ──────────────────────────────────────────────────\n\nfunction SegmentLabel({\n\tstage,\n\tpct,\n\tisHorizontal,\n\tshowValues,\n\tshowPercentage,\n\tshowLabels,\n\tformatPercentage,\n\tformatValue,\n\tindex,\n\tstaggerDelay,\n\tlayout = \"spread\",\n\torientation,\n\talign = \"center\",\n}: {\n\tstage: FunnelStage;\n\tpct: number;\n\tisHorizontal: boolean;\n\tshowValues: boolean;\n\tshowPercentage: boolean;\n\tshowLabels: boolean;\n\tformatPercentage: (p: number) => string;\n\tformatValue: (v: number) => string;\n\tindex: number;\n\tstaggerDelay: number;\n\tlayout?: \"spread\" | \"grouped\";\n\torientation?: \"vertical\" | \"horizontal\";\n\talign?: \"center\" | \"start\" | \"end\";\n}) {\n\tconst display = stage.displayValue ?? formatValue(stage.value);\n\n\tconst valueEl = showValues && (\n\t\t<span className=\"whitespace-nowrap font-semibold text-foreground text-sm\">\n\t\t\t{display}\n\t\t</span>\n\t);\n\tconst pctEl = showPercentage && (\n\t\t<span className=\"rounded-full bg-foreground px-3 py-1 font-bold text-background text-xs shadow-sm\">\n\t\t\t{formatPercentage(pct)}\n\t\t</span>\n\t);\n\tconst labelEl = showLabels && (\n\t\t<span className=\"whitespace-nowrap font-medium text-muted-foreground text-xs\">\n\t\t\t{stage.label}\n\t\t</span>\n\t);\n\n\t// ── Spread layout (default): items pushed to edges with center element ──\n\tif (layout === \"spread\") {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute inset-0 flex\",\n\t\t\t\t\tisHorizontal ? \"flex-col items-center\" : \"flex-row items-center\",\n\t\t\t\t)}\n\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\ttransition={{\n\t\t\t\t\tdelay: index * staggerDelay + 0.25,\n\t\t\t\t\tduration: 0.35,\n\t\t\t\t\tease: \"easeOut\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{isHorizontal ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<div className=\"flex h-[16%] items-end justify-center pb-1\">\n\t\t\t\t\t\t\t{valueEl}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex flex-1 items-center justify-center\">\n\t\t\t\t\t\t\t{pctEl}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex h-[16%] items-start justify-center pt-1\">\n\t\t\t\t\t\t\t{labelEl}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</>\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<div className=\"flex w-[16%] items-center justify-end pr-2\">\n\t\t\t\t\t\t\t{valueEl}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex flex-1 items-center justify-center\">\n\t\t\t\t\t\t\t{pctEl}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex w-[16%] items-center justify-start pl-2\">\n\t\t\t\t\t\t\t{labelEl}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\t// ── Grouped layout: items stacked tightly together ──\n\tconst resolvedOrientation =\n\t\torientation ?? (isHorizontal ? \"vertical\" : \"horizontal\");\n\tconst isVerticalStack = resolvedOrientation === \"vertical\";\n\n\t// Map align to flexbox alignment on the cross axes\n\tconst justifyMap = {\n\t\tstart: \"justify-start\",\n\t\tcenter: \"justify-center\",\n\t\tend: \"justify-end\",\n\t} as const;\n\tconst itemsMap = {\n\t\tstart: \"items-start\",\n\t\tcenter: \"items-center\",\n\t\tend: \"items-end\",\n\t} as const;\n\n\t// The outer container uses the chart orientation to position the group,\n\t// and the inner group uses the label orientation for stacking.\n\treturn (\n\t\t<motion.div\n\t\t\tanimate={{ opacity: 1 }}\n\t\t\tclassName={cn(\n\t\t\t\t\"absolute inset-0 flex\",\n\t\t\t\t// For horizontal funnel, align controls vertical placement\n\t\t\t\t// For vertical funnel, align controls horizontal placement\n\t\t\t\tisHorizontal\n\t\t\t\t\t? cn(\"flex-col items-center\", justifyMap[align])\n\t\t\t\t\t: cn(\"flex-row items-center\", justifyMap[align]),\n\t\t\t)}\n\t\t\tinitial={{ opacity: 0 }}\n\t\t\tstyle={{\n\t\t\t\tpadding: isHorizontal ? \"8% 0\" : \"0 8%\",\n\t\t\t}}\n\t\t\ttransition={{\n\t\t\t\tdelay: index * staggerDelay + 0.25,\n\t\t\t\tduration: 0.35,\n\t\t\t\tease: \"easeOut\",\n\t\t\t}}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex gap-1.5\",\n\t\t\t\t\tisVerticalStack\n\t\t\t\t\t\t? cn(\"flex-col\", itemsMap[isHorizontal ? \"center\" : align])\n\t\t\t\t\t\t: cn(\"flex-row\", itemsMap.center),\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{valueEl}\n\t\t\t\t{pctEl}\n\t\t\t\t{labelEl}\n\t\t\t</div>\n\t\t</motion.div>\n\t);\n}\n\n// ─── Main Component ─────────────────────────────────────────────────\n\nexport function FunnelChart({\n\tdata,\n\torientation = \"horizontal\",\n\tcolor = \"var(--chart-1)\",\n\tlayers = 3,\n\tclassName,\n\tstyle,\n\tshowPercentage = true,\n\tshowValues = true,\n\tshowLabels = true,\n\thoveredIndex: hoveredIndexProp,\n\tonHoverChange,\n\tformatPercentage = fmtPct,\n\tformatValue = fmtVal,\n\tstaggerDelay = 0.12,\n\tenterTransition,\n\tgap = 4,\n\trenderPattern,\n\tedges = \"curved\",\n\tlabelLayout = \"spread\",\n\tlabelOrientation,\n\tlabelAlign = \"center\",\n\tgrid: gridProp = false,\n}: FunnelChartProps) {\n\tconst ref = useRef<HTMLDivElement>(null);\n\tconst [sz, setSz] = useState({ w: 0, h: 0 });\n\tconst [internalHoveredIndex, setInternalHoveredIndex] = useState<\n\t\tnumber | null\n\t>(null);\n\n\tconst isControlled = hoveredIndexProp !== undefined;\n\tconst hoveredIndex = isControlled ? hoveredIndexProp : internalHoveredIndex;\n\tconst setHoveredIndex = useCallback(\n\t\t(index: number | null) => {\n\t\t\tif (isControlled) {\n\t\t\t\tonHoverChange?.(index);\n\t\t\t} else {\n\t\t\t\tsetInternalHoveredIndex(index);\n\t\t\t}\n\t\t},\n\t\t[isControlled, onHoverChange],\n\t);\n\n\tconst measure = useCallback(() => {\n\t\tif (!ref.current) {\n\t\t\treturn;\n\t\t}\n\t\tconst { width: w, height: h } = ref.current.getBoundingClientRect();\n\t\tif (w > 0 && h > 0) {\n\t\t\tsetSz({ w, h });\n\t\t}\n\t}, []);\n\n\tuseEffect(() => {\n\t\tmeasure();\n\t\tconst ro = new ResizeObserver(measure);\n\t\tif (ref.current) {\n\t\t\tro.observe(ref.current);\n\t\t}\n\t\treturn () => ro.disconnect();\n\t}, [measure]);\n\n\tif (!data.length) {\n\t\treturn null;\n\t}\n\n\tconst first = data[0];\n\tif (!first) {\n\t\treturn null;\n\t}\n\tconst max = first.value;\n\tconst n = data.length;\n\tconst norms = data.map((d) => d.value / max);\n\tconst horiz = orientation === \"horizontal\";\n\tconst { w: W, h: H } = sz;\n\n\tconst totalGap = gap * (n - 1);\n\tconst segW = (W - (horiz ? totalGap : 0)) / n;\n\tconst segH = (H - (horiz ? 0 : totalGap)) / n;\n\n\t// Resolve grid config\n\tconst gridEnabled = gridProp !== false;\n\tconst gridCfg = typeof gridProp === \"object\" ? gridProp : {};\n\tconst showBands = gridEnabled && (gridCfg.bands ?? true);\n\tconst bandColor = gridCfg.bandColor ?? \"var(--color-muted)\";\n\tconst showGridLines = gridEnabled && (gridCfg.lines ?? true);\n\tconst gridLineColor = gridCfg.lineColor ?? \"var(--chart-grid)\";\n\tconst gridLineOpacity = gridCfg.lineOpacity ?? 1;\n\tconst gridLineWidth = gridCfg.lineWidth ?? 1;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"relative w-full select-none overflow-visible\", className)}\n\t\t\tref={ref}\n\t\t\tstyle={{\n\t\t\t\taspectRatio: horiz ? \"2.2 / 1\" : \"1 / 1.8\",\n\t\t\t\t...style,\n\t\t\t}}\n\t\t>\n\t\t\t{W > 0 && H > 0 && (\n\t\t\t\t<>\n\t\t\t\t\t{/* Grid layer: background bands + grid lines */}\n\t\t\t\t\t{gridEnabled && (\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName=\"pointer-events-none absolute inset-0 h-full w-full\"\n\t\t\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t\t\tviewBox={`0 0 ${W} ${H}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{/* Background bands — alternating on even segments */}\n\t\t\t\t\t\t\t{showBands &&\n\t\t\t\t\t\t\t\tdata.map((stage, i) => {\n\t\t\t\t\t\t\t\t\tif (i % 2 !== 0) {\n\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (horiz) {\n\t\t\t\t\t\t\t\t\t\tconst x = (segW + gap) * i;\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\t\t\tfill={bandColor}\n\t\t\t\t\t\t\t\t\t\t\t\theight={H}\n\t\t\t\t\t\t\t\t\t\t\t\tkey={`band-${stage.label}`}\n\t\t\t\t\t\t\t\t\t\t\t\twidth={segW}\n\t\t\t\t\t\t\t\t\t\t\t\tx={x}\n\t\t\t\t\t\t\t\t\t\t\t\ty={0}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst y = (segH + gap) * i;\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\t\tfill={bandColor}\n\t\t\t\t\t\t\t\t\t\t\theight={segH}\n\t\t\t\t\t\t\t\t\t\t\tkey={`band-${stage.label}`}\n\t\t\t\t\t\t\t\t\t\t\twidth={W}\n\t\t\t\t\t\t\t\t\t\t\tx={0}\n\t\t\t\t\t\t\t\t\t\t\ty={y}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Segments container — overflow-visible so hover scale is not clipped */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"absolute inset-0 flex overflow-visible\",\n\t\t\t\t\t\t\thoriz ? \"flex-row\" : \"flex-col\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={{ gap }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{data.map((stage, i) => {\n\t\t\t\t\t\t\tconst normStart = norms[i] ?? 0;\n\t\t\t\t\t\t\tconst normEnd = norms[Math.min(i + 1, n - 1)] ?? 0;\n\t\t\t\t\t\t\tconst firstStop = stage.gradient?.[0];\n\t\t\t\t\t\t\tconst segColor = firstStop\n\t\t\t\t\t\t\t\t? firstStop.color\n\t\t\t\t\t\t\t\t: (stage.color ?? color);\n\n\t\t\t\t\t\t\treturn horiz ? (\n\t\t\t\t\t\t\t\t<HSegment\n\t\t\t\t\t\t\t\t\tcolor={segColor}\n\t\t\t\t\t\t\t\t\tdimmed={hoveredIndex !== null && hoveredIndex !== i}\n\t\t\t\t\t\t\t\t\tenterTransition={enterTransition}\n\t\t\t\t\t\t\t\t\tfullH={H}\n\t\t\t\t\t\t\t\t\tgradientStops={stage.gradient}\n\t\t\t\t\t\t\t\t\thovered={hoveredIndex === i}\n\t\t\t\t\t\t\t\t\tindex={i}\n\t\t\t\t\t\t\t\t\tkey={stage.label}\n\t\t\t\t\t\t\t\t\tlayers={layers}\n\t\t\t\t\t\t\t\t\tnormEnd={normEnd}\n\t\t\t\t\t\t\t\t\tnormStart={normStart}\n\t\t\t\t\t\t\t\t\trenderPattern={renderPattern}\n\t\t\t\t\t\t\t\t\tsegW={segW}\n\t\t\t\t\t\t\t\t\tstaggerDelay={staggerDelay}\n\t\t\t\t\t\t\t\t\tstraight={edges === \"straight\"}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<VSegment\n\t\t\t\t\t\t\t\t\tcolor={segColor}\n\t\t\t\t\t\t\t\t\tdimmed={hoveredIndex !== null && hoveredIndex !== i}\n\t\t\t\t\t\t\t\t\tenterTransition={enterTransition}\n\t\t\t\t\t\t\t\t\tfullW={W}\n\t\t\t\t\t\t\t\t\tgradientStops={stage.gradient}\n\t\t\t\t\t\t\t\t\thovered={hoveredIndex === i}\n\t\t\t\t\t\t\t\t\tindex={i}\n\t\t\t\t\t\t\t\t\tkey={stage.label}\n\t\t\t\t\t\t\t\t\tlayers={layers}\n\t\t\t\t\t\t\t\t\tnormEnd={normEnd}\n\t\t\t\t\t\t\t\t\tnormStart={normStart}\n\t\t\t\t\t\t\t\t\trenderPattern={renderPattern}\n\t\t\t\t\t\t\t\t\tsegH={segH}\n\t\t\t\t\t\t\t\t\tstaggerDelay={staggerDelay}\n\t\t\t\t\t\t\t\t\tstraight={edges === \"straight\"}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Grid lines — rendered above segments so they're visible */}\n\t\t\t\t\t{gridEnabled && showGridLines && (\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName=\"pointer-events-none absolute inset-0 h-full w-full\"\n\t\t\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t\t\tviewBox={`0 0 ${W} ${H}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{Array.from({ length: n - 1 }, (_, i) => {\n\t\t\t\t\t\t\t\tconst idx = i + 1;\n\t\t\t\t\t\t\t\tconst gridKey = `grid-${idx}`;\n\t\t\t\t\t\t\t\tif (horiz) {\n\t\t\t\t\t\t\t\t\tconst x = segW * idx + gap * i + gap / 2;\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<line\n\t\t\t\t\t\t\t\t\t\t\tkey={gridKey}\n\t\t\t\t\t\t\t\t\t\t\tstroke={gridLineColor}\n\t\t\t\t\t\t\t\t\t\t\tstrokeOpacity={gridLineOpacity}\n\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={gridLineWidth}\n\t\t\t\t\t\t\t\t\t\t\tx1={x}\n\t\t\t\t\t\t\t\t\t\t\tx2={x}\n\t\t\t\t\t\t\t\t\t\t\ty1={0}\n\t\t\t\t\t\t\t\t\t\t\ty2={H}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst y = segH * idx + gap * i + gap / 2;\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<line\n\t\t\t\t\t\t\t\t\t\tkey={gridKey}\n\t\t\t\t\t\t\t\t\t\tstroke={gridLineColor}\n\t\t\t\t\t\t\t\t\t\tstrokeOpacity={gridLineOpacity}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={gridLineWidth}\n\t\t\t\t\t\t\t\t\t\tx1={0}\n\t\t\t\t\t\t\t\t\t\tx2={W}\n\t\t\t\t\t\t\t\t\t\ty1={y}\n\t\t\t\t\t\t\t\t\t\ty2={y}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Label overlays — one per segment, positioned over each segment cell.\n These are the hover triggers for each segment. */}\n\t\t\t\t\t{data.map((stage, i) => {\n\t\t\t\t\t\tconst pct = (stage.value / max) * 100;\n\t\t\t\t\t\tconst posStyle: CSSProperties = horiz\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tleft: (segW + gap) * i,\n\t\t\t\t\t\t\t\t\twidth: segW,\n\t\t\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t\t\theight: H,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\ttop: (segH + gap) * i,\n\t\t\t\t\t\t\t\t\theight: segH,\n\t\t\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\t\t\twidth: W,\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst isDimmed = hoveredIndex !== null && hoveredIndex !== i;\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tanimate={{ opacity: isDimmed ? 0.4 : 1 }}\n\t\t\t\t\t\t\t\tclassName=\"absolute cursor-pointer\"\n\t\t\t\t\t\t\t\tkey={`lbl-${stage.label}`}\n\t\t\t\t\t\t\t\tonMouseEnter={() => setHoveredIndex(i)}\n\t\t\t\t\t\t\t\tonMouseLeave={() => setHoveredIndex(null)}\n\t\t\t\t\t\t\t\tstyle={{ ...posStyle, zIndex: 20 }}\n\t\t\t\t\t\t\t\ttransition={{ type: \"spring\", stiffness: 300, damping: 24 }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<SegmentLabel\n\t\t\t\t\t\t\t\t\talign={labelAlign}\n\t\t\t\t\t\t\t\t\tformatPercentage={formatPercentage}\n\t\t\t\t\t\t\t\t\tformatValue={formatValue}\n\t\t\t\t\t\t\t\t\tindex={i}\n\t\t\t\t\t\t\t\t\tisHorizontal={horiz}\n\t\t\t\t\t\t\t\t\tlayout={labelLayout}\n\t\t\t\t\t\t\t\t\torientation={labelOrientation}\n\t\t\t\t\t\t\t\t\tpct={pct}\n\t\t\t\t\t\t\t\t\tshowLabels={showLabels}\n\t\t\t\t\t\t\t\t\tshowPercentage={showPercentage}\n\t\t\t\t\t\t\t\t\tshowValues={showValues}\n\t\t\t\t\t\t\t\t\tstage={stage}\n\t\t\t\t\t\t\t\t\tstaggerDelay={staggerDelay}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { HeatmapLevelStyles } from \"./heatmap-colors\";\nimport type { HeatmapBin, HeatmapColumn } from \"./heatmap-context\";\n\n/** Calendar months shown in default one-year contribution grids. */\nexport const HEATMAP_MONTHS_ONE_YEAR = 12;\n\n/** Half-year contribution grids (gallery card demos). */\nexport const HEATMAP_MONTHS_SIX = 6;\n\n/** Nominal week count for one year (~52). Default data uses calendar-month math instead. */\nexport const HEATMAP_WEEKS_ONE_YEAR = 52;\n\nconst MS_PER_DAY = 24 * 60 * 60 * 1000;\nconst MS_PER_WEEK = MS_PER_DAY * 7;\n\nexport function getHeatmapCalendarRangeStart(\n\ttoday: Date,\n\tmonths: number,\n): Date {\n\tconst monthOffset = months === HEATMAP_MONTHS_SIX ? months : months - 1;\n\tconst start = new Date(\n\t\ttoday.getFullYear(),\n\t\ttoday.getMonth() - monthOffset,\n\t\t1,\n\t);\n\tstart.setHours(0, 0, 0, 0);\n\treturn start;\n}\n\nexport function getHeatmapYearStartMonth(today: Date): Date {\n\treturn getHeatmapCalendarRangeStart(today, HEATMAP_MONTHS_ONE_YEAR);\n}\n\nexport function getHeatmapWeekStartSunday(date: Date): Date {\n\tconst sunday = new Date(date);\n\tsunday.setDate(sunday.getDate() - sunday.getDay());\n\tsunday.setHours(0, 0, 0, 0);\n\treturn sunday;\n}\n\nexport function getHeatmapWeekCount(startSunday: Date, endDate: Date): number {\n\tconst endSunday = getHeatmapWeekStartSunday(endDate);\n\treturn (\n\t\tMath.floor((endSunday.getTime() - startSunday.getTime()) / MS_PER_WEEK) + 1\n\t);\n}\n\n/** Days in a Sun–Sat column on or after `threshold` (for trimming partial lead weeks). */\nexport function countHeatmapWeekDaysOnOrAfter(\n\tweekStart: Date,\n\tthreshold: Date,\n): number {\n\tconst day = new Date(weekStart);\n\tday.setHours(0, 0, 0, 0);\n\tconst cutoff = new Date(threshold);\n\tcutoff.setHours(0, 0, 0, 0);\n\tlet count = 0;\n\n\tfor (let i = 0; i < 7; i++) {\n\t\tif (day >= cutoff) {\n\t\t\tcount++;\n\t\t}\n\t\tday.setDate(day.getDate() + 1);\n\t}\n\n\treturn count;\n}\n\n/**\n * First Sunday week column where enough days fall on/after `rangeStart`.\n * Skips a lead week that is mostly before the range (e.g. late July before Aug 1).\n */\nexport function getHeatmapWeekStartAlignedToRange(\n\trangeStart: Date,\n\tminDaysInFirstWeek = 4,\n): Date {\n\tconst startDate = getHeatmapWeekStartSunday(rangeStart);\n\tconst weekEnd = new Date(startDate);\n\tweekEnd.setDate(weekEnd.getDate() + 6);\n\n\t// Keep the Sun–Sat column that contains the 1st (e.g. Jan 1 in a partial lead week).\n\tif (rangeStart >= startDate && rangeStart <= weekEnd) {\n\t\treturn startDate;\n\t}\n\n\twhile (\n\t\tcountHeatmapWeekDaysOnOrAfter(startDate, rangeStart) < minDaysInFirstWeek\n\t) {\n\t\tstartDate.setDate(startDate.getDate() + 7);\n\t}\n\n\treturn startDate;\n}\n\n/** Column index for a month label — snaps to separator group start when layout is set. */\nexport function getHeatmapMonthLabelColumnIndex(\n\tcolumnIndex: number,\n\tseparatorLayout: Pick<HeatmapSeparatorLayout, \"atColumns\"> | null,\n): number {\n\tif (!separatorLayout?.atColumns.length) {\n\t\treturn columnIndex;\n\t}\n\n\treturn getHeatmapSeparatorGroupStartColumn(\n\t\tcolumnIndex,\n\t\tseparatorLayout.atColumns,\n\t);\n}\n\nexport interface HeatmapWeekRange {\n\tstartDate: Date;\n\tweekCount: number;\n\t/** First in-range calendar day; bins before this are empty in default year grids. */\n\trangeStart: Date | null;\n}\n\n/** Default `weeks` uses 12 calendar months; other values use a rolling week window. */\nexport function resolveHeatmapWeekRange(\n\ttoday: Date,\n\tweeks: number = HEATMAP_WEEKS_ONE_YEAR,\n): HeatmapWeekRange {\n\tconst endDate = new Date(today);\n\tendDate.setHours(0, 0, 0, 0);\n\n\tif (weeks === HEATMAP_WEEKS_ONE_YEAR) {\n\t\tconst rangeStart = getHeatmapYearStartMonth(endDate);\n\t\tconst startDate = getHeatmapWeekStartAlignedToRange(rangeStart);\n\t\treturn {\n\t\t\tstartDate,\n\t\t\tweekCount: getHeatmapWeekCount(startDate, endDate),\n\t\t\trangeStart,\n\t\t};\n\t}\n\n\tconst startDate = new Date(endDate);\n\tstartDate.setDate(startDate.getDate() - (weeks - 1) * 7);\n\tstartDate.setDate(startDate.getDate() - startDate.getDay());\n\tstartDate.setHours(0, 0, 0, 0);\n\n\treturn {\n\t\tstartDate,\n\t\tweekCount: weeks,\n\t\trangeStart: null,\n\t};\n}\n\n/** Month label anchor for a week column — prefers the 1st, else the 1st of the first bin's month. */\nexport function getHeatmapColumnMonthAnchor(\n\tcolumn: HeatmapColumn,\n): Date | null {\n\tfor (const bin of column.bins) {\n\t\tif (bin.date && bin.date.getDate() === 1) {\n\t\t\treturn bin.date;\n\t\t}\n\t}\n\n\tconst firstDate = column.bins[0]?.date;\n\tif (!firstDate) {\n\t\treturn null;\n\t}\n\n\treturn new Date(firstDate.getFullYear(), firstDate.getMonth(), 1);\n}\n\nexport function getHeatmapColumnStartDate(column: HeatmapColumn): Date | null {\n\treturn column.bins[0]?.date ?? null;\n}\n\nexport function getHeatmapColumnEndDate(column: HeatmapColumn): Date | null {\n\tconst lastBin = column.bins.at(-1);\n\treturn lastBin?.date ?? null;\n}\n\nexport function getHeatmapTimeExtent(\n\tcolumns: HeatmapColumn[],\n): [Date, Date] | null {\n\tif (columns.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst firstColumn = columns[0];\n\tif (!firstColumn) {\n\t\treturn null;\n\t}\n\tconst start = getHeatmapColumnStartDate(firstColumn);\n\tconst lastColumn = columns.at(-1);\n\tif (!lastColumn) {\n\t\treturn null;\n\t}\n\tconst end = getHeatmapColumnEndDate(lastColumn);\n\tif (!(start && end)) {\n\t\treturn null;\n\t}\n\n\treturn [start, end];\n}\n\nexport function filterHeatmapColumns(\n\tcolumns: HeatmapColumn[],\n\txDomain?: [Date, Date],\n): HeatmapColumn[] {\n\tif (!xDomain) {\n\t\treturn columns;\n\t}\n\n\tconst start = Math.min(xDomain[0].getTime(), xDomain[1].getTime());\n\tconst end = Math.max(xDomain[0].getTime(), xDomain[1].getTime());\n\n\treturn columns.filter((column) => {\n\t\tconst weekStart = getHeatmapColumnStartDate(column)?.getTime();\n\t\tconst weekEnd = getHeatmapColumnEndDate(column)?.getTime();\n\t\tif (weekStart == null || weekEnd == null) {\n\t\t\treturn false;\n\t\t}\n\t\treturn weekEnd >= start && weekStart <= end;\n\t});\n}\n\nconst heatmapTooltipMonthFmt = new Intl.DateTimeFormat(\"en-US\", {\n\tmonth: \"long\",\n});\n\nconst heatmapTooltipWeekdayFmt = new Intl.DateTimeFormat(\"en-US\", {\n\tweekday: \"long\",\n});\n\nfunction formatHeatmapOrdinalDay(day: number): string {\n\tif (day >= 11 && day <= 13) {\n\t\treturn `${day}th`;\n\t}\n\n\tswitch (day % 10) {\n\t\tcase 1:\n\t\t\treturn `${day}st`;\n\t\tcase 2:\n\t\t\treturn `${day}nd`;\n\t\tcase 3:\n\t\t\treturn `${day}rd`;\n\t\tdefault:\n\t\t\treturn `${day}th`;\n\t}\n}\n\n/** Tooltip header date — e.g. `January 20th 2026`. */\nexport function formatHeatmapTooltipDate(date: Date): string {\n\tconst month = heatmapTooltipMonthFmt.format(date);\n\tconst day = formatHeatmapOrdinalDay(date.getDate());\n\treturn `${month} ${day} ${date.getFullYear()}`;\n}\n\n/** Tooltip weekday line — e.g. `Monday`. */\nexport function formatHeatmapTooltipWeekday(date: Date): string {\n\treturn heatmapTooltipWeekdayFmt.format(date);\n}\n\n/** Tooltip contribution line — e.g. `3 contributions`. */\nexport function formatHeatmapContributionLabel(\n\tcount: number,\n\t_date?: Date,\n): string {\n\tconst word = count === 1 ? \"contribution\" : \"contributions\";\n\treturn `${count} ${word}`;\n}\n\n/** Sunday-first day labels for heatmap row bins. */\nexport const HEATMAP_DAY_LABELS = [\n\t\"Sun\",\n\t\"Mon\",\n\t\"Tue\",\n\t\"Wed\",\n\t\"Thu\",\n\t\"Fri\",\n\t\"Sat\",\n] as const;\n\n/** First row of the grid — `0` = Sunday (GitHub default). */\nexport type HeatmapWeekStartDay = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\n/** Day labels with row 0 aligned to `weekStartDay`. */\nexport function getHeatmapDayLabels(\n\tweekStartDay: HeatmapWeekStartDay = 0,\n): readonly string[] {\n\tif (weekStartDay === 0) {\n\t\treturn HEATMAP_DAY_LABELS;\n\t}\n\n\treturn [\n\t\t...HEATMAP_DAY_LABELS.slice(weekStartDay),\n\t\t...HEATMAP_DAY_LABELS.slice(0, weekStartDay),\n\t];\n}\n\n/** Rotates Sun-first column bins so display row 0 starts on `weekStartDay`. */\nexport function rotateHeatmapColumnBins(\n\tcolumns: HeatmapColumn[],\n\tweekStartDay: HeatmapWeekStartDay = 0,\n): HeatmapColumn[] {\n\tif (weekStartDay === 0) {\n\t\treturn columns;\n\t}\n\n\treturn columns.map((column) => ({\n\t\t...column,\n\t\tbins: [\n\t\t\t...column.bins.slice(weekStartDay),\n\t\t\t...column.bins.slice(0, weekStartDay),\n\t\t],\n\t}));\n}\n\n/** Which Y-axis row ticks to display. */\nexport type HeatmapYAxisTickFilter = \"all\" | \"odd\" | \"even\";\n\n/** Y-axis label display — `initial` shows the first letter only (Mon → M). */\nexport type HeatmapYAxisLabelFormat = \"full\" | \"initial\";\n\nexport function formatHeatmapYAxisLabel(\n\tlabel: string,\n\tlabelFormat: HeatmapYAxisLabelFormat,\n): string {\n\treturn labelFormat === \"initial\" ? label.charAt(0) : label;\n}\n\nexport function shouldShowHeatmapYAxisTick(\n\trow: number,\n\ttickFilter: HeatmapYAxisTickFilter,\n): boolean {\n\tswitch (tickFilter) {\n\t\tcase \"all\":\n\t\t\treturn true;\n\t\tcase \"odd\":\n\t\t\treturn row % 2 === 1;\n\t\tcase \"even\":\n\t\t\treturn row % 2 === 0;\n\t\tdefault:\n\t\t\treturn row % 2 === 1;\n\t}\n}\n\n/** Layout spacing parsed from {@link HeatmapSeparator}. */\nexport type HeatmapSeparatorGroupBy = \"every\" | \"quarter\";\n\n/** Separator config from props — resolved to column indices once data is known. */\nexport interface HeatmapSeparatorParsedConfig {\n\tgroupBy: HeatmapSeparatorGroupBy;\n\tevery?: number;\n\tspacing: number;\n}\n\nexport interface HeatmapSeparatorGroup {\n\tstartColumnIndex: number;\n\tquarter: number;\n\tyear: number;\n\tstartDate: Date;\n\tlabel: string;\n}\n\n/** Resolved separator layout used for column offsets and rendering. */\nexport interface HeatmapSeparatorLayout {\n\tspacing: number;\n\tatColumns: number[];\n\tgroups: HeatmapSeparatorGroup[];\n}\n\n/** Separator line style. */\nexport type HeatmapSeparatorStrokeStyle = \"solid\" | \"dashed\";\n\n/** Vertical stroke gradient for separator lines (`from` → optional `via` → `to`). */\nexport interface HeatmapSeparatorGradient {\n\tfrom: string;\n\tvia?: string;\n\tto: string;\n\tfromOpacity?: number;\n\tviaOpacity?: number;\n\ttoOpacity?: number;\n}\n\nexport interface HeatmapSeparatorGradientStop {\n\toffset: string;\n\tcolor: string;\n\topacity: number;\n}\n\n/** Builds SVG gradient stops for a vertical separator line. */\nexport function buildHeatmapSeparatorGradientStops(\n\tgradient: HeatmapSeparatorGradient,\n\tstrokeOpacity = 1,\n): HeatmapSeparatorGradientStop[] {\n\tconst scaleOpacity = (value: number | undefined, fallback = 1) =>\n\t\t(value ?? fallback) * strokeOpacity;\n\n\tif (gradient.via != null) {\n\t\treturn [\n\t\t\t{\n\t\t\t\toffset: \"0%\",\n\t\t\t\tcolor: gradient.from,\n\t\t\t\topacity: scaleOpacity(gradient.fromOpacity),\n\t\t\t},\n\t\t\t{\n\t\t\t\toffset: \"50%\",\n\t\t\t\tcolor: gradient.via,\n\t\t\t\topacity: scaleOpacity(gradient.viaOpacity),\n\t\t\t},\n\t\t\t{\n\t\t\t\toffset: \"100%\",\n\t\t\t\tcolor: gradient.to,\n\t\t\t\topacity: scaleOpacity(gradient.toOpacity),\n\t\t\t},\n\t\t];\n\t}\n\n\treturn [\n\t\t{\n\t\t\toffset: \"0%\",\n\t\t\tcolor: gradient.from,\n\t\t\topacity: scaleOpacity(gradient.fromOpacity),\n\t\t},\n\t\t{\n\t\t\toffset: \"100%\",\n\t\t\tcolor: gradient.to,\n\t\t\topacity: scaleOpacity(gradient.toOpacity),\n\t\t},\n\t];\n}\n\nexport function resolveHeatmapSeparatorStrokeDasharray(\n\tstrokeStyle: HeatmapSeparatorStrokeStyle = \"solid\",\n\tstrokeDasharray?: string,\n): string | undefined {\n\tif (strokeStyle !== \"dashed\") {\n\t\treturn undefined;\n\t}\n\treturn strokeDasharray ?? \"4,4\";\n}\n\n/** Calendar quarter (1–4) for Jan–Mar, Apr–Jun, Jul–Sep, Oct–Dec. */\nexport function getCalendarQuarter(date: Date): number {\n\treturn Math.floor(date.getMonth() / 3) + 1;\n}\n\nconst CALENDAR_QUARTER_START_MONTHS = [0, 3, 6, 9] as const;\n\n/** Jan/Apr/Jul/Oct 1 dates strictly after `gridStart` and on or before `gridEnd`. */\nexport function getCalendarQuarterStartDatesBetween(\n\tgridStart: Date,\n\tgridEnd: Date,\n): Date[] {\n\tconst startTime = gridStart.getTime();\n\tconst endTime = gridEnd.getTime();\n\tconst dates: Date[] = [];\n\n\tfor (\n\t\tlet year = gridStart.getFullYear();\n\t\tyear <= gridEnd.getFullYear();\n\t\tyear++\n\t) {\n\t\tfor (const month of CALENDAR_QUARTER_START_MONTHS) {\n\t\t\tconst date = new Date(year, month, 1);\n\t\t\tdate.setHours(0, 0, 0, 0);\n\t\t\tconst time = date.getTime();\n\t\t\tif (time > startTime && time <= endTime) {\n\t\t\t\tdates.push(date);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn dates;\n}\n\n/** Week column index whose Sun–Sat span contains `date`. */\nexport function findHeatmapColumnIndexForDate(\n\tcolumns: HeatmapColumn[],\n\tdate: Date,\n): number | null {\n\tconst target = new Date(date);\n\ttarget.setHours(0, 0, 0, 0);\n\tconst targetTime = target.getTime();\n\n\tfor (let columnIndex = 0; columnIndex < columns.length; columnIndex++) {\n\t\tconst column = columns[columnIndex];\n\t\tif (!column) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst weekStart = getHeatmapColumnStartDate(column);\n\t\tconst weekEnd = getHeatmapColumnEndDate(column);\n\t\tif (!(weekStart && weekEnd)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tweekStart.setHours(0, 0, 0, 0);\n\t\tweekEnd.setHours(0, 0, 0, 0);\n\t\tif (targetTime >= weekStart.getTime() && targetTime <= weekEnd.getTime()) {\n\t\t\treturn columnIndex;\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/** Quarter anchor for a week column — prefers the 1st of a quarter month, else the quarter of the first bin. */\nexport function getHeatmapColumnQuarterAnchor(column: HeatmapColumn): {\n\tquarter: number;\n\tyear: number;\n\tdate: Date;\n} | null {\n\tfor (const bin of column.bins) {\n\t\tif (!bin.date) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst month = bin.date.getMonth();\n\t\tif (bin.date.getDate() === 1 && month % 3 === 0) {\n\t\t\treturn {\n\t\t\t\tquarter: month / 3 + 1,\n\t\t\t\tyear: bin.date.getFullYear(),\n\t\t\t\tdate: bin.date,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst firstDate = column.bins[0]?.date;\n\tif (!firstDate) {\n\t\treturn null;\n\t}\n\n\tconst quarter = getCalendarQuarter(firstDate);\n\treturn {\n\t\tquarter,\n\t\tyear: firstDate.getFullYear(),\n\t\tdate: new Date(firstDate.getFullYear(), (quarter - 1) * 3, 1),\n\t};\n}\n\n/** Label column snapped to the start of a separator group. */\nexport function getHeatmapSeparatorGroupStartColumn(\n\tcolumnIndex: number,\n\tatColumns: number[],\n): number {\n\tlet groupStart = 0;\n\n\tfor (const start of atColumns) {\n\t\tif (start <= columnIndex) {\n\t\t\tgroupStart = start;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn groupStart;\n}\n\n/** Column indices (0-based) where a vertical separator is drawn (fixed interval). */\nexport function getHeatmapSeparatorColumnIndices(\n\tcolumnCount: number,\n\tevery: number,\n): number[] {\n\tif (every <= 0 || columnCount <= every) {\n\t\treturn [];\n\t}\n\n\tconst indices: number[] = [];\n\tfor (\n\t\tlet columnIndex = every;\n\t\tcolumnIndex < columnCount;\n\t\tcolumnIndex += every\n\t) {\n\t\tindices.push(columnIndex);\n\t}\n\treturn indices;\n}\n\n/** Matches demo-style calendar grids to their range start (Jan 1, etc.). */\nexport function inferHeatmapCalendarRangeStart(\n\tcolumns: HeatmapColumn[],\n): Date | null {\n\tconst firstColumn = columns[0];\n\tif (!firstColumn) {\n\t\treturn null;\n\t}\n\n\tconst gridStart = getHeatmapColumnStartDate(firstColumn);\n\tif (!gridStart) {\n\t\treturn null;\n\t}\n\n\tconst today = new Date();\n\ttoday.setHours(0, 0, 0, 0);\n\n\tfor (const months of [HEATMAP_MONTHS_SIX, HEATMAP_MONTHS_ONE_YEAR]) {\n\t\tconst rangeStart = getHeatmapCalendarRangeStart(today, months);\n\t\tconst alignedStart = getHeatmapWeekStartAlignedToRange(rangeStart);\n\t\tif (gridStart.getTime() === alignedStart.getTime()) {\n\t\t\treturn rangeStart;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport function buildHeatmapQuarterSeparatorGroups(\n\tcolumns: HeatmapColumn[],\n): HeatmapSeparatorGroup[] {\n\tif (columns.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst extent = getHeatmapTimeExtent(columns);\n\tif (!extent) {\n\t\treturn [];\n\t}\n\n\tconst [extentStart, gridEnd] = extent;\n\tconst displayRange = resolveHeatmapDisplayRange(columns);\n\tconst quarterRangeStart =\n\t\tdisplayRange.start ??\n\t\tinferHeatmapCalendarRangeStart(columns) ??\n\t\textentStart;\n\tconst firstQuarter = getCalendarQuarter(quarterRangeStart);\n\n\tconst groups: HeatmapSeparatorGroup[] = [\n\t\t{\n\t\t\tstartColumnIndex: 0,\n\t\t\tquarter: firstQuarter,\n\t\t\tyear: quarterRangeStart.getFullYear(),\n\t\t\tstartDate: quarterRangeStart,\n\t\t\tlabel: `Q${firstQuarter}`,\n\t\t},\n\t];\n\n\tconst usedColumns = new Set<number>([0]);\n\tconst quarterStarts = getCalendarQuarterStartDatesBetween(\n\t\tquarterRangeStart,\n\t\tgridEnd,\n\t);\n\n\tfor (const quarterStart of quarterStarts) {\n\t\tconst columnIndex = findHeatmapColumnIndexForDate(columns, quarterStart);\n\t\tif (\n\t\t\tcolumnIndex == null ||\n\t\t\tcolumnIndex === 0 ||\n\t\t\tusedColumns.has(columnIndex)\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tusedColumns.add(columnIndex);\n\t\tconst quarter = getCalendarQuarter(quarterStart);\n\t\tgroups.push({\n\t\t\tstartColumnIndex: columnIndex,\n\t\t\tquarter,\n\t\t\tyear: quarterStart.getFullYear(),\n\t\t\tstartDate: quarterStart,\n\t\t\tlabel: `Q${quarter}`,\n\t\t});\n\t}\n\n\tgroups.sort((a, b) => a.startColumnIndex - b.startColumnIndex);\n\treturn groups;\n}\n\nexport function resolveHeatmapSeparatorLayout(\n\tconfig: HeatmapSeparatorParsedConfig | null,\n\tcolumns: HeatmapColumn[],\n): HeatmapSeparatorLayout | null {\n\tif (!config) {\n\t\treturn null;\n\t}\n\n\tif (config.groupBy === \"quarter\") {\n\t\tconst groups = buildHeatmapQuarterSeparatorGroups(columns);\n\t\tif (groups.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tspacing: config.spacing,\n\t\t\tatColumns: groups\n\t\t\t\t.map((group) => group.startColumnIndex)\n\t\t\t\t.filter((columnIndex) => columnIndex > 0),\n\t\t\tgroups,\n\t\t};\n\t}\n\n\tif (!config.every || config.every <= 0) {\n\t\treturn null;\n\t}\n\n\tconst atColumns = getHeatmapSeparatorColumnIndices(\n\t\tcolumns.length,\n\t\tconfig.every,\n\t);\n\n\treturn {\n\t\tspacing: config.spacing,\n\t\tatColumns,\n\t\tgroups: [],\n\t};\n}\n\nexport function getHeatmapSeparatorCount(\n\tseparator: Pick<HeatmapSeparatorLayout, \"atColumns\"> | null,\n): number {\n\treturn separator?.atColumns.length ?? 0;\n}\n\n/** Extra x-offset for a column when separator spacing is enabled. */\nexport function getHeatmapColumnXOffset(\n\tcolumnIndex: number,\n\tseparator: Pick<HeatmapSeparatorLayout, \"spacing\" | \"atColumns\"> | null,\n): number {\n\tif (!separator || separator.spacing <= 0) {\n\t\treturn 0;\n\t}\n\tif (columnIndex <= 0) {\n\t\treturn 0;\n\t}\n\n\tconst separatorCount = separator.atColumns.filter(\n\t\t(atColumn) => atColumn <= columnIndex,\n\t).length;\n\treturn separatorCount * separator.spacing;\n}\n\nexport function getHeatmapPlotInnerWidth(\n\tcolumnCount: number,\n\tbinWidth: number,\n\tseparator: Pick<HeatmapSeparatorLayout, \"spacing\" | \"atColumns\"> | null,\n): number {\n\tconst separatorCount = separator ? getHeatmapSeparatorCount(separator) : 0;\n\treturn columnCount * binWidth + separatorCount * (separator?.spacing ?? 0);\n}\n\n/** Vertical span for a separator line in plot coordinates. */\nexport function getHeatmapSeparatorLineY({\n\tinnerHeight,\n\tmarginTop,\n\tstartOffset,\n\tpaddingY = 0,\n}: {\n\tinnerHeight: number;\n\tmarginTop: number;\n\t/** Distance from the chart container top to the line start. Default: plot top. */\n\tstartOffset?: number;\n\tpaddingY?: number;\n}): { y1: number; y2: number } {\n\tconst resolvedStart = startOffset ?? marginTop;\n\tconst y1 = resolvedStart - marginTop + paddingY;\n\tconst y2 = Math.max(innerHeight - paddingY, y1);\n\treturn { y1, y2 };\n}\n\n/** X position for a separator line (centered in the gutter when spacing > 0). */\nexport function getHeatmapSeparatorX(\n\tcolumnIndex: number,\n\tgap: number,\n\tseparator: Pick<HeatmapSeparatorLayout, \"spacing\">,\n\txScale: (columnIndex: number) => number,\n): number {\n\tif (separator.spacing > 0) {\n\t\treturn xScale(columnIndex) - separator.spacing / 2;\n\t}\n\treturn xScale(columnIndex) - gap / 2;\n}\n\nexport interface HeatmapDisplayRange {\n\tstart: Date | null;\n\tend: Date | null;\n}\n\n/** Whether a bin falls outside the contribution display window (not merely inactive). */\nexport function isHeatmapGhostBin(\n\tbin: HeatmapBin,\n\trange: HeatmapDisplayRange,\n): boolean {\n\tconst time = bin.date.getTime();\n\tif (range.end && time > range.end.getTime()) {\n\t\treturn true;\n\t}\n\tif (range.start && time < range.start.getTime()) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n/**\n * Infers GitHub-style display range for calendar-month contribution grids.\n * Custom data that does not match a known grid shape returns null bounds (show all).\n */\nexport function resolveHeatmapDisplayRange(\n\tcolumns: HeatmapColumn[],\n): HeatmapDisplayRange {\n\tif (columns.length === 0) {\n\t\treturn { start: null, end: null };\n\t}\n\n\tconst extent = getHeatmapTimeExtent(columns);\n\tif (!extent) {\n\t\treturn { start: null, end: null };\n\t}\n\n\tconst today = new Date();\n\ttoday.setHours(0, 0, 0, 0);\n\n\tconst firstColumn = columns[0];\n\tif (!firstColumn) {\n\t\treturn { start: null, end: null };\n\t}\n\n\tconst gridStart = getHeatmapColumnStartDate(firstColumn);\n\tif (!gridStart) {\n\t\treturn { start: null, end: null };\n\t}\n\n\tconst inferredStart = inferHeatmapCalendarRangeStart(columns);\n\n\tif (inferredStart && extent[1].getTime() >= today.getTime()) {\n\t\treturn { start: inferredStart, end: today };\n\t}\n\n\treturn { start: null, end: null };\n}\n\n/** Maps a contribution count to the GitHub-style legend level (0–4). */\nexport function getHeatmapContributionLevel(count: number): number {\n\tif (count <= 0) {\n\t\treturn 0;\n\t}\n\tif (count === 1) {\n\t\treturn 1;\n\t}\n\tif (count === 2) {\n\t\treturn 2;\n\t}\n\tif (count === 3) {\n\t\treturn 3;\n\t}\n\treturn 4;\n}\n\nexport interface HeatmapHoverStyleParams {\n\tinactiveOpacity: number;\n\tinactiveScale: number;\n\tactiveScale: number;\n}\n\n/** Whether hover styling runs (disabled when all scale/opacity props are 1). */\nexport function isHeatmapHoverEffectEnabled(\n\tparams: HeatmapHoverStyleParams,\n): boolean {\n\treturn (\n\t\tparams.inactiveOpacity !== 1 ||\n\t\tparams.inactiveScale !== 1 ||\n\t\tparams.activeScale !== 1\n\t);\n}\n\n/** Whether inactive hover styling runs (disabled when both props are 1). */\nexport function isHeatmapInactiveEffectEnabled(\n\tinactiveOpacity: number,\n\tinactiveScale: number,\n): boolean {\n\treturn isHeatmapHoverEffectEnabled({\n\t\tinactiveOpacity,\n\t\tinactiveScale,\n\t\tactiveScale: 1,\n\t});\n}\n\n/** Opacity and scale for highlighted vs dimmed cells and legend swatches. */\nexport function resolveHeatmapHoverStyle(\n\tisHighlighted: boolean,\n\tisDimmed: boolean,\n\tparams: HeatmapHoverStyleParams,\n): { opacity: number; scale: number } {\n\tif (isHighlighted && params.activeScale !== 1) {\n\t\treturn { opacity: 1, scale: params.activeScale };\n\t}\n\n\tif (isDimmed) {\n\t\treturn {\n\t\t\topacity: params.inactiveOpacity,\n\t\t\tscale: params.inactiveScale,\n\t\t};\n\t}\n\n\treturn { opacity: 1, scale: 1 };\n}\n\n/** Opacity and scale for an inactive cell or legend swatch. */\nexport function resolveHeatmapInactiveStyle(\n\tisInactive: boolean,\n\tinactiveOpacity: number,\n\tinactiveScale: number,\n): { opacity: number; scale: number } {\n\treturn resolveHeatmapHoverStyle(false, isInactive, {\n\t\tinactiveOpacity,\n\t\tinactiveScale,\n\t\tactiveScale: 1,\n\t});\n}\n\n/** Per-row opacity multiplier for display rows (default 1). */\nexport function resolveHeatmapRowOpacity(\n\trow: number,\n\trowOpacity?: number | readonly number[],\n): number {\n\tif (rowOpacity == null) {\n\t\treturn 1;\n\t}\n\n\tif (typeof rowOpacity === \"number\") {\n\t\treturn rowOpacity;\n\t}\n\n\treturn rowOpacity[row] ?? 1;\n}\n\n/**\n * Builds a per-row opacity map for {@link HeatmapCells} and {@link HeatmapYAxis}.\n * Pass explicit row indices (e.g. `[5, 6]` for display Sat/Sun when `weekStartDay={1}`)\n * or a predicate — `(row) => row >= 5` fades the last two rows.\n */\nexport function buildHeatmapRowOpacity(\n\tmatch: readonly number[] | ((row: number) => boolean),\n\tfadedOpacity = 0.35,\n\tactiveOpacity = 1,\n\trowCount = 7,\n): number[] {\n\tif (typeof match === \"function\") {\n\t\treturn Array.from({ length: rowCount }, (_, row) =>\n\t\t\tmatch(row) ? fadedOpacity : activeOpacity,\n\t\t);\n\t}\n\n\tconst opacity = new Array<number>(rowCount).fill(activeOpacity);\n\tfor (const row of match) {\n\t\tif (row >= 0 && row < rowCount) {\n\t\t\topacity[row] = fadedOpacity;\n\t\t}\n\t}\n\treturn opacity;\n}\n\n/** CSS `linear-gradient` for a continuous legend bar from level styles. */\nexport function buildHeatmapLegendGradient(\n\tlevelStyles: HeatmapLevelStyles,\n): string {\n\tconst lastIndex = levelStyles.length - 1;\n\tconst stops = levelStyles.map((style, index) => {\n\t\tconst offset = lastIndex === 0 ? 0 : (index / lastIndex) * 100;\n\t\treturn `${style.color} ${offset}%`;\n\t});\n\n\treturn `linear-gradient(to right, ${stops.join(\", \")})`;\n}\n","import type { Transition } from \"motion/react\";\nimport type { HeatmapColumn } from \"./heatmap-context\";\nimport { getHeatmapContributionLevel } from \"./heatmap-utils\";\n\n/** Default enter duration when no motion props are passed (ms). */\nexport const HEATMAP_DEFAULT_ENTER_DURATION_MS = 1600;\n\n/** Default cubic-bezier for heatmap cell enter / loading transitions. */\nexport const HEATMAP_DEFAULT_ENTER_EASE = [0.85, 0, 0.916, 0.282] as const;\n\n/** Default enter transition for {@link HeatmapChart}. */\nexport const HEATMAP_DEFAULT_ENTER_TRANSITION: Transition = {\n\ttype: \"tween\",\n\tduration: HEATMAP_DEFAULT_ENTER_DURATION_MS / 1000,\n\tease: HEATMAP_DEFAULT_ENTER_EASE,\n};\n\n/** Chart opacity while `status=\"loading\"`. */\nexport const HEATMAP_LOADING_CHART_OPACITY = 1;\n\n/** Default max per-cell opacity during loading shimmer. */\nexport const HEATMAP_DEFAULT_LOADING_CELL_MAX_OPACITY = 0.85;\n\n/** Default share of cells that participate in loading shimmer (0–1). */\nexport const HEATMAP_DEFAULT_LOADING_CELL_RANDOMNESS = 1;\n\n/** Opacity for loading cells that do not participate in shimmer. */\nexport const HEATMAP_LOADING_BASE_CELL_OPACITY = 0.2;\n\n/** Duration for ready → loading cell conceal before shimmer resumes (ms). */\nexport const HEATMAP_LOADING_CONCEAL_MS = 450;\n\n/** Share of the enter window used for random fade-in delays. */\nexport const HEATMAP_ENTER_STAGGER_SPREAD = 0.6;\n\nfunction seededRandom(seed: number): () => number {\n\tlet state = seed % 2_147_483_647;\n\tif (state <= 0) {\n\t\tstate += 2_147_483_646;\n\t}\n\treturn () => {\n\t\tstate = (state * 16_807) % 2_147_483_647;\n\t\treturn (state - 1) / 2_147_483_646;\n\t};\n}\n\nexport function heatmapCellSeed(column: number, row: number): number {\n\treturn column * 1009 + row * 9176;\n}\n\nexport interface HeatmapLevelRange {\n\tmin: number;\n\tmax: number;\n}\n\n/** Min/max contribution levels present in the dataset. */\nexport function computeHeatmapLevelRange(\n\tdata: HeatmapColumn[],\n): HeatmapLevelRange {\n\tlet min = Number.POSITIVE_INFINITY;\n\tlet max = Number.NEGATIVE_INFINITY;\n\n\tfor (const column of data) {\n\t\tfor (const bin of column.bins) {\n\t\t\tconst level = getHeatmapContributionLevel(bin.count);\n\t\t\tif (level < min) {\n\t\t\t\tmin = level;\n\t\t\t}\n\t\t\tif (level > max) {\n\t\t\t\tmax = level;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!(Number.isFinite(min) && Number.isFinite(max))) {\n\t\treturn { min: 0, max: 4 };\n\t}\n\n\treturn { min, max };\n}\n\n/** Per-cell fade duration derived from the motion enter transition. */\nexport function resolveHeatmapEnterFadeDurationSec(\n\tenterTransition: Transition | undefined,\n\tanimationDurationMs: number,\n): number {\n\tif (\n\t\tenterTransition &&\n\t\t\"duration\" in enterTransition &&\n\t\ttypeof enterTransition.duration === \"number\"\n\t) {\n\t\treturn enterTransition.duration;\n\t}\n\n\treturn Math.min(0.45, (animationDurationMs / 1000) * 0.3);\n}\n\n/** Random delay so all cells finish fading in within `animationDurationMs`. */\nexport function computeHeatmapEnterFadeDelayMs({\n\tcolumn,\n\trow,\n\trevealEpoch,\n\tanimationDurationMs,\n\tenterStaggerScale,\n\tfadeDurationSec,\n}: {\n\tcolumn: number;\n\trow: number;\n\trevealEpoch: number;\n\tanimationDurationMs: number;\n\tenterStaggerScale: number;\n\tfadeDurationSec: number;\n}): number {\n\tconst random = seededRandom(\n\t\theatmapCellSeed(column, row) + revealEpoch * 524_287,\n\t);\n\tconst fadeMs = fadeDurationSec * 1000;\n\tconst maxDelayMs = Math.max(0, animationDurationMs - fadeMs);\n\tconst spreadMs =\n\t\tmaxDelayMs *\n\t\tHEATMAP_ENTER_STAGGER_SPREAD *\n\t\tMath.max(enterStaggerScale, 0.25);\n\n\treturn random() * spreadMs;\n}\n\n/** Whether a cell participates in loading shimmer for a given randomness (0–1). */\nexport function heatmapLoadingCellParticipates(\n\tcolumn: number,\n\trow: number,\n\trandomness: number,\n): boolean {\n\tif (randomness >= 1) {\n\t\treturn true;\n\t}\n\tif (randomness <= 0) {\n\t\treturn false;\n\t}\n\n\tconst random = seededRandom(heatmapCellSeed(column, row) + 73_133);\n\treturn random() < randomness;\n}\n","export const CHART_SCALE_VARS = [\n\t\"var(--chart-scale-01)\",\n\t\"var(--chart-scale-02)\",\n\t\"var(--chart-scale-03)\",\n\t\"var(--chart-scale-04)\",\n\t\"var(--chart-scale-05)\",\n] as const;\n\nexport type ChartScaleVars = typeof CHART_SCALE_VARS;\n\nexport const chartScaleCssVars = {\n\tscale01: CHART_SCALE_VARS[0],\n\tscale02: CHART_SCALE_VARS[1],\n\tscale03: CHART_SCALE_VARS[2],\n\tscale04: CHART_SCALE_VARS[3],\n\tscale05: CHART_SCALE_VARS[4],\n\tpatternColor: \"var(--chart-scale-pattern-color)\",\n} as const;\n","import { CHART_SCALE_VARS } from \"../chart-scale\";\nimport type { PatternPresetId } from \"../pattern-preset\";\nimport { getHeatmapContributionLevel } from \"./heatmap-utils\";\n\n/** Default Less → More scale using {@link CHART_SCALE_VARS}. */\nexport const HEATMAP_DEFAULT_LEVEL_COLORS = CHART_SCALE_VARS;\n\nexport type HeatmapLevelColors = readonly [\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n];\n\nexport type HeatmapLevelFillMode = \"solid\" | \"pattern\";\n\nexport interface HeatmapLevelStyle {\n\tcolor: string;\n\tfillMode?: HeatmapLevelFillMode;\n\tpattern?: PatternPresetId;\n\tpatternColor?: string;\n\tpatternScale?: number;\n\tpatternStrokeWidth?: number;\n\tpatternRadius?: number;\n\tpatternComplement?: boolean;\n\tpatternFill?: string;\n\tpatternTileBackground?: string;\n\tpatternOpacity?: number;\n\tpatternDotsFill?: boolean;\n}\n\nexport type HeatmapLevelStyles = readonly [\n\tHeatmapLevelStyle,\n\tHeatmapLevelStyle,\n\tHeatmapLevelStyle,\n\tHeatmapLevelStyle,\n\tHeatmapLevelStyle,\n];\n\nexport const HEATMAP_DEFAULT_LEVEL_STYLES = [\n\t{\n\t\tcolor: HEATMAP_DEFAULT_LEVEL_COLORS[0],\n\t\tfillMode: \"solid\",\n\t\tpattern: \"none\",\n\t},\n\t{\n\t\tcolor: HEATMAP_DEFAULT_LEVEL_COLORS[1],\n\t\tfillMode: \"solid\",\n\t\tpattern: \"none\",\n\t},\n\t{\n\t\tcolor: HEATMAP_DEFAULT_LEVEL_COLORS[2],\n\t\tfillMode: \"solid\",\n\t\tpattern: \"none\",\n\t},\n\t{\n\t\tcolor: HEATMAP_DEFAULT_LEVEL_COLORS[3],\n\t\tfillMode: \"solid\",\n\t\tpattern: \"none\",\n\t},\n\t{\n\t\tcolor: HEATMAP_DEFAULT_LEVEL_COLORS[4],\n\t\tfillMode: \"solid\",\n\t\tpattern: \"none\",\n\t},\n] as const satisfies HeatmapLevelStyles;\n\nexport function heatmapLevelPatternId(level: number): string {\n\treturn `heatmap-level-${level}`;\n}\n\nexport function isHeatmapLevelPattern(style: HeatmapLevelStyle): boolean {\n\treturn (\n\t\tstyle.fillMode === \"pattern\" &&\n\t\tstyle.pattern != null &&\n\t\tstyle.pattern !== \"none\"\n\t);\n}\n\nexport function heatmapPatternStrokeFallback(color: string): string {\n\treturn `color-mix(in oklch, ${color} 45%, white)`;\n}\n\nexport function heatmapLevelPatternRenderOptions(style: HeatmapLevelStyle) {\n\tconst preset = style.pattern ?? \"diagonal\";\n\tlet defaultScale = 1;\n\tif (preset === \"cross\") {\n\t\tdefaultScale = 1.33;\n\t}\n\n\treturn {\n\t\tcolor:\n\t\t\tstyle.patternColor?.trim() ||\n\t\t\t(preset === \"accent\"\n\t\t\t\t? \"#e879f9\"\n\t\t\t\t: heatmapPatternStrokeFallback(style.color)),\n\t\ttileBackground: style.patternTileBackground?.trim() || style.color,\n\t\tscale: style.patternScale ?? defaultScale,\n\t\tstrokeWidth: style.patternStrokeWidth,\n\t\tradius: style.patternRadius,\n\t\tcomplement: style.patternComplement,\n\t\tfill: style.patternFill?.trim() || undefined,\n\t\tdotFill: style.patternDotsFill,\n\t};\n}\n\nexport function heatmapLevelCellFillOpacity(style: HeatmapLevelStyle): number {\n\tif (!isHeatmapLevelPattern(style)) {\n\t\treturn 1;\n\t}\n\treturn style.patternOpacity ?? 1;\n}\n\nexport function levelColorsFromStyles(\n\tlevelStyles: HeatmapLevelStyles,\n): HeatmapLevelColors {\n\treturn [\n\t\tlevelStyles[0].color,\n\t\tlevelStyles[1].color,\n\t\tlevelStyles[2].color,\n\t\tlevelStyles[3].color,\n\t\tlevelStyles[4].color,\n\t];\n}\n\nexport function levelStylesFromColors(\n\tlevelColors: HeatmapLevelColors,\n): HeatmapLevelStyles {\n\treturn [\n\t\t{ color: levelColors[0], fillMode: \"solid\", pattern: \"none\" },\n\t\t{ color: levelColors[1], fillMode: \"solid\", pattern: \"none\" },\n\t\t{ color: levelColors[2], fillMode: \"solid\", pattern: \"none\" },\n\t\t{ color: levelColors[3], fillMode: \"solid\", pattern: \"none\" },\n\t\t{ color: levelColors[4], fillMode: \"solid\", pattern: \"none\" },\n\t];\n}\n\nexport function resolveHeatmapLevelStyles(\n\tlevelColors?: HeatmapLevelColors,\n\tlevelStyles?: HeatmapLevelStyles,\n): HeatmapLevelStyles {\n\tif (levelStyles) {\n\t\treturn levelStyles;\n\t}\n\tif (levelColors) {\n\t\treturn levelStylesFromColors(levelColors);\n\t}\n\treturn HEATMAP_DEFAULT_LEVEL_STYLES;\n}\n\nexport function buildHeatmapColorScale(\n\tlevelColors: HeatmapLevelColors,\n): (count: number | null | undefined) => string {\n\treturn buildHeatmapColorScaleFromStyles(levelStylesFromColors(levelColors));\n}\n\nexport function buildHeatmapColorScaleFromStyles(\n\tlevelStyles: HeatmapLevelStyles,\n): (count: number | null | undefined) => string {\n\treturn (count: number | null | undefined) => {\n\t\tconst level = getHeatmapContributionLevel(count ?? 0);\n\t\treturn levelStyles[level]?.color ?? levelStyles[0].color;\n\t};\n}\n\nexport function buildHeatmapFillScale(\n\tlevelStyles: HeatmapLevelStyles,\n): (count: number | null | undefined) => string {\n\treturn (count: number | null | undefined) => {\n\t\tconst level = getHeatmapContributionLevel(count ?? 0);\n\t\tconst style = levelStyles[level] ?? levelStyles[0];\n\n\t\tif (isHeatmapLevelPattern(style)) {\n\t\t\treturn `url(#${heatmapLevelPatternId(level)})`;\n\t\t}\n\n\t\treturn style.color;\n\t};\n}\n\nexport const defaultHeatmapColorScale = buildHeatmapColorScale(\n\tHEATMAP_DEFAULT_LEVEL_COLORS,\n);\n\nexport const defaultHeatmapFillScale = buildHeatmapFillScale(\n\tHEATMAP_DEFAULT_LEVEL_STYLES,\n);\n","\"use client\";\n\nimport type { scaleLinear, scaleTime } from \"@visx/scale\";\nimport type { Transition } from \"motion/react\";\nimport {\n\tcreateContext,\n\ttype Dispatch,\n\ttype ReactNode,\n\ttype RefObject,\n\ttype SetStateAction,\n\tuseCallback,\n\tuseContext,\n\tuseMemo,\n\tuseState,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport type { Margin } from \"../chart-context\";\nimport type { ChartPhase, ChartStatus } from \"../chart-phase\";\nimport {\n\tHEATMAP_DEFAULT_LEVEL_COLORS,\n\ttype HeatmapLevelStyles,\n} from \"./heatmap-colors\";\nimport type {\n\tHeatmapSeparatorLayout,\n\tHeatmapWeekStartDay,\n} from \"./heatmap-utils\";\n\ntype HeatmapTimeScale = ReturnType<typeof scaleTime<number>>;\ntype HeatmapLinearScale = ReturnType<typeof scaleLinear<number>>;\n\nexport interface HeatmapBin {\n\tcount: number;\n\tbin: number;\n\tdate: Date;\n}\n\nexport interface HeatmapColumn {\n\tbin: number;\n\tbins: HeatmapBin[];\n}\n\nexport interface HeatmapTooltipData {\n\tcolumn: number;\n\trow: number;\n\tcount: number;\n\tdate: Date;\n\tx: number;\n\ty: number;\n}\n\nexport interface HeatmapInteractionContextValue {\n\thoveredCell: { column: number; row: number } | null;\n\thoveredLegendLevel: number | null;\n\ttooltipData: HeatmapTooltipData | null;\n\tsetHoveredCell: (cell: { column: number; row: number } | null) => void;\n\tsetHoveredLegendLevel: (level: number | null) => void;\n\tsetTooltipData: Dispatch<SetStateAction<HeatmapTooltipData | null>>;\n\tclearInteraction: () => void;\n}\n\nexport interface HeatmapContextValue {\n\tdata: HeatmapColumn[];\n\twidth: number;\n\theight: number;\n\tinnerWidth: number;\n\tinnerHeight: number;\n\tmargin: Margin;\n\tbinWidth: number;\n\tbinHeight: number;\n\tgap: number;\n\tweekStartDay: HeatmapWeekStartDay;\n\txScale: (columnIndex: number) => number;\n\tyScale: (rowIndex: number) => number;\n\tseparatorLayout: HeatmapSeparatorLayout | null;\n\ttimeXScale: HeatmapTimeScale;\n\tbrushYScale: HeatmapLinearScale;\n\tisReady: boolean;\n\tcolorScale: (count: number | null | undefined) => string;\n\tfillScale: (count: number | null | undefined) => string;\n\tlevelStyles: HeatmapLevelStyles;\n\tcontainerRef: RefObject<HTMLDivElement | null>;\n\tchartStatus: ChartStatus;\n\tchartPhase: ChartPhase;\n\tisLoaded: boolean;\n\trevealEpoch: number;\n\tanimationDuration: number;\n\tenterTransition?: Transition;\n\tenterStaggerScale: number;\n\tanimateCells: boolean;\n\tloadingOpacity: number;\n\tshowLoadingCells: boolean;\n\tloadingCellMaxOpacity: number;\n\tloadingCellRandomness: number;\n\trevealMode: HeatmapRevealMode;\n\tloadingLabel?: string;\n\tshowLoadingLabel: boolean;\n}\n\n/** How cells transition into view after loading or on first mount. */\nexport type HeatmapRevealMode = \"enter\" | \"fromLoading\" | null;\n\nconst HeatmapContext = createContext<HeatmapContextValue | null>(null);\nconst HeatmapInteractionContext =\n\tcreateContext<HeatmapInteractionContextValue | null>(null);\n\nexport function HeatmapInteractionProvider({\n\tchildren,\n}: {\n\tchildren: ReactNode;\n}) {\n\tconst [hoveredCell, setHoveredCell] = useState<{\n\t\tcolumn: number;\n\t\trow: number;\n\t} | null>(null);\n\tconst [hoveredLegendLevel, setHoveredLegendLevel] = useState<number | null>(\n\t\tnull,\n\t);\n\tconst [tooltipData, setTooltipData] = useState<HeatmapTooltipData | null>(\n\t\tnull,\n\t);\n\n\tconst clearInteraction = useCallback(() => {\n\t\tsetHoveredCell(null);\n\t\tsetHoveredLegendLevel(null);\n\t\tsetTooltipData(null);\n\t}, []);\n\n\tconst value = useMemo<HeatmapInteractionContextValue>(\n\t\t() => ({\n\t\t\thoveredCell,\n\t\t\thoveredLegendLevel,\n\t\t\ttooltipData,\n\t\t\tsetHoveredCell,\n\t\t\tsetHoveredLegendLevel,\n\t\t\tsetTooltipData,\n\t\t\tclearInteraction,\n\t\t}),\n\t\t[clearInteraction, hoveredCell, hoveredLegendLevel, tooltipData],\n\t);\n\n\treturn (\n\t\t<HeatmapInteractionContext.Provider value={value}>\n\t\t\t{children}\n\t\t</HeatmapInteractionContext.Provider>\n\t);\n}\n\nexport function HeatmapProvider({\n\tchildren,\n\tvalue,\n}: {\n\tchildren: ReactNode;\n\tvalue: HeatmapContextValue;\n}) {\n\treturn (\n\t\t<HeatmapContext.Provider value={value}>{children}</HeatmapContext.Provider>\n\t);\n}\n\nexport function useHeatmap(): HeatmapContextValue {\n\tconst context = useContext(HeatmapContext);\n\tif (!context) {\n\t\tthrow new Error(\"useHeatmap must be used within a HeatmapProvider\");\n\t}\n\treturn context;\n}\n\nexport function useHeatmapInteraction(): HeatmapInteractionContextValue {\n\tconst context = useContext(HeatmapInteractionContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"useHeatmapInteraction must be used within a HeatmapInteractionProvider\",\n\t\t);\n\t}\n\treturn context;\n}\n\nexport function useHeatmapInteractionOptional(): HeatmapInteractionContextValue | null {\n\treturn useContext(HeatmapInteractionContext);\n}\n\n/** Clears hover state when the pointer leaves chart + legend. */\nexport function HeatmapInteractionBoundary({\n\tchildren,\n\tclassName,\n}: {\n\tchildren: ReactNode;\n\tclassName?: string;\n}) {\n\tconst { clearInteraction } = useHeatmapInteraction();\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"size-full min-h-0 min-w-0\", className)}\n\t\t\tonPointerLeave={clearInteraction}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\n/** Nests a provider only when one is not already present upstream. */\nexport function HeatmapInteractionRoot({ children }: { children: ReactNode }) {\n\tconst existing = useContext(HeatmapInteractionContext);\n\tif (existing) {\n\t\treturn children;\n\t}\n\treturn <HeatmapInteractionProvider>{children}</HeatmapInteractionProvider>;\n}\n\n/** @deprecated Use {@link HEATMAP_DEFAULT_LEVEL_COLORS} */\nexport const heatmapCssVars = {\n\tempty: HEATMAP_DEFAULT_LEVEL_COLORS[0],\n\tlevel1: HEATMAP_DEFAULT_LEVEL_COLORS[1],\n\tlevel2: HEATMAP_DEFAULT_LEVEL_COLORS[2],\n\tlevel3: HEATMAP_DEFAULT_LEVEL_COLORS[3],\n\tlevel4: HEATMAP_DEFAULT_LEVEL_COLORS[4],\n} as const;\n","\"use client\";\n\nimport { Group } from \"@visx/group\";\nimport { HeatmapRect } from \"@visx/heatmap\";\nimport {\n\tanimate,\n\ttype MotionValue,\n\tmotion,\n\ttype Transition,\n\tuseMotionValue,\n} from \"motion/react\";\nimport { memo, useCallback, useEffect, useMemo, useRef } from \"react\";\nimport type { ChartStatus } from \"../chart-phase\";\nimport { transitionWithDelay } from \"../motion-utils\";\nimport {\n\tcomputeHeatmapEnterFadeDelayMs,\n\tHEATMAP_DEFAULT_ENTER_EASE,\n\tHEATMAP_LOADING_BASE_CELL_OPACITY,\n\tHEATMAP_LOADING_CONCEAL_MS,\n\theatmapLoadingCellParticipates,\n\tresolveHeatmapEnterFadeDurationSec,\n} from \"./heatmap-animation\";\nimport { heatmapLevelCellFillOpacity } from \"./heatmap-colors\";\nimport {\n\ttype HeatmapBin,\n\ttype HeatmapColumn,\n\tuseHeatmap,\n\tuseHeatmapInteraction,\n} from \"./heatmap-context\";\nimport {\n\tgetHeatmapContributionLevel,\n\tisHeatmapGhostBin,\n\tisHeatmapHoverEffectEnabled,\n\tresolveHeatmapDisplayRange,\n\tresolveHeatmapHoverStyle,\n\tresolveHeatmapRowOpacity,\n} from \"./heatmap-utils\";\n\nconst HEATMAP_INACTIVE_OPACITY = 0.3;\n/** Smooth tween for inactive opacity + scale on hover. */\nconst HEATMAP_INACTIVE_TRANSITION = {\n\tduration: 0.22,\n\tease: [0.4, 0, 0.2, 1] as const,\n};\nconst HEATMAP_CONCEAL_TRANSITION = {\n\tduration: HEATMAP_LOADING_CONCEAL_MS / 1000,\n\tease: HEATMAP_DEFAULT_ENTER_EASE,\n};\n\nfunction computeHeatmapCellFaded(\n\tisCellHovering: boolean,\n\tisLevelHovering: boolean,\n\thoveredCell: { column: number; row: number } | null,\n\thoveredLegendLevel: number | null,\n\tcell: { column: number; row: number },\n\tcount: number,\n): { isHighlighted: boolean; isDimmed: boolean } {\n\tif (isCellHovering && hoveredCell) {\n\t\tconst isHighlighted =\n\t\t\thoveredCell.column === cell.column && hoveredCell.row === cell.row;\n\t\treturn { isHighlighted, isDimmed: !isHighlighted };\n\t}\n\tif (isLevelHovering && hoveredLegendLevel !== null) {\n\t\tconst isHighlighted =\n\t\t\tgetHeatmapContributionLevel(count) === hoveredLegendLevel;\n\t\treturn { isHighlighted, isDimmed: !isHighlighted };\n\t}\n\treturn { isHighlighted: false, isDimmed: false };\n}\n\ninterface SyncCellLayerParams {\n\tanimateCells: boolean;\n\tchartStatus: ChartStatus;\n\tdataOpacity: MotionValue<number>;\n\tisAwaitingLoadingConceal: boolean;\n\tisExitingToLoading: boolean;\n\tisLoadingResting: boolean;\n\tisReadyResting: boolean;\n\tisRevealActive: boolean;\n\tparticipates: boolean;\n\tpulseOpacity: MotionValue<number>;\n\treadyDataOpacity: number;\n\tshimmerOpacity: MotionValue<number>;\n\tshowLoadingCellsLayer: boolean;\n\tshowShimmerPulse: boolean;\n\tstaggeredTransition: Transition;\n}\n\nfunction syncHeatmapCellLayerOpacities(params: SyncCellLayerParams) {\n\tconst {\n\t\tanimateCells,\n\t\tchartStatus,\n\t\tdataOpacity,\n\t\tisAwaitingLoadingConceal,\n\t\tisExitingToLoading,\n\t\tisLoadingResting,\n\t\tisReadyResting,\n\t\tisRevealActive,\n\t\tparticipates,\n\t\tpulseOpacity,\n\t\treadyDataOpacity,\n\t\tshimmerOpacity,\n\t\tshowLoadingCellsLayer,\n\t\tshowShimmerPulse,\n\t\tstaggeredTransition,\n\t} = params;\n\n\tif (!animateCells) {\n\t\tif (isReadyResting) {\n\t\t\tdataOpacity.set(readyDataOpacity);\n\t\t\tshimmerOpacity.set(0);\n\t\t\tpulseOpacity.set(0);\n\t\t} else if (chartStatus === \"loading\") {\n\t\t\tdataOpacity.set(0);\n\t\t\tpulseOpacity.set(0);\n\t\t\tshimmerOpacity.set(\n\t\t\t\tparticipates && showLoadingCellsLayer\n\t\t\t\t\t? 0\n\t\t\t\t\t: HEATMAP_LOADING_BASE_CELL_OPACITY,\n\t\t\t);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (isLoadingResting) {\n\t\tanimate(dataOpacity, 0, { duration: 0 });\n\t\tif (!showShimmerPulse) {\n\t\t\tanimate(shimmerOpacity, HEATMAP_LOADING_BASE_CELL_OPACITY, {\n\t\t\t\tduration: 0,\n\t\t\t});\n\t\t}\n\t\treturn;\n\t}\n\n\tif (isRevealActive) {\n\t\tpulseOpacity.set(0);\n\t\tshimmerOpacity.set(0);\n\t\tanimate(dataOpacity, readyDataOpacity, staggeredTransition);\n\t\treturn;\n\t}\n\n\tif (isAwaitingLoadingConceal || isExitingToLoading) {\n\t\tanimate(dataOpacity, 0, HEATMAP_CONCEAL_TRANSITION);\n\t\tanimate(shimmerOpacity, 0, { duration: 0 });\n\t\treturn;\n\t}\n\n\tif (isReadyResting) {\n\t\tanimate(dataOpacity, readyDataOpacity, HEATMAP_INACTIVE_TRANSITION);\n\t\tanimate(shimmerOpacity, 0, { duration: 0 });\n\t\tpulseOpacity.set(0);\n\t}\n}\n\nexport interface HeatmapCellsProps {\n\t/** Corner radius for each cell. Default: 2 */\n\tcornerRadius?: number;\n\t/** Override the default GitHub-style green color scale. */\n\tcolorScale?: (count: number | null | undefined) => string;\n\t/** Opacity for inactive cells while hovering. Default: 0.3 */\n\tinactiveOpacity?: number;\n\t/** Scale for inactive cells while hovering. Default: 1 */\n\tinactiveScale?: number;\n\t/** Scale for the highlighted cell while hovering. Default: 1 */\n\tactiveScale?: number;\n\t/** Per-row opacity multiplier (display row index). Default: 1 */\n\trowOpacity?: number | readonly number[];\n\t/** Pointer hover + dimming. Default: true */\n\tinteractive?: boolean;\n\t/** Hide out-of-range bins (GitHub-style ghost cells). Default: true */\n\thideGhostCells?: boolean;\n}\n\ninterface HeatmapCellRectProps {\n\tcell: {\n\t\tcolumn: number;\n\t\trow: number;\n\t\tx: number;\n\t\ty: number;\n\t\twidth: number;\n\t\theight: number;\n\t\tcolor?: string;\n\t\topacity?: number;\n\t};\n\tbin: HeatmapBin;\n\tcornerRadius: number;\n\tinteractive: boolean;\n\tinactiveOpacity: number;\n\tinactiveScale: number;\n\tactiveScale: number;\n\trowOpacity: number | readonly number[] | undefined;\n\thoverState: { isHighlighted: boolean; isDimmed: boolean };\n\tonEnter: (\n\t\tcolumn: number,\n\t\trow: number,\n\t\tbin: HeatmapBin,\n\t\tx: number,\n\t\ty: number,\n\t) => void;\n\tonLeave: () => void;\n}\n\nconst HeatmapMotionCell = memo(function HeatmapMotionCell({\n\tcell,\n\tbin,\n\tcornerRadius,\n\tfillScale,\n\tinteractive,\n\tinactiveOpacity,\n\tinactiveScale,\n\tactiveScale,\n\trowOpacity,\n\thoverState,\n\tonEnter,\n\tonLeave,\n}: HeatmapCellRectProps & {\n\tfillScale: (count: number | null | undefined) => string;\n}) {\n\tconst {\n\t\tchartStatus,\n\t\tchartPhase,\n\t\tisLoaded,\n\t\trevealMode,\n\t\trevealEpoch,\n\t\tanimationDuration,\n\t\tenterTransition,\n\t\tenterStaggerScale,\n\t\tanimateCells,\n\t\tshowLoadingCells: showLoadingCellsLayer,\n\t\tloadingCellMaxOpacity,\n\t\tloadingCellRandomness,\n\t\tlevelStyles,\n\t} = useHeatmap();\n\n\tconst levelStyle =\n\t\tlevelStyles[getHeatmapContributionLevel(bin.count ?? 0)] ?? levelStyles[0];\n\tconst targetFill = fillScale(bin.count);\n\tconst emptyFill = fillScale(0);\n\tconst patternFillOpacity = heatmapLevelCellFillOpacity(levelStyle);\n\tconst dataOpacity = useMotionValue(0);\n\t/** Orchestration layer: conceal, static loading base. */\n\tconst shimmerOpacity = useMotionValue(0);\n\t/** Pulse loop only — kept separate so stagger tweens don't break re-entry. */\n\tconst pulseOpacity = useMotionValue(0);\n\tconst wasShimmerPulsingRef = useRef(false);\n\n\tconst isLoadingResting =\n\t\tchartStatus === \"loading\" && chartPhase === \"loading\";\n\tconst isAwaitingLoadingConceal =\n\t\tchartStatus === \"loading\" && chartPhase === \"ready\";\n\tconst isExitingToLoading = chartPhase === \"exitingReady\";\n\tconst isRevealActive =\n\t\tchartPhase === \"revealing\" &&\n\t\t!isLoaded &&\n\t\t(revealMode === \"fromLoading\" || revealMode === \"enter\");\n\tconst isReadyResting =\n\t\tchartStatus === \"ready\" && chartPhase === \"ready\" && isLoaded;\n\n\tconst participates = useMemo(\n\t\t() =>\n\t\t\theatmapLoadingCellParticipates(\n\t\t\t\tcell.column,\n\t\t\t\tcell.row,\n\t\t\t\tloadingCellRandomness,\n\t\t\t),\n\t\t[cell.column, cell.row, loadingCellRandomness],\n\t);\n\n\tconst showShimmerPulse =\n\t\tanimateCells && showLoadingCellsLayer && participates && isLoadingResting;\n\n\tconst fadeDurationSec = resolveHeatmapEnterFadeDurationSec(\n\t\tenterTransition,\n\t\tanimationDuration,\n\t);\n\tconst delayMs = computeHeatmapEnterFadeDelayMs({\n\t\tcolumn: cell.column,\n\t\trow: cell.row,\n\t\trevealEpoch,\n\t\tanimationDurationMs: animationDuration,\n\t\tenterStaggerScale,\n\t\tfadeDurationSec,\n\t});\n\tconst staggeredTransition = transitionWithDelay(\n\t\tenterTransition,\n\t\tdelayMs / 1000,\n\t);\n\n\tconst readyHoverStyle = resolveHeatmapHoverStyle(\n\t\thoverState.isHighlighted,\n\t\thoverState.isDimmed,\n\t\t{ inactiveOpacity, inactiveScale, activeScale },\n\t);\n\tconst rowOpacityMultiplier = resolveHeatmapRowOpacity(cell.row, rowOpacity);\n\tconst readyDataOpacity = readyHoverStyle.opacity;\n\tconst readyScale = isReadyResting ? readyHoverStyle.scale : 1;\n\tconst transformOrigin = `${cell.x + cell.width / 2}px ${cell.y + cell.height / 2}px`;\n\n\tuseEffect(() => {\n\t\tif (!showShimmerPulse) {\n\t\t\twasShimmerPulsingRef.current = false;\n\t\t\tpulseOpacity.set(0);\n\t\t\treturn;\n\t\t}\n\n\t\tconst isFreshLoadingPulse =\n\t\t\tisLoadingResting && !wasShimmerPulsingRef.current;\n\t\twasShimmerPulsingRef.current = true;\n\n\t\tif (isFreshLoadingPulse) {\n\t\t\tpulseOpacity.set(0);\n\t\t}\n\n\t\tlet cancelled = false;\n\t\tlet current: ReturnType<typeof animate> | undefined;\n\n\t\tconst pulse = async () => {\n\t\t\twhile (!cancelled) {\n\t\t\t\tconst target = Math.random() * loadingCellMaxOpacity;\n\t\t\t\tconst duration = 0.35 + Math.random() * 0.85;\n\t\t\t\tcurrent = animate(pulseOpacity, target, {\n\t\t\t\t\tduration,\n\t\t\t\t\tease: [0.45, 0, 0.55, 1],\n\t\t\t\t});\n\n\t\t\t\ttry {\n\t\t\t\t\tawait current;\n\t\t\t\t} catch {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (cancelled) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\t\twindow.setTimeout(resolve, 80 + Math.random() * 420);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tpulse().catch(() => undefined);\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tcurrent?.stop();\n\t\t};\n\t}, [isLoadingResting, loadingCellMaxOpacity, pulseOpacity, showShimmerPulse]);\n\n\tuseEffect(() => {\n\t\tsyncHeatmapCellLayerOpacities({\n\t\t\tanimateCells,\n\t\t\tchartStatus,\n\t\t\tdataOpacity,\n\t\t\tisAwaitingLoadingConceal,\n\t\t\tisExitingToLoading,\n\t\t\tisLoadingResting,\n\t\t\tisReadyResting,\n\t\t\tisRevealActive,\n\t\t\tparticipates,\n\t\t\tpulseOpacity,\n\t\t\treadyDataOpacity,\n\t\t\tshimmerOpacity,\n\t\t\tshowLoadingCellsLayer,\n\t\t\tshowShimmerPulse,\n\t\t\tstaggeredTransition,\n\t\t});\n\t}, [\n\t\tanimateCells,\n\t\tchartStatus,\n\t\tdataOpacity,\n\t\tisAwaitingLoadingConceal,\n\t\tisExitingToLoading,\n\t\tisLoadingResting,\n\t\tisReadyResting,\n\t\tisRevealActive,\n\t\tparticipates,\n\t\tpulseOpacity,\n\t\treadyDataOpacity,\n\t\tshimmerOpacity,\n\t\tshowLoadingCellsLayer,\n\t\tshowShimmerPulse,\n\t\tstaggeredTransition,\n\t]);\n\n\tconst cellProps = {\n\t\tclassName: \"visx-heatmap-rect\",\n\t\theight: cell.height,\n\t\trx: cornerRadius,\n\t\try: cornerRadius,\n\t\twidth: cell.width,\n\t\tx: cell.x,\n\t\ty: cell.y,\n\t};\n\n\treturn (\n\t\t<motion.g\n\t\t\tanimate={{ scale: readyScale }}\n\t\t\tstyle={{ transformOrigin }}\n\t\t\ttransition={HEATMAP_INACTIVE_TRANSITION}\n\t\t>\n\t\t\t<motion.rect\n\t\t\t\t{...cellProps}\n\t\t\t\tfill={targetFill}\n\t\t\t\tfillOpacity={\n\t\t\t\t\t(cell.opacity ?? 1) * patternFillOpacity * rowOpacityMultiplier\n\t\t\t\t}\n\t\t\t\tonPointerEnter={() =>\n\t\t\t\t\tonEnter(cell.column, cell.row, bin, cell.x, cell.y)\n\t\t\t\t}\n\t\t\t\tonPointerLeave={onLeave}\n\t\t\t\tstyle={{\n\t\t\t\t\tcursor: interactive ? \"pointer\" : undefined,\n\t\t\t\t\topacity: dataOpacity,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<motion.rect\n\t\t\t\t{...cellProps}\n\t\t\t\tfill={emptyFill}\n\t\t\t\tpointerEvents=\"none\"\n\t\t\t\tstyle={{\n\t\t\t\t\topacity: showShimmerPulse ? pulseOpacity : shimmerOpacity,\n\t\t\t\t}}\n\t\t\t/>\n\t\t</motion.g>\n\t);\n});\n\nexport const HeatmapCells = memo(function HeatmapCells({\n\tcornerRadius = 2,\n\tcolorScale: colorScaleProp,\n\tinactiveOpacity = HEATMAP_INACTIVE_OPACITY,\n\tinactiveScale = 1,\n\tactiveScale = 1,\n\trowOpacity,\n\tinteractive = true,\n\thideGhostCells = true,\n}: HeatmapCellsProps) {\n\tconst {\n\t\tdata,\n\t\tbinWidth,\n\t\tbinHeight,\n\t\tgap,\n\t\tmargin,\n\t\txScale,\n\t\tyScale,\n\t\tchartStatus,\n\t\tcolorScale: contextColorScale,\n\t\tfillScale: contextFillScale,\n\t} = useHeatmap();\n\tconst colorScale = colorScaleProp ?? contextColorScale;\n\tconst fillScale = contextFillScale;\n\tconst cellsInteractive = interactive && chartStatus !== \"loading\";\n\tconst {\n\t\thoveredCell,\n\t\thoveredLegendLevel,\n\t\tsetHoveredCell,\n\t\tsetHoveredLegendLevel,\n\t\tsetTooltipData,\n\t} = useHeatmapInteraction();\n\n\tconst handleCellEnter = useCallback(\n\t\t(column: number, row: number, bin: HeatmapBin, x: number, y: number) => {\n\t\t\tif (!cellsInteractive) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetHoveredLegendLevel(null);\n\t\t\tsetHoveredCell({ column, row });\n\t\t\tsetTooltipData({\n\t\t\t\tcolumn,\n\t\t\t\trow,\n\t\t\t\tcount: bin.count,\n\t\t\t\tdate: bin.date,\n\t\t\t\tx: margin.left + x + binWidth / 2,\n\t\t\t\ty: margin.top + y + binHeight / 2,\n\t\t\t});\n\t\t},\n\t\t[\n\t\t\tbinHeight,\n\t\t\tbinWidth,\n\t\t\tcellsInteractive,\n\t\t\tmargin.left,\n\t\t\tmargin.top,\n\t\t\tsetHoveredCell,\n\t\t\tsetHoveredLegendLevel,\n\t\t\tsetTooltipData,\n\t\t],\n\t);\n\n\tconst handleCellLeave = useCallback(() => {\n\t\tif (!cellsInteractive) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetHoveredCell(null);\n\t\tsetTooltipData(null);\n\t}, [cellsInteractive, setHoveredCell, setTooltipData]);\n\n\tconst inactiveEnabled = isHeatmapHoverEffectEnabled({\n\t\tinactiveOpacity,\n\t\tinactiveScale,\n\t\tactiveScale,\n\t});\n\tconst isCellHovering =\n\t\tcellsInteractive && hoveredCell !== null && inactiveEnabled;\n\tconst isLevelHovering =\n\t\tcellsInteractive && hoveredLegendLevel !== null && inactiveEnabled;\n\n\tconst displayRange = useMemo(\n\t\t() => (hideGhostCells ? resolveHeatmapDisplayRange(data) : null),\n\t\t[data, hideGhostCells],\n\t);\n\n\treturn (\n\t\t<HeatmapRect<HeatmapColumn, HeatmapBin>\n\t\t\tbinHeight={binHeight}\n\t\t\tbins={(column) => column.bins}\n\t\t\tbinWidth={binWidth}\n\t\t\tcolorScale={(count) =>\n\t\t\t\tcolorScale(typeof count === \"number\" ? count : count?.valueOf())\n\t\t\t}\n\t\t\tcount={(bin) => bin.count}\n\t\t\tdata={data}\n\t\t\tgap={gap}\n\t\t\txScale={xScale}\n\t\t\tyScale={yScale}\n\t\t>\n\t\t\t{(cells) => (\n\t\t\t\t<Group className=\"visx-heatmap-rects\">\n\t\t\t\t\t{cells.flatMap((column) =>\n\t\t\t\t\t\tcolumn.map((cell) => {\n\t\t\t\t\t\t\tconst bin = data[cell.column]?.bins[cell.row];\n\t\t\t\t\t\t\tif (!bin) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (displayRange && isHeatmapGhostBin(bin, displayRange)) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst hoverState = computeHeatmapCellFaded(\n\t\t\t\t\t\t\t\tisCellHovering,\n\t\t\t\t\t\t\t\tisLevelHovering,\n\t\t\t\t\t\t\t\thoveredCell,\n\t\t\t\t\t\t\t\thoveredLegendLevel,\n\t\t\t\t\t\t\t\tcell,\n\t\t\t\t\t\t\t\tbin.count,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<HeatmapMotionCell\n\t\t\t\t\t\t\t\t\tactiveScale={activeScale}\n\t\t\t\t\t\t\t\t\tbin={bin}\n\t\t\t\t\t\t\t\t\tcell={cell}\n\t\t\t\t\t\t\t\t\tcornerRadius={cornerRadius}\n\t\t\t\t\t\t\t\t\tfillScale={fillScale}\n\t\t\t\t\t\t\t\t\thoverState={hoverState}\n\t\t\t\t\t\t\t\t\tinactiveOpacity={inactiveOpacity}\n\t\t\t\t\t\t\t\t\tinactiveScale={inactiveScale}\n\t\t\t\t\t\t\t\t\tinteractive={cellsInteractive}\n\t\t\t\t\t\t\t\t\tkey={`heatmap-cell-${cell.column}-${cell.row}`}\n\t\t\t\t\t\t\t\t\tonEnter={handleCellEnter}\n\t\t\t\t\t\t\t\t\tonLeave={handleCellLeave}\n\t\t\t\t\t\t\t\t\trowOpacity={rowOpacity}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}),\n\t\t\t\t\t)}\n\t\t\t\t</Group>\n\t\t\t)}\n\t\t</HeatmapRect>\n\t);\n});\n\nHeatmapCells.displayName = \"HeatmapCells\";\n\nexport default HeatmapCells;\n","\"use client\";\n\nimport {\n\tPatternCircles as VisxPatternCircles,\n\tPatternHexagons as VisxPatternHexagons,\n\tPatternLines as VisxPatternLines,\n\tPatternWaves as VisxPatternWaves,\n} from \"@visx/pattern\";\nimport type { ComponentProps } from \"react\";\n\nexport function PatternLines(props: ComponentProps<typeof VisxPatternLines>) {\n\treturn <VisxPatternLines {...props} />;\n}\nPatternLines.displayName = \"PatternLines\";\n\nexport function PatternCircles(\n\tprops: ComponentProps<typeof VisxPatternCircles>,\n) {\n\treturn <VisxPatternCircles {...props} />;\n}\nPatternCircles.displayName = \"PatternCircles\";\n\nexport function PatternWaves(props: ComponentProps<typeof VisxPatternWaves>) {\n\treturn <VisxPatternWaves {...props} />;\n}\nPatternWaves.displayName = \"PatternWaves\";\n\nexport function PatternHexagons(\n\tprops: ComponentProps<typeof VisxPatternHexagons>,\n) {\n\treturn <VisxPatternHexagons {...props} />;\n}\nPatternHexagons.displayName = \"PatternHexagons\";\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { PatternCircles, PatternLines } from \"./visx-pattern\";\n\nexport const PATTERN_PRESET_IDS = [\n\t\"none\",\n\t\"diagonal\",\n\t\"horizontal\",\n\t\"vertical\",\n\t\"cross\",\n\t\"dots\",\n\t\"circles\",\n\t\"accent\",\n] as const;\n\nexport type PatternPresetId = (typeof PATTERN_PRESET_IDS)[number];\n\nexport interface PatternPresetOptions {\n\tcolor?: string;\n\tscale?: number;\n\tstrokeWidth?: number;\n\tradius?: number;\n\tcomplement?: boolean;\n\tfill?: string;\n\t/** Dot grid only — when false, render hollow dots (stroke only). Default: true */\n\tdotFill?: boolean;\n\ttileBackground?: string;\n}\n\n/** Presets rendered with @visx/pattern `PatternCircles`. */\nexport function isCirclePattern(preset: PatternPresetId): boolean {\n\treturn preset === \"circles\" || preset === \"dots\";\n}\n\n/** @deprecated Use `isCirclePattern`. */\nexport function isCirclesPattern(preset: PatternPresetId): boolean {\n\treturn isCirclePattern(preset);\n}\n\nexport function patternPresetTileSize(\n\tpreset: PatternPresetId,\n\tscale = 1,\n): { width: number; height: number; strokeWidth: number } {\n\tlet base = { width: 6, height: 6, strokeWidth: 1 };\n\tif (preset === \"dots\") {\n\t\tbase = { width: 10, height: 10, strokeWidth: 0 };\n\t} else if (preset === \"cross\") {\n\t\tbase = { width: 8, height: 8, strokeWidth: 1 };\n\t} else if (preset === \"circles\") {\n\t\tbase = { width: 6, height: 6, strokeWidth: 1 };\n\t}\n\n\treturn {\n\t\twidth: base.width * scale,\n\t\theight: base.height * scale,\n\t\tstrokeWidth: base.strokeWidth * scale,\n\t};\n}\n\nfunction renderPatternCircles(\n\tpreset: \"dots\" | \"circles\",\n\t_id: string,\n\tcolor: string,\n\tcommon: {\n\t\tid: string;\n\t\theight: number;\n\t\twidth: number;\n\t\tstrokeWidth: number;\n\t\tbackground?: string;\n\t},\n\toptions: PatternPresetOptions,\n\tscale: number,\n) {\n\tconst isDotGrid = preset === \"dots\";\n\tconst radius =\n\t\toptions.radius ?? (isDotGrid ? Math.max(0.5, 1.5 * scale) : 2 * scale);\n\tconst dotFillEnabled = options.dotFill !== false;\n\n\tif (isDotGrid) {\n\t\tconst dotFill = dotFillEnabled ? options.fill || color : undefined;\n\t\treturn (\n\t\t\t<PatternCircles\n\t\t\t\t{...common}\n\t\t\t\tcomplement={options.complement}\n\t\t\t\tfill={dotFill}\n\t\t\t\tradius={radius}\n\t\t\t\tstroke={dotFillEnabled && options.fill ? undefined : color}\n\t\t\t\tstrokeWidth={\n\t\t\t\t\tdotFillEnabled && !options.fill\n\t\t\t\t\t\t? (options.strokeWidth ?? 0)\n\t\t\t\t\t\t: (options.strokeWidth ?? 1)\n\t\t\t\t}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<PatternCircles\n\t\t\t{...common}\n\t\t\tcomplement={options.complement}\n\t\t\tfill={options.fill || undefined}\n\t\t\tradius={radius}\n\t\t\tstroke={color}\n\t\t\tstrokeWidth={options.strokeWidth ?? common.strokeWidth}\n\t\t/>\n\t);\n}\n\n/** Renders a @visx/pattern definition node for the given preset. */\nexport function renderPatternPreset(\n\tpreset: PatternPresetId,\n\tid: string,\n\toptions: PatternPresetOptions = {},\n): ReactNode {\n\tif (preset === \"none\") {\n\t\treturn null;\n\t}\n\n\tconst color = options.color ?? \"var(--chart-1)\";\n\tconst scale = options.scale ?? 1;\n\tconst tile = patternPresetTileSize(preset, scale);\n\tconst common = {\n\t\tid,\n\t\theight: tile.height,\n\t\twidth: tile.width,\n\t\tstrokeWidth: tile.strokeWidth,\n\t\t...(options.tileBackground ? { background: options.tileBackground } : {}),\n\t};\n\n\tif (preset === \"dots\" || preset === \"circles\") {\n\t\treturn renderPatternCircles(preset, id, color, common, options, scale);\n\t}\n\n\tconst strokeWidth = options.strokeWidth ?? tile.strokeWidth;\n\n\tswitch (preset) {\n\t\tcase \"diagonal\":\n\t\t\treturn (\n\t\t\t\t<PatternLines\n\t\t\t\t\t{...common}\n\t\t\t\t\torientation={[\"diagonal\"]}\n\t\t\t\t\tstroke={color}\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"horizontal\":\n\t\t\treturn (\n\t\t\t\t<PatternLines\n\t\t\t\t\t{...common}\n\t\t\t\t\torientation={[\"horizontal\"]}\n\t\t\t\t\tstroke={color}\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"vertical\":\n\t\t\treturn (\n\t\t\t\t<PatternLines\n\t\t\t\t\t{...common}\n\t\t\t\t\torientation={[\"vertical\"]}\n\t\t\t\t\tstroke={color}\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"cross\":\n\t\t\treturn (\n\t\t\t\t<PatternLines\n\t\t\t\t\t{...common}\n\t\t\t\t\torientation={[\"diagonal\", \"diagonalRightToLeft\"]}\n\t\t\t\t\tstroke={color}\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"accent\":\n\t\t\treturn (\n\t\t\t\t<PatternLines\n\t\t\t\t\t{...common}\n\t\t\t\t\torientation={[\"diagonal\"]}\n\t\t\t\t\tstroke=\"#e879f9\"\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t/>\n\t\t\t);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n","\"use client\";\n\nimport { Fragment, memo } from \"react\";\nimport { renderPatternPreset } from \"../pattern-preset\";\nimport {\n\ttype HeatmapLevelStyles,\n\theatmapLevelPatternId,\n\theatmapLevelPatternRenderOptions,\n\tisHeatmapLevelPattern,\n} from \"./heatmap-colors\";\n\nexport const HeatmapPatternDefs = memo(function HeatmapPatternDefs({\n\tlevelStyles,\n}: {\n\tlevelStyles: HeatmapLevelStyles;\n}) {\n\tconst nodes = levelStyles.flatMap((style, level) => {\n\t\tif (!isHeatmapLevelPattern(style)) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst id = heatmapLevelPatternId(level);\n\t\tconst pattern = style.pattern;\n\t\tif (!pattern) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst node = renderPatternPreset(\n\t\t\tpattern,\n\t\t\tid,\n\t\t\theatmapLevelPatternRenderOptions(style),\n\t\t);\n\n\t\treturn node ? [<Fragment key={id}>{node}</Fragment>] : [];\n\t});\n\n\tif (nodes.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn <defs>{nodes}</defs>;\n});\n\nHeatmapPatternDefs.displayName = \"HeatmapPatternDefs\";\n","\"use client\";\n\nimport { memo, useEffect, useId, useMemo, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"@/lib/utils\";\nimport { useHeatmap } from \"./heatmap-context\";\nimport {\n\tbuildHeatmapSeparatorGradientStops,\n\tgetHeatmapSeparatorLineY,\n\tgetHeatmapSeparatorX,\n\ttype HeatmapSeparatorGradient,\n\ttype HeatmapSeparatorStrokeStyle,\n\tresolveHeatmapSeparatorStrokeDasharray,\n} from \"./heatmap-utils\";\n\n/** Marker for reliably identifying {@link HeatmapSeparator} in chart child trees. */\nexport const HEATMAP_SEPARATOR_MARKER = \"__isHeatmapSeparator\" as const;\n\nexport interface HeatmapSeparatorProps {\n\t/**\n\t * Insert a separator before every Nth column (e.g. 4 = divide every four weeks).\n\t * Used when `groupBy=\"every\"`. When omitted, uses `columnSeparators` from\n\t * {@link HeatmapChart} or a sibling {@link HeatmapSeparator} parsed for layout.\n\t */\n\tevery?: number;\n\t/**\n\t * Group columns by fixed interval (`every`) or calendar quarter (`quarter`).\n\t * Default: `\"every\"`.\n\t */\n\tgroupBy?: \"every\" | \"quarter\";\n\t/** Additional class name for each separator group. */\n\tclassName?: string;\n\t/**\n\t * Extra horizontal gap between column groups in pixels (shifts cells apart).\n\t * Parsed from this component by {@link HeatmapChart} for layout. Default: 0\n\t */\n\tspacing?: number;\n\t/** Half-width of the line band in pixels (line is centered). Default: 0 */\n\tpaddingX?: number;\n\t/** Inset from the bottom of the plot in pixels. Default: 0 */\n\tpaddingY?: number;\n\t/**\n\t * Distance from the chart container top to the line start, in pixels.\n\t * Use to align with {@link HeatmapXAxis} labels (e.g. `14`). The line always\n\t * extends to the plot bottom. Default: plot top (`margin.top`).\n\t */\n\tstartOffset?: number;\n\t/**\n\t * Distance below the separator line top to place quarter labels.\n\t * `0` aligns labels with the line top. Default: 0.\n\t */\n\tlabelOffset?: number;\n\t/** Draw Q1–Q4 labels at the start of each quarter group. Default: false */\n\tshowLabels?: boolean;\n\t/** Format quarter group labels. Default: `Q{n}` */\n\tlabelFormat?: (quarter: number, startDate: Date) => string;\n\t/** Additional class name for quarter labels */\n\tlabelClassName?: string;\n\t/** Solid or dashed separator line. Default: `\"solid\"` */\n\tstrokeStyle?: HeatmapSeparatorStrokeStyle;\n\t/** Dash pattern when `strokeStyle=\"dashed\"`. Default: `\"4,4\"` */\n\tstrokeDasharray?: string;\n\t/** Line stroke color when `gradient` is omitted. Default: `var(--border)` */\n\tstroke?: string;\n\t/**\n\t * Vertical stroke gradient aligned to each line's span.\n\t * Use matching `from`/`via`/`to` colors with fading opacities to soften the\n\t * top and bottom (e.g. `{ fromOpacity: 0, viaOpacity: 1, toOpacity: 0 }`).\n\t */\n\tgradient?: HeatmapSeparatorGradient;\n\t/** Line stroke width in pixels. Default: 1 */\n\tstrokeWidth?: number;\n\t/** Multiplier applied to solid strokes or gradient stop opacities. Default: 1 */\n\tstrokeOpacity?: number;\n}\n\nexport const HeatmapSeparator = memo(function HeatmapSeparator({\n\tclassName,\n\tpaddingX = 0,\n\tpaddingY = 0,\n\tstartOffset,\n\tlabelOffset = 0,\n\tshowLabels = false,\n\tlabelFormat = (quarter) => `Q${quarter}`,\n\tlabelClassName,\n\tstrokeStyle = \"solid\",\n\tstrokeDasharray,\n\tstroke = \"var(--border)\",\n\tgradient,\n\tstrokeWidth = 1,\n\tstrokeOpacity = 1,\n}: HeatmapSeparatorProps) {\n\tconst { gap, innerHeight, margin, separatorLayout, xScale, containerRef } =\n\t\tuseHeatmap();\n\n\tconst [mounted, setMounted] = useState(false);\n\tconst reactId = useId().replace(/:/g, \"\");\n\tconst gradientId = `heatmap-separator-gradient-${reactId}`;\n\n\tuseEffect(() => {\n\t\tsetMounted(true);\n\t}, []);\n\n\tconst separators = useMemo(() => {\n\t\tif (!separatorLayout) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn separatorLayout.atColumns.map((columnIndex) => ({\n\t\t\tcolumnIndex,\n\t\t\tx: getHeatmapSeparatorX(columnIndex, gap, separatorLayout, xScale),\n\t\t}));\n\t}, [gap, separatorLayout, xScale]);\n\n\tconst labels = useMemo(() => {\n\t\tif (!(showLabels && separatorLayout?.groups.length)) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn separatorLayout.groups.map((group) => ({\n\t\t\tkey: `${group.year}-Q${group.quarter}-${group.startColumnIndex}`,\n\t\t\tlabel: labelFormat(group.quarter, group.startDate),\n\t\t\tx: margin.left + xScale(group.startColumnIndex),\n\t\t}));\n\t}, [labelFormat, margin.left, separatorLayout, showLabels, xScale]);\n\n\tif (!separatorLayout) {\n\t\treturn null;\n\t}\n\n\tconst { y1: lineY1, y2: lineY2 } = getHeatmapSeparatorLineY({\n\t\tinnerHeight,\n\t\tmarginTop: margin.top,\n\t\tstartOffset,\n\t\tpaddingY,\n\t});\n\n\tconst separatorTop = startOffset ?? margin.top;\n\tconst labelTop = separatorTop + labelOffset;\n\tconst resolvedStroke = gradient ? `url(#${gradientId})` : stroke;\n\tconst resolvedStrokeDasharray = resolveHeatmapSeparatorStrokeDasharray(\n\t\tstrokeStyle,\n\t\tstrokeDasharray,\n\t);\n\tconst gradientStops = gradient\n\t\t? buildHeatmapSeparatorGradientStops(gradient, strokeOpacity)\n\t\t: null;\n\n\tconst container = containerRef.current;\n\tconst labelPortal =\n\t\tmounted && container && labels.length > 0\n\t\t\t? createPortal(\n\t\t\t\t\tlabels.map((tick) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"pointer-events-none absolute\"\n\t\t\t\t\t\t\tkey={tick.key}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\ttop: labelTop,\n\t\t\t\t\t\t\t\tleft: tick.x,\n\t\t\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\tjustifyContent: \"flex-start\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"whitespace-nowrap text-chart-label text-xs\",\n\t\t\t\t\t\t\t\t\tlabelClassName,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{tick.label}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)),\n\t\t\t\t\tcontainer,\n\t\t\t\t)\n\t\t\t: null;\n\n\tif (separators.length === 0) {\n\t\treturn labelPortal;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{gradientStops ? (\n\t\t\t\t<defs>\n\t\t\t\t\t<linearGradient\n\t\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\tid={gradientId}\n\t\t\t\t\t\tx1={0}\n\t\t\t\t\t\tx2={0}\n\t\t\t\t\t\ty1={lineY1}\n\t\t\t\t\t\ty2={lineY2}\n\t\t\t\t\t>\n\t\t\t\t\t\t{gradientStops.map((stop) => (\n\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\tkey={stop.offset}\n\t\t\t\t\t\t\t\toffset={stop.offset}\n\t\t\t\t\t\t\t\tstopColor={stop.color}\n\t\t\t\t\t\t\t\tstopOpacity={stop.opacity}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</linearGradient>\n\t\t\t\t</defs>\n\t\t\t) : null}\n\t\t\t<g>\n\t\t\t\t{separators.map((separator) => (\n\t\t\t\t\t<g\n\t\t\t\t\t\tclassName={cn(className)}\n\t\t\t\t\t\tkey={separator.columnIndex}\n\t\t\t\t\t\ttransform={`translate(${separator.x}, 0)`}\n\t\t\t\t\t>\n\t\t\t\t\t\t{paddingX > 0 ? (\n\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\tfill=\"transparent\"\n\t\t\t\t\t\t\t\theight={lineY2 - lineY1}\n\t\t\t\t\t\t\t\twidth={paddingX * 2}\n\t\t\t\t\t\t\t\tx={-paddingX}\n\t\t\t\t\t\t\t\ty={lineY1}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t<line\n\t\t\t\t\t\t\tstroke={resolvedStroke}\n\t\t\t\t\t\t\tstrokeDasharray={resolvedStrokeDasharray}\n\t\t\t\t\t\t\tstrokeOpacity={gradient ? undefined : strokeOpacity}\n\t\t\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\t\t\tx1={0}\n\t\t\t\t\t\t\tx2={0}\n\t\t\t\t\t\t\ty1={lineY1}\n\t\t\t\t\t\t\ty2={lineY2}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</g>\n\t\t\t\t))}\n\t\t\t</g>\n\t\t\t{labelPortal}\n\t\t</>\n\t);\n});\n\n(HeatmapSeparator as unknown as Record<string, boolean>)[\n\tHEATMAP_SEPARATOR_MARKER\n] = true;\n\nHeatmapSeparator.displayName = \"HeatmapSeparator\";\n\nexport default HeatmapSeparator;\n","import type { ReactElement, ReactNode } from \"react\";\nimport { Children, isValidElement } from \"react\";\nimport { resolveChartChildElement } from \"../chart-child-passthrough\";\nimport type { HeatmapColumn } from \"./heatmap-context\";\nimport {\n\tHEATMAP_SEPARATOR_MARKER,\n\tHeatmapSeparator,\n} from \"./heatmap-separator\";\nimport type {\n\tHeatmapSeparatorGroupBy,\n\tHeatmapSeparatorLayout,\n\tHeatmapSeparatorParsedConfig,\n} from \"./heatmap-utils\";\nimport { resolveHeatmapSeparatorLayout } from \"./heatmap-utils\";\n\nfunction getChildComponentName(child: ReactElement): string {\n\tconst childType = child.type as { displayName?: string; name?: string };\n\treturn typeof child.type === \"function\"\n\t\t? childType.displayName || childType.name || \"\"\n\t\t: \"\";\n}\n\nfunction isHeatmapSeparatorElement(child: ReactElement): boolean {\n\tconst resolved = resolveChartChildElement(child);\n\tconst type = resolved.type as { [HEATMAP_SEPARATOR_MARKER]?: boolean };\n\treturn (\n\t\tresolved.type === HeatmapSeparator ||\n\t\ttype[HEATMAP_SEPARATOR_MARKER] === true ||\n\t\tgetChildComponentName(resolved) === \"HeatmapSeparator\"\n\t);\n}\n\nfunction readHeatmapSeparatorConfig(\n\tchild: ReactElement,\n): HeatmapSeparatorParsedConfig | null {\n\tconst props = resolveChartChildElement(child).props as {\n\t\tevery?: number;\n\t\tgroupBy?: HeatmapSeparatorGroupBy;\n\t\tspacing?: number;\n\t};\n\tconst groupBy = props.groupBy ?? \"every\";\n\n\tif (groupBy === \"quarter\") {\n\t\treturn {\n\t\t\tgroupBy: \"quarter\",\n\t\t\tspacing: props.spacing ?? 0,\n\t\t};\n\t}\n\n\tif (props.every == null || props.every <= 0) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tgroupBy: \"every\",\n\t\tevery: props.every,\n\t\tspacing: props.spacing ?? 0,\n\t};\n}\n\n/** Reads the first {@link HeatmapSeparator} child for separator config. */\nexport function resolveHeatmapSeparatorConfig(\n\tchildren: ReactNode,\n\tchartSeparators?: HeatmapSeparatorParsedConfig | null,\n): HeatmapSeparatorParsedConfig | null {\n\tlet config: HeatmapSeparatorParsedConfig | null = null;\n\n\tconst visit = (node: ReactNode) => {\n\t\tif (config) {\n\t\t\treturn;\n\t\t}\n\n\t\tChildren.forEach(node, (child) => {\n\t\t\tif (config || !isValidElement(child)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isHeatmapSeparatorElement(child)) {\n\t\t\t\tconfig = readHeatmapSeparatorConfig(child);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst childProps = child.props as { children?: ReactNode } | undefined;\n\t\t\tif (childProps?.children) {\n\t\t\t\tvisit(childProps.children);\n\t\t\t}\n\t\t});\n\t};\n\n\tvisit(children);\n\treturn config ?? normalizeHeatmapSeparatorConfig(chartSeparators);\n}\n\nfunction normalizeHeatmapSeparatorConfig(\n\tconfig?: HeatmapSeparatorParsedConfig | null,\n): HeatmapSeparatorParsedConfig | null {\n\tif (!config) {\n\t\treturn null;\n\t}\n\n\tif (config.groupBy === \"quarter\") {\n\t\treturn {\n\t\t\tgroupBy: \"quarter\",\n\t\t\tspacing: config.spacing ?? 0,\n\t\t};\n\t}\n\n\tif (!config.every || config.every <= 0) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tgroupBy: \"every\",\n\t\tevery: config.every,\n\t\tspacing: config.spacing ?? 0,\n\t};\n}\n\n/** Merges chart prop and child-derived config, then resolves column indices from data. */\nexport function resolveHeatmapSeparatorConfigWithData(\n\tchildren: ReactNode,\n\tcolumns: HeatmapColumn[],\n\tchartSeparators?: HeatmapSeparatorParsedConfig | null,\n): HeatmapSeparatorLayout | null {\n\tconst config = resolveHeatmapSeparatorConfig(children, chartSeparators);\n\treturn resolveHeatmapSeparatorLayout(config, columns);\n}\n","\"use client\";\n\nimport { ParentSize } from \"@visx/responsive\";\nimport { scaleLinear, scaleTime } from \"@visx/scale\";\nimport type { Transition } from \"motion/react\";\nimport { useReducedMotion } from \"motion/react\";\nimport {\n\ttype ReactNode,\n\tuseCallback,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport type { Margin } from \"../chart-context\";\nimport { ChartLoadingLabel } from \"../chart-loading-label\";\nimport {\n\ttype ChartPhase,\n\ttype ChartStatus,\n\tDEFAULT_CHART_STATUS,\n\tresolveRestingChartPhase,\n} from \"../chart-phase\";\nimport {\n\tHEATMAP_DEFAULT_ENTER_DURATION_MS,\n\tHEATMAP_DEFAULT_ENTER_TRANSITION,\n\tHEATMAP_DEFAULT_LOADING_CELL_MAX_OPACITY,\n\tHEATMAP_DEFAULT_LOADING_CELL_RANDOMNESS,\n\tHEATMAP_LOADING_CHART_OPACITY,\n\tHEATMAP_LOADING_CONCEAL_MS,\n} from \"./heatmap-animation\";\nimport type { HeatmapLevelColors, HeatmapLevelStyles } from \"./heatmap-colors\";\nimport {\n\tbuildHeatmapColorScaleFromStyles,\n\tbuildHeatmapFillScale,\n\tresolveHeatmapLevelStyles,\n} from \"./heatmap-colors\";\nimport {\n\ttype HeatmapColumn,\n\ttype HeatmapContextValue,\n\tHeatmapInteractionRoot,\n\tHeatmapProvider,\n\ttype HeatmapRevealMode,\n\tuseHeatmap,\n\tuseHeatmapInteraction,\n} from \"./heatmap-context\";\nimport { HeatmapPatternDefs } from \"./heatmap-pattern-defs\";\nimport { resolveHeatmapSeparatorConfigWithData } from \"./heatmap-resolve-separator\";\nimport {\n\tfilterHeatmapColumns,\n\tgetHeatmapColumnXOffset,\n\tgetHeatmapPlotInnerWidth,\n\tgetHeatmapSeparatorCount,\n\tgetHeatmapTimeExtent,\n\ttype HeatmapSeparatorLayout,\n\ttype HeatmapSeparatorParsedConfig,\n\ttype HeatmapWeekStartDay,\n\trotateHeatmapColumnBins,\n} from \"./heatmap-utils\";\n\nexport type HeatmapLayout = \"fluid\" | \"fill\";\n\nexport interface HeatmapChartProps {\n\t/** Column data — one entry per week (or category) with row bins inside. */\n\tdata: HeatmapColumn[];\n\t/** Visible time range — filters week columns that overlap the domain. */\n\txDomain?: [Date, Date];\n\t/**\n\t * Week columns used for cell sizing when `xDomain` is set. Keeps bin height\n\t * stable while scrubbing (filtered columns can vary by ±1 at boundaries).\n\t */\n\tsizingColumnCount?: number;\n\t/**\n\t * `fluid` — width drives square cells; chart height hugs the grid (GitHub-style).\n\t * `fill` — expands cells to fill the parent.\n\t */\n\tlayout?: HeatmapLayout;\n\t/** Chart margins */\n\tmargin?: Partial<Margin>;\n\t/** Fixed cell size in pixels. When 0, cells are square and sized to fit the plot. Default: 0 */\n\tbinSize?: number;\n\t/** Gap between cells in pixels. Default: 2 */\n\tgap?: number;\n\t/** Override the default color scale. */\n\tcolorScale?: (count: number | null | undefined) => string;\n\t/** Per-level colors for the Less → More scale (5 entries). */\n\tlevelColors?: HeatmapLevelColors;\n\t/** Per-level fill styles (color and optional pattern). Takes precedence over `levelColors`. */\n\tlevelStyles?: HeatmapLevelStyles;\n\t/** Optional outer aspect ratio (e.g. \"2 / 1\"). Omit to fill the parent. */\n\taspectRatio?: string;\n\t/** Additional class name for the container */\n\tclassName?: string;\n\t/** Fetch / display status. Default: `\"ready\"`. */\n\tstatus?: ChartStatus;\n\t/** Centered label while loading. */\n\tloadingLabel?: string;\n\t/** Enter animation duration in milliseconds. Default: 1600 */\n\tanimationDuration?: number;\n\t/** Motion enter transition (spring or cubic-bezier tween). */\n\tenterTransition?: Transition;\n\t/** Signature of motion URL state — triggers enter replay when it changes. */\n\trevealSignature?: string;\n\t/** Scales wave stagger delays (1 = default). */\n\tenterStaggerScale?: number;\n\t/** Play enter fade-in / loading shimmer animations. Default: true */\n\tanimate?: boolean;\n\t/** Chart opacity while loading. Default: 0.5 */\n\tloadingOpacity?: number;\n\t/** Show loading cell shimmer while loading. Default: true */\n\tshowLoadingCells?: boolean;\n\t/** Max opacity loading cells animate toward (0–1). Default: 0.5 */\n\tloadingCellMaxOpacity?: number;\n\t/** Share of cells that participate in loading shimmer (0–1). Default: 0.65 */\n\tloadingCellRandomness?: number;\n\t/**\n\t * Inserts horizontal gaps between column groups. Overridden when a\n\t * {@link HeatmapSeparator} child sets `every` / `spacing`.\n\t */\n\tcolumnSeparators?: HeatmapSeparatorParsedConfig;\n\t/**\n\t * First row of the grid — `0` = Sunday (GitHub default), `1` = Monday, etc.\n\t * Rotates column bins for display without reshaping source data.\n\t */\n\tweekStartDay?: HeatmapWeekStartDay;\n\t/** Child components (HeatmapCells, HeatmapXAxis, HeatmapYAxis) */\n\tchildren: ReactNode;\n}\n\nconst DEFAULT_MARGIN: Margin = { top: 28, right: 16, bottom: 0, left: 40 };\n\nfunction computeHeatmapDimensions({\n\twidth,\n\tparentHeight,\n\tmargin,\n\tcolumnCount,\n\trowCount,\n\tbinSize,\n\tlayout,\n\tseparator,\n}: {\n\twidth: number;\n\tparentHeight: number;\n\tmargin: Margin;\n\tcolumnCount: number;\n\trowCount: number;\n\tbinSize: number;\n\tlayout: HeatmapLayout;\n\tseparator: Pick<HeatmapSeparatorLayout, \"spacing\" | \"atColumns\"> | null;\n}) {\n\tconst innerWidth = Math.max(width - margin.left - margin.right, 0);\n\tconst availableHeight = Math.max(\n\t\tparentHeight - margin.top - margin.bottom,\n\t\t0,\n\t);\n\tconst separatorCount = separator ? getHeatmapSeparatorCount(separator) : 0;\n\tconst totalSpacing = separatorCount * (separator?.spacing ?? 0);\n\n\tlet binWidth: number;\n\tlet binHeight: number;\n\n\tif (binSize > 0) {\n\t\tbinWidth = binSize;\n\t\tbinHeight = binSize;\n\t} else if (layout === \"fluid\") {\n\t\tconst cellSize = Math.max((innerWidth - totalSpacing) / columnCount, 0);\n\t\tbinWidth = cellSize;\n\t\tbinHeight = cellSize;\n\t} else {\n\t\tconst cellSize = Math.min(\n\t\t\tMath.max((innerWidth - totalSpacing) / columnCount, 0),\n\t\t\tavailableHeight / rowCount,\n\t\t);\n\t\tbinWidth = cellSize;\n\t\tbinHeight = cellSize;\n\t}\n\n\tconst plotInnerWidth = getHeatmapPlotInnerWidth(\n\t\tcolumnCount,\n\t\tbinWidth,\n\t\tseparator,\n\t);\n\tconst innerHeight = rowCount * binHeight;\n\tconst height =\n\t\tlayout === \"fluid\"\n\t\t\t? margin.top + innerHeight + margin.bottom\n\t\t\t: Math.max(parentHeight, margin.top + innerHeight + margin.bottom);\n\tconst chartWidth =\n\t\tbinSize > 0 && layout === \"fluid\"\n\t\t\t? margin.left + plotInnerWidth + margin.right\n\t\t\t: width;\n\n\treturn {\n\t\tbinWidth,\n\t\tbinHeight,\n\t\tinnerWidth: plotInnerWidth,\n\t\tinnerHeight,\n\t\theight,\n\t\twidth: chartWidth,\n\t};\n}\n\ninterface HeatmapChartInnerProps {\n\twidth: number;\n\theight: number;\n\tdata: HeatmapColumn[];\n\txDomain?: [Date, Date];\n\tsizingColumnCount?: number;\n\tmargin: Margin;\n\tbinSize: number;\n\tgap: number;\n\tlayout: HeatmapLayout;\n\tcolorScale: (count: number | null | undefined) => string;\n\tfillScale: (count: number | null | undefined) => string;\n\tlevelStyles: HeatmapLevelStyles;\n\tchartStatus: ChartStatus;\n\tchartPhase: ChartPhase;\n\tisLoaded: boolean;\n\trevealEpoch: number;\n\tanimationDuration: number;\n\tenterTransition?: Transition;\n\tenterStaggerScale: number;\n\tanimateCells: boolean;\n\tloadingOpacity: number;\n\tshowLoadingCells: boolean;\n\tloadingCellMaxOpacity: number;\n\tloadingCellRandomness: number;\n\trevealMode: HeatmapRevealMode;\n\tloadingLabel?: string;\n\tshowLoadingLabel: boolean;\n\tcolumnSeparators?: HeatmapSeparatorParsedConfig;\n\tweekStartDay: HeatmapWeekStartDay;\n\tchildren: ReactNode;\n}\n\nfunction HeatmapChartInner({\n\twidth,\n\theight: parentHeight,\n\tdata,\n\txDomain,\n\tsizingColumnCount: sizingColumnCountProp,\n\tmargin,\n\tbinSize,\n\tgap,\n\tlayout,\n\tcolorScale,\n\tfillScale,\n\tlevelStyles,\n\tchartStatus,\n\tchartPhase,\n\tisLoaded,\n\trevealEpoch,\n\tanimationDuration,\n\tenterTransition,\n\tenterStaggerScale,\n\tanimateCells,\n\tloadingOpacity,\n\tshowLoadingCells,\n\tloadingCellMaxOpacity,\n\tloadingCellRandomness,\n\trevealMode,\n\tloadingLabel,\n\tshowLoadingLabel,\n\tcolumnSeparators,\n\tweekStartDay,\n\tchildren,\n}: HeatmapChartInnerProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\n\tconst filteredData = useMemo(\n\t\t() => filterHeatmapColumns(data, xDomain),\n\t\t[data, xDomain],\n\t);\n\n\tconst visibleData = useMemo(\n\t\t() => rotateHeatmapColumnBins(filteredData, weekStartDay),\n\t\t[filteredData, weekStartDay],\n\t);\n\n\tconst visibleColumnCount = Math.max(visibleData.length, 1);\n\tconst columnCount =\n\t\txDomain && sizingColumnCountProp != null\n\t\t\t? Math.max(sizingColumnCountProp, 1)\n\t\t\t: visibleColumnCount;\n\tconst rowCount = Math.max(visibleData[0]?.bins.length ?? 7, 1);\n\n\tconst separatorLayout = useMemo(\n\t\t() =>\n\t\t\tresolveHeatmapSeparatorConfigWithData(\n\t\t\t\tchildren,\n\t\t\t\tvisibleData,\n\t\t\t\tcolumnSeparators,\n\t\t\t),\n\t\t[children, columnSeparators, visibleData],\n\t);\n\n\tconst {\n\t\tbinWidth,\n\t\tbinHeight,\n\t\tinnerWidth,\n\t\tinnerHeight,\n\t\theight,\n\t\twidth: chartWidth,\n\t} = useMemo(\n\t\t() =>\n\t\t\tcomputeHeatmapDimensions({\n\t\t\t\twidth,\n\t\t\t\tparentHeight,\n\t\t\t\tmargin,\n\t\t\t\tcolumnCount,\n\t\t\t\trowCount,\n\t\t\t\tbinSize,\n\t\t\t\tlayout,\n\t\t\t\tseparator: separatorLayout,\n\t\t\t}),\n\t\t[\n\t\t\tbinSize,\n\t\t\tcolumnCount,\n\t\t\tlayout,\n\t\t\tmargin,\n\t\t\tparentHeight,\n\t\t\trowCount,\n\t\t\tseparatorLayout,\n\t\t\twidth,\n\t\t],\n\t);\n\n\tconst xScale = useMemo(\n\t\t() => (columnIndex: number) =>\n\t\t\tcolumnIndex * binWidth +\n\t\t\tgetHeatmapColumnXOffset(columnIndex, separatorLayout),\n\t\t[binWidth, separatorLayout],\n\t);\n\tconst yScale = useMemo(\n\t\t() => (rowIndex: number) => rowIndex * binHeight,\n\t\t[binHeight],\n\t);\n\n\tconst timeExtent = useMemo(() => getHeatmapTimeExtent(data), [data]);\n\n\tconst timeXScale = useMemo(() => {\n\t\tconst domain = timeExtent ?? [new Date(), new Date()];\n\t\treturn scaleTime({\n\t\t\tdomain,\n\t\t\trange: [0, innerWidth],\n\t\t});\n\t}, [innerWidth, timeExtent]);\n\n\tconst brushYScale = useMemo(\n\t\t() =>\n\t\t\tscaleLinear({\n\t\t\t\tdomain: [0, 1],\n\t\t\t\trange: [innerHeight, 0],\n\t\t\t}),\n\t\t[innerHeight],\n\t);\n\n\tconst contextValue = useMemo<HeatmapContextValue>(\n\t\t() => ({\n\t\t\tdata: visibleData,\n\t\t\twidth: chartWidth,\n\t\t\theight,\n\t\t\tinnerWidth,\n\t\t\tinnerHeight,\n\t\t\tmargin,\n\t\t\tbinWidth,\n\t\t\tbinHeight,\n\t\t\tgap,\n\t\t\tweekStartDay,\n\t\t\txScale,\n\t\t\tyScale,\n\t\t\tseparatorLayout,\n\t\t\ttimeXScale,\n\t\t\tbrushYScale,\n\t\t\tisReady: chartWidth >= 10 && height >= 10,\n\t\t\tcolorScale,\n\t\t\tfillScale,\n\t\t\tlevelStyles,\n\t\t\tcontainerRef,\n\t\t\tchartStatus,\n\t\t\tchartPhase,\n\t\t\tisLoaded,\n\t\t\trevealEpoch,\n\t\t\tanimationDuration,\n\t\t\tenterTransition,\n\t\t\tenterStaggerScale,\n\t\t\tanimateCells,\n\t\t\tloadingOpacity,\n\t\t\tshowLoadingCells,\n\t\t\tloadingCellMaxOpacity,\n\t\t\tloadingCellRandomness,\n\t\t\trevealMode,\n\t\t\tloadingLabel,\n\t\t\tshowLoadingLabel,\n\t\t}),\n\t\t[\n\t\t\tanimateCells,\n\t\t\tanimationDuration,\n\t\t\tbinHeight,\n\t\t\tbinWidth,\n\t\t\tbrushYScale,\n\t\t\tchartPhase,\n\t\t\tchartStatus,\n\t\t\tchartWidth,\n\t\t\tcolorScale,\n\t\t\tfillScale,\n\t\t\tenterStaggerScale,\n\t\t\tenterTransition,\n\t\t\tgap,\n\t\t\theight,\n\t\t\tinnerHeight,\n\t\t\tinnerWidth,\n\t\t\tisLoaded,\n\t\t\tloadingCellMaxOpacity,\n\t\t\tloadingCellRandomness,\n\t\t\tloadingLabel,\n\t\t\tlevelStyles,\n\t\t\tloadingOpacity,\n\t\t\tmargin,\n\t\t\trevealMode,\n\t\t\tseparatorLayout,\n\t\t\tshowLoadingCells,\n\t\t\tshowLoadingLabel,\n\t\t\trevealEpoch,\n\t\t\ttimeXScale,\n\t\t\tvisibleData,\n\t\t\tweekStartDay,\n\t\t\txScale,\n\t\t\tyScale,\n\t\t],\n\t);\n\n\tif (chartWidth < 10 || height < 10) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<HeatmapProvider value={contextValue}>\n\t\t\t<HeatmapInteractionRoot>\n\t\t\t\t<HeatmapChartSurface layout={layout}>{children}</HeatmapChartSurface>\n\t\t\t</HeatmapInteractionRoot>\n\t\t</HeatmapProvider>\n\t);\n}\n\nfunction HeatmapChartSurface({\n\tlayout,\n\tchildren,\n}: {\n\tlayout: HeatmapLayout;\n\tchildren: ReactNode;\n}) {\n\tconst {\n\t\tcontainerRef,\n\t\theight,\n\t\twidth,\n\t\tmargin,\n\t\tlevelStyles,\n\t\tchartPhase,\n\t\tloadingOpacity,\n\t\tloadingLabel,\n\t\tshowLoadingLabel,\n\t} = useHeatmap();\n\tconst { clearInteraction } = useHeatmapInteraction();\n\tconst reducedOpacity =\n\t\tchartPhase === \"loading\" || chartPhase === \"exitingReady\"\n\t\t\t? loadingOpacity\n\t\t\t: 1;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"relative w-full\", layout === \"fill\" && \"h-full\")}\n\t\t\tonPointerLeave={clearInteraction}\n\t\t\tref={containerRef}\n\t\t\tstyle={{ opacity: reducedOpacity }}\n\t\t>\n\t\t\t<svg aria-hidden=\"true\" height={height} width={width}>\n\t\t\t\t<HeatmapPatternDefs levelStyles={levelStyles} />\n\t\t\t\t<g transform={`translate(${margin.left},${margin.top})`}>{children}</g>\n\t\t\t</svg>\n\t\t\t{showLoadingLabel && loadingLabel?.trim() ? (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"pointer-events-none absolute\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\ttop: margin.top,\n\t\t\t\t\t\tleft: margin.left,\n\t\t\t\t\t\twidth: Math.max(width - margin.left - margin.right, 0),\n\t\t\t\t\t\theight: Math.max(height - margin.top - margin.bottom, 0),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<ChartLoadingLabel\n\t\t\t\t\t\texiting={chartPhase !== \"loading\"}\n\t\t\t\t\t\ttext={loadingLabel}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n\nfunction useHeatmapChartLifecycle({\n\tchartStatus,\n\tanimationDuration,\n\trevealSignature = \"\",\n\tanimate,\n}: {\n\tchartStatus: ChartStatus;\n\tanimationDuration: number;\n\trevealSignature?: string;\n\tanimate: boolean;\n}) {\n\tconst reducedMotion = useReducedMotion();\n\tconst [chartPhase, setChartPhase] = useState<ChartPhase>(() =>\n\t\tresolveRestingChartPhase(chartStatus),\n\t);\n\tconst [isLoaded, setIsLoaded] = useState(\n\t\t() => chartStatus === \"ready\" && (!animate || animationDuration <= 0),\n\t);\n\tconst [revealEpoch, setRevealEpoch] = useState(0);\n\tconst [revealMode, setRevealMode] = useState<HeatmapRevealMode>(null);\n\tconst prevStatusRef = useRef(chartStatus);\n\tconst phaseRef = useRef(chartPhase);\n\tphaseRef.current = chartPhase;\n\n\tconst animateCells = animate && !reducedMotion;\n\tconst animateEnter = animateCells && animationDuration > 0;\n\n\tconst finishReveal = useCallback(() => {\n\t\tsetIsLoaded(true);\n\t\tsetChartPhase(\"ready\");\n\t\tsetRevealMode(null);\n\t}, []);\n\n\tconst beginReveal = useCallback(() => {\n\t\tsetRevealMode(\"enter\");\n\t\tsetRevealEpoch((epoch) => epoch + 1);\n\t\tsetIsLoaded(false);\n\t\tsetChartPhase(\"revealing\");\n\t\tif (!animateEnter) {\n\t\t\tfinishReveal();\n\t\t}\n\t}, [animateEnter, finishReveal]);\n\n\tuseLayoutEffect(() => {\n\t\tconst prevStatus = prevStatusRef.current;\n\t\tif (prevStatus === chartStatus) {\n\t\t\treturn;\n\t\t}\n\t\tprevStatusRef.current = chartStatus;\n\n\t\tif (chartStatus === \"ready\" && prevStatus === \"loading\") {\n\t\t\tsetRevealMode(\"fromLoading\");\n\t\t\tsetIsLoaded(false);\n\t\t\tsetChartPhase(\"revealing\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (chartStatus === \"loading\" && prevStatus === \"ready\") {\n\t\t\tsetRevealMode(null);\n\t\t\tsetIsLoaded(false);\n\t\t\tsetChartPhase(\"exitingReady\");\n\t\t}\n\t}, [chartStatus]);\n\n\tuseEffect(() => {\n\t\tif (chartPhase !== \"exitingReady\") {\n\t\t\treturn;\n\t\t}\n\n\t\tconst timer = window.setTimeout(() => {\n\t\t\tsetChartPhase(\"loading\");\n\t\t}, HEATMAP_LOADING_CONCEAL_MS);\n\n\t\treturn () => window.clearTimeout(timer);\n\t}, [chartPhase]);\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: revealSignature replays enter\n\tuseEffect(() => {\n\t\tif (!animateEnter) {\n\t\t\tsetIsLoaded(true);\n\t\t\tsetChartPhase(resolveRestingChartPhase(chartStatus));\n\t\t\treturn;\n\t\t}\n\t\tif (chartStatus !== \"ready\") {\n\t\t\treturn;\n\t\t}\n\t\tif (phaseRef.current !== \"ready\") {\n\t\t\treturn;\n\t\t}\n\n\t\tbeginReveal();\n\t}, [\n\t\tanimateEnter,\n\t\tanimationDuration,\n\t\tbeginReveal,\n\t\tchartStatus,\n\t\trevealSignature,\n\t]);\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: revealEpoch replays finish timer\n\tuseEffect(() => {\n\t\tif (!animateEnter || chartPhase !== \"revealing\") {\n\t\t\treturn;\n\t\t}\n\n\t\tconst finishTimer = window.setTimeout(finishReveal, animationDuration);\n\t\treturn () => window.clearTimeout(finishTimer);\n\t}, [animateEnter, animationDuration, chartPhase, finishReveal, revealEpoch]);\n\n\treturn {\n\t\tchartPhase,\n\t\tisLoaded,\n\t\trevealEpoch,\n\t\trevealMode,\n\t\tanimateCells,\n\t};\n}\n\nexport function HeatmapChart({\n\tdata,\n\txDomain,\n\tsizingColumnCount,\n\tlayout = \"fluid\",\n\tmargin: marginProp,\n\tbinSize = 0,\n\tgap = 2,\n\tcolorScale: colorScaleProp,\n\tlevelColors,\n\tlevelStyles: levelStylesProp,\n\taspectRatio,\n\tclassName = \"\",\n\tstatus = DEFAULT_CHART_STATUS,\n\tloadingLabel,\n\tanimationDuration = HEATMAP_DEFAULT_ENTER_DURATION_MS,\n\tenterTransition = HEATMAP_DEFAULT_ENTER_TRANSITION,\n\trevealSignature = \"\",\n\tenterStaggerScale = 1,\n\tanimate = true,\n\tloadingOpacity = HEATMAP_LOADING_CHART_OPACITY,\n\tshowLoadingCells = true,\n\tloadingCellMaxOpacity = HEATMAP_DEFAULT_LOADING_CELL_MAX_OPACITY,\n\tloadingCellRandomness = HEATMAP_DEFAULT_LOADING_CELL_RANDOMNESS,\n\tcolumnSeparators,\n\tweekStartDay = 0,\n\tchildren,\n}: HeatmapChartProps) {\n\tconst margin = { ...DEFAULT_MARGIN, ...marginProp };\n\tconst levelStyles = useMemo(\n\t\t() => resolveHeatmapLevelStyles(levelColors, levelStylesProp),\n\t\t[levelColors, levelStylesProp],\n\t);\n\tconst colorScale = useMemo(\n\t\t() => colorScaleProp ?? buildHeatmapColorScaleFromStyles(levelStyles),\n\t\t[colorScaleProp, levelStyles],\n\t);\n\tconst fillScale = useMemo(\n\t\t() => buildHeatmapFillScale(levelStyles),\n\t\t[levelStyles],\n\t);\n\n\tconst { chartPhase, isLoaded, revealEpoch, revealMode, animateCells } =\n\t\tuseHeatmapChartLifecycle({\n\t\t\tchartStatus: status,\n\t\t\tanimationDuration,\n\t\t\trevealSignature,\n\t\t\tanimate,\n\t\t});\n\n\tconst showLoadingLabel = Boolean(\n\t\tloadingLabel?.trim() &&\n\t\tstatus === \"loading\" &&\n\t\t(chartPhase === \"loading\" || chartPhase === \"exitingReady\"),\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"relative w-full\",\n\t\t\t\tlayout === \"fill\" && \"h-full min-h-0\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={aspectRatio ? { aspectRatio } : undefined}\n\t\t>\n\t\t\t<ParentSize>\n\t\t\t\t{({ width, height: parentHeight }) => (\n\t\t\t\t\t<HeatmapChartInner\n\t\t\t\t\t\tanimateCells={animateCells}\n\t\t\t\t\t\tanimationDuration={animationDuration}\n\t\t\t\t\t\tbinSize={binSize}\n\t\t\t\t\t\tchartPhase={chartPhase}\n\t\t\t\t\t\tchartStatus={status}\n\t\t\t\t\t\tcolorScale={colorScale}\n\t\t\t\t\t\tcolumnSeparators={columnSeparators}\n\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\tenterStaggerScale={enterStaggerScale}\n\t\t\t\t\t\tenterTransition={enterTransition}\n\t\t\t\t\t\tfillScale={fillScale}\n\t\t\t\t\t\tgap={gap}\n\t\t\t\t\t\theight={parentHeight}\n\t\t\t\t\t\tisLoaded={isLoaded}\n\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\tlevelStyles={levelStyles}\n\t\t\t\t\t\tloadingCellMaxOpacity={loadingCellMaxOpacity}\n\t\t\t\t\t\tloadingCellRandomness={loadingCellRandomness}\n\t\t\t\t\t\tloadingLabel={loadingLabel}\n\t\t\t\t\t\tloadingOpacity={loadingOpacity}\n\t\t\t\t\t\tmargin={margin}\n\t\t\t\t\t\trevealEpoch={revealEpoch}\n\t\t\t\t\t\trevealMode={revealMode}\n\t\t\t\t\t\tshowLoadingCells={showLoadingCells}\n\t\t\t\t\t\tshowLoadingLabel={showLoadingLabel}\n\t\t\t\t\t\tsizingColumnCount={sizingColumnCount}\n\t\t\t\t\t\tweekStartDay={weekStartDay}\n\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\txDomain={xDomain}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</HeatmapChartInner>\n\t\t\t\t)}\n\t\t\t</ParentSize>\n\t\t</div>\n\t);\n}\n\nHeatmapChart.displayName = \"HeatmapChart\";\n\nexport default HeatmapChart;\n","\"use client\";\n\nimport { memo, useEffect, useMemo, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"@/lib/utils\";\nimport { useHeatmap } from \"./heatmap-context\";\nimport { getHeatmapColumnMonthAnchor } from \"./heatmap-utils\";\n\nexport interface HeatmapXAxisProps {\n\t/** Additional class name for labels */\n\tclassName?: string;\n}\n\nconst monthFmt = new Intl.DateTimeFormat(\"en-US\", { month: \"short\" });\n\nexport const HeatmapXAxis = memo(function HeatmapXAxis({\n\tclassName,\n}: HeatmapXAxisProps) {\n\tconst { containerRef, data, margin, xScale } = useHeatmap();\n\tconst [mounted, setMounted] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetMounted(true);\n\t}, []);\n\n\tconst labels = useMemo(() => {\n\t\tconst ticks: { label: string; x: number; key: string }[] = [];\n\t\tlet lastMonthKey = \"\";\n\n\t\tfor (let columnIndex = 0; columnIndex < data.length; columnIndex++) {\n\t\t\tconst column = data[columnIndex];\n\t\t\tif (!column) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst monthAnchor = getHeatmapColumnMonthAnchor(column);\n\t\t\tif (!monthAnchor) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst monthKey = `${monthAnchor.getFullYear()}-${monthAnchor.getMonth()}`;\n\t\t\tif (monthKey === lastMonthKey) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tticks.push({\n\t\t\t\tlabel: monthFmt.format(monthAnchor),\n\t\t\t\tx: margin.left + xScale(columnIndex),\n\t\t\t\tkey: monthKey,\n\t\t\t});\n\t\t\tlastMonthKey = monthKey;\n\t\t}\n\n\t\treturn ticks;\n\t}, [data, margin.left, xScale]);\n\n\tconst container = containerRef.current;\n\tif (!(mounted && container)) {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\tlabels.map((tick) => (\n\t\t\t<div\n\t\t\t\tclassName=\"pointer-events-none absolute\"\n\t\t\t\tkey={tick.key}\n\t\t\t\tstyle={{\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: tick.x,\n\t\t\t\t\twidth: 0,\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tjustifyContent: \"flex-start\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"whitespace-nowrap text-chart-label text-xs\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{tick.label}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t)),\n\t\tcontainer,\n\t);\n});\n\nHeatmapXAxis.displayName = \"HeatmapXAxis\";\n\nexport default HeatmapXAxis;\n","\"use client\";\n\nimport { memo, useEffect, useMemo, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"@/lib/utils\";\nimport { useHeatmap } from \"./heatmap-context\";\nimport {\n\tformatHeatmapYAxisLabel,\n\tgetHeatmapDayLabels,\n\ttype HeatmapYAxisLabelFormat,\n\ttype HeatmapYAxisTickFilter,\n\tresolveHeatmapRowOpacity,\n\tshouldShowHeatmapYAxisTick,\n} from \"./heatmap-utils\";\n\nexport interface HeatmapYAxisProps {\n\t/** Additional class name for labels */\n\tclassName?: string;\n\t/** Which row ticks to display. Default: `\"odd\"` (Mon / Wed / Fri). */\n\ttickFilter?: HeatmapYAxisTickFilter;\n\t/** Label format — `\"initial\"` shows the first letter only (Mon → M). Default: `\"full\"`. */\n\tlabelFormat?: HeatmapYAxisLabelFormat;\n\t/** Per-row label opacity — mirrors {@link HeatmapCells} `rowOpacity`. */\n\trowOpacity?: number | readonly number[];\n}\n\nexport const HeatmapYAxis = memo(function HeatmapYAxis({\n\tclassName,\n\ttickFilter = \"odd\",\n\tlabelFormat = \"full\",\n\trowOpacity,\n}: HeatmapYAxisProps) {\n\tconst { containerRef, margin, binHeight, gap, yScale, weekStartDay } =\n\t\tuseHeatmap();\n\tconst [mounted, setMounted] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetMounted(true);\n\t}, []);\n\n\tconst labels = useMemo(\n\t\t() =>\n\t\t\tgetHeatmapDayLabels(weekStartDay)\n\t\t\t\t.map((label, row) => ({\n\t\t\t\t\trow,\n\t\t\t\t\tlabel: formatHeatmapYAxisLabel(label, labelFormat),\n\t\t\t\t\ty: margin.top + yScale(row) + (binHeight - gap) / 2,\n\t\t\t\t}))\n\t\t\t\t.filter((tick) => shouldShowHeatmapYAxisTick(tick.row, tickFilter)),\n\t\t[binHeight, gap, labelFormat, margin.top, tickFilter, weekStartDay, yScale],\n\t);\n\n\tconst container = containerRef.current;\n\tif (!(mounted && container)) {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\tlabels.map((tick) => (\n\t\t\t<div\n\t\t\t\tclassName=\"pointer-events-none absolute\"\n\t\t\t\tkey={tick.row}\n\t\t\t\tstyle={{\n\t\t\t\t\ttop: tick.y,\n\t\t\t\t\tleft: 4,\n\t\t\t\t\twidth: Math.max(margin.left - 12, 0),\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tjustifyContent: \"flex-end\",\n\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"whitespace-nowrap text-chart-label text-xs\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ opacity: resolveHeatmapRowOpacity(tick.row, rowOpacity) }}\n\t\t\t\t>\n\t\t\t\t\t{tick.label}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t)),\n\t\tcontainer,\n\t);\n});\n\nHeatmapYAxis.displayName = \"HeatmapYAxis\";\n\nexport default HeatmapYAxis;\n","\"use client\";\n\nimport { motion } from \"motion/react\";\nimport { memo } from \"react\";\nimport type { HeatmapLevelStyles } from \"./heatmap-colors\";\nimport {\n\tbuildHeatmapLegendGradient,\n\tresolveHeatmapHoverStyle,\n} from \"./heatmap-utils\";\n\nconst HEATMAP_INACTIVE_TRANSITION = {\n\tduration: 0.22,\n\tease: [0.4, 0, 0.2, 1] as const,\n};\n\nexport interface HeatmapLegendGradientProps {\n\tlevels: readonly number[];\n\tlevelStyles: HeatmapLevelStyles;\n\tcellSize: number;\n\tgap: number;\n\tcornerRadius: number;\n\tgradientSpan: number;\n\thighlightedLevel: number | null;\n\tisDimming: boolean;\n\tinactiveOpacity: number;\n\tinactiveScale: number;\n\tactiveScale: number;\n\tisInteractive: boolean;\n\tonEnter: (level: number) => void;\n\tonLeave: () => void;\n}\n\nexport const HeatmapLegendGradient = memo(function HeatmapLegendGradient({\n\tlevels,\n\tlevelStyles,\n\tcellSize,\n\tgap,\n\tcornerRadius,\n\tgradientSpan,\n\thighlightedLevel,\n\tisDimming,\n\tinactiveOpacity,\n\tinactiveScale,\n\tactiveScale,\n\tisInteractive,\n\tonEnter,\n\tonLeave,\n}: HeatmapLegendGradientProps) {\n\tconst barWidth = gradientSpan * cellSize + (gradientSpan - 1) * gap;\n\tconst barHeight = cellSize;\n\tconst pillRadius = Math.min(cornerRadius, barHeight / 2);\n\tconst segmentWidth = barWidth / levels.length;\n\tconst gradient = buildHeatmapLegendGradient(levelStyles);\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"relative shrink-0\"\n\t\t\tstyle={{ width: barWidth, height: barHeight }}\n\t\t>\n\t\t\t<motion.div\n\t\t\t\tanimate={{\n\t\t\t\t\topacity: isDimming && highlightedLevel === null ? inactiveOpacity : 1,\n\t\t\t\t\tscale: 1,\n\t\t\t\t}}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tclassName=\"absolute inset-0\"\n\t\t\t\tinitial={{ opacity: 1, scale: 1 }}\n\t\t\t\tstyle={{\n\t\t\t\t\tborderRadius: pillRadius,\n\t\t\t\t\tbackground: gradient,\n\t\t\t\t}}\n\t\t\t\ttransition={HEATMAP_INACTIVE_TRANSITION}\n\t\t\t/>\n\t\t\t{levels.map((level, index) => {\n\t\t\t\tconst isHighlighted = highlightedLevel === level;\n\t\t\t\tconst isDimmed = isDimming && !isHighlighted;\n\t\t\t\tconst hoverStyle = resolveHeatmapHoverStyle(isHighlighted, isDimmed, {\n\t\t\t\t\tinactiveOpacity,\n\t\t\t\t\tinactiveScale,\n\t\t\t\t\tactiveScale,\n\t\t\t\t});\n\n\t\t\t\treturn (\n\t\t\t\t\t<motion.span\n\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\topacity: hoverStyle.opacity,\n\t\t\t\t\t\t\tscale: hoverStyle.scale,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName=\"absolute top-0 block\"\n\t\t\t\t\t\tinitial={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\tkey={level}\n\t\t\t\t\t\tonPointerEnter={() => onEnter(level)}\n\t\t\t\t\t\tonPointerLeave={onLeave}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: index * segmentWidth,\n\t\t\t\t\t\t\twidth: segmentWidth,\n\t\t\t\t\t\t\theight: barHeight,\n\t\t\t\t\t\t\tcursor: isInteractive ? \"pointer\" : undefined,\n\t\t\t\t\t\t\ttransformOrigin: \"center center\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttransition={HEATMAP_INACTIVE_TRANSITION}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n});\n\nHeatmapLegendGradient.displayName = \"HeatmapLegendGradient\";\n\nexport default HeatmapLegendGradient;\n","\"use client\";\n\nimport { memo } from \"react\";\nimport { renderPatternPreset } from \"../pattern-preset\";\nimport {\n\ttype HeatmapLevelStyle,\n\theatmapLevelPatternId,\n\theatmapLevelPatternRenderOptions,\n\tisHeatmapLevelPattern,\n} from \"./heatmap-colors\";\n\nexport const HeatmapLegendSwatch = memo(function HeatmapLegendSwatch({\n\tlevel,\n\tstyle,\n\tcellSize,\n\tcornerRadius,\n}: {\n\tlevel: number;\n\tstyle: HeatmapLevelStyle;\n\tcellSize: number;\n\tcornerRadius: number;\n}) {\n\tconst shellStyle = {\n\t\twidth: cellSize,\n\t\theight: cellSize,\n\t\tborderRadius: cornerRadius,\n\t};\n\n\tif (isHeatmapLevelPattern(style) && style.pattern) {\n\t\tconst patternId = heatmapLevelPatternId(level);\n\t\tconst patternNode = renderPatternPreset(\n\t\t\tstyle.pattern,\n\t\t\tpatternId,\n\t\t\theatmapLevelPatternRenderOptions(style),\n\t\t);\n\t\tconst opacity = style.patternOpacity ?? 1;\n\n\t\treturn (\n\t\t\t<span\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tclassName=\"block shrink-0 overflow-hidden\"\n\t\t\t\tstyle={{ ...shellStyle, opacity }}\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName=\"block size-full\"\n\t\t\t\t\tviewBox={`0 0 ${cellSize} ${cellSize}`}\n\t\t\t\t>\n\t\t\t\t\t{patternNode ? <defs>{patternNode}</defs> : null}\n\t\t\t\t\t<rect\n\t\t\t\t\t\tfill={patternNode ? `url(#${patternId})` : style.color}\n\t\t\t\t\t\theight={cellSize}\n\t\t\t\t\t\trx={cornerRadius}\n\t\t\t\t\t\try={cornerRadius}\n\t\t\t\t\t\twidth={cellSize}\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t</span>\n\t\t);\n\t}\n\n\treturn (\n\t\t<span\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"block shrink-0\"\n\t\t\tstyle={{\n\t\t\t\t...shellStyle,\n\t\t\t\tbackgroundColor: style.color,\n\t\t\t\tborder: level === 0 ? `1px solid ${style.color}` : undefined,\n\t\t\t\tboxSizing: \"border-box\",\n\t\t\t}}\n\t\t/>\n\t);\n});\n\nHeatmapLegendSwatch.displayName = \"HeatmapLegendSwatch\";\n","\"use client\";\n\nimport { motion } from \"motion/react\";\nimport { memo, useCallback } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport {\n\tdefaultHeatmapColorScale,\n\ttype HeatmapLevelStyles,\n} from \"./heatmap-colors\";\nimport { useHeatmapInteractionOptional } from \"./heatmap-context\";\nimport { HeatmapLegendGradient } from \"./heatmap-legend-gradient\";\nimport { HeatmapLegendSwatch } from \"./heatmap-legend-swatch\";\nimport {\n\tgetHeatmapContributionLevel,\n\tisHeatmapHoverEffectEnabled,\n\tresolveHeatmapHoverStyle,\n} from \"./heatmap-utils\";\n\nexport const HEATMAP_LEGEND_LEVELS = [0, 1, 2, 3, 4] as const;\n\nconst HEATMAP_INACTIVE_OPACITY = 0.3;\n/** Smooth tween for inactive opacity + scale on hover. */\nconst HEATMAP_INACTIVE_TRANSITION = {\n\tduration: 0.22,\n\tease: [0.4, 0, 0.2, 1] as const,\n};\n\nexport type HeatmapLegendVariant = \"swatches\" | \"gradient\";\n\nexport interface HeatmapLegendProps {\n\t/** Side label before the swatches. Default: \"Less\" */\n\tlessLabel?: string;\n\t/** Side label after the swatches. Default: \"More\" */\n\tmoreLabel?: string;\n\t/** Swatch size in pixels. Default: 11 */\n\tcellSize?: number;\n\t/** Gap between swatches. Default: 2 */\n\tgap?: number;\n\t/** Corner radius for swatches. Default: 2 */\n\tcornerRadius?: number;\n\t/** Horizontal alignment within the legend cell. Default: \"end\" */\n\talign?: \"start\" | \"center\" | \"end\";\n\t/** Legend layout — discrete swatches or a continuous gradient bar. Default: `\"swatches\"` */\n\tvariant?: HeatmapLegendVariant;\n\t/** Gradient bar width in swatch units when `variant=\"gradient\"`. Default: 5 */\n\tgradientSpan?: number;\n\t/** Font size in pixels for side labels. */\n\tfontSize?: number;\n\t/** Additional class name for less/more labels. */\n\tlabelClassName?: string;\n\t/** Shared level styles for cells and legend swatches. */\n\tlevelStyles?: HeatmapLevelStyles;\n\t/** Override the default color scale (used when `levelStyles` is omitted). */\n\tcolorScale?: (count: number | null | undefined) => string;\n\t/** Opacity for inactive swatches while interacting. Default: 0.3 */\n\tinactiveOpacity?: number;\n\t/** Scale for inactive swatches while interacting. Default: 1 */\n\tinactiveScale?: number;\n\t/** Scale for the highlighted swatch while interacting. Default: 1 */\n\tactiveScale?: number;\n\t/** Sync dimming with chart hover. Default: true when inside HeatmapInteractionProvider */\n\tinteractive?: boolean;\n\tclassName?: string;\n}\n\nexport const HeatmapLegend = memo(function HeatmapLegend({\n\tlessLabel = \"Less\",\n\tmoreLabel = \"More\",\n\tcellSize = 11,\n\tgap = 2,\n\tcornerRadius = 2,\n\talign = \"end\",\n\tvariant = \"swatches\",\n\tgradientSpan = 5,\n\tfontSize,\n\tlabelClassName,\n\tlevelStyles: levelStylesProp,\n\tcolorScale = defaultHeatmapColorScale,\n\tinactiveOpacity = HEATMAP_INACTIVE_OPACITY,\n\tinactiveScale = 1,\n\tactiveScale = 1,\n\tinteractive,\n\tclassName,\n}: HeatmapLegendProps) {\n\tconst interaction = useHeatmapInteractionOptional();\n\tconst isInteractive = interactive ?? interaction != null;\n\tconst levelStyles =\n\t\tlevelStylesProp ??\n\t\t(HEATMAP_LEGEND_LEVELS.map((level) => ({\n\t\t\tcolor: colorScale(level),\n\t\t\tfillMode: \"solid\" as const,\n\t\t\tpattern: \"none\" as const,\n\t\t})) as unknown as HeatmapLevelStyles);\n\n\tconst {\n\t\thoveredLegendLevel,\n\t\ttooltipData,\n\t\tsetHoveredCell,\n\t\tsetHoveredLegendLevel,\n\t\tsetTooltipData,\n\t} = interaction ?? {\n\t\thoveredLegendLevel: null,\n\t\ttooltipData: null,\n\t\tsetHoveredCell: () => undefined,\n\t\tsetHoveredLegendLevel: () => undefined,\n\t\tsetTooltipData: () => undefined,\n\t};\n\n\tconst highlightedLevel =\n\t\thoveredLegendLevel ??\n\t\t(tooltipData ? getHeatmapContributionLevel(tooltipData.count) : null);\n\tconst hoverParams = { inactiveOpacity, inactiveScale, activeScale };\n\tconst inactiveEnabled = isHeatmapHoverEffectEnabled(hoverParams);\n\tconst isDimming =\n\t\tisInteractive && highlightedLevel !== null && inactiveEnabled;\n\n\tconst handleLegendEnter = useCallback(\n\t\t(level: number) => {\n\t\t\tif (!isInteractive) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetHoveredLegendLevel(level);\n\t\t\tsetHoveredCell(null);\n\t\t\tsetTooltipData(null);\n\t\t},\n\t\t[isInteractive, setHoveredCell, setHoveredLegendLevel, setTooltipData],\n\t);\n\n\tconst handleLegendLeave = useCallback(() => {\n\t\tif (!isInteractive) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetHoveredLegendLevel(null);\n\t}, [isInteractive, setHoveredLegendLevel]);\n\n\tconst labelStyle = fontSize == null ? undefined : { fontSize };\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex w-full items-center gap-1.5 text-chart-label text-xs\",\n\t\t\t\talign === \"start\" && \"justify-start\",\n\t\t\t\talign === \"center\" && \"justify-center\",\n\t\t\t\talign === \"end\" && \"justify-end\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={labelStyle}\n\t\t>\n\t\t\t<span className={labelClassName}>{lessLabel}</span>\n\t\t\t{variant === \"gradient\" ? (\n\t\t\t\t<HeatmapLegendGradient\n\t\t\t\t\tactiveScale={activeScale}\n\t\t\t\t\tcellSize={cellSize}\n\t\t\t\t\tcornerRadius={cornerRadius}\n\t\t\t\t\tgap={gap}\n\t\t\t\t\tgradientSpan={gradientSpan}\n\t\t\t\t\thighlightedLevel={highlightedLevel}\n\t\t\t\t\tinactiveOpacity={inactiveOpacity}\n\t\t\t\t\tinactiveScale={inactiveScale}\n\t\t\t\t\tisDimming={isDimming}\n\t\t\t\t\tisInteractive={isInteractive}\n\t\t\t\t\tlevelStyles={levelStyles}\n\t\t\t\t\tlevels={HEATMAP_LEGEND_LEVELS}\n\t\t\t\t\tonEnter={handleLegendEnter}\n\t\t\t\t\tonLeave={handleLegendLeave}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"flex items-center\" style={{ gap }}>\n\t\t\t\t\t{HEATMAP_LEGEND_LEVELS.map((level) => {\n\t\t\t\t\t\tconst isHighlighted = highlightedLevel === level;\n\t\t\t\t\t\tconst isDimmed = isDimming && !isHighlighted;\n\t\t\t\t\t\tconst hoverStyle = resolveHeatmapHoverStyle(\n\t\t\t\t\t\t\tisHighlighted,\n\t\t\t\t\t\t\tisDimmed,\n\t\t\t\t\t\t\thoverParams,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst style = levelStyles[level];\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<motion.span\n\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\topacity: hoverStyle.opacity,\n\t\t\t\t\t\t\t\t\tscale: hoverStyle.scale,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\tclassName=\"block shrink-0 leading-none\"\n\t\t\t\t\t\t\t\tinitial={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\t\t\tkey={level}\n\t\t\t\t\t\t\t\tonPointerEnter={() => handleLegendEnter(level)}\n\t\t\t\t\t\t\t\tonPointerLeave={handleLegendLeave}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tcursor: isInteractive ? \"pointer\" : undefined,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttransition={HEATMAP_INACTIVE_TRANSITION}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<HeatmapLegendSwatch\n\t\t\t\t\t\t\t\t\tcellSize={cellSize}\n\t\t\t\t\t\t\t\t\tcornerRadius={cornerRadius}\n\t\t\t\t\t\t\t\t\tlevel={level}\n\t\t\t\t\t\t\t\t\tstyle={style}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</motion.span>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<span className={labelClassName}>{moreLabel}</span>\n\t\t</div>\n\t);\n});\n\nHeatmapLegend.displayName = \"HeatmapLegend\";\n\nexport default HeatmapLegend;\n","\"use client\";\n\nimport { motion, useSpring } from \"motion/react\";\nimport type { RefObject } from \"react\";\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"@/lib/utils\";\nimport { type SpringConfig, useChartConfig } from \"../chart-config-context\";\nimport { chartCssVars } from \"../chart-context\";\n\nexport interface TooltipBoxProps {\n\t/** X position in pixels (relative to container) */\n\tx: number;\n\t/** Y position in pixels (relative to container) */\n\ty: number;\n\t/** Whether the tooltip is visible */\n\tvisible: boolean;\n\t/** Container ref for portal rendering */\n\tcontainerRef: RefObject<HTMLDivElement | null>;\n\t/** Container width for flip detection */\n\tcontainerWidth: number;\n\t/** Container height for bounds clamping */\n\tcontainerHeight: number;\n\t/** Offset from the target position */\n\toffset?: number;\n\t/** Custom class name */\n\tclassName?: string;\n\t/** Tooltip content */\n\tchildren: React.ReactNode;\n\t/** Override left position (bypasses internal calculation) */\n\tleft?: number | ReturnType<typeof useSpring>;\n\t/** Override top position (bypasses internal calculation) */\n\ttop?: number | ReturnType<typeof useSpring>;\n\t/** Force flip direction (for custom positioning) */\n\tflipped?: boolean;\n\t/** Per-chart override; falls back to `ChartConfigProvider.tooltipBoxSpring`. */\n\tspringConfig?: SpringConfig;\n\t/** Animate panel position with a spring. Default: true */\n\tanimate?: boolean;\n\t/** Fade/scale the panel on show. Default: true */\n\tentrance?: boolean;\n\t/** Inline styles for the inner tooltip panel. */\n\tpanelStyle?: React.CSSProperties;\n\t/**\n\t * Tooltip panel background color (CSS variable or color value).\n\t * Default: `var(--chart-tooltip-background)`.\n\t */\n\tbackgroundColor?: string;\n}\n\n// Inner-only-on-visible so `useSpring` initializes at the cursor's actual x/y\n// instead of (0, 0) on first hover.\nexport function TooltipBox(props: TooltipBoxProps) {\n\tconst [mounted, setMounted] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetMounted(true);\n\t}, []);\n\n\tconst container = props.containerRef.current;\n\tif (!(mounted && container)) {\n\t\treturn null;\n\t}\n\tif (!props.visible) {\n\t\treturn null;\n\t}\n\treturn <TooltipBoxInner {...props} container={container} />;\n}\n\nfunction TooltipBoxInner({\n\tx,\n\ty,\n\tcontainerWidth,\n\tcontainerHeight,\n\toffset = 16,\n\tclassName = \"\",\n\tchildren,\n\tleft: leftOverride,\n\ttop: topOverride,\n\tflipped: flippedOverride,\n\tspringConfig,\n\tanimate = true,\n\tentrance = true,\n\tpanelStyle,\n\tbackgroundColor = chartCssVars.tooltipBackground,\n\tcontainer,\n}: Omit<TooltipBoxProps, \"visible\" | \"containerRef\"> & {\n\tcontainer: HTMLElement;\n}) {\n\tconst { tooltipBoxSpring } = useChartConfig();\n\tconst effectiveSpring = springConfig ?? tooltipBoxSpring;\n\n\tconst tooltipRef = useRef<HTMLDivElement>(null);\n\tconst tooltipWidthRef = useRef(180);\n\tconst tooltipHeightRef = useRef(80);\n\tconst [staticPosition, setStaticPosition] = useState({ left: x, top: y });\n\n\tconst tw = tooltipWidthRef.current;\n\tconst th = tooltipHeightRef.current;\n\tconst shouldFlipX = x + tw + offset > containerWidth;\n\tconst targetX = shouldFlipX ? x - offset - tw : x + offset;\n\tconst targetY = Math.max(\n\t\toffset,\n\t\tMath.min(y - th / 2, containerHeight - th - offset),\n\t);\n\n\tconst animatedLeft = useSpring(targetX, effectiveSpring);\n\tconst animatedTop = useSpring(targetY, effectiveSpring);\n\n\tif (animate && leftOverride === undefined) {\n\t\tanimatedLeft.set(targetX);\n\t}\n\tif (animate && topOverride === undefined) {\n\t\tanimatedTop.set(targetY);\n\t}\n\n\tuseLayoutEffect(() => {\n\t\tif (!tooltipRef.current) {\n\t\t\treturn;\n\t\t}\n\t\tconst el = tooltipRef.current;\n\t\tconst w = el.offsetWidth;\n\t\tconst h = el.offsetHeight;\n\t\tif (w > 0) {\n\t\t\ttooltipWidthRef.current = w;\n\t\t}\n\t\tif (h > 0) {\n\t\t\ttooltipHeightRef.current = h;\n\t\t}\n\t\tconst w2 = tooltipWidthRef.current;\n\t\tconst h2 = tooltipHeightRef.current;\n\t\tconst flip = x + w2 + offset > containerWidth;\n\t\tconst tx = flip ? x - offset - w2 : x + offset;\n\t\tconst ty = Math.max(\n\t\t\toffset,\n\t\t\tMath.min(y - h2 / 2, containerHeight - h2 - offset),\n\t\t);\n\t\tif (!animate) {\n\t\t\tsetStaticPosition({ left: tx, top: ty });\n\t\t\treturn;\n\t\t}\n\t\tif (leftOverride === undefined) {\n\t\t\tanimatedLeft.set(tx);\n\t\t}\n\t\tif (topOverride === undefined) {\n\t\t\tanimatedTop.set(ty);\n\t\t}\n\t}, [\n\t\tx,\n\t\ty,\n\t\tcontainerWidth,\n\t\tcontainerHeight,\n\t\toffset,\n\t\tleftOverride,\n\t\ttopOverride,\n\t\tanimate,\n\t\tanimatedLeft,\n\t\tanimatedTop,\n\t]);\n\n\tconst prevFlipRef = useRef(shouldFlipX);\n\tconst [flipKey, setFlipKey] = useState(0);\n\n\tuseEffect(() => {\n\t\tif (prevFlipRef.current !== shouldFlipX) {\n\t\t\tsetFlipKey((k) => k + 1);\n\t\t\tprevFlipRef.current = shouldFlipX;\n\t\t}\n\t}, [shouldFlipX]);\n\n\tconst finalLeft = animate\n\t\t? (leftOverride ?? animatedLeft)\n\t\t: staticPosition.left;\n\tconst finalTop = animate ? (topOverride ?? animatedTop) : staticPosition.top;\n\tconst isFlipped = flippedOverride ?? shouldFlipX;\n\tconst transformOrigin = isFlipped ? \"right top\" : \"left top\";\n\n\tconst panelClassName = cn(\n\t\t\"min-w-[140px] overflow-hidden rounded-lg text-chart-tooltip-foreground shadow-lg\",\n\t\tpanelStyle?.backgroundColor === undefined &&\n\t\t\tbackgroundColor === chartCssVars.tooltipBackground &&\n\t\t\t\"bg-chart-tooltip-background\",\n\t\tpanelStyle?.backdropFilter === undefined && \"backdrop-blur-md\",\n\t);\n\tconst panelStyleResolved = {\n\t\ttransformOrigin,\n\t\t...(panelStyle?.backgroundColor === undefined && {\n\t\t\tbackgroundColor,\n\t\t}),\n\t\t...panelStyle,\n\t};\n\n\tif (!entrance) {\n\t\treturn createPortal(\n\t\t\t<div\n\t\t\t\tclassName={cn(\"pointer-events-none absolute z-50\", className)}\n\t\t\t\tref={tooltipRef}\n\t\t\t\tstyle={{ left: staticPosition.left, top: staticPosition.top }}\n\t\t\t>\n\t\t\t\t<div className={panelClassName} style={panelStyleResolved}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>,\n\t\t\tcontainer,\n\t\t);\n\t}\n\n\treturn createPortal(\n\t\t<motion.div\n\t\t\tanimate={{ opacity: 1 }}\n\t\t\tclassName={cn(\"pointer-events-none absolute z-50\", className)}\n\t\t\texit={{ opacity: 0 }}\n\t\t\tinitial={{ opacity: 0 }}\n\t\t\tref={tooltipRef}\n\t\t\tstyle={{ left: finalLeft, top: finalTop }}\n\t\t\ttransition={{ duration: 0.1 }}\n\t\t>\n\t\t\t<motion.div\n\t\t\t\tanimate={{ scale: 1, opacity: 1, x: 0 }}\n\t\t\t\tclassName={panelClassName}\n\t\t\t\tinitial={{ scale: 0.85, opacity: 0, x: isFlipped ? 20 : -20 }}\n\t\t\t\tkey={flipKey}\n\t\t\t\tstyle={panelStyleResolved}\n\t\t\t\ttransition={{ type: \"spring\", stiffness: 300, damping: 25 }}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</motion.div>\n\t\t</motion.div>,\n\t\tcontainer,\n\t);\n}\n\nTooltipBox.displayName = \"TooltipBox\";\n\nexport default TooltipBox;\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport type { HeatmapTooltipData } from \"./heatmap-context\";\n\nexport function useDelayedTooltipData(\n\ttooltipData: HeatmapTooltipData | null,\n\tshowDelay: number,\n\thideDelay: number,\n): HeatmapTooltipData | null {\n\tconst [displayData, setDisplayData] = useState<HeatmapTooltipData | null>(\n\t\tnull,\n\t);\n\tconst isShowingRef = useRef(false);\n\tconst showTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(\n\t\tundefined,\n\t);\n\tconst hideTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(\n\t\tundefined,\n\t);\n\n\tuseEffect(() => {\n\t\tif (showTimerRef.current) {\n\t\t\tclearTimeout(showTimerRef.current);\n\t\t\tshowTimerRef.current = undefined;\n\t\t}\n\t\tif (hideTimerRef.current) {\n\t\t\tclearTimeout(hideTimerRef.current);\n\t\t\thideTimerRef.current = undefined;\n\t\t}\n\n\t\tif (tooltipData) {\n\t\t\tif (isShowingRef.current) {\n\t\t\t\tsetDisplayData(tooltipData);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (showDelay === 0) {\n\t\t\t\tisShowingRef.current = true;\n\t\t\t\tsetDisplayData(tooltipData);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tshowTimerRef.current = setTimeout(() => {\n\t\t\t\tisShowingRef.current = true;\n\t\t\t\tsetDisplayData(tooltipData);\n\t\t\t}, showDelay);\n\t\t\treturn;\n\t\t}\n\n\t\tif (hideDelay === 0) {\n\t\t\tisShowingRef.current = false;\n\t\t\tsetDisplayData(null);\n\t\t\treturn;\n\t\t}\n\n\t\thideTimerRef.current = setTimeout(() => {\n\t\t\tisShowingRef.current = false;\n\t\t\tsetDisplayData(null);\n\t\t}, hideDelay);\n\t}, [tooltipData, showDelay, hideDelay]);\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tif (showTimerRef.current) {\n\t\t\t\tclearTimeout(showTimerRef.current);\n\t\t\t}\n\t\t\tif (hideTimerRef.current) {\n\t\t\t\tclearTimeout(hideTimerRef.current);\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\n\treturn displayData;\n}\n","\"use client\";\n\nimport { memo } from \"react\";\nimport { TooltipBox } from \"../tooltip/tooltip-box\";\nimport { useHeatmap, useHeatmapInteraction } from \"./heatmap-context\";\nimport {\n\tformatHeatmapContributionLabel,\n\tformatHeatmapTooltipDate,\n\tformatHeatmapTooltipWeekday,\n} from \"./heatmap-utils\";\nimport { useDelayedTooltipData } from \"./use-delayed-tooltip-data\";\n\nexport interface HeatmapTooltipProps {\n\t/** Custom contribution line (bottom section). Default: `N contribution(s)`. */\n\tformatLabel?: (count: number, date: Date) => string;\n\t/** Custom class name */\n\tclassName?: string;\n\t/** Inline styles for the tooltip panel (background, blur, etc.). */\n\tpanelStyle?: React.CSSProperties;\n\t/**\n\t * Tooltip panel background color (CSS variable or color value).\n\t * Default: `var(--chart-tooltip-background)`.\n\t */\n\tbackgroundColor?: string;\n\t/**\n\t * Delay before showing the tooltip on first hover (ms).\n\t * Moving between cells updates immediately once visible.\n\t */\n\tshowDelay?: number;\n\t/**\n\t * Grace period before hiding when the pointer leaves a cell (ms).\n\t * Helps avoid flicker when moving quickly between adjacent cells.\n\t */\n\thideDelay?: number;\n\t/**\n\t * When true, the tooltip appears and disappears instantly with no motion.\n\t */\n\tinstant?: boolean;\n}\n\nexport const HeatmapTooltip = memo(function HeatmapTooltip({\n\tformatLabel = formatHeatmapContributionLabel,\n\tclassName = \"\",\n\tpanelStyle,\n\tbackgroundColor,\n\tshowDelay = 0,\n\thideDelay = 120,\n\tinstant = false,\n}: HeatmapTooltipProps) {\n\tconst { containerRef, width, height } = useHeatmap();\n\tconst { tooltipData } = useHeatmapInteraction();\n\tconst displayData = useDelayedTooltipData(tooltipData, showDelay, hideDelay);\n\n\tif (!displayData) {\n\t\treturn null;\n\t}\n\n\tconst { count, date } = displayData;\n\n\treturn (\n\t\t<TooltipBox\n\t\t\tanimate={false}\n\t\t\tbackgroundColor={backgroundColor}\n\t\t\tclassName={className}\n\t\t\tcontainerHeight={height}\n\t\t\tcontainerRef={containerRef}\n\t\t\tcontainerWidth={width}\n\t\t\tentrance={!instant}\n\t\t\tpanelStyle={panelStyle}\n\t\t\tvisible\n\t\t\tx={displayData.x}\n\t\t\ty={displayData.y}\n\t\t>\n\t\t\t<div className=\"overflow-hidden\">\n\t\t\t\t<div className=\"px-3 py-2.5 text-left\">\n\t\t\t\t\t<div className=\"font-medium text-chart-tooltip-foreground text-xs\">\n\t\t\t\t\t\t{formatHeatmapTooltipDate(date)}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"mt-0.5 text-chart-tooltip-muted text-xs\">\n\t\t\t\t\t\t{formatHeatmapTooltipWeekday(date)}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"my-2 border-chart-tooltip-muted/30 border-t\" />\n\t\t\t\t\t<div className=\"text-chart-tooltip-foreground text-sm\">\n\t\t\t\t\t\t{formatLabel(count, date)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</TooltipBox>\n\t);\n});\n\nHeatmapTooltip.displayName = \"HeatmapTooltip\";\n\nexport default HeatmapTooltip;\n","\"use client\";\n\nimport { memo, useEffect, useMemo, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"@/lib/utils\";\nimport { useChart, useChartStable } from \"./chart-context\";\nimport { shortDateFmt } from \"./chart-formatters\";\nimport { DEFAULT_Y_DOMAIN_TWEEN_MS } from \"./chart-phase\";\nimport { LINE_LOADING_PULSE_EASE } from \"./line-loading-timing\";\n\nconst X_AXIS_POSITION_TWEEN_MS = DEFAULT_Y_DOMAIN_TWEEN_MS;\n\nexport interface XAxisProps {\n\t/** Number of ticks to show (including first and last). Default: 5. */\n\tnumTicks?: number;\n\t/** Width of the date ticker box for fade calculation. Default: 50 */\n\ttickerHalfWidth?: number;\n\t/**\n\t * `\"data\"` — tick labels snap to data rows so crosshair and tooltip stay aligned (default).\n\t * `\"domain\"` — evenly spaced ticks across the time domain (may not align with hover).\n\t */\n\ttickMode?: \"domain\" | \"data\";\n}\n\ninterface AxisTick {\n\tdate: Date;\n\tx: number;\n\tlabel: string;\n}\n\ninterface XAxisLabelProps {\n\tlabel: string;\n\tx: number;\n\tcrosshairX: number | null;\n\thoveredLabel: string | null;\n\tisHovering: boolean;\n\ttickerHalfWidth: number;\n\tanimatePosition: boolean;\n}\n\nfunction XAxisLabel({\n\tlabel,\n\tx,\n\tcrosshairX,\n\thoveredLabel,\n\tisHovering,\n\ttickerHalfWidth,\n\tanimatePosition,\n}: XAxisLabelProps) {\n\tconst fadeBuffer = 20;\n\tconst fadeRadius = tickerHalfWidth + fadeBuffer;\n\n\tlet opacity = 1;\n\tif (isHovering && crosshairX !== null) {\n\t\tconst distance = Math.abs(x - crosshairX);\n\t\tif (distance < tickerHalfWidth) {\n\t\t\topacity = 0;\n\t\t} else if (hoveredLabel && label === hoveredLabel) {\n\t\t\topacity = 0;\n\t\t} else if (distance < fadeRadius) {\n\t\t\topacity = (distance - tickerHalfWidth) / fadeBuffer;\n\t\t}\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"absolute\"\n\t\t\tstyle={{\n\t\t\t\tleft: x,\n\t\t\t\tbottom: 12,\n\t\t\t\twidth: 0,\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\tjustifyContent: \"center\",\n\t\t\t\ttransition: animatePosition\n\t\t\t\t\t? `left ${X_AXIS_POSITION_TWEEN_MS}ms cubic-bezier(${LINE_LOADING_PULSE_EASE.join(\", \")})`\n\t\t\t\t\t: undefined,\n\t\t\t}}\n\t\t>\n\t\t\t<span\n\t\t\t\tclassName={cn(\"whitespace-nowrap text-chart-label text-xs\")}\n\t\t\t\tstyle={{\n\t\t\t\t\topacity,\n\t\t\t\t\ttransition: \"opacity 0.4s ease-in-out\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t</div>\n\t);\n}\n\nconst MAX_GAP_LAYOUTS = 400;\n\nfunction binomial(n: number, k: number): number {\n\tif (k < 0 || k > n) {\n\t\treturn 0;\n\t}\n\tlet result = 1;\n\tfor (let i = 0; i < k; i++) {\n\t\tresult = (result * (n - i)) / (i + 1);\n\t}\n\treturn result;\n}\n\n/** All ways to split `span` into `parts` positive integer gaps. */\nfunction composePositiveSum(sum: number, parts: number): number[][] {\n\tif (parts === 1) {\n\t\treturn sum >= 1 ? [[sum]] : [];\n\t}\n\n\tconst layouts: number[][] = [];\n\tfor (let gap = 1; gap <= sum - (parts - 1); gap++) {\n\t\tfor (const tail of composePositiveSum(sum - gap, parts - 1)) {\n\t\t\tlayouts.push([gap, ...tail]);\n\t\t}\n\t}\n\treturn layouts;\n}\n\nfunction gapsToIndices(gaps: number[]): number[] {\n\tconst indices = [0];\n\tlet position = 0;\n\tfor (const gap of gaps) {\n\t\tposition += gap;\n\t\tindices.push(position);\n\t}\n\treturn indices;\n}\n\nfunction indicesForTickCount(length: number, tickCount: number): number[] {\n\tconst span = length - 1;\n\tif (span <= 0) {\n\t\treturn [0];\n\t}\n\n\tconst rawIndices = Array.from({ length: tickCount }, (_, index) =>\n\t\tMath.round((index / (tickCount - 1)) * span),\n\t);\n\n\tconst indices = [...new Set(rawIndices)].sort((a, b) => a - b);\n\tif (indices[0] !== 0) {\n\t\tindices.unshift(0);\n\t}\n\tif (indices.at(-1) !== span) {\n\t\tindices.push(span);\n\t}\n\n\treturn [...new Set(indices)].sort((a, b) => a - b);\n}\n\nfunction allIndexLayouts(length: number, tickCount: number): number[][] {\n\tconst span = length - 1;\n\tif (span <= 0) {\n\t\treturn [[0]];\n\t}\n\n\tconst gapCount = tickCount - 1;\n\tif (gapCount <= 0) {\n\t\treturn [[0]];\n\t}\n\n\tconst layoutCount = binomial(span - 1, gapCount - 1);\n\tif (layoutCount > MAX_GAP_LAYOUTS) {\n\t\treturn [indicesForTickCount(length, tickCount)];\n\t}\n\n\treturn composePositiveSum(span, gapCount).map(gapsToIndices);\n}\n\nfunction dedupeIndicesByLabel(\n\tindices: number[],\n\tdata: Record<string, unknown>[],\n\tdateLabels: string[],\n\txAccessor: (d: Record<string, unknown>) => Date,\n): number[] {\n\tconst seenLabels = new Set<string>();\n\tconst deduped: number[] = [];\n\n\tfor (const index of indices) {\n\t\tconst point = data[index];\n\t\tif (!point) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst label = dateLabels[index] ?? shortDateFmt.format(xAccessor(point));\n\t\tif (seenLabels.has(label)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseenLabels.add(label);\n\t\tdeduped.push(index);\n\t}\n\n\treturn deduped;\n}\n\ninterface TickLayoutScore {\n\tscore: number;\n\tsymmetryPenalty: number;\n\tcountDistance: number;\n\t/** 0 = smallest gap at end, 1 = at start, 2 = in the middle */\n\tedgePreference: number;\n}\n\nfunction indexGaps(indices: number[]): number[] {\n\tconst gaps: number[] = [];\n\tfor (let i = 1; i < indices.length; i++) {\n\t\tconst current = indices[i];\n\t\tconst previous = indices[i - 1];\n\t\tif (current == null || previous == null) {\n\t\t\tcontinue;\n\t\t}\n\t\tgaps.push(current - previous);\n\t}\n\treturn gaps;\n}\n\nfunction smallestGapEdgePreference(indices: number[]): number {\n\tconst gaps = indexGaps(indices);\n\tconst smallestGap = Math.min(...gaps);\n\tconst smallestGapIndex = gaps.indexOf(smallestGap);\n\tif (smallestGapIndex === gaps.length - 1) {\n\t\treturn 0;\n\t}\n\tif (smallestGapIndex === 0) {\n\t\treturn 1;\n\t}\n\treturn 2;\n}\n\nfunction scoreTickLayout(\n\tindices: number[],\n\tresolveXPx: (index: number) => number,\n\ttargetCount: number,\n): TickLayoutScore {\n\tif (indices.length < 2) {\n\t\treturn {\n\t\t\tscore: Number.POSITIVE_INFINITY,\n\t\t\tsymmetryPenalty: Number.POSITIVE_INFINITY,\n\t\t\tcountDistance: Number.POSITIVE_INFINITY,\n\t\t\tedgePreference: Number.POSITIVE_INFINITY,\n\t\t};\n\t}\n\n\tconst pixelGaps: number[] = [];\n\tfor (let i = 1; i < indices.length; i++) {\n\t\tconst current = indices[i];\n\t\tconst previous = indices[i - 1];\n\t\tif (current == null || previous == null) {\n\t\t\tcontinue;\n\t\t}\n\t\tpixelGaps.push(resolveXPx(current) - resolveXPx(previous));\n\t}\n\n\tconst minGap = Math.min(...pixelGaps);\n\tconst maxGap = Math.max(...pixelGaps);\n\tconst meanGap =\n\t\tpixelGaps.reduce((sum, gap) => sum + gap, 0) / pixelGaps.length;\n\tconst spreadRatio =\n\t\tmeanGap > 0 ? (maxGap - minGap) / meanGap : maxGap - minGap;\n\tconst countDistance = Math.abs(indices.length - targetCount);\n\n\tconst gaps = indexGaps(indices);\n\tconst smallestGap = Math.min(...gaps);\n\tconst smallestGapIndex = gaps.indexOf(smallestGap);\n\tconst interiorPenalty =\n\t\tsmallestGapIndex > 0 && smallestGapIndex < gaps.length - 1 ? 0.08 : 0;\n\n\tconst symmetryPenalty =\n\t\tgaps.reduce((penalty, gap, index) => {\n\t\t\treturn penalty + Math.abs(gap - (gaps.at(-1 - index) ?? gap));\n\t\t}, 0) / gaps.length;\n\n\treturn {\n\t\tscore:\n\t\t\tspreadRatio +\n\t\t\t0.1 * countDistance +\n\t\t\tinteriorPenalty +\n\t\t\tsymmetryPenalty * 0.02,\n\t\tsymmetryPenalty,\n\t\tcountDistance,\n\t\tedgePreference: smallestGapEdgePreference(indices),\n\t};\n}\n\nfunction isBetterTickLayout(\n\tnext: TickLayoutScore,\n\tbest: TickLayoutScore,\n\tnextCountDistance: number,\n\tbestCountDistance: number,\n): boolean {\n\tif (next.score < best.score - 1e-6) {\n\t\treturn true;\n\t}\n\tif (Math.abs(next.score - best.score) > 1e-6) {\n\t\treturn false;\n\t}\n\tif (nextCountDistance < bestCountDistance) {\n\t\treturn true;\n\t}\n\tif (nextCountDistance > bestCountDistance) {\n\t\treturn false;\n\t}\n\tif (next.symmetryPenalty < best.symmetryPenalty - 1e-6) {\n\t\treturn true;\n\t}\n\tif (next.symmetryPenalty > best.symmetryPenalty + 1e-6) {\n\t\treturn false;\n\t}\n\treturn next.edgePreference < best.edgePreference;\n}\n\n/**\n * Picks tick indices with the most even on-screen spacing. Tries\n * `targetCount ± 1` and evaluates every gap layout when feasible.\n */\nexport function selectEvenlySpacedIndices(\n\tlength: number,\n\ttargetCount: number,\n\toptions?: {\n\t\tdata?: Record<string, unknown>[];\n\t\tdateLabels?: string[];\n\t\txAccessor?: (d: Record<string, unknown>) => Date;\n\t\tresolveXPx?: (index: number) => number;\n\t},\n): number[] {\n\tif (length <= 0) {\n\t\treturn [];\n\t}\n\tif (length === 1) {\n\t\treturn [0];\n\t}\n\tif (length <= targetCount) {\n\t\treturn Array.from({ length }, (_, index) => index);\n\t}\n\n\tconst resolveXPx = options?.resolveXPx ?? ((index: number) => index);\n\n\tconst minCount = Math.max(2, targetCount - 1);\n\tconst maxCount = Math.min(length, targetCount + 1);\n\n\tlet bestIndices = indicesForTickCount(length, targetCount);\n\tlet bestScore = scoreTickLayout(bestIndices, resolveXPx, targetCount);\n\tlet bestCountDistance = bestScore.countDistance;\n\n\tfor (let tickCount = minCount; tickCount <= maxCount; tickCount++) {\n\t\tfor (const rawIndices of allIndexLayouts(length, tickCount)) {\n\t\t\tconst indices =\n\t\t\t\toptions?.data && options.dateLabels && options.xAccessor\n\t\t\t\t\t? dedupeIndicesByLabel(\n\t\t\t\t\t\t\trawIndices,\n\t\t\t\t\t\t\toptions.data,\n\t\t\t\t\t\t\toptions.dateLabels,\n\t\t\t\t\t\t\toptions.xAccessor,\n\t\t\t\t\t\t)\n\t\t\t\t\t: rawIndices;\n\n\t\t\tif (indices.length < 2) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst layoutScore = scoreTickLayout(indices, resolveXPx, targetCount);\n\t\t\tconst countDistance = Math.abs(indices.length - targetCount);\n\n\t\t\tif (\n\t\t\t\tisBetterTickLayout(\n\t\t\t\t\tlayoutScore,\n\t\t\t\t\tbestScore,\n\t\t\t\t\tcountDistance,\n\t\t\t\t\tbestCountDistance,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tbestIndices = indices;\n\t\t\t\tbestScore = layoutScore;\n\t\t\t\tbestCountDistance = countDistance;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn bestIndices;\n}\n\nfunction buildDataAlignedTicks({\n\tdata,\n\tdateLabels,\n\tmarginLeft,\n\ttargetTickCount,\n\txAccessor,\n\txScale,\n}: {\n\tdata: Record<string, unknown>[];\n\tdateLabels: string[];\n\tmarginLeft: number;\n\ttargetTickCount: number;\n\txAccessor: (d: Record<string, unknown>) => Date;\n\txScale: (date: Date) => number | undefined;\n}): AxisTick[] {\n\tconst seenLabels = new Set<string>();\n\tconst ticks: AxisTick[] = [];\n\n\tconst resolveXPx = (index: number) => {\n\t\tconst point = data[index];\n\t\tif (!point) {\n\t\t\treturn index;\n\t\t}\n\t\treturn xScale(xAccessor(point)) ?? 0;\n\t};\n\n\tfor (const index of selectEvenlySpacedIndices(data.length, targetTickCount, {\n\t\tdata,\n\t\tdateLabels,\n\t\tresolveXPx,\n\t\txAccessor,\n\t})) {\n\t\tconst point = data[index];\n\t\tif (!point) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst date = xAccessor(point);\n\t\tconst label = dateLabels[index] ?? shortDateFmt.format(date);\n\t\tif (seenLabels.has(label)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseenLabels.add(label);\n\t\tticks.push({\n\t\t\tdate,\n\t\t\tlabel,\n\t\t\tx: (xScale(date) ?? 0) + marginLeft,\n\t\t});\n\t}\n\n\treturn ticks;\n}\n\nfunction buildDomainTicks({\n\tmarginLeft,\n\tnumTicks,\n\txScale,\n}: {\n\tmarginLeft: number;\n\tnumTicks: number;\n\txScale: {\n\t\tdomain: () => Date[];\n\t\t(date: Date): number | undefined;\n\t};\n}): AxisTick[] {\n\tconst domain = xScale.domain();\n\tconst startDate = domain[0];\n\tconst endDate = domain[1];\n\n\tif (!(startDate && endDate)) {\n\t\treturn [];\n\t}\n\n\tconst startTime = startDate.getTime();\n\tconst endTime = endDate.getTime();\n\tconst timeRange = endTime - startTime;\n\tconst tickCount = Math.max(2, numTicks);\n\tconst seenLabels = new Set<string>();\n\tconst ticks: AxisTick[] = [];\n\n\tfor (let i = 0; i < tickCount; i++) {\n\t\tconst t = i / (tickCount - 1);\n\t\tconst date = new Date(startTime + t * timeRange);\n\t\tconst label = shortDateFmt.format(date);\n\t\tif (seenLabels.has(label)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseenLabels.add(label);\n\t\tticks.push({\n\t\t\tdate,\n\t\t\tlabel,\n\t\t\tx: (xScale(date) ?? 0) + marginLeft,\n\t\t});\n\t}\n\n\treturn ticks;\n}\n\nfunction domainExtendsPastData(\n\tdata: Record<string, unknown>[],\n\txAccessor: (d: Record<string, unknown>) => Date,\n\txScale: { domain: () => Date[] },\n): boolean {\n\tif (data.length === 0) {\n\t\treturn false;\n\t}\n\tconst domainEnd = xScale.domain()[1];\n\tconst lastPoint = data.at(-1);\n\tif (!(domainEnd && lastPoint)) {\n\t\treturn false;\n\t}\n\treturn domainEnd.getTime() > xAccessor(lastPoint).getTime();\n}\n\n/** Domain ticks for the projection tail when brush keeps data-aligned labels. */\nfunction appendProjectionTailTicks(\n\tticks: AxisTick[],\n\tdata: Record<string, unknown>[],\n\txAccessor: (d: Record<string, unknown>) => Date,\n\txScale: {\n\t\tdomain: () => Date[];\n\t\t(date: Date): number | undefined;\n\t},\n\tmarginLeft: number,\n\tmaxExtraTicks: number,\n): AxisTick[] {\n\tif (data.length === 0 || maxExtraTicks <= 0) {\n\t\treturn ticks;\n\t}\n\n\tconst lastPoint = data.at(-1);\n\tconst domainEnd = xScale.domain()[1];\n\tif (!(lastPoint && domainEnd)) {\n\t\treturn ticks;\n\t}\n\n\tconst lastDate = xAccessor(lastPoint);\n\tconst startTime = lastDate.getTime();\n\tconst endTime = domainEnd.getTime();\n\tif (endTime <= startTime) {\n\t\treturn ticks;\n\t}\n\n\tconst seenLabels = new Set(ticks.map((tick) => tick.label));\n\tconst extras: AxisTick[] = [];\n\tconst extraCount = Math.min(maxExtraTicks, 3);\n\n\tfor (let i = 1; i <= extraCount; i++) {\n\t\tconst date = new Date(\n\t\t\tstartTime + (i / (extraCount + 1)) * (endTime - startTime),\n\t\t);\n\t\tconst label = shortDateFmt.format(date);\n\t\tif (seenLabels.has(label)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseenLabels.add(label);\n\t\textras.push({\n\t\t\tdate,\n\t\t\tlabel,\n\t\t\tx: (xScale(date) ?? 0) + marginLeft,\n\t\t});\n\t}\n\n\tconst endLabel = shortDateFmt.format(domainEnd);\n\tif (!seenLabels.has(endLabel)) {\n\t\textras.push({\n\t\t\tdate: domainEnd,\n\t\t\tlabel: endLabel,\n\t\t\tx: (xScale(domainEnd) ?? 0) + marginLeft,\n\t\t});\n\t}\n\n\tif (extras.length === 0) {\n\t\treturn ticks;\n\t}\n\n\treturn [...ticks, ...extras].sort((a, b) => a.x - b.x);\n}\n\nexport function XAxis(props: XAxisProps) {\n\tconst { containerRef } = useChartStable();\n\tconst [mounted, setMounted] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetMounted(true);\n\t}, []);\n\n\tconst container = containerRef.current;\n\tif (!(mounted && container)) {\n\t\treturn null;\n\t}\n\n\treturn <XAxisInner {...props} container={container} />;\n}\n\nconst XAxisInner = memo(function XAxisInner({\n\tnumTicks = 5,\n\ttickerHalfWidth = 50,\n\ttickMode = \"data\",\n\tcontainer,\n}: XAxisProps & { container: HTMLDivElement }) {\n\tconst { xScale, margin, tooltipData, data, xAccessor, dateLabels, xDomain } =\n\t\tuseChart();\n\n\tconst labelsToShow = useMemo(() => {\n\t\tconst projectionExtendsScale =\n\t\t\ttickMode === \"data\" && domainExtendsPastData(data, xAccessor, xScale);\n\n\t\tif (tickMode === \"domain\") {\n\t\t\treturn buildDomainTicks({\n\t\t\t\tmarginLeft: margin.left,\n\t\t\t\tnumTicks,\n\t\t\t\txScale,\n\t\t\t});\n\t\t}\n\n\t\t// No brush: evenly spaced ticks across the full domain (data + projection).\n\t\tif (projectionExtendsScale && xDomain == null) {\n\t\t\treturn buildDomainTicks({\n\t\t\t\tmarginLeft: margin.left,\n\t\t\t\tnumTicks,\n\t\t\t\txScale,\n\t\t\t});\n\t\t}\n\n\t\tconst dataTicks = buildDataAlignedTicks({\n\t\t\tdata,\n\t\t\tdateLabels,\n\t\t\tmarginLeft: margin.left,\n\t\t\ttargetTickCount: numTicks,\n\t\t\txAccessor,\n\t\t\txScale,\n\t\t});\n\n\t\t// Brush: keep data-aligned ticks, add labels only in the projection tail.\n\t\tif (projectionExtendsScale && xDomain != null) {\n\t\t\treturn appendProjectionTailTicks(\n\t\t\t\tdataTicks,\n\t\t\t\tdata,\n\t\t\t\txAccessor,\n\t\t\t\txScale,\n\t\t\t\tmargin.left,\n\t\t\t\tMath.max(1, numTicks - dataTicks.length + 1),\n\t\t\t);\n\t\t}\n\n\t\treturn dataTicks;\n\t}, [\n\t\ttickMode,\n\t\txDomain,\n\t\tdata,\n\t\tdateLabels,\n\t\txAccessor,\n\t\txScale,\n\t\tmargin.left,\n\t\tnumTicks,\n\t]);\n\n\tconst isHovering = tooltipData !== null;\n\tconst crosshairX = tooltipData ? tooltipData.x + margin.left : null;\n\tconst hoveredLabel =\n\t\tisHovering && tooltipData\n\t\t\t? (dateLabels[tooltipData.index] ??\n\t\t\t\tshortDateFmt.format(xAccessor(tooltipData.point)))\n\t\t\t: null;\n\n\treturn createPortal(\n\t\t<div className=\"pointer-events-none absolute inset-0\">\n\t\t\t{labelsToShow.map((item) => (\n\t\t\t\t<XAxisLabel\n\t\t\t\t\tanimatePosition={xDomain == null}\n\t\t\t\t\tcrosshairX={crosshairX}\n\t\t\t\t\thoveredLabel={hoveredLabel}\n\t\t\t\t\tisHovering={isHovering}\n\t\t\t\t\tkey={`${item.date.getTime()}-${item.x}`}\n\t\t\t\t\tlabel={item.label}\n\t\t\t\t\ttickerHalfWidth={tickerHalfWidth}\n\t\t\t\t\tx={item.x}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</div>,\n\t\tcontainer,\n\t);\n});\n\nXAxis.displayName = \"XAxis\";\n\nexport default XAxis;\n","export type ReferenceAreaIfOverflow = \"hidden\" | \"visible\" | \"discard\";\n\nexport interface ReferenceAreaRect {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n}\n\nexport interface ComputeReferenceAreaRectOptions {\n\tinnerWidth: number;\n\tinnerHeight: number;\n\tx1?: Date | number;\n\tx2?: Date | number;\n\ty1?: number;\n\ty2?: number;\n\tifOverflow?: ReferenceAreaIfOverflow;\n\txScale: (value: Date) => number;\n\tyScale: (value: number) => number;\n}\n\nfunction toDate(value: Date | number): Date {\n\treturn value instanceof Date ? value : new Date(value);\n}\n\nfunction resolveXPixel(\n\txScale: (value: Date) => number,\n\tvalue: Date | number | undefined,\n\tfallback: number,\n): number {\n\tif (value == null) {\n\t\treturn fallback;\n\t}\n\treturn xScale(toDate(value));\n}\n\nfunction resolveYPixel(\n\tyScale: (value: number) => number,\n\tvalue: number | undefined,\n\tfallback: number,\n): number {\n\tif (value == null) {\n\t\treturn fallback;\n\t}\n\treturn yScale(value);\n}\n\nfunction clampRectToPlot(\n\trect: ReferenceAreaRect,\n\tinnerWidth: number,\n\tinnerHeight: number,\n): ReferenceAreaRect | null {\n\tconst x1 = Math.max(0, rect.x);\n\tconst y1 = Math.max(0, rect.y);\n\tconst x2 = Math.min(innerWidth, rect.x + rect.width);\n\tconst y2 = Math.min(innerHeight, rect.y + rect.height);\n\tconst width = x2 - x1;\n\tconst height = y2 - y1;\n\tif (width <= 0 || height <= 0) {\n\t\treturn null;\n\t}\n\treturn { x: x1, y: y1, width, height };\n}\n\nfunction isFullyInsidePlot(\n\trect: ReferenceAreaRect,\n\tinnerWidth: number,\n\tinnerHeight: number,\n): boolean {\n\treturn (\n\t\trect.x >= 0 &&\n\t\trect.y >= 0 &&\n\t\trect.x + rect.width <= innerWidth &&\n\t\trect.y + rect.height <= innerHeight\n\t);\n}\n\n/** Map data bounds to plot pixels for a reference rectangle. */\nexport function computeReferenceAreaRect(\n\toptions: ComputeReferenceAreaRectOptions,\n): ReferenceAreaRect | null {\n\tconst {\n\t\tinnerWidth,\n\t\tinnerHeight,\n\t\tx1,\n\t\tx2,\n\t\ty1,\n\t\ty2,\n\t\tifOverflow = \"hidden\",\n\t\txScale,\n\t\tyScale,\n\t} = options;\n\n\tif (innerWidth <= 0 || innerHeight <= 0) {\n\t\treturn null;\n\t}\n\n\tconst left = resolveXPixel(xScale, x1, 0);\n\tconst right = resolveXPixel(xScale, x2, innerWidth);\n\tconst top = resolveYPixel(yScale, y1, 0);\n\tconst bottom = resolveYPixel(yScale, y2, innerHeight);\n\n\tconst x = Math.min(left, right);\n\tconst y = Math.min(top, bottom);\n\tconst width = Math.abs(right - left);\n\tconst height = Math.abs(bottom - top);\n\n\tif (width <= 0 || height <= 0) {\n\t\treturn null;\n\t}\n\n\tconst rect: ReferenceAreaRect = { x, y, width, height };\n\n\tif (ifOverflow === \"visible\") {\n\t\treturn rect;\n\t}\n\n\tif (ifOverflow === \"discard\") {\n\t\treturn isFullyInsidePlot(rect, innerWidth, innerHeight) ? rect : null;\n\t}\n\n\treturn clampRectToPlot(rect, innerWidth, innerHeight);\n}\n\n/** Inclusive data range for axis label highlighting. */\nexport function resolveReferenceDataRange(\n\ty1: number | undefined,\n\ty2: number | undefined,\n\tdomain: [number, number],\n): [number, number] {\n\tconst dMin = Math.min(domain[0], domain[1]);\n\tconst dMax = Math.max(domain[0], domain[1]);\n\tconst low = y1 ?? dMin;\n\tconst high = y2 ?? dMax;\n\treturn [Math.min(low, high), Math.max(low, high)];\n}\n","export const Y_AXIS_DEFAULT_TICK_COUNT = 5;\n\n/** Minimum valid `numTicks` for `scale.ticks()` — values ≤ 0 yield no ticks. */\nexport const Y_AXIS_MIN_TICK_COUNT = 1;\n\n/**\n * Upper bound for the tick count hint. D3 may return more \"nice\" ticks above ~10;\n * keeping the hint in a modest range avoids overcrowded axes.\n */\nexport const Y_AXIS_MAX_TICK_COUNT = 10;\n\n/** Clamps a user `numTicks` value to a valid d3 tick-count hint. */\nexport function resolveYAxisTickCount(numTicks?: number): number {\n\tif (numTicks == null || !Number.isFinite(numTicks)) {\n\t\treturn Y_AXIS_DEFAULT_TICK_COUNT;\n\t}\n\tconst rounded = Math.round(numTicks);\n\tif (rounded < Y_AXIS_MIN_TICK_COUNT) {\n\t\treturn Y_AXIS_MIN_TICK_COUNT;\n\t}\n\tif (rounded > Y_AXIS_MAX_TICK_COUNT) {\n\t\treturn Y_AXIS_MAX_TICK_COUNT;\n\t}\n\treturn rounded;\n}\n","\"use client\";\n\nimport { memo, useEffect, useMemo, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useChartStable, useYScale } from \"./chart-context\";\nimport { DEFAULT_Y_DOMAIN_TWEEN_MS } from \"./chart-phase\";\nimport { LINE_LOADING_PULSE_EASE } from \"./line-loading-timing\";\nimport { resolveReferenceDataRange } from \"./reference-area-geometry\";\nimport type { YAxisOrientation } from \"./y-axis-scales\";\nimport { normalizeYAxisId } from \"./y-axis-scales\";\nimport {\n\tresolveYAxisTickCount,\n\tY_AXIS_DEFAULT_TICK_COUNT,\n} from \"./y-axis-ticks\";\n\nconst Y_AXIS_POSITION_TWEEN_MS = DEFAULT_Y_DOMAIN_TWEEN_MS;\n\nexport interface YAxisProps {\n\t/** Scale group id (Recharts `yAxisId`). Default: `\"left\"`. */\n\tyAxisId?: string | number;\n\t/** Which side of the chart to render labels. Default: `\"left\"`. */\n\torientation?: YAxisOrientation;\n\t/**\n\t * Approximate tick count hint for `scale.ticks()` (d3). Actual label count may differ.\n\t * Clamped to {@link Y_AXIS_MIN_TICK_COUNT}–{@link Y_AXIS_MAX_TICK_COUNT}. Default: 5.\n\t */\n\tnumTicks?: number;\n\t/** Format large numbers (e.g. 1000 as \"1k\"). Default: true */\n\tformatLargeNumbers?: boolean;\n\t/** Custom formatter for tick labels (e.g. USD). Overrides formatLargeNumbers when set. */\n\tformatValue?: (value: number) => string;\n}\n\nfunction formatLabel(\n\tvalue: number,\n\tformatLargeNumbers: boolean,\n\tformatValue?: (value: number) => string,\n): string {\n\tif (formatValue) {\n\t\treturn formatValue(value);\n\t}\n\tif (formatLargeNumbers && value >= 1000) {\n\t\treturn `${(value / 1000).toFixed(0)}k`;\n\t}\n\treturn String(value);\n}\n\nfunction resolveTickLabelColor(\n\ttickY: number,\n\taxisId: string,\n\tyScale: ReturnType<typeof useYScale>,\n\treferenceAreas: ReturnType<typeof useChartStable>[\"referenceAreas\"],\n): string | undefined {\n\tfor (const area of referenceAreas) {\n\t\tif (!area.axisLabelColor) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (normalizeYAxisId(area.yAxisId) !== axisId) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst [low, high] = resolveReferenceDataRange(\n\t\t\tarea.y1,\n\t\t\tarea.y2,\n\t\t\tyScale.domain() as [number, number],\n\t\t);\n\t\tconst topPixel = yScale(high) ?? 0;\n\t\tconst bottomPixel = yScale(low) ?? 0;\n\t\tconst bandTop = Math.min(topPixel, bottomPixel);\n\t\tconst bandBottom = Math.max(topPixel, bottomPixel);\n\t\tif (tickY >= bandTop && tickY <= bandBottom) {\n\t\t\treturn area.axisLabelColor;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function YAxis(props: YAxisProps) {\n\tconst { containerRef } = useChartStable();\n\tconst [mounted, setMounted] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetMounted(true);\n\t}, []);\n\n\tconst container = containerRef.current;\n\tif (!(mounted && container)) {\n\t\treturn null;\n\t}\n\n\treturn <YAxisInner {...props} container={container} />;\n}\n\nconst YAxisInner = memo(function YAxisInner({\n\tyAxisId,\n\torientation = \"left\",\n\tnumTicks = Y_AXIS_DEFAULT_TICK_COUNT,\n\tformatLargeNumbers = true,\n\tformatValue,\n\tcontainer,\n}: YAxisProps & { container: HTMLDivElement }) {\n\tconst { margin, referenceAreas } = useChartStable();\n\tconst yScale = useYScale(yAxisId);\n\tconst isLeft = orientation === \"left\";\n\tconst axisId = normalizeYAxisId(yAxisId);\n\n\tconst ticks = useMemo(() => {\n\t\tconst tickValues = yScale.ticks(resolveYAxisTickCount(numTicks));\n\t\treturn tickValues.map((value) => {\n\t\t\tconst y = (yScale(value) ?? 0) + margin.top;\n\t\t\treturn {\n\t\t\t\tvalue,\n\t\t\t\ty,\n\t\t\t\tlabel: formatLabel(value, formatLargeNumbers, formatValue),\n\t\t\t\tlabelColor: resolveTickLabelColor(\n\t\t\t\t\ty - margin.top,\n\t\t\t\t\taxisId,\n\t\t\t\t\tyScale,\n\t\t\t\t\treferenceAreas,\n\t\t\t\t),\n\t\t\t};\n\t\t});\n\t}, [\n\t\tyScale,\n\t\tmargin.top,\n\t\tnumTicks,\n\t\tformatLargeNumbers,\n\t\tformatValue,\n\t\taxisId,\n\t\treferenceAreas,\n\t]);\n\n\treturn createPortal(\n\t\t<div className=\"pointer-events-none absolute inset-0\">\n\t\t\t<div\n\t\t\t\tclassName=\"absolute top-0 bottom-0\"\n\t\t\t\tstyle={\n\t\t\t\t\tisLeft\n\t\t\t\t\t\t? { left: 0, width: margin.left }\n\t\t\t\t\t\t: { right: 0, width: margin.right }\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ticks.map((tick) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute flex items-center\"\n\t\t\t\t\t\tkey={tick.value}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttop: tick.y,\n\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\ttransition: `top ${Y_AXIS_POSITION_TWEEN_MS}ms cubic-bezier(${LINE_LOADING_PULSE_EASE.join(\", \")})`,\n\t\t\t\t\t\t\t...(isLeft\n\t\t\t\t\t\t\t\t? { right: 0, justifyContent: \"flex-end\", paddingRight: 8 }\n\t\t\t\t\t\t\t\t: { left: 0, justifyContent: \"flex-start\", paddingLeft: 8 }),\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName=\"text-chart-label text-xs\"\n\t\t\t\t\t\t\tstyle={tick.labelColor ? { color: tick.labelColor } : undefined}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{tick.label}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>,\n\t\tcontainer,\n\t);\n});\n\nYAxis.displayName = \"YAxis\";\n\nexport default YAxis;\n","\"use client\";\n\nimport {\n\tanimate,\n\tuseMotionValue,\n\tuseReducedMotion,\n\tuseTransform,\n} from \"motion/react\";\nimport { useEffect } from \"react\";\nimport {\n\tLINE_LOADING_LOOP_PAUSE_MS,\n\tLINE_LOADING_PULSE_CYCLE_S,\n\tLINE_LOADING_PULSE_EASE,\n} from \"./line-loading-timing\";\n\nexport interface UseGridShimmerOptions {\n\tinnerWidth: number;\n\tshimmer: boolean;\n\tshimmerLength: number;\n\tshimmerSpeed: number;\n\tshimmerSync: boolean;\n\t/** When false, shimmer animation is paused (e.g. during exit transition). */\n\tactive: boolean;\n\t/** Run a single synced sweep (loading → ready handoff). */\n\toneShot?: boolean;\n}\n\nexport function useGridShimmer({\n\tinnerWidth,\n\tshimmer,\n\tshimmerLength,\n\tshimmerSpeed,\n\tshimmerSync,\n\tactive,\n\toneShot = false,\n}: UseGridShimmerOptions) {\n\tconst progress = useMotionValue(0);\n\tconst reducedMotion = useReducedMotion();\n\tconst shimmerCycleS =\n\t\tLINE_LOADING_PULSE_CYCLE_S / Math.max(shimmerSpeed, 0.1);\n\tconst shimmerEnabled =\n\t\tactive && shimmer && reducedMotion !== true && innerWidth > 0;\n\n\tuseEffect(() => {\n\t\tif (!shimmerEnabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet cancelled = false;\n\t\tlet timeoutId: number | undefined;\n\t\tlet controls: ReturnType<typeof animate> | undefined;\n\n\t\tconst runSyncedCycle = () => {\n\t\t\tif (cancelled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tprogress.set(0);\n\t\t\tcontrols = animate(progress, 1, {\n\t\t\t\tduration: shimmerCycleS,\n\t\t\t\tease: [...LINE_LOADING_PULSE_EASE],\n\t\t\t\tonComplete: () => {\n\t\t\t\t\tif (cancelled) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\ttimeoutId = window.setTimeout(\n\t\t\t\t\t\trunSyncedCycle,\n\t\t\t\t\t\tLINE_LOADING_LOOP_PAUSE_MS,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t});\n\t\t};\n\n\t\tif (shimmerSync && oneShot) {\n\t\t\tprogress.set(0);\n\t\t\tcontrols = animate(progress, 1, {\n\t\t\t\tduration: shimmerCycleS / 2,\n\t\t\t\tease: [...LINE_LOADING_PULSE_EASE],\n\t\t\t});\n\t\t\treturn () => controls?.stop();\n\t\t}\n\n\t\tif (shimmerSync) {\n\t\t\trunSyncedCycle();\n\t\t\treturn () => {\n\t\t\t\tcancelled = true;\n\t\t\t\tcontrols?.stop();\n\t\t\t\tif (timeoutId !== undefined) {\n\t\t\t\t\twindow.clearTimeout(timeoutId);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tprogress.set(0);\n\t\tcontrols = animate(progress, 1, {\n\t\t\tduration: shimmerCycleS,\n\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\tease: [...LINE_LOADING_PULSE_EASE],\n\t\t});\n\n\t\treturn () => controls?.stop();\n\t}, [oneShot, progress, shimmerCycleS, shimmerEnabled, shimmerSync]);\n\n\tconst shimmerX = useTransform(\n\t\tprogress,\n\t\t(value) => -shimmerLength + value * (innerWidth + shimmerLength * 2),\n\t);\n\tconst shimmerTransform = useTransform(shimmerX, (x) => `translate(${x}, 0)`);\n\n\treturn { shimmerEnabled, shimmerTransform };\n}\n","\"use client\";\n\nimport { GridColumns, GridRows } from \"@visx/grid\";\nimport { motion } from \"motion/react\";\nimport { useId } from \"react\";\nimport { chartCssVars, useChartStable, useYScale } from \"./chart-context\";\nimport { useGridShimmer } from \"./use-grid-shimmer\";\nimport {\n\tisLoadingChromePhase,\n\tisLoadingGridChromePhase,\n} from \"./y-domain-utils\";\n\nconst DEFAULT_SHIMMER_LENGTH_PX = 140;\nconst DEFAULT_SHIMMER_SPEED = 1;\nconst DEFAULT_SHIMMER_STROKE =\n\t\"color-mix(in oklch, var(--foreground) 68%, transparent)\";\n\nexport interface GridProps {\n\t/** Show horizontal grid lines. Default: true */\n\thorizontal?: boolean;\n\t/** Show vertical grid lines. Default: false */\n\tvertical?: boolean;\n\t/** Number of horizontal grid lines. Default: 5 */\n\tnumTicksRows?: number;\n\t/** Number of vertical grid lines. Default: 10 */\n\tnumTicksColumns?: number;\n\t/** Explicit tick values for horizontal grid lines. Overrides numTicksRows. */\n\trowTickValues?: number[];\n\t/** Grid line stroke color. Default: var(--chart-grid) */\n\tstroke?: string;\n\t/** Grid stroke while loading chrome is active. Falls back to `stroke`. */\n\tloadingStroke?: string;\n\t/** Grid line stroke opacity. Default: 1 */\n\tstrokeOpacity?: number;\n\t/** Grid line stroke width. Default: 1 */\n\tstrokeWidth?: number;\n\t/** Grid line dash array. Default: \"4,4\" for dashed lines */\n\tstrokeDasharray?: string;\n\t/** Horizontal row values rendered with alternate styling (e.g. zero baseline). */\n\thighlightRowValues?: number[];\n\t/** Stroke for highlighted rows. Default: var(--chart-foreground-muted) */\n\thighlightRowStroke?: string;\n\t/** Stroke opacity for highlighted rows. Default: 1 */\n\thighlightRowStrokeOpacity?: number;\n\t/** Stroke width for highlighted rows. Default: 1 */\n\thighlightRowStrokeWidth?: number;\n\t/** Dash array for highlighted rows. Default: solid line */\n\thighlightRowStrokeDasharray?: string;\n\t/** Enable horizontal fade effect on grid rows (fades at left/right). Default: true */\n\tfadeHorizontal?: boolean;\n\t/** Enable vertical fade effect on grid columns (fades at top/bottom). Default: false */\n\tfadeVertical?: boolean;\n\t/** Omit the first and last horizontal grid lines. Default: false */\n\thideHorizontalEdgeLines?: boolean;\n\t/** Omit the first and last vertical grid lines. Default: false */\n\thideVerticalEdgeLines?: boolean;\n\t/** Y-scale for horizontal grid lines. Default: primary (`\"left\"`) axis. */\n\tyAxisId?: string | number;\n\t/** Animate a shimmer band across horizontal grid lines. Default: false */\n\tshimmer?: boolean;\n\t/** Shimmer band stroke (color and opacity via color-mix or oklch alpha). */\n\tshimmerStroke?: string;\n\t/** Shimmer band width in pixels. Default: 140 */\n\tshimmerLength?: number;\n\t/** Shimmer speed multiplier (higher = faster). Default: 1 */\n\tshimmerSpeed?: number;\n\t/** Match loop timing to the loading line pulse (cycle + inter-loop pause). */\n\tshimmerSync?: boolean;\n}\n\nfunction hideEdgeTicks<T>(ticks: T[], hideEdgeLines: boolean): T[] {\n\tif (!hideEdgeLines || ticks.length <= 2) {\n\t\treturn ticks;\n\t}\n\treturn ticks.slice(1, -1);\n}\n\nfunction resolveRowTickValues(options: {\n\thideHorizontalEdgeLines: boolean;\n\tnumTicksRows: number;\n\trowTickValues?: number[];\n\tyScale: { ticks?: (count: number) => number[] };\n}): number[] | undefined {\n\tconst { hideHorizontalEdgeLines, numTicksRows, rowTickValues, yScale } =\n\t\toptions;\n\tconst ticks =\n\t\trowTickValues ?? (yScale.ticks ? yScale.ticks(numTicksRows) : []);\n\tconst filtered = hideEdgeTicks(ticks, hideHorizontalEdgeLines);\n\tif (filtered === ticks && !rowTickValues && !hideHorizontalEdgeLines) {\n\t\treturn undefined;\n\t}\n\treturn filtered.length > 0 ? filtered : undefined;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: grid fade masks and shimmer share one layer tree\nexport function Grid({\n\thorizontal = true,\n\tvertical = false,\n\tnumTicksRows = 5,\n\tnumTicksColumns = 10,\n\trowTickValues,\n\tstroke = chartCssVars.grid,\n\tloadingStroke,\n\tstrokeOpacity = 1,\n\tstrokeWidth = 1,\n\tstrokeDasharray = \"4,4\",\n\thighlightRowValues,\n\thighlightRowStroke = chartCssVars.foregroundMuted,\n\thighlightRowStrokeOpacity = 1,\n\thighlightRowStrokeWidth = 1,\n\thighlightRowStrokeDasharray = \"0\",\n\tfadeHorizontal = true,\n\tfadeVertical = false,\n\thideHorizontalEdgeLines = false,\n\thideVerticalEdgeLines = false,\n\tyAxisId,\n\tshimmer = false,\n\tshimmerStroke = DEFAULT_SHIMMER_STROKE,\n\tshimmerLength = DEFAULT_SHIMMER_LENGTH_PX,\n\tshimmerSpeed = DEFAULT_SHIMMER_SPEED,\n\tshimmerSync = false,\n}: GridProps) {\n\tconst { xScale, innerWidth, innerHeight, orientation, barScale, chartPhase } =\n\t\tuseChartStable();\n\tconst yScale = useYScale(yAxisId);\n\tconst shimmerActive = shimmer && isLoadingChromePhase(chartPhase);\n\tconst gridStroke =\n\t\tisLoadingGridChromePhase(chartPhase) && loadingStroke != null\n\t\t\t? loadingStroke\n\t\t\t: stroke;\n\tconst { shimmerEnabled, shimmerTransform } = useGridShimmer({\n\t\tinnerWidth,\n\t\tshimmer,\n\t\tshimmerLength,\n\t\tshimmerSpeed,\n\t\tshimmerSync,\n\t\tactive: shimmerActive,\n\t});\n\n\t// For bar charts, determine which scale to use for grid lines\n\t// Horizontal bar charts: vertical grid should use yScale (value scale)\n\t// Vertical bar charts: horizontal grid uses yScale (value scale)\n\tconst isHorizontalBarChart = orientation === \"horizontal\" && barScale;\n\n\t// For vertical grid lines in horizontal bar charts, use yScale (the value scale)\n\t// For time-based charts, use xScale\n\tconst columnScale = isHorizontalBarChart ? yScale : xScale;\n\tconst rowTickValuesResolved = resolveRowTickValues({\n\t\thideHorizontalEdgeLines,\n\t\tnumTicksRows,\n\t\trowTickValues,\n\t\tyScale,\n\t});\n\tconst columnTickValuesResolved =\n\t\tvertical &&\n\t\tcolumnScale &&\n\t\ttypeof columnScale === \"function\" &&\n\t\thideVerticalEdgeLines\n\t\t\t? (() => {\n\t\t\t\t\tconst ticks = columnScale.ticks?.(numTicksColumns) ?? [];\n\t\t\t\t\tconst filtered = hideEdgeTicks<number | Date>(ticks, true);\n\t\t\t\t\treturn filtered.length > 0 ? filtered : undefined;\n\t\t\t\t})()\n\t\t\t: undefined;\n\tconst uniqueId = useId();\n\n\t// Horizontal fade mask (for grid rows - fades left/right)\n\tconst hMaskId = `grid-rows-fade-${uniqueId}`;\n\tconst hGradientId = `${hMaskId}-gradient`;\n\tconst shimmerGradientId = `grid-shimmer-${uniqueId}`;\n\n\t// Vertical fade mask (for grid columns - fades top/bottom)\n\tconst vMaskId = `grid-cols-fade-${uniqueId}`;\n\tconst vGradientId = `${vMaskId}-gradient`;\n\tconst horizontalFadeMask = fadeHorizontal ? `url(#${hMaskId})` : undefined;\n\n\treturn (\n\t\t<g className=\"chart-grid\">\n\t\t\t{/* Gradient mask for horizontal grid lines - fades at left/right */}\n\t\t\t{horizontal && fadeHorizontal && (\n\t\t\t\t<defs>\n\t\t\t\t\t<linearGradient id={hGradientId} x1=\"0%\" x2=\"100%\" y1=\"0%\" y2=\"0%\">\n\t\t\t\t\t\t<stop offset=\"0%\" style={{ stopColor: \"white\", stopOpacity: 0 }} />\n\t\t\t\t\t\t<stop offset=\"10%\" style={{ stopColor: \"white\", stopOpacity: 1 }} />\n\t\t\t\t\t\t<stop offset=\"90%\" style={{ stopColor: \"white\", stopOpacity: 1 }} />\n\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\toffset=\"100%\"\n\t\t\t\t\t\t\tstyle={{ stopColor: \"white\", stopOpacity: 0 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</linearGradient>\n\t\t\t\t\t<mask id={hMaskId}>\n\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\tfill={`url(#${hGradientId})`}\n\t\t\t\t\t\t\theight={innerHeight}\n\t\t\t\t\t\t\twidth={innerWidth}\n\t\t\t\t\t\t\tx=\"0\"\n\t\t\t\t\t\t\ty=\"0\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</mask>\n\t\t\t\t</defs>\n\t\t\t)}\n\n\t\t\t{horizontal && shimmerEnabled ? (\n\t\t\t\t<defs>\n\t\t\t\t\t<motion.linearGradient\n\t\t\t\t\t\tgradientTransform={shimmerTransform}\n\t\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\tid={shimmerGradientId}\n\t\t\t\t\t\tx1={0}\n\t\t\t\t\t\tx2={shimmerLength}\n\t\t\t\t\t\ty1={0}\n\t\t\t\t\t\ty2={0}\n\t\t\t\t\t>\n\t\t\t\t\t\t<stop offset=\"0%\" stopColor={shimmerStroke} stopOpacity={0} />\n\t\t\t\t\t\t<stop offset=\"35%\" stopColor={shimmerStroke} stopOpacity={0.45} />\n\t\t\t\t\t\t<stop offset=\"50%\" stopColor={shimmerStroke} stopOpacity={1} />\n\t\t\t\t\t\t<stop offset=\"65%\" stopColor={shimmerStroke} stopOpacity={0.45} />\n\t\t\t\t\t\t<stop offset=\"100%\" stopColor={shimmerStroke} stopOpacity={0} />\n\t\t\t\t\t</motion.linearGradient>\n\t\t\t\t</defs>\n\t\t\t) : null}\n\n\t\t\t{/* Gradient mask for vertical grid lines - fades at top/bottom */}\n\t\t\t{vertical && fadeVertical && (\n\t\t\t\t<defs>\n\t\t\t\t\t<linearGradient id={vGradientId} x1=\"0%\" x2=\"0%\" y1=\"0%\" y2=\"100%\">\n\t\t\t\t\t\t<stop offset=\"0%\" style={{ stopColor: \"white\", stopOpacity: 0 }} />\n\t\t\t\t\t\t<stop offset=\"10%\" style={{ stopColor: \"white\", stopOpacity: 1 }} />\n\t\t\t\t\t\t<stop offset=\"90%\" style={{ stopColor: \"white\", stopOpacity: 1 }} />\n\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\toffset=\"100%\"\n\t\t\t\t\t\t\tstyle={{ stopColor: \"white\", stopOpacity: 0 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</linearGradient>\n\t\t\t\t\t<mask id={vMaskId}>\n\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\tfill={`url(#${vGradientId})`}\n\t\t\t\t\t\t\theight={innerHeight}\n\t\t\t\t\t\t\twidth={innerWidth}\n\t\t\t\t\t\t\tx=\"0\"\n\t\t\t\t\t\t\ty=\"0\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</mask>\n\t\t\t\t</defs>\n\t\t\t)}\n\n\t\t\t{horizontal && (\n\t\t\t\t<g mask={horizontalFadeMask}>\n\t\t\t\t\t<GridRows\n\t\t\t\t\t\tnumTicks={rowTickValuesResolved ? undefined : numTicksRows}\n\t\t\t\t\t\tscale={yScale}\n\t\t\t\t\t\tstroke={gridStroke}\n\t\t\t\t\t\tstrokeDasharray={strokeDasharray}\n\t\t\t\t\t\tstrokeOpacity={strokeOpacity}\n\t\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\t\ttickValues={rowTickValuesResolved}\n\t\t\t\t\t\twidth={innerWidth}\n\t\t\t\t\t/>\n\t\t\t\t\t{shimmerEnabled ? (\n\t\t\t\t\t\t<GridRows\n\t\t\t\t\t\t\tnumTicks={rowTickValuesResolved ? undefined : numTicksRows}\n\t\t\t\t\t\t\tscale={yScale}\n\t\t\t\t\t\t\tstroke={`url(#${shimmerGradientId})`}\n\t\t\t\t\t\t\tstrokeDasharray={strokeDasharray}\n\t\t\t\t\t\t\tstrokeOpacity={1}\n\t\t\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\t\t\ttickValues={rowTickValuesResolved}\n\t\t\t\t\t\t\twidth={innerWidth}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\n\t\t\t\t</g>\n\t\t\t)}\n\t\t\t{horizontal && highlightRowValues && highlightRowValues.length > 0 ? (\n\t\t\t\t<g className=\"chart-grid-highlight-rows\">\n\t\t\t\t\t{highlightRowValues.map((value) => {\n\t\t\t\t\t\tconst y = yScale(value);\n\t\t\t\t\t\tif (y == null || !Number.isFinite(y)) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<line\n\t\t\t\t\t\t\t\tkey={value}\n\t\t\t\t\t\t\t\tstroke={highlightRowStroke}\n\t\t\t\t\t\t\t\tstrokeDasharray={highlightRowStrokeDasharray}\n\t\t\t\t\t\t\t\tstrokeOpacity={highlightRowStrokeOpacity}\n\t\t\t\t\t\t\t\tstrokeWidth={highlightRowStrokeWidth}\n\t\t\t\t\t\t\t\tx1={0}\n\t\t\t\t\t\t\t\tx2={innerWidth}\n\t\t\t\t\t\t\t\ty1={y}\n\t\t\t\t\t\t\t\ty2={y}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</g>\n\t\t\t) : null}\n\t\t\t{vertical && columnScale && typeof columnScale === \"function\" && (\n\t\t\t\t<g mask={fadeVertical ? `url(#${vMaskId})` : undefined}>\n\t\t\t\t\t<GridColumns\n\t\t\t\t\t\theight={innerHeight}\n\t\t\t\t\t\tnumTicks={columnTickValuesResolved ? undefined : numTicksColumns}\n\t\t\t\t\t\tscale={columnScale}\n\t\t\t\t\t\tstroke={stroke}\n\t\t\t\t\t\tstrokeDasharray={strokeDasharray}\n\t\t\t\t\t\tstrokeOpacity={strokeOpacity}\n\t\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\t\ttickValues={columnTickValuesResolved}\n\t\t\t\t\t/>\n\t\t\t\t</g>\n\t\t\t)}\n\t\t</g>\n\t);\n}\n\nGrid.displayName = \"Grid\";\n\nexport default Grid;\n","\"use client\";\n\nimport { motion, useSpring } from \"motion/react\";\nimport { memo, useMemo, useRef } from \"react\";\n\nconst TICKER_ITEM_HEIGHT = 24;\n/** Full scroll stacks are skipped above this count — single label + instant updates. */\nconst COMPACT_TICKER_THRESHOLD = 60;\n\nexport interface DateTickerProps {\n\tcurrentIndex: number;\n\tlabels: string[];\n\tvisible: boolean;\n}\n\nconst DateTickerCompact = memo(function DateTickerCompact({\n\tcurrentIndex,\n\tlabels,\n}: Omit<DateTickerProps, \"visible\">) {\n\tconst label = labels[currentIndex] ?? labels[0] ?? \"\";\n\n\treturn (\n\t\t<div className=\"overflow-hidden rounded-full bg-zinc-900 px-4 py-1 text-white shadow-lg dark:bg-zinc-100 dark:text-zinc-900\">\n\t\t\t<div className=\"flex h-6 items-center justify-center\">\n\t\t\t\t<span className=\"whitespace-nowrap font-medium text-sm\">{label}</span>\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n\nconst DateTickerInner = memo(function DateTickerInner({\n\tcurrentIndex,\n\tlabels,\n}: Omit<DateTickerProps, \"visible\">) {\n\t// Parse labels into month and day parts\n\tconst parsedLabels = useMemo(() => {\n\t\treturn labels.map((label, index) => {\n\t\t\tconst parts = label.split(\" \");\n\t\t\tconst month = parts[0] || \"\";\n\t\t\tconst day = parts[1] || \"\";\n\t\t\treturn { month, day, full: label, key: `${label}::${index}` };\n\t\t});\n\t}, [labels]);\n\n\t// Month segments: one entry per consecutive run (Jan → Feb → …), keyed by start index\n\tconst monthSegments = useMemo(() => {\n\t\tconst segments: { month: string; key: string; startIndex: number }[] = [];\n\n\t\tparsedLabels.forEach((label, index) => {\n\t\t\tconst prev = segments.at(-1);\n\t\t\tif (!prev || prev.month !== label.month) {\n\t\t\t\tsegments.push({\n\t\t\t\t\tmonth: label.month,\n\t\t\t\t\tkey: `${label.month}-${index}`,\n\t\t\t\t\tstartIndex: index,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn segments;\n\t}, [parsedLabels]);\n\n\t// Index into monthSegments for the current data point\n\tconst currentMonthIndex = useMemo(() => {\n\t\tif (currentIndex < 0 || currentIndex >= parsedLabels.length) {\n\t\t\treturn 0;\n\t\t}\n\t\tfor (let i = monthSegments.length - 1; i >= 0; i--) {\n\t\t\tconst segment = monthSegments[i];\n\t\t\tif (segment && segment.startIndex <= currentIndex) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}, [currentIndex, parsedLabels.length, monthSegments]);\n\n\t// Track previous month index\n\tconst prevMonthIndexRef = useRef(-1);\n\n\t// Animated Y offsets\n\tconst dayY = useSpring(0, { stiffness: 400, damping: 35 });\n\tconst monthY = useSpring(0, { stiffness: 400, damping: 35 });\n\n\tdayY.set(-currentIndex * TICKER_ITEM_HEIGHT);\n\n\tif (currentMonthIndex >= 0) {\n\t\tconst isFirstRender = prevMonthIndexRef.current === -1;\n\t\tconst monthChanged = prevMonthIndexRef.current !== currentMonthIndex;\n\t\tif (isFirstRender || monthChanged) {\n\t\t\tmonthY.set(-currentMonthIndex * TICKER_ITEM_HEIGHT);\n\t\t\tprevMonthIndexRef.current = currentMonthIndex;\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"overflow-hidden rounded-full bg-zinc-900 px-4 py-1 text-white shadow-lg dark:bg-zinc-100 dark:text-zinc-900\">\n\t\t\t<div className=\"relative h-6 overflow-hidden\">\n\t\t\t\t<div className=\"flex items-center justify-center gap-1\">\n\t\t\t\t\t{/* Month stack */}\n\t\t\t\t\t<div className=\"relative h-6 overflow-hidden\">\n\t\t\t\t\t\t<motion.div className=\"flex flex-col\" style={{ y: monthY }}>\n\t\t\t\t\t\t\t{monthSegments.map((segment) => (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName=\"flex h-6 shrink-0 items-center justify-center\"\n\t\t\t\t\t\t\t\t\tkey={segment.key}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span className=\"whitespace-nowrap font-medium text-sm\">\n\t\t\t\t\t\t\t\t\t\t{segment.month}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Day stack */}\n\t\t\t\t\t<div className=\"relative h-6 overflow-hidden\">\n\t\t\t\t\t\t<motion.div className=\"flex flex-col\" style={{ y: dayY }}>\n\t\t\t\t\t\t\t{parsedLabels.map((label) => (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName=\"flex h-6 shrink-0 items-center justify-center\"\n\t\t\t\t\t\t\t\t\tkey={label.key}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span className=\"whitespace-nowrap font-medium text-sm\">\n\t\t\t\t\t\t\t\t\t\t{label.day}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n\nexport function DateTicker({ currentIndex, labels, visible }: DateTickerProps) {\n\tif (!visible || labels.length === 0) {\n\t\treturn null;\n\t}\n\n\tif (labels.length > COMPACT_TICKER_THRESHOLD) {\n\t\treturn <DateTickerCompact currentIndex={currentIndex} labels={labels} />;\n\t}\n\n\treturn <DateTickerInner currentIndex={currentIndex} labels={labels} />;\n}\n\nDateTicker.displayName = \"DateTicker\";\n\nexport default DateTicker;\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { intFmt } from \"../chart-formatters\";\n\nexport interface TooltipRow {\n\tcolor: string;\n\tlabel: string;\n\tvalue: string | number;\n}\n\nexport interface TooltipContentProps {\n\ttitle?: string;\n\trows: TooltipRow[];\n\t/** Optional additional content (e.g., markers) */\n\tchildren?: ReactNode;\n}\n\nexport function TooltipContent({ title, rows, children }: TooltipContentProps) {\n\treturn (\n\t\t<div className=\"overflow-hidden\">\n\t\t\t<div className=\"px-3 py-2.5\">\n\t\t\t\t{title && (\n\t\t\t\t\t<div className=\"mb-2 text-left font-medium text-chart-tooltip-foreground text-xs\">\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<div className=\"space-y-1.5\">\n\t\t\t\t\t{rows.map((row) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"flex items-center justify-between gap-4\"\n\t\t\t\t\t\t\tkey={`${row.label}-${row.color}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName=\"h-2.5 w-2.5 shrink-0 rounded-full\"\n\t\t\t\t\t\t\t\t\tstyle={{ backgroundColor: row.color }}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<span className=\"text-chart-tooltip-muted text-sm\">\n\t\t\t\t\t\t\t\t\t{row.label}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<span className=\"font-medium text-chart-tooltip-foreground text-sm tabular-nums\">\n\t\t\t\t\t\t\t\t{typeof row.value === \"number\" ? intFmt(row.value) : row.value}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\n\t\t\t\t{children && (\n\t\t\t\t\t<div className=\"mt-2 transition-opacity duration-200 ease-out\">\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nTooltipContent.displayName = \"TooltipContent\";\n\nexport default TooltipContent;\n","\"use client\";\n\nimport { motion, useSpring, useTransform } from \"motion/react\";\nimport { type SpringConfig, useChartConfig } from \"../chart-config-context\";\nimport { chartCssVars } from \"../chart-context\";\n\nexport interface TooltipDotProps {\n\tx: number;\n\ty: number;\n\tvisible: boolean;\n\tcolor: string;\n\t/** Half of width/height for dots; half-extent for ring squares. Default: 5 */\n\tsize?: number;\n\tstrokeColor?: string;\n\tstrokeWidth?: number;\n\t/** Dot fill or transparent ring around the hovered mark. Default: \"dot\" */\n\tvariant?: \"dot\" | \"ring\";\n\t/**\n\t * Ring corner radius as a fraction of side length (0 = square, 0.5 = circle).\n\t * Same semantics as bar square radius.\n\t */\n\tcornerRadiusFraction?: number;\n\t/** Per-chart override; falls back to `ChartConfigProvider.tooltipSpring`. */\n\tspringConfig?: SpringConfig;\n\t/** Animate position with a spring. Default: true */\n\tanimate?: boolean;\n}\n\nfunction ringCornerRadius(\n\thalfExtent: number,\n\tcornerRadiusFraction: number,\n): number {\n\tconst side = halfExtent * 2;\n\treturn side * Math.max(0, Math.min(0.5, cornerRadiusFraction));\n}\n\nfunction AnimatedRingDot({\n\tx,\n\ty,\n\thalfExtent,\n\tcornerRadiusFraction,\n\tfill,\n\tstroke,\n\tstrokeWidth,\n\tspringConfig,\n}: {\n\tx: number;\n\ty: number;\n\thalfExtent: number;\n\tcornerRadiusFraction: number;\n\tfill: string;\n\tstroke: string;\n\tstrokeWidth: number;\n\tspringConfig?: SpringConfig;\n}) {\n\tconst { tooltipSpring } = useChartConfig();\n\tconst effectiveSpring = springConfig ?? tooltipSpring;\n\tconst animatedX = useSpring(x, effectiveSpring);\n\tconst animatedY = useSpring(y, effectiveSpring);\n\tconst side = halfExtent * 2;\n\tconst rx = ringCornerRadius(halfExtent, cornerRadiusFraction);\n\tconst rectX = useTransform(animatedX, (value) => value - halfExtent);\n\tconst rectY = useTransform(animatedY, (value) => value - halfExtent);\n\n\tanimatedX.set(x);\n\tanimatedY.set(y);\n\n\treturn (\n\t\t<motion.rect\n\t\t\tfill={fill}\n\t\t\theight={side}\n\t\t\trx={rx}\n\t\t\try={rx}\n\t\t\tstroke={stroke}\n\t\t\tstrokeWidth={strokeWidth}\n\t\t\twidth={side}\n\t\t\tx={rectX}\n\t\t\ty={rectY}\n\t\t/>\n\t);\n}\n\nexport function TooltipDot({\n\tx,\n\ty,\n\tvisible,\n\tcolor,\n\tsize = 5,\n\tstrokeColor = chartCssVars.background,\n\tstrokeWidth = 2,\n\tvariant = \"dot\",\n\tcornerRadiusFraction = 0.25,\n\tspringConfig,\n\tanimate = true,\n}: TooltipDotProps) {\n\tconst { tooltipSpring } = useChartConfig();\n\tconst effectiveSpring = springConfig ?? tooltipSpring;\n\tconst animatedX = useSpring(x, effectiveSpring);\n\tconst animatedY = useSpring(y, effectiveSpring);\n\n\tconst isRing = variant === \"ring\";\n\tconst fill = isRing ? \"transparent\" : color;\n\tconst stroke = isRing ? color : strokeColor;\n\tconst effectiveStrokeWidth = isRing ? (strokeWidth ?? 1.5) : strokeWidth;\n\n\tif (animate && !isRing) {\n\t\tanimatedX.set(x);\n\t\tanimatedY.set(y);\n\t}\n\n\tif (!visible) {\n\t\treturn null;\n\t}\n\n\tif (isRing) {\n\t\tif (animate) {\n\t\t\treturn (\n\t\t\t\t<AnimatedRingDot\n\t\t\t\t\tcornerRadiusFraction={cornerRadiusFraction}\n\t\t\t\t\tfill={fill}\n\t\t\t\t\thalfExtent={size}\n\t\t\t\t\tspringConfig={springConfig}\n\t\t\t\t\tstroke={stroke}\n\t\t\t\t\tstrokeWidth={effectiveStrokeWidth}\n\t\t\t\t\tx={x}\n\t\t\t\t\ty={y}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\tconst side = size * 2;\n\t\tconst rx = ringCornerRadius(size, cornerRadiusFraction);\n\n\t\treturn (\n\t\t\t<rect\n\t\t\t\tfill={fill}\n\t\t\t\theight={side}\n\t\t\t\trx={rx}\n\t\t\t\try={rx}\n\t\t\t\tstroke={stroke}\n\t\t\t\tstrokeWidth={effectiveStrokeWidth}\n\t\t\t\twidth={side}\n\t\t\t\tx={x - size}\n\t\t\t\ty={y - size}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (!animate) {\n\t\treturn (\n\t\t\t<circle\n\t\t\t\tcx={x}\n\t\t\t\tcy={y}\n\t\t\t\tfill={fill}\n\t\t\t\tr={size}\n\t\t\t\tstroke={stroke}\n\t\t\t\tstrokeWidth={effectiveStrokeWidth}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<motion.circle\n\t\t\tcx={animatedX}\n\t\t\tcy={animatedY}\n\t\t\tfill={fill}\n\t\t\tr={size}\n\t\t\tstroke={stroke}\n\t\t\tstrokeWidth={effectiveStrokeWidth}\n\t\t/>\n\t);\n}\n\nTooltipDot.displayName = \"TooltipDot\";\n\nexport default TooltipDot;\n","export type IndicatorFadeEdges = \"both\" | \"none\" | \"top\" | \"bottom\";\n\nexport interface VerticalFadeSides {\n\ttop: boolean;\n\tbottom: boolean;\n\tany: boolean;\n}\n\nexport function resolveVerticalFadeSides(\n\tfade: IndicatorFadeEdges | boolean,\n): VerticalFadeSides {\n\tif (fade === false || fade === \"none\") {\n\t\treturn { top: false, bottom: false, any: false };\n\t}\n\tif (fade === true || fade === \"both\") {\n\t\treturn { top: true, bottom: true, any: true };\n\t}\n\tif (fade === \"top\") {\n\t\treturn { top: true, bottom: false, any: true };\n\t}\n\treturn { top: false, bottom: true, any: true };\n}\n\nexport interface IndicatorFadeGradientStop {\n\toffset: string;\n\topacity: number;\n}\n\n/** Opacity stops for the crosshair vertical gradient. */\nexport function indicatorFadeGradientStops(\n\tsides: VerticalFadeSides,\n\tfadeLengthPercent = 10,\n): IndicatorFadeGradientStop[] {\n\tconst fade = Math.min(40, Math.max(2, fadeLengthPercent));\n\tconst innerEnd = 100 - fade;\n\n\tif (!sides.any) {\n\t\treturn [{ offset: \"0%\", opacity: 1 }];\n\t}\n\n\tif (sides.top && sides.bottom) {\n\t\treturn [\n\t\t\t{ offset: \"0%\", opacity: 0 },\n\t\t\t{ offset: `${fade}%`, opacity: 1 },\n\t\t\t{ offset: \"50%\", opacity: 1 },\n\t\t\t{ offset: `${innerEnd}%`, opacity: 1 },\n\t\t\t{ offset: \"100%\", opacity: 0 },\n\t\t];\n\t}\n\n\tif (sides.top) {\n\t\treturn [\n\t\t\t{ offset: \"0%\", opacity: 0 },\n\t\t\t{ offset: `${fade}%`, opacity: 1 },\n\t\t\t{ offset: \"100%\", opacity: 1 },\n\t\t];\n\t}\n\n\treturn [\n\t\t{ offset: \"0%\", opacity: 1 },\n\t\t{ offset: `${innerEnd}%`, opacity: 1 },\n\t\t{ offset: \"100%\", opacity: 0 },\n\t];\n}\n","\"use client\";\n\nimport { motion, useSpring } from \"motion/react\";\nimport { useEffect } from \"react\";\nimport { type SpringConfig, useChartConfig } from \"../chart-config-context\";\nimport { chartCssVars } from \"../chart-context\";\nimport {\n\ttype IndicatorFadeEdges,\n\tindicatorFadeGradientStops,\n\tresolveVerticalFadeSides,\n} from \"../indicator-fade\";\n\nexport type IndicatorWidth =\n\t| number // Pixel width\n\t| \"line\" // 1px line (default)\n\t| \"thin\" // 2px\n\t| \"medium\" // 4px\n\t| \"thick\"; // 8px\n\nexport interface TooltipIndicatorProps {\n\t/** X position in pixels (center of the indicator) */\n\tx: number;\n\t/** Height of the indicator */\n\theight: number;\n\t/** Whether the indicator is visible */\n\tvisible: boolean;\n\t/**\n\t * Width of the indicator - number (pixels) or preset.\n\t * Ignored if `span` is provided.\n\t */\n\twidth?: IndicatorWidth;\n\t/**\n\t * Number of columns/days to span, with current point centered.\n\t * Requires `columnWidth` to be set.\n\t */\n\tspan?: number;\n\t/** Width of a single column/day in pixels. Required when using `span`. */\n\tcolumnWidth?: number;\n\t/** Primary color at edges (10% and 90%) */\n\tcolorEdge?: string;\n\t/** Secondary color at center (50%) */\n\tcolorMid?: string;\n\t/** Vertical fade: both ends, top, bottom, or none (solid). */\n\tfadeEdges?: IndicatorFadeEdges | boolean;\n\t/** Fade zone size as a percentage of indicator height. Default: 10 */\n\tfadeLength?: number;\n\t/** Animate position with a spring. Default: true */\n\tanimate?: boolean;\n\t/** Unique ID for the gradient */\n\tgradientId?: string;\n\t/** Per-chart override; falls back to `ChartConfigProvider.tooltipSpring`. */\n\tspringConfig?: SpringConfig;\n\t/** SVG stroke dash pattern. When set, renders a dashed stroke instead of a solid fill. */\n\tstrokeDasharray?: string;\n}\n\nfunction resolveWidth(width: IndicatorWidth): number {\n\tif (typeof width === \"number\") {\n\t\treturn width;\n\t}\n\tswitch (width) {\n\t\tcase \"line\":\n\t\t\treturn 1;\n\t\tcase \"thin\":\n\t\t\treturn 2;\n\t\tcase \"medium\":\n\t\t\treturn 4;\n\t\tcase \"thick\":\n\t\t\treturn 8;\n\t\tdefault:\n\t\t\treturn 1;\n\t}\n}\n\n// Inner-only-on-visible so `useSpring` initializes at the real cursor x\n// instead of 0 on first hover.\nexport function TooltipIndicator(props: TooltipIndicatorProps) {\n\tif (!props.visible) {\n\t\treturn null;\n\t}\n\treturn <TooltipIndicatorInner {...props} />;\n}\n\nfunction TooltipIndicatorInner({\n\tx,\n\tvisible,\n\theight,\n\twidth = \"line\",\n\tspan,\n\tcolumnWidth,\n\tcolorEdge = chartCssVars.crosshair,\n\tcolorMid = chartCssVars.crosshair,\n\tfadeEdges = \"both\",\n\tfadeLength = 10,\n\tanimate = true,\n\tgradientId = \"tooltip-indicator-gradient\",\n\tspringConfig,\n\tstrokeDasharray,\n}: TooltipIndicatorProps) {\n\tconst { tooltipSpring } = useChartConfig();\n\tconst effectiveSpring = springConfig ?? tooltipSpring;\n\n\tconst pixelWidth =\n\t\tspan !== undefined && columnWidth !== undefined\n\t\t\t? span * columnWidth\n\t\t\t: resolveWidth(width);\n\n\tconst rectX = x - pixelWidth / 2;\n\tconst lineX = x;\n\tconst animatedX = useSpring(rectX, effectiveSpring);\n\tconst animatedLineX = useSpring(lineX, effectiveSpring);\n\n\tif (animate) {\n\t\tanimatedX.set(rectX);\n\t\tanimatedLineX.set(lineX);\n\t}\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: we need to jump the animatedX when the visible prop changes\n\tuseEffect(() => {\n\t\tanimatedX.set(rectX);\n\t\tanimatedLineX.set(lineX);\n\t}, [animatedLineX, animatedX, lineX, rectX, visible]);\n\n\tconst indicatorFill = colorMid || colorEdge;\n\tconst fadeSides = resolveVerticalFadeSides(fadeEdges);\n\tconst dashed = Boolean(strokeDasharray);\n\n\tif (dashed) {\n\t\tconst strokeWidth = Math.max(1, pixelWidth);\n\t\treturn animate ? (\n\t\t\t<motion.line\n\t\t\t\tstroke={indicatorFill}\n\t\t\t\tstrokeDasharray={strokeDasharray}\n\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\tx1={animatedLineX}\n\t\t\t\tx2={animatedLineX}\n\t\t\t\ty1={0}\n\t\t\t\ty2={height}\n\t\t\t/>\n\t\t) : (\n\t\t\t<line\n\t\t\t\tstroke={indicatorFill}\n\t\t\t\tstrokeDasharray={strokeDasharray}\n\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\tx1={lineX}\n\t\t\t\tx2={lineX}\n\t\t\t\ty1={0}\n\t\t\t\ty2={height}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (!fadeSides.any) {\n\t\treturn animate ? (\n\t\t\t<motion.rect\n\t\t\t\tfill={indicatorFill}\n\t\t\t\theight={height}\n\t\t\t\twidth={pixelWidth}\n\t\t\t\tx={animatedX}\n\t\t\t\ty={0}\n\t\t\t/>\n\t\t) : (\n\t\t\t<rect\n\t\t\t\tfill={indicatorFill}\n\t\t\t\theight={height}\n\t\t\t\twidth={pixelWidth}\n\t\t\t\tx={rectX}\n\t\t\t\ty={0}\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst fadeStops = indicatorFadeGradientStops(fadeSides, fadeLength);\n\n\treturn (\n\t\t<g>\n\t\t\t<defs>\n\t\t\t\t<linearGradient id={gradientId} x1=\"0%\" x2=\"0%\" y1=\"0%\" y2=\"100%\">\n\t\t\t\t\t{fadeStops.map((stop) => (\n\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\tkey={stop.offset}\n\t\t\t\t\t\t\toffset={stop.offset}\n\t\t\t\t\t\t\tstyle={{ stopColor: indicatorFill, stopOpacity: stop.opacity }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</linearGradient>\n\t\t\t</defs>\n\t\t\t{animate ? (\n\t\t\t\t<motion.rect\n\t\t\t\t\tfill={`url(#${gradientId})`}\n\t\t\t\t\theight={height}\n\t\t\t\t\twidth={pixelWidth}\n\t\t\t\t\tx={animatedX}\n\t\t\t\t\ty={0}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<rect\n\t\t\t\t\tfill={`url(#${gradientId})`}\n\t\t\t\t\theight={height}\n\t\t\t\t\twidth={pixelWidth}\n\t\t\t\t\tx={rectX}\n\t\t\t\t\ty={0}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</g>\n\t);\n}\n\nTooltipIndicator.displayName = \"TooltipIndicator\";\n\nexport default TooltipIndicator;\n","\"use client\";\n\nimport { motion, useSpring } from \"motion/react\";\nimport { memo, useEffect, useMemo, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n\tresolveTooltipBoxMotion,\n\ttype SpringConfig,\n\tuseChartConfig,\n} from \"../chart-config-context\";\nimport {\n\tchartCssVars,\n\ttype LineConfig,\n\tuseChart,\n\tuseChartStable,\n} from \"../chart-context\";\nimport { weekdayDateFmt } from \"../chart-formatters\";\nimport type { IndicatorFadeEdges } from \"../indicator-fade\";\nimport { DateTicker } from \"./date-ticker\";\nimport { TooltipBox } from \"./tooltip-box\";\nimport { TooltipContent, type TooltipRow } from \"./tooltip-content\";\nimport { TooltipDot } from \"./tooltip-dot\";\nimport { TooltipIndicator } from \"./tooltip-indicator\";\n\nexport interface ChartTooltipProps {\n\t/** Whether to show the date pill at bottom. Default: true */\n\tshowDatePill?: boolean;\n\t/** Whether to show the vertical crosshair line. Default: true */\n\tshowCrosshair?: boolean;\n\t/** Whether to show dots on the lines. Default: true */\n\tshowDots?: boolean;\n\t/** Dot style: filled circle or transparent ring. Default: \"dot\" */\n\tdotVariant?: \"dot\" | \"ring\";\n\t/** Dot / ring radius in pixels. Default: 5 */\n\tdotSize?: number;\n\t/** Ring corner radius as a fraction of side length (0 = square, 0.5 = circle). */\n\tdotRadiusFraction?: number;\n\t/** Multiplier applied to the computed dot / ring pixel radius. Default: 1 */\n\tdotScale?: number;\n\t/** Ring stroke width in pixels. Default: 1.5 for ring variant */\n\tdotStrokeWidth?: number;\n\t/**\n\t * Color for the crosshair/indicator line. When a function, receives the hovered point\n\t * (e.g. for candlestick: match candle color from close vs open). Default: --chart-crosshair.\n\t */\n\tindicatorColor?: string | ((point: Record<string, unknown>) => string);\n\t/** Custom content renderer for the tooltip box */\n\tcontent?: (props: {\n\t\tpoint: Record<string, unknown>;\n\t\tindex: number;\n\t}) => React.ReactNode;\n\t/** Custom row renderer - return array of TooltipRow */\n\trows?: (point: Record<string, unknown>) => TooltipRow[];\n\t/**\n\t * Override tooltip dot fill. When omitted and `rows` is set, dot colors match row colors.\n\t * When a function, receives the hovered point and line config.\n\t */\n\tdotColor?:\n\t\tstring | ((point: Record<string, unknown>, line: LineConfig) => string);\n\t/** Additional content to show below rows (e.g., markers) */\n\tchildren?: React.ReactNode;\n\t/** Custom class name */\n\tclassName?: string;\n\t/** Per-chart override for the crosshair / dot / date-pill spring. */\n\tspringConfig?: SpringConfig;\n\t/**\n\t * When `true`, the floating panel uses the crosshair spring and stays in sync.\n\t * Default `false` — panel follow uses `damping` (`20`).\n\t */\n\tmatchCrosshair?: boolean;\n\t/**\n\t * Spring damping for the floating tooltip panel when `matchCrosshair` is `false`.\n\t * `0` disables spring motion (instant). Default: `20`.\n\t */\n\tdamping?: number;\n\t/** SVG stroke dash pattern for the crosshair. Omit for solid. */\n\tindicatorDasharray?: string;\n\t/** Vertical crosshair fade: `both`, `top`, `bottom`, or `none` (solid). Default: `both`. */\n\tindicatorFadeEdges?: IndicatorFadeEdges;\n\t/** Crosshair fade zone size (% of height). Default: `10`. */\n\tindicatorFadeLength?: number;\n\t/** Per-chart override for the floating-panel spring. */\n\tboxSpringConfig?: SpringConfig;\n\t/** Inline styles for the tooltip panel (background, blur, etc.). */\n\tpanelStyle?: React.CSSProperties;\n\t/**\n\t * Tooltip panel background color (CSS variable or color value).\n\t * Default: `var(--chart-tooltip-background)`.\n\t */\n\tbackgroundColor?: string;\n}\n\ninterface ChartTooltipInnerProps extends ChartTooltipProps {\n\tcontainer: HTMLElement;\n}\n\nconst ChartTooltipInner = memo(function ChartTooltipInner({\n\tshowDatePill = true,\n\tshowCrosshair = true,\n\tshowDots = true,\n\tdotVariant = \"dot\",\n\tdotSize = 5,\n\tdotRadiusFraction,\n\tdotScale = 1,\n\tdotStrokeWidth,\n\tindicatorColor: indicatorColorProp,\n\tcontent,\n\trows: rowsRenderer,\n\tdotColor: dotColorProp,\n\tchildren,\n\tclassName = \"\",\n\tcontainer,\n\tspringConfig,\n\tmatchCrosshair = false,\n\tdamping,\n\tindicatorDasharray,\n\tindicatorFadeEdges,\n\tindicatorFadeLength,\n\tboxSpringConfig,\n\tpanelStyle,\n\tbackgroundColor,\n}: ChartTooltipInnerProps) {\n\tconst {\n\t\ttooltipData,\n\t\twidth,\n\t\theight,\n\t\tinnerHeight,\n\t\tmargin,\n\t\tcolumnWidth,\n\t\tlines,\n\t\txAccessor,\n\t\tdateLabels,\n\t\tcontainerRef,\n\t\torientation,\n\t\tbarXAccessor,\n\t\tbandWidth,\n\t\tsquareSnap,\n\t} = useChart();\n\tconst { tooltipSpring } = useChartConfig();\n\n\tconst isHorizontal = orientation === \"horizontal\";\n\tconst discreteInteraction = dateLabels.length > 60;\n\n\tconst resolvedDotSize = useMemo(() => {\n\t\tif (dotVariant !== \"ring\" || !bandWidth || lines.length === 0) {\n\t\t\treturn dotSize * dotScale;\n\t\t}\n\t\tconst seriesCount = lines.length;\n\t\tconst gap = squareSnap?.groupGap ?? (seriesCount > 1 ? 4 : 0);\n\t\tconst squareSize = (bandWidth - gap * (seriesCount - 1)) / seriesCount;\n\t\treturn (squareSize / 2) * dotScale;\n\t}, [\n\t\tbandWidth,\n\t\tdotScale,\n\t\tdotSize,\n\t\tdotVariant,\n\t\tlines.length,\n\t\tsquareSnap?.groupGap,\n\t]);\n\tconst boxMotion = useMemo(() => {\n\t\tif (boxSpringConfig) {\n\t\t\treturn {\n\t\t\t\tanimate: !discreteInteraction,\n\t\t\t\tspringConfig: boxSpringConfig,\n\t\t\t};\n\t\t}\n\t\tif (matchCrosshair) {\n\t\t\treturn {\n\t\t\t\tanimate: !discreteInteraction,\n\t\t\t\tspringConfig: springConfig ?? tooltipSpring,\n\t\t\t};\n\t\t}\n\t\treturn resolveTooltipBoxMotion(damping);\n\t}, [\n\t\tboxSpringConfig,\n\t\tdamping,\n\t\tdiscreteInteraction,\n\t\tmatchCrosshair,\n\t\tspringConfig,\n\t\ttooltipSpring,\n\t]);\n\n\tconst visible = tooltipData !== null;\n\tconst x = tooltipData?.x ?? 0;\n\tconst xWithMargin = x + margin.left;\n\n\t// For horizontal charts, get the y position from the first line's yPosition (center of bar)\n\tconst firstLineDataKey = lines[0]?.dataKey;\n\tconst firstLineY = firstLineDataKey\n\t\t? (tooltipData?.yPositions[firstLineDataKey] ?? 0)\n\t\t: 0;\n\tconst yWithMargin = firstLineY + margin.top;\n\n\tconst tooltipRows = useMemo(() => {\n\t\tif (!tooltipData) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (rowsRenderer) {\n\t\t\treturn rowsRenderer(tooltipData.point);\n\t\t}\n\n\t\t// Default: generate rows from registered lines\n\t\treturn lines.map((line) => ({\n\t\t\tcolor: line.stroke,\n\t\t\tlabel: line.dataKey,\n\t\t\tvalue: (tooltipData.point[line.dataKey] as number) ?? 0,\n\t\t}));\n\t}, [tooltipData, lines, rowsRenderer]);\n\n\tconst resolveDotColor = useMemo(() => {\n\t\treturn (line: LineConfig, index: number): string => {\n\t\t\tif (rowsRenderer && tooltipRows[index]?.color) {\n\t\t\t\treturn tooltipRows[index].color;\n\t\t\t}\n\t\t\tif (dotColorProp != null) {\n\t\t\t\tif (typeof dotColorProp === \"function\" && tooltipData) {\n\t\t\t\t\treturn dotColorProp(tooltipData.point, line);\n\t\t\t\t}\n\t\t\t\tif (typeof dotColorProp === \"string\") {\n\t\t\t\t\treturn dotColorProp;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn line.stroke;\n\t\t};\n\t}, [dotColorProp, rowsRenderer, tooltipData, tooltipRows]);\n\n\t// Resolve indicator color (static or from hovered point)\n\tconst indicatorColor = useMemo(() => {\n\t\tif (indicatorColorProp == null) {\n\t\t\treturn chartCssVars.crosshair;\n\t\t}\n\t\tif (typeof indicatorColorProp === \"function\") {\n\t\t\treturn tooltipData\n\t\t\t\t? indicatorColorProp(tooltipData.point)\n\t\t\t\t: chartCssVars.crosshair;\n\t\t}\n\t\treturn indicatorColorProp;\n\t}, [indicatorColorProp, tooltipData]);\n\n\t// Title from date or category\n\tconst title = useMemo(() => {\n\t\tif (!tooltipData) {\n\t\t\treturn undefined;\n\t\t}\n\t\t// For bar charts (horizontal or vertical), use the category name\n\t\tif (barXAccessor) {\n\t\t\treturn barXAccessor(tooltipData.point);\n\t\t}\n\t\t// For line/area charts, use the date\n\t\treturn weekdayDateFmt.format(xAccessor(tooltipData.point));\n\t}, [tooltipData, barXAccessor, xAccessor]);\n\n\tconst tooltipContent = (\n\t\t<>\n\t\t\t{/* Crosshair indicator - rendered as SVG overlay */}\n\t\t\t{showCrosshair && (\n\t\t\t\t<svg\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName=\"pointer-events-none absolute inset-0\"\n\t\t\t\t\theight=\"100%\"\n\t\t\t\t\twidth=\"100%\"\n\t\t\t\t>\n\t\t\t\t\t<g transform={`translate(${margin.left},${margin.top})`}>\n\t\t\t\t\t\t<TooltipIndicator\n\t\t\t\t\t\t\tanimate={!discreteInteraction}\n\t\t\t\t\t\t\tcolorEdge={indicatorColor}\n\t\t\t\t\t\t\tcolorMid={indicatorColor}\n\t\t\t\t\t\t\tcolumnWidth={columnWidth}\n\t\t\t\t\t\t\tfadeEdges={\n\t\t\t\t\t\t\t\tindicatorDasharray ? \"none\" : (indicatorFadeEdges ?? \"both\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfadeLength={indicatorFadeLength}\n\t\t\t\t\t\t\theight={innerHeight}\n\t\t\t\t\t\t\tspringConfig={springConfig}\n\t\t\t\t\t\t\tstrokeDasharray={indicatorDasharray}\n\t\t\t\t\t\t\tvisible={visible}\n\t\t\t\t\t\t\twidth=\"line\"\n\t\t\t\t\t\t\tx={x}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</g>\n\t\t\t\t</svg>\n\t\t\t)}\n\n\t\t\t{/* Dots on bars/lines - show for vertical charts only */}\n\t\t\t{showDots && visible && !isHorizontal && (\n\t\t\t\t<svg\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName=\"pointer-events-none absolute inset-0\"\n\t\t\t\t\theight=\"100%\"\n\t\t\t\t\twidth=\"100%\"\n\t\t\t\t>\n\t\t\t\t\t<g transform={`translate(${margin.left},${margin.top})`}>\n\t\t\t\t\t\t{lines.map((line, index) => (\n\t\t\t\t\t\t\t<TooltipDot\n\t\t\t\t\t\t\t\tcolor={resolveDotColor(line, index)}\n\t\t\t\t\t\t\t\tcornerRadiusFraction={\n\t\t\t\t\t\t\t\t\tdotVariant === \"ring\" ? dotRadiusFraction : undefined\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tkey={line.dataKey}\n\t\t\t\t\t\t\t\tsize={resolvedDotSize}\n\t\t\t\t\t\t\t\tspringConfig={springConfig}\n\t\t\t\t\t\t\t\tstrokeColor={chartCssVars.background}\n\t\t\t\t\t\t\t\tstrokeWidth={dotVariant === \"ring\" ? dotStrokeWidth : undefined}\n\t\t\t\t\t\t\t\tvariant={dotVariant}\n\t\t\t\t\t\t\t\tvisible={visible}\n\t\t\t\t\t\t\t\tx={tooltipData?.xPositions?.[line.dataKey] ?? x}\n\t\t\t\t\t\t\t\ty={tooltipData?.yPositions[line.dataKey] ?? 0}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</g>\n\t\t\t\t</svg>\n\t\t\t)}\n\n\t\t\t{/* Tooltip Box */}\n\t\t\t<TooltipBox\n\t\t\t\tanimate={boxMotion.animate}\n\t\t\t\tbackgroundColor={backgroundColor}\n\t\t\t\tclassName={className}\n\t\t\t\tcontainerHeight={height}\n\t\t\t\tcontainerRef={containerRef}\n\t\t\t\tcontainerWidth={width}\n\t\t\t\tpanelStyle={panelStyle}\n\t\t\t\tspringConfig={boxMotion.springConfig}\n\t\t\t\ttop={isHorizontal ? undefined : margin.top}\n\t\t\t\tvisible={visible}\n\t\t\t\tx={xWithMargin}\n\t\t\t\ty={isHorizontal ? yWithMargin : margin.top}\n\t\t\t>\n\t\t\t\t{content && tooltipData\n\t\t\t\t\t? content({\n\t\t\t\t\t\t\tpoint: tooltipData.point,\n\t\t\t\t\t\t\tindex: tooltipData.index,\n\t\t\t\t\t\t})\n\t\t\t\t\t: !content && (\n\t\t\t\t\t\t\t<TooltipContent rows={tooltipRows} title={title}>\n\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t\t)}\n\t\t\t</TooltipBox>\n\n\t\t\t{/* Date/Category Ticker - only show for vertical charts */}\n\t\t\t<DatePillTracker\n\t\t\t\tcurrentIndex={tooltipData?.index ?? 0}\n\t\t\t\tdiscreteInteraction={discreteInteraction}\n\t\t\t\tenabled={showDatePill && !isHorizontal}\n\t\t\t\tlabels={dateLabels}\n\t\t\t\tspringConfig={springConfig}\n\t\t\t\tvisible={visible}\n\t\t\t\txWithMargin={xWithMargin}\n\t\t\t/>\n\t\t</>\n\t);\n\n\treturn createPortal(tooltipContent, container);\n});\n\nexport function ChartTooltip(props: ChartTooltipProps) {\n\tconst { containerRef } = useChartStable();\n\tconst [mounted, setMounted] = useState(false);\n\n\t// Only render portals on client side after mount\n\tuseEffect(() => {\n\t\tsetMounted(true);\n\t}, []);\n\n\tconst container = containerRef.current;\n\tif (!(mounted && container)) {\n\t\treturn null;\n\t}\n\n\treturn <ChartTooltipInner {...props} container={container} />;\n}\n\nChartTooltip.displayName = \"ChartTooltip\";\n\ninterface DatePillTrackerProps {\n\tenabled: boolean;\n\tvisible: boolean;\n\tlabels: string[];\n\tcurrentIndex: number;\n\txWithMargin: number;\n\tdiscreteInteraction: boolean;\n\tspringConfig?: SpringConfig;\n}\n\n// Inner-only-on-visible so `useSpring` initializes at the real cursor x\n// instead of `margin.left` on first hover.\nfunction DatePillTracker(props: DatePillTrackerProps) {\n\tif (!(props.enabled && props.visible && props.labels.length > 0)) {\n\t\treturn null;\n\t}\n\treturn <DatePillTrackerInner {...props} />;\n}\n\nfunction DatePillTrackerInner({\n\tlabels,\n\tcurrentIndex,\n\txWithMargin,\n\tdiscreteInteraction,\n\tspringConfig,\n\tvisible,\n}: DatePillTrackerProps) {\n\tconst { tooltipSpring } = useChartConfig();\n\tconst effectiveSpring = springConfig ?? tooltipSpring;\n\tconst animatedX = useSpring(xWithMargin, effectiveSpring);\n\n\tif (!discreteInteraction) {\n\t\tanimatedX.set(xWithMargin);\n\t}\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: we need to jump the animatedX when the visible prop changes\n\tuseEffect(() => {\n\t\tanimatedX.set(xWithMargin);\n\t}, [animatedX, visible]);\n\n\treturn (\n\t\t<motion.div\n\t\t\tclassName=\"pointer-events-none absolute z-50\"\n\t\t\tstyle={{\n\t\t\t\tleft: discreteInteraction ? xWithMargin : animatedX,\n\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\tbottom: 4,\n\t\t\t}}\n\t\t>\n\t\t\t<DateTicker\n\t\t\t\tcurrentIndex={currentIndex}\n\t\t\t\tlabels={labels}\n\t\t\t\tvisible={visible}\n\t\t\t/>\n\t\t</motion.div>\n\t);\n}\n\nexport default ChartTooltip;\n","\"use client\";\n\nimport NumberFlow from \"@number-flow/react\";\nimport { type ReactNode, useEffect, useMemo, useState } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/** Subset of `Intl.NumberFormatOptions` supported by NumberFlow */\nexport interface ChartStatFlowFormat {\n\tnotation?: \"standard\" | \"compact\";\n\tcompactDisplay?: \"short\" | \"long\";\n\tminimumFractionDigits?: number;\n\tmaximumFractionDigits?: number;\n\tminimumIntegerDigits?: number;\n\tminimumSignificantDigits?: number;\n\tmaximumSignificantDigits?: number;\n\tstyle?: \"decimal\" | \"percent\" | \"currency\";\n\tcurrency?: string;\n\tcurrencyDisplay?: \"symbol\" | \"narrowSymbol\" | \"code\" | \"name\";\n\tunit?: string;\n\tunitDisplay?: \"short\" | \"long\" | \"narrow\";\n}\n\nexport const defaultChartStatFlowFormat: ChartStatFlowFormat = {\n\tnotation: \"standard\",\n\tmaximumFractionDigits: 0,\n};\n\nfunction formatStatValue(\n\tvalue: number,\n\tformatOptions: ChartStatFlowFormat,\n\tprefix?: string,\n\tsuffix?: string,\n): string {\n\tconst formatted = new Intl.NumberFormat(undefined, formatOptions).format(\n\t\tvalue,\n\t);\n\treturn `${prefix ?? \"\"}${formatted}${suffix ?? \"\"}`;\n}\n\nfunction useNumberFlowElementReady(): boolean {\n\tconst [ready, setReady] = useState(\n\t\t() =>\n\t\t\ttypeof customElements !== \"undefined\" &&\n\t\t\tBoolean(customElements.get(\"number-flow-react\")),\n\t);\n\n\tuseEffect(() => {\n\t\tif (ready) {\n\t\t\treturn;\n\t\t}\n\t\tlet cancelled = false;\n\t\tcustomElements.whenDefined(\"number-flow-react\").then(() => {\n\t\t\tif (!cancelled) {\n\t\t\t\tsetReady(true);\n\t\t\t}\n\t\t});\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [ready]);\n\n\treturn ready;\n}\n\nexport interface ChartStatFlowProps {\n\tvalue: number;\n\tlabel: string;\n\tformatOptions?: ChartStatFlowFormat;\n\tprefix?: string;\n\tsuffix?: string;\n\tvalueClassName?: string;\n\tlabelClassName?: string;\n\ticon?: ReactNode;\n}\n\n/**\n * Shared value + label stack using NumberFlow (same layout as pie / ring centers).\n * Parent should provide flex alignment and sizing when needed.\n */\nexport function ChartStatFlow({\n\tvalue,\n\tlabel,\n\tformatOptions = defaultChartStatFlowFormat,\n\tprefix,\n\tsuffix,\n\tvalueClassName = \"text-2xl font-bold\",\n\tlabelClassName = \"text-xs\",\n\ticon,\n}: ChartStatFlowProps) {\n\tconst numberFlowReady = useNumberFlowElementReady();\n\tconst staticValue = useMemo(\n\t\t() => formatStatValue(value, formatOptions, prefix, suffix),\n\t\t[value, formatOptions, prefix, suffix],\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t{icon ? (\n\t\t\t\t<div className=\"mb-2 flex h-12 w-12 items-center justify-center rounded-full bg-muted/50\">\n\t\t\t\t\t{icon}\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<span className={cn(\"text-foreground tabular-nums\", valueClassName)}>\n\t\t\t\t{numberFlowReady ? (\n\t\t\t\t\t<NumberFlow\n\t\t\t\t\t\tformat={formatOptions}\n\t\t\t\t\t\tisolate\n\t\t\t\t\t\tprefix={prefix}\n\t\t\t\t\t\tsuffix={suffix}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\twillChange\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\tstaticValue\n\t\t\t\t)}\n\t\t\t</span>\n\t\t\t<span className={cn(\"mt-0.5 text-chart-label\", labelClassName)}>\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t</>\n\t);\n}\n\nChartStatFlow.displayName = \"ChartStatFlow\";\n","export const chartCenterContainerClassName =\n\t\"@container/chart-center size-full min-w-0\";\n\n/** Primary stat — ~22% of center width, clamped between text-sm and text-3xl. */\nexport const chartCenterValueClassName =\n\t\"font-bold tabular-nums leading-none text-[clamp(0.75rem,22cqw,1.875rem)]\";\n\n/** Supporting label — ~9% of center width, clamped between 10px and text-xs. */\nexport const chartCenterLabelClassName =\n\t\"max-w-full truncate leading-tight text-[clamp(0.625rem,9cqw,0.75rem)]\";\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tchartCenterContainerClassName,\n\tchartCenterLabelClassName,\n\tchartCenterValueClassName,\n} from \"./chart-center-typography\";\nimport {\n\tChartStatFlow,\n\ttype ChartStatFlowFormat,\n\tdefaultChartStatFlowFormat,\n} from \"./chart-stat-flow\";\n\nexport type GaugeLabelPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type GaugeLabelAlign = \"start\" | \"center\" | \"end\";\n\nexport interface GaugeLabelShellProps {\n\tcenterValue: number;\n\tdefaultLabel?: string;\n\tprefix?: string;\n\tsuffix?: string;\n\tformatOptions?: ChartStatFlowFormat;\n\talign?: GaugeLabelAlign;\n\tclassName?: string;\n}\n\nconst labelAlignClass: Record<GaugeLabelAlign, string> = {\n\tstart: \"items-start text-left\",\n\tcenter: \"items-center text-center\",\n\tend: \"items-end text-right\",\n};\n\nexport function GaugeLabelShell({\n\tcenterValue,\n\tdefaultLabel = \"Total\",\n\tprefix,\n\tsuffix,\n\tformatOptions = defaultChartStatFlowFormat,\n\talign = \"center\",\n\tclassName,\n}: GaugeLabelShellProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tchartCenterContainerClassName,\n\t\t\t\t\"flex min-w-0 flex-col\",\n\t\t\t\tlabelAlignClass[align],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<ChartStatFlow\n\t\t\t\tformatOptions={formatOptions}\n\t\t\t\tlabel={defaultLabel}\n\t\t\t\tlabelClassName={cn(\n\t\t\t\t\tchartCenterLabelClassName,\n\t\t\t\t\t\"text-[length:var(--chart-foreground-muted)]\",\n\t\t\t\t)}\n\t\t\t\tprefix={prefix}\n\t\t\t\tsuffix={suffix}\n\t\t\t\tvalue={centerValue}\n\t\t\t\tvalueClassName={cn(\n\t\t\t\t\tchartCenterValueClassName,\n\t\t\t\t\t\"text-[length:var(--chart-foreground)]\",\n\t\t\t\t)}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nconst crossAxisSelf: Record<GaugeLabelAlign, string> = {\n\tstart: \"self-start\",\n\tcenter: \"self-center\",\n\tend: \"self-end\",\n};\n\nconst crossAxisAlign: Record<GaugeLabelAlign, string> = {\n\tstart: \"items-start\",\n\tcenter: \"items-center\",\n\tend: \"items-end\",\n};\n\nconst inlineAxisAlign: Record<GaugeLabelAlign, string> = {\n\tstart: \"justify-start\",\n\tcenter: \"justify-center\",\n\tend: \"justify-end\",\n};\n\nexport function GaugeLabelLayout({\n\tplacement,\n\talign,\n\tlabel,\n\tchildren,\n\tclassName,\n}: {\n\tplacement: GaugeLabelPlacement;\n\talign: GaugeLabelAlign;\n\tlabel: ReactNode | null;\n\tchildren: ReactNode;\n\tclassName?: string;\n}) {\n\tif (!label) {\n\t\treturn <div className={cn(\"w-full min-w-0\", className)}>{children}</div>;\n\t}\n\n\tif (placement === \"top\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex w-full min-w-0 flex-col gap-3\",\n\t\t\t\t\tcrossAxisAlign[align],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className={crossAxisSelf[align]}>{label}</div>\n\t\t\t\t<div className=\"w-full min-w-0\">{children}</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (placement === \"bottom\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex w-full min-w-0 flex-col gap-3\",\n\t\t\t\t\tcrossAxisAlign[align],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className=\"w-full min-w-0\">{children}</div>\n\t\t\t\t<div className={crossAxisSelf[align]}>{label}</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (placement === \"left\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex w-full min-w-0 items-center gap-4\",\n\t\t\t\t\tinlineAxisAlign[align],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className=\"shrink-0\">{label}</div>\n\t\t\t\t<div className=\"min-w-0 flex-1\">{children}</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex w-full min-w-0 items-center gap-4\",\n\t\t\t\tinlineAxisAlign[align],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"min-w-0 flex-1\">{children}</div>\n\t\t\t<div className=\"shrink-0\">{label}</div>\n\t\t</div>\n\t);\n}\n","import {\n\tChildren,\n\tFragment,\n\tisValidElement,\n\ttype ReactElement,\n\ttype ReactNode,\n} from \"react\";\n\nexport const DEFAULT_ACTIVE_GRADIENT: readonly [string, string] = [\n\t\"#bef264\",\n\t\"#10b981\",\n];\n\nexport const DEFAULT_ACTIVE_FILL_OPACITY = 1;\nexport const DEFAULT_INACTIVE_FILL_OPACITY = 0.8;\nexport const DEFAULT_LINEAR_GAUGE_HEIGHT = 24;\n\nexport interface NotchPoint {\n\tx1: number;\n\ty1: number;\n\tx2: number;\n\ty2: number;\n\tx3: number;\n\ty3: number;\n\tx4: number;\n\ty4: number;\n}\n\nexport interface ComputedNotch {\n\tindex: number;\n\tpoints: NotchPoint;\n\tisActive: boolean;\n\tgradientColor: string;\n\txCenter: number;\n\tyCenter: number;\n}\n\nfunction isDefsComponent(child: ReactElement): boolean {\n\tconst typeLabel =\n\t\t(child.type as { displayName?: string })?.displayName ||\n\t\t(child.type as { name?: string })?.name ||\n\t\t\"\";\n\treturn (\n\t\ttypeLabel.includes(\"Gradient\") ||\n\t\ttypeLabel.includes(\"Pattern\") ||\n\t\ttypeLabel === \"LinearGradient\" ||\n\t\ttypeLabel === \"RadialGradient\" ||\n\t\ttypeLabel === \"Lines\" ||\n\t\ttypeLabel === \"PatternLines\" ||\n\t\ttypeLabel === \"Circles\" ||\n\t\ttypeLabel === \"Hexagons\" ||\n\t\ttypeLabel === \"Waves\"\n\t);\n}\n\nexport function collectGaugeDefsElements(nodes: ReactNode): ReactElement[] {\n\tconst out: ReactElement[] = [];\n\tChildren.forEach(nodes, (child) => {\n\t\tif (!isValidElement(child)) {\n\t\t\treturn;\n\t\t}\n\t\tif (child.type === Fragment) {\n\t\t\tout.push(\n\t\t\t\t...collectGaugeDefsElements(\n\t\t\t\t\t(child.props as { children?: ReactNode }).children,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (isDefsComponent(child)) {\n\t\t\tout.push(child);\n\t\t}\n\t});\n\treturn out;\n}\n\nexport function interpolateGaugeHex(\n\tcolor1: string,\n\tcolor2: string,\n\tfactor: number,\n): string {\n\tconst hex = (c: string) => Number.parseInt(c, 16);\n\tconst r1 = hex(color1.slice(1, 3));\n\tconst g1 = hex(color1.slice(3, 5));\n\tconst b1 = hex(color1.slice(5, 7));\n\tconst r2 = hex(color2.slice(1, 3));\n\tconst g2 = hex(color2.slice(3, 5));\n\tconst b2 = hex(color2.slice(5, 7));\n\n\tconst r = Math.round(r1 + (r2 - r1) * factor);\n\tconst g = Math.round(g1 + (g2 - g1) * factor);\n\tconst b = Math.round(b1 + (b2 - b1) * factor);\n\n\treturn `#${r.toString(16).padStart(2, \"0\")}${g.toString(16).padStart(2, \"0\")}${b.toString(16).padStart(2, \"0\")}`;\n}\n\nexport function createNotchPath(\n\tpoints: NotchPoint,\n\tcornerRadiusPx: number,\n\tverticalDepth: number,\n): string {\n\tconst { x1, y1, x2, y2, x3, y3, x4, y4 } = points;\n\n\tconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\n\tconst dist = (ax: number, ay: number, bx: number, by: number) =>\n\t\tMath.hypot(bx - ax, by - ay);\n\n\tconst d12 = dist(x1, y1, x2, y2);\n\tconst d23 = dist(x2, y2, x3, y3);\n\tconst d34 = dist(x3, y3, x4, y4);\n\tconst d41 = dist(x4, y4, x1, y1);\n\n\tif (cornerRadiusPx <= 0) {\n\t\treturn `M ${x1} ${y1} L ${x2} ${y2} L ${x3} ${y3} L ${x4} ${y4} Z`;\n\t}\n\n\tconst minEdge = Math.min(d12, d23, d34, d41);\n\tconst cr = Math.min(\n\t\tcornerRadiusPx,\n\t\tverticalDepth * 0.48,\n\t\td12 * 0.49,\n\t\td23 * 0.49,\n\t\td34 * 0.49,\n\t\td41 * 0.49,\n\t\tminEdge * 0.49,\n\t);\n\n\tconst r1 = Math.min(cr / d12, 0.49);\n\tconst r2 = Math.min(cr / d23, 0.49);\n\tconst r3 = Math.min(cr / d34, 0.49);\n\tconst r4 = Math.min(cr / d41, 0.49);\n\n\tconst p1a = { x: lerp(x1, x4, r4), y: lerp(y1, y4, r4) };\n\tconst p1b = { x: lerp(x1, x2, r1), y: lerp(y1, y2, r1) };\n\tconst p2a = { x: lerp(x2, x1, r1), y: lerp(y2, y1, r1) };\n\tconst p2b = { x: lerp(x2, x3, r2), y: lerp(y2, y3, r2) };\n\tconst p3a = { x: lerp(x3, x2, r2), y: lerp(y3, y2, r2) };\n\tconst p3b = { x: lerp(x3, x4, r3), y: lerp(y3, y4, r3) };\n\tconst p4a = { x: lerp(x4, x3, r3), y: lerp(y4, y3, r3) };\n\tconst p4b = { x: lerp(x4, x1, r4), y: lerp(y4, y1, r4) };\n\n\treturn `M ${p1a.x} ${p1a.y} Q ${x1} ${y1} ${p1b.x} ${p1b.y} L ${p2a.x} ${p2a.y} Q ${x2} ${y2} ${p2b.x} ${p2b.y} L ${p3a.x} ${p3a.y} Q ${x3} ${y3} ${p3b.x} ${p3b.y} L ${p4a.x} ${p4a.y} Q ${x4} ${y4} ${p4b.x} ${p4b.y} Z`;\n}\n\nexport function resolveGaugeBgFill(options: {\n\tnotchIndex: number;\n\ttotalNotches: number;\n\thasCustomInactive: boolean;\n\tinactiveFill?: string;\n\tuseThemePaletteGradient: boolean;\n\tuseGradient: boolean;\n\tinactiveGrad0: string;\n\tinactiveGrad1: string;\n\tarcTrackFill: string;\n\tlinearTrackFill: string;\n\tlinearMode: boolean;\n}): string {\n\tconst {\n\t\tnotchIndex,\n\t\ttotalNotches,\n\t\thasCustomInactive,\n\t\tinactiveFill,\n\t\tuseThemePaletteGradient,\n\t\tuseGradient,\n\t\tinactiveGrad0,\n\t\tinactiveGrad1,\n\t\tarcTrackFill,\n\t\tlinearTrackFill,\n\t\tlinearMode,\n\t} = options;\n\n\tif (hasCustomInactive) {\n\t\treturn inactiveFill as string;\n\t}\n\tif (useThemePaletteGradient) {\n\t\treturn linearMode ? \"var(--chart-1)\" : arcTrackFill;\n\t}\n\tif (useGradient) {\n\t\tconst denom = totalNotches > 1 ? totalNotches - 1 : 1;\n\t\treturn interpolateGaugeHex(\n\t\t\tinactiveGrad0,\n\t\t\tinactiveGrad1,\n\t\t\tnotchIndex / denom,\n\t\t);\n\t}\n\treturn linearMode ? linearTrackFill : arcTrackFill;\n}\n\nexport function resolveGaugeActiveFill(options: {\n\tnotch: ComputedNotch;\n\thasCustomActive: boolean;\n\tactiveFill?: string;\n\tuseThemePaletteGradient: boolean;\n\tthemeActiveGradientId: string;\n\tuseGradient: boolean;\n\tactiveFillSolid: string;\n}): string {\n\tconst {\n\t\tnotch,\n\t\thasCustomActive,\n\t\tactiveFill,\n\t\tuseThemePaletteGradient,\n\t\tthemeActiveGradientId,\n\t\tuseGradient,\n\t\tactiveFillSolid,\n\t} = options;\n\n\tif (hasCustomActive) {\n\t\treturn activeFill as string;\n\t}\n\tif (useThemePaletteGradient) {\n\t\treturn `url(#${themeActiveGradientId})`;\n\t}\n\tif (useGradient) {\n\t\treturn notch.gradientColor;\n\t}\n\treturn activeFillSolid;\n}\n","\"use client\";\n\nimport type { Transition } from \"motion/react\";\nimport {\n\tcreateContext,\n\ttype ReactNode,\n\ttype RefObject,\n\tuseContext,\n\tuseMemo,\n} from \"react\";\n\n// CSS variable references for pie chart theming\nexport const pieCssVars = {\n\tbackground: \"var(--chart-background)\",\n\tforeground: \"var(--chart-foreground)\",\n\tforegroundMuted: \"var(--chart-foreground-muted)\",\n\tlabel: \"var(--chart-label)\",\n\t// Default slice colors from chart palette\n\tslice1: \"var(--chart-1)\",\n\tslice2: \"var(--chart-2)\",\n\tslice3: \"var(--chart-3)\",\n\tslice4: \"var(--chart-4)\",\n\tslice5: \"var(--chart-5)\",\n};\n\n// Default slice color palette\nexport const defaultPieColors = [\n\tpieCssVars.slice1,\n\tpieCssVars.slice2,\n\tpieCssVars.slice3,\n\tpieCssVars.slice4,\n\tpieCssVars.slice5,\n];\n\nexport interface PieData {\n\t/** Display label for the slice */\n\tlabel: string;\n\t/** Value for the slice (determines slice size relative to total) */\n\tvalue: number;\n\t/** Optional color override - falls back to palette */\n\tcolor?: string;\n\t/** Optional fill override for patterns/gradients (e.g., \"url(#patternId)\") */\n\tfill?: string;\n}\n\n/** Arc data computed by visx Pie */\nexport interface PieArcData {\n\tdata: PieData;\n\tindex: number;\n\tstartAngle: number;\n\tendAngle: number;\n\tpadAngle: number;\n\tvalue: number;\n}\n\nexport interface PieHoverContextValue {\n\thoveredIndex: number | null;\n\tsetHoveredIndex: (index: number | null) => void;\n}\n\nexport interface PieStableContextValue {\n\t// Data\n\tdata: PieData[];\n\tarcs: PieArcData[];\n\n\t// Dimensions\n\tsize: number;\n\tcenter: number;\n\touterRadius: number;\n\tinnerRadius: number;\n\tpadAngle: number;\n\tcornerRadius: number;\n\n\t// Hover effect\n\thoverOffset: number;\n\n\t// Animation state\n\tanimationKey: number;\n\tisLoaded: boolean;\n\tenterTransition?: Transition;\n\tenterStaggerScale: number;\n\n\t// Container ref for portals\n\tcontainerRef: RefObject<HTMLDivElement | null>;\n\n\t// Computed values\n\ttotalValue: number;\n\n\t// Get color for a slice index\n\tgetColor: (index: number) => string;\n\n\t// Get fill for a slice index (supports patterns/gradients)\n\tgetFill: (index: number) => string;\n\n\t/**\n\t * Studio geometry scrub — skip Motion path morphing and use plain SVG paths.\n\t * @default false\n\t */\n\tgeometryScrubbing: boolean;\n\n\t/** Precomputed slice paths during geometry scrub (one per arc). */\n\tscrubSlicePaths: readonly string[] | null;\n}\n\nexport type PieContextValue = PieStableContextValue & PieHoverContextValue;\n\nconst PieStableContext = createContext<PieStableContextValue | null>(null);\nconst PieHoverContext = createContext<PieHoverContextValue | null>(null);\n\nexport function PieProvider({\n\tchildren,\n\tvalue,\n}: {\n\tchildren: ReactNode;\n\tvalue: PieContextValue;\n}) {\n\tconst stable = useMemo<PieStableContextValue>(\n\t\t() => ({\n\t\t\tdata: value.data,\n\t\t\tarcs: value.arcs,\n\t\t\tsize: value.size,\n\t\t\tcenter: value.center,\n\t\t\touterRadius: value.outerRadius,\n\t\t\tinnerRadius: value.innerRadius,\n\t\t\tpadAngle: value.padAngle,\n\t\t\tcornerRadius: value.cornerRadius,\n\t\t\thoverOffset: value.hoverOffset,\n\t\t\tanimationKey: value.animationKey,\n\t\t\tisLoaded: value.isLoaded,\n\t\t\tenterTransition: value.enterTransition,\n\t\t\tenterStaggerScale: value.enterStaggerScale,\n\t\t\tcontainerRef: value.containerRef,\n\t\t\ttotalValue: value.totalValue,\n\t\t\tgetColor: value.getColor,\n\t\t\tgetFill: value.getFill,\n\t\t\tgeometryScrubbing: value.geometryScrubbing,\n\t\t\tscrubSlicePaths: value.scrubSlicePaths,\n\t\t}),\n\t\t[\n\t\t\tvalue.data,\n\t\t\tvalue.arcs,\n\t\t\tvalue.size,\n\t\t\tvalue.center,\n\t\t\tvalue.outerRadius,\n\t\t\tvalue.innerRadius,\n\t\t\tvalue.padAngle,\n\t\t\tvalue.cornerRadius,\n\t\t\tvalue.hoverOffset,\n\t\t\tvalue.animationKey,\n\t\t\tvalue.isLoaded,\n\t\t\tvalue.enterTransition,\n\t\t\tvalue.enterStaggerScale,\n\t\t\tvalue.containerRef,\n\t\t\tvalue.totalValue,\n\t\t\tvalue.getColor,\n\t\t\tvalue.getFill,\n\t\t\tvalue.geometryScrubbing,\n\t\t\tvalue.scrubSlicePaths,\n\t\t],\n\t);\n\n\tconst hover = useMemo<PieHoverContextValue>(\n\t\t() => ({\n\t\t\thoveredIndex: value.hoveredIndex,\n\t\t\tsetHoveredIndex: value.setHoveredIndex,\n\t\t}),\n\t\t[value.hoveredIndex, value.setHoveredIndex],\n\t);\n\n\treturn (\n\t\t<PieStableContext.Provider value={stable}>\n\t\t\t<PieHoverContext.Provider value={hover}>\n\t\t\t\t{children}\n\t\t\t</PieHoverContext.Provider>\n\t\t</PieStableContext.Provider>\n\t);\n}\n\nexport function usePieStable(): PieStableContextValue {\n\tconst context = useContext(PieStableContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"usePieStable must be used within a PieProvider. \" +\n\t\t\t\t\"Make sure your component is wrapped in <PieChart>.\",\n\t\t);\n\t}\n\treturn context;\n}\n\nexport function usePieHover(): PieHoverContextValue {\n\tconst context = useContext(PieHoverContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"usePieHover must be used within a PieProvider. \" +\n\t\t\t\t\"Make sure your component is wrapped in <PieChart>.\",\n\t\t);\n\t}\n\treturn context;\n}\n\nexport function usePie(): PieContextValue {\n\treturn { ...usePieStable(), ...usePieHover() };\n}\n\nexport default PieStableContext;\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tchartCenterContainerClassName,\n\tchartCenterLabelClassName,\n\tchartCenterValueClassName,\n} from \"./chart-center-typography\";\nimport {\n\tChartStatFlow,\n\ttype ChartStatFlowFormat,\n\tdefaultChartStatFlowFormat,\n} from \"./chart-stat-flow\";\nimport { usePieHover, usePieStable } from \"./pie-context\";\n\nexport interface PieCenterProps {\n\t/** Label shown below the value. Default: \"Total\" when not hovering */\n\tdefaultLabel?: string;\n\t/** Format options for NumberFlow. Default: standard notation */\n\tformatOptions?: ChartStatFlowFormat;\n\t/** Custom render function for complete control over center content */\n\tchildren?: (props: {\n\t\tvalue: number;\n\t\tlabel: string;\n\t\tisHovered: boolean;\n\t\tdata: { label: string; value: number; color?: string; fill?: string };\n\t}) => ReactNode;\n\t/** Additional class name for the container */\n\tclassName?: string;\n\t/** Class name for the value text. Scales with center size via container queries. */\n\tvalueClassName?: string;\n\t/** Class name for the label text. Scales with center size via container queries. */\n\tlabelClassName?: string;\n\t/** Prefix to show before the number (e.g., \"$\") */\n\tprefix?: string;\n\t/** Suffix to show after the number (e.g., \"%\") */\n\tsuffix?: string;\n}\n\n/**\n * PieCenter displays content in the center of a donut/pie chart.\n *\n * This component renders as pure HTML (not inside SVG foreignObject) to avoid\n * Safari's WebKit bug #23113 where HTML content with CSS transforms/opacity\n * inside foreignObject renders at incorrect positions.\n *\n * The parent PieChart uses CSS Grid stacking to overlay this HTML content\n * on top of the SVG slices.\n */\nexport function PieCenter({\n\tdefaultLabel = \"Total\",\n\tformatOptions = defaultChartStatFlowFormat,\n\tchildren,\n\tclassName = \"\",\n\tvalueClassName = chartCenterValueClassName,\n\tlabelClassName = chartCenterLabelClassName,\n\tprefix,\n\tsuffix,\n}: PieCenterProps) {\n\tconst { data, totalValue, innerRadius, geometryScrubbing } = usePieStable();\n\tconst { hoveredIndex } = usePieHover();\n\n\tconst effectiveHoveredIndex = geometryScrubbing ? null : hoveredIndex;\n\tconst hoveredData =\n\t\teffectiveHoveredIndex === null ? null : data[effectiveHoveredIndex];\n\tconst displayValue = hoveredData ? hoveredData.value : totalValue;\n\tconst displayLabel = hoveredData ? hoveredData.label : defaultLabel;\n\n\t// Calculate center area size based on inner radius\n\t// Leave some padding so text doesn't touch the inner edge\n\tconst centerSize = innerRadius * 2 - 16;\n\n\t// Don't render if there's no inner radius (solid pie, not donut)\n\tif (innerRadius <= 0) {\n\t\treturn null;\n\t}\n\n\t// If custom render function is provided, use it\n\tif (children && hoveredData) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\tchartCenterContainerClassName,\n\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{ width: centerSize, height: centerSize }}\n\t\t\t>\n\t\t\t\t{children({\n\t\t\t\t\tvalue: displayValue,\n\t\t\t\t\tlabel: displayLabel,\n\t\t\t\t\tisHovered: effectiveHoveredIndex !== null,\n\t\t\t\t\tdata: hoveredData,\n\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Default center content with NumberFlow animations\n\t// Now renders as pure HTML, avoiding Safari's foreignObject bugs\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tchartCenterContainerClassName,\n\t\t\t\t\"flex flex-col items-center justify-center text-center\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={{ width: centerSize, height: centerSize }}\n\t\t>\n\t\t\t<ChartStatFlow\n\t\t\t\tformatOptions={formatOptions}\n\t\t\t\tlabel={displayLabel}\n\t\t\t\tlabelClassName={labelClassName}\n\t\t\t\tprefix={prefix}\n\t\t\t\tsuffix={suffix}\n\t\t\t\tvalue={displayValue}\n\t\t\t\tvalueClassName={valueClassName}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nPieCenter.displayName = \"PieCenter\";\n\nexport default PieCenter;\n","\"use client\";\n\nimport { pie as d3Pie } from \"d3-shape\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { PieCenter, type PieCenterProps } from \"./pie-center\";\nimport {\n\tdefaultPieColors,\n\ttype PieArcData,\n\ttype PieContextValue,\n\ttype PieData,\n\tPieProvider,\n} from \"./pie-context\";\n\nconst SHELL_HOVER_OFFSET = 10;\n\nexport type PieCenterShellProps = Omit<PieCenterProps, \"children\"> & {\n\t/** Value shown with NumberFlow (same role as pie total when not hovering) */\n\tcenterValue: number;\n\t/** Square reference size for pie context (matches `PieChart` `size`) */\n\tcontextSize: number;\n\t/** Inner radius in px — must be > 0 so `PieCenter` renders */\n\tinnerRadiusPx: number;\n\t/**\n\t * When true (default), the first paint uses `0` then updates to `centerValue`\n\t * on the next frame so NumberFlow can run an entrance transition. Subsequent\n\t * `centerValue` updates animate as usual.\n\t */\n\tanimateEntrance?: boolean;\n};\n\n/**\n * Renders {@link PieCenter} with a minimal {@link PieProvider} so you can reuse\n * the same center layout as a donut pie without mounting slices or a full {@link PieChart}.\n */\nexport function PieCenterShell({\n\tcenterValue,\n\tcontextSize,\n\tinnerRadiusPx,\n\tanimateEntrance = true,\n\t...pieCenterProps\n}: PieCenterShellProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst introStartedRef = useRef(false);\n\n\tconst [flowTotal, setFlowTotal] = useState(() =>\n\t\tanimateEntrance ? 0 : centerValue,\n\t);\n\n\tuseEffect(() => {\n\t\tif (!animateEntrance) {\n\t\t\tsetFlowTotal(centerValue);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!introStartedRef.current) {\n\t\t\tintroStartedRef.current = true;\n\t\t\tsetFlowTotal(0);\n\t\t\tlet innerRaf = 0;\n\t\t\tconst outerRaf = requestAnimationFrame(() => {\n\t\t\t\tinnerRaf = requestAnimationFrame(() => setFlowTotal(centerValue));\n\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tcancelAnimationFrame(outerRaf);\n\t\t\t\tcancelAnimationFrame(innerRaf);\n\t\t\t\tintroStartedRef.current = false;\n\t\t\t};\n\t\t}\n\n\t\tsetFlowTotal(centerValue);\n\t}, [animateEntrance, centerValue]);\n\n\tconst data: PieData[] = useMemo(\n\t\t() => [{ label: \"_pieCenterShell\", value: Math.max(flowTotal, 0) }],\n\t\t[flowTotal],\n\t);\n\n\tconst totalValue = flowTotal;\n\n\tconst arcs = useMemo((): PieArcData[] => {\n\t\tconst v = data[0]?.value ?? 0;\n\t\tif (v > 0) {\n\t\t\tconst pieGenerator = d3Pie<PieData>()\n\t\t\t\t.value((d) => d.value)\n\t\t\t\t.startAngle(-Math.PI / 2)\n\t\t\t\t.endAngle((3 * Math.PI) / 2)\n\t\t\t\t.padAngle(0)\n\t\t\t\t.sort(null);\n\t\t\tconst computed = pieGenerator(data);\n\t\t\treturn computed.map((arc, index) => ({\n\t\t\t\tdata: arc.data,\n\t\t\t\tindex,\n\t\t\t\tstartAngle: arc.startAngle,\n\t\t\t\tendAngle: arc.endAngle,\n\t\t\t\tpadAngle: arc.padAngle,\n\t\t\t\tvalue: arc.value,\n\t\t\t})) as PieArcData[];\n\t\t}\n\t\tconst d0 = data[0];\n\t\tif (!d0) {\n\t\t\treturn [];\n\t\t}\n\t\treturn [\n\t\t\t{\n\t\t\t\tdata: d0,\n\t\t\t\tindex: 0,\n\t\t\t\tstartAngle: -Math.PI / 2,\n\t\t\t\tendAngle: (3 * Math.PI) / 2,\n\t\t\t\tpadAngle: 0,\n\t\t\t\tvalue: 0,\n\t\t\t},\n\t\t];\n\t}, [data]);\n\n\tconst getColor = useCallback((index: number) => {\n\t\treturn defaultPieColors[index % defaultPieColors.length] as string;\n\t}, []);\n\n\tconst getFill = useCallback(\n\t\t(index: number) => {\n\t\t\tconst item = data[index];\n\t\t\tif (item?.fill) {\n\t\t\t\treturn item.fill;\n\t\t\t}\n\t\t\treturn getColor(index);\n\t\t},\n\t\t[data, getColor],\n\t);\n\n\tconst center = contextSize / 2;\n\tconst outerRadius = center - SHELL_HOVER_OFFSET;\n\n\tconst contextValue: PieContextValue = useMemo(\n\t\t() => ({\n\t\t\tdata,\n\t\t\tarcs,\n\t\t\tsize: contextSize,\n\t\t\tcenter,\n\t\t\touterRadius,\n\t\t\tinnerRadius: innerRadiusPx,\n\t\t\tpadAngle: 0,\n\t\t\tcornerRadius: 0,\n\t\t\thoverOffset: SHELL_HOVER_OFFSET,\n\t\t\thoveredIndex: null,\n\t\t\tsetHoveredIndex: () => undefined,\n\t\t\tanimationKey: 0,\n\t\t\tisLoaded: true,\n\t\t\tenterStaggerScale: 1,\n\t\t\tcontainerRef,\n\t\t\ttotalValue,\n\t\t\tgetColor,\n\t\t\tgetFill,\n\t\t\tgeometryScrubbing: false,\n\t\t\tscrubSlicePaths: null,\n\t\t}),\n\t\t[\n\t\t\tdata,\n\t\t\tarcs,\n\t\t\tcontextSize,\n\t\t\tcenter,\n\t\t\touterRadius,\n\t\t\tinnerRadiusPx,\n\t\t\ttotalValue,\n\t\t\tgetColor,\n\t\t\tgetFill,\n\t\t],\n\t);\n\n\treturn (\n\t\t<PieProvider value={contextValue}>\n\t\t\t<PieCenter {...pieCenterProps} />\n\t\t</PieProvider>\n\t);\n}\n\nPieCenterShell.displayName = \"PieCenterShell\";\n","\"use client\";\n\nimport { ParentSize } from \"@visx/responsive\";\nimport { motion, type Transition, useReducedMotion } from \"motion/react\";\nimport { type ReactNode, useId, useMemo } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\ttype ChartStatFlowFormat,\n\tdefaultChartStatFlowFormat,\n} from \"./chart-stat-flow\";\nimport {\n\ttype GaugeLabelAlign,\n\tGaugeLabelLayout,\n\ttype GaugeLabelPlacement,\n\tGaugeLabelShell,\n} from \"./gauge-label-layout\";\nimport {\n\ttype ComputedNotch,\n\tcollectGaugeDefsElements,\n\tcreateNotchPath,\n\tDEFAULT_ACTIVE_FILL_OPACITY,\n\tDEFAULT_ACTIVE_GRADIENT,\n\tDEFAULT_INACTIVE_FILL_OPACITY,\n\tDEFAULT_LINEAR_GAUGE_HEIGHT,\n\tinterpolateGaugeHex,\n\tresolveGaugeActiveFill,\n\tresolveGaugeBgFill,\n} from \"./notch-gauge-shared\";\nimport { PieCenterShell } from \"./pie-center-shell\";\n\nconst DEFAULT_NOTCH_ENTER_TRANSITION: Transition = {\n\ttype: \"spring\",\n\tstiffness: 300,\n\tdamping: 20,\n};\n\nexport type GaugeOrientation = \"arc\" | \"linear\";\n\nexport interface GaugeProps {\n\t/** Arc (default) or horizontal linear notch track */\n\torientation?: GaugeOrientation;\n\t/** Fill level 0–100 */\n\tvalue: number;\n\t/** Number of notches */\n\ttotalNotches?: number;\n\t/** Percentage of the track reserved for gaps between notches */\n\tspacing?: number;\n\tnotchCornerRadius?: number;\n\t/** `true` = rectangular notches; `false` = tapered toward center / midline */\n\tuniformWidth?: boolean;\n\tstartAngle?: number;\n\tendAngle?: number;\n\tuseGradient?: boolean;\n\tactiveGradient?: readonly [string, string];\n\tinactiveGradient?: readonly [string, string];\n\t/** Center statistic — omit to hide the label block */\n\tcenterValue?: number;\n\tdefaultLabel?: string;\n\tprefix?: string;\n\tsuffix?: string;\n\tformatOptions?: ChartStatFlowFormat;\n\t/** Label position for `orientation=\"linear\"`. Arc gauges always overlay center. */\n\tlabelPlacement?: GaugeLabelPlacement;\n\t/** Cross-axis alignment (start / center / end), same model as chart legend */\n\tlabelAlign?: GaugeLabelAlign;\n\tinactiveFill?: string;\n\tactiveFill?: string;\n\tinactiveFillOpacity?: number;\n\tactiveFillOpacity?: number;\n\tchildren?: ReactNode;\n\tclassName?: string;\n\twidth?: number;\n\theight?: number;\n\tminWidth?: number;\n\tnotchLengthPercent?: number;\n\t/** Linear only — notch width as % of each slot (default 80) */\n\tnotchWidthPercent?: number;\n\t/** Linear only — bar thickness in px when responsive (default 24) */\n\tlinearHeight?: number;\n\tenterTransition?: Transition;\n\tenterStaggerScale?: number;\n\t/** Studio-only: static paths while scrubbing geometry controls */\n\tgeometryScrubbing?: boolean;\n}\n\ninterface GaugeInnerProps extends Omit<GaugeProps, \"className\" | \"minWidth\"> {\n\twidth: number;\n\theight: number;\n}\n\nfunction GaugeNotchSvg({\n\tnotches,\n\twidth,\n\theight,\n\tnotchCornerRadius,\n\tcornerDepth,\n\tgeometryScrubbing,\n\tnotchTransition,\n\tstagger,\n\tdefsChildren,\n\tuseThemePaletteGradient,\n\tthemeActiveGradientId,\n\tresolvedInactiveFillOpacity,\n\tresolvedActiveFillOpacity,\n\tresolveBgFill,\n\tresolveActiveFill,\n}: {\n\tnotches: ComputedNotch[];\n\twidth: number;\n\theight: number;\n\tnotchCornerRadius: number;\n\tcornerDepth: number;\n\tgeometryScrubbing: boolean;\n\tnotchTransition: Transition;\n\tstagger: number;\n\tdefsChildren: ReactNode[];\n\tuseThemePaletteGradient: boolean;\n\tthemeActiveGradientId: string;\n\tresolvedInactiveFillOpacity: number;\n\tresolvedActiveFillOpacity: number;\n\tresolveBgFill: (index: number) => string;\n\tresolveActiveFill: (notch: ComputedNotch) => string;\n}) {\n\treturn (\n\t\t<svg\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"block w-full overflow-visible\"\n\t\t\theight={height}\n\t\t\tviewBox={`0 0 ${width} ${height}`}\n\t\t\twidth={width}\n\t\t>\n\t\t\t{defsChildren.length > 0 || useThemePaletteGradient ? (\n\t\t\t\t<defs>\n\t\t\t\t\t{useThemePaletteGradient ? (\n\t\t\t\t\t\t<linearGradient\n\t\t\t\t\t\t\tid={themeActiveGradientId}\n\t\t\t\t\t\t\tx1=\"0%\"\n\t\t\t\t\t\t\tx2=\"100%\"\n\t\t\t\t\t\t\ty1=\"0%\"\n\t\t\t\t\t\t\ty2=\"0%\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<stop offset=\"0%\" stopColor=\"var(--chart-1)\" />\n\t\t\t\t\t\t\t<stop offset=\"100%\" stopColor=\"var(--chart-5)\" />\n\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{defsChildren}\n\t\t\t\t</defs>\n\t\t\t) : null}\n\t\t\t{notches.map((notch) => {\n\t\t\t\tconst pathD = createNotchPath(\n\t\t\t\t\tnotch.points,\n\t\t\t\t\tnotchCornerRadius,\n\t\t\t\t\tcornerDepth,\n\t\t\t\t);\n\t\t\t\tif (geometryScrubbing) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td={pathD}\n\t\t\t\t\t\t\tfill={resolveBgFill(notch.index)}\n\t\t\t\t\t\t\tfillOpacity={resolvedInactiveFillOpacity}\n\t\t\t\t\t\t\tkey={`bg-${notch.index}`}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t<motion.path\n\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\td={pathD}\n\t\t\t\t\t\tfill={resolveBgFill(notch.index)}\n\t\t\t\t\t\tfillOpacity={resolvedInactiveFillOpacity}\n\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0 }}\n\t\t\t\t\t\tkey={`bg-${notch.index}`}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttransformOrigin: `${notch.xCenter}px ${notch.yCenter}px`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t...notchTransition,\n\t\t\t\t\t\t\tdelay: notch.index * 0.015 * stagger,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t})}\n\t\t\t{notches\n\t\t\t\t.filter((n) => n.isActive)\n\t\t\t\t.map((notch) => {\n\t\t\t\t\tconst pathD = createNotchPath(\n\t\t\t\t\t\tnotch.points,\n\t\t\t\t\t\tnotchCornerRadius,\n\t\t\t\t\t\tcornerDepth,\n\t\t\t\t\t);\n\t\t\t\t\tif (geometryScrubbing) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td={pathD}\n\t\t\t\t\t\t\t\tfill={resolveActiveFill(notch)}\n\t\t\t\t\t\t\t\tfillOpacity={resolvedActiveFillOpacity}\n\t\t\t\t\t\t\t\tkey={`active-${notch.index}`}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<motion.path\n\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\t\td={pathD}\n\t\t\t\t\t\t\tfill={resolveActiveFill(notch)}\n\t\t\t\t\t\t\tfillOpacity={resolvedActiveFillOpacity}\n\t\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0 }}\n\t\t\t\t\t\t\tkey={`active-${notch.index}`}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\ttransformOrigin: `${notch.xCenter}px ${notch.yCenter}px`,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t...notchTransition,\n\t\t\t\t\t\t\t\tdelay: (0.3 + notch.index * 0.02) * stagger,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t</svg>\n\t);\n}\n\nfunction useGaugeFillState(props: GaugeInnerProps) {\n\tconst {\n\t\tuseGradient = false,\n\t\tactiveGradient,\n\t\tinactiveGradient,\n\t\tinactiveFill,\n\t\tactiveFill,\n\t\tinactiveFillOpacity,\n\t\tactiveFillOpacity,\n\t\tchildren,\n\t\ttotalNotches = 40,\n\t} = props;\n\n\tconst themeActiveGradientId = `gauge-theme-active-${useId().replace(/:/g, \"\")}`;\n\tconst defsChildren = useMemo(\n\t\t() => collectGaugeDefsElements(children),\n\t\t[children],\n\t);\n\n\tconst hasCustomInactive =\n\t\tinactiveFill !== undefined && inactiveFill.length > 0;\n\tconst hasCustomActive = activeFill !== undefined && activeFill.length > 0;\n\n\tconst activeGrad0 = activeGradient?.[0] ?? DEFAULT_ACTIVE_GRADIENT[0];\n\tconst activeGrad1 = activeGradient?.[1] ?? DEFAULT_ACTIVE_GRADIENT[1];\n\tconst inactiveGrad0 = inactiveGradient?.[0] ?? activeGrad0;\n\tconst inactiveGrad1 = inactiveGradient?.[1] ?? activeGrad1;\n\tconst useThemePaletteGradient = useGradient && activeGradient === undefined;\n\n\treturn {\n\t\tthemeActiveGradientId,\n\t\tdefsChildren,\n\t\thasCustomInactive,\n\t\thasCustomActive,\n\t\tactiveGrad0,\n\t\tactiveGrad1,\n\t\tinactiveGrad0,\n\t\tinactiveGrad1,\n\t\tuseThemePaletteGradient,\n\t\tresolvedActiveFillOpacity: activeFillOpacity ?? DEFAULT_ACTIVE_FILL_OPACITY,\n\t\tresolvedInactiveFillOpacity:\n\t\t\tinactiveFillOpacity ?? DEFAULT_INACTIVE_FILL_OPACITY,\n\t\ttotalNotches,\n\t};\n}\n\nfunction GaugeArcInner(props: GaugeInnerProps) {\n\tconst {\n\t\tvalue,\n\t\ttotalNotches = 40,\n\t\tspacing = 25,\n\t\tnotchCornerRadius = 0,\n\t\tuniformWidth = false,\n\t\twidth,\n\t\theight,\n\t\tstartAngle = 135,\n\t\tendAngle = 405,\n\t\tuseGradient = false,\n\t\tcenterValue,\n\t\tdefaultLabel = \"Total\",\n\t\tprefix,\n\t\tsuffix,\n\t\tformatOptions = defaultChartStatFlowFormat,\n\t\tinactiveFill,\n\t\tactiveFill,\n\t\tnotchLengthPercent = 100,\n\t\tenterTransition,\n\t\tenterStaggerScale = 1,\n\t} = props;\n\n\tconst prefersReducedMotion = useReducedMotion();\n\tconst fillState = useGaugeFillState(props);\n\n\tconst notchTransition: Transition = prefersReducedMotion\n\t\t? { duration: 0 }\n\t\t: (enterTransition ?? DEFAULT_NOTCH_ENTER_TRANSITION);\n\tconst stagger = Math.max(0.25, Math.min(2.5, enterStaggerScale));\n\n\tconst size = Math.min(width, height);\n\tconst centerX = width / 2;\n\tconst centerY = height / 2;\n\tconst outerRadius = size * 0.42;\n\tconst innerRadiusBase = size * 0.28;\n\tconst defaultRadialDepth = outerRadius - innerRadiusBase;\n\tconst depthFactor = Math.min(100, Math.max(5, notchLengthPercent)) / 100;\n\tconst notchLength = defaultRadialDepth * depthFactor;\n\tconst innerRadius = outerRadius - notchLength;\n\n\tconst activeNotches = Math.round((value / 100) * totalNotches);\n\tconst totalAngle = endAngle - startAngle;\n\tconst availableAngle = totalAngle * (1 - spacing / 100);\n\tconst notchAngle = totalNotches > 0 ? availableAngle / totalNotches : 0;\n\tconst gapDen = totalNotches - 1 > 0 ? totalNotches - 1 : 1;\n\tconst gapAngle = (totalAngle * (spacing / 100)) / gapDen;\n\n\tconst notches = useMemo(() => {\n\t\treturn Array.from({ length: totalNotches }, (_, i) => {\n\t\t\tconst angle = startAngle + i * (notchAngle + gapAngle) + notchAngle / 2;\n\t\t\tconst radians = (angle * Math.PI) / 180;\n\t\t\tconst arcNotchWidth = notchAngle * 0.8;\n\t\t\tconst halfWidth = (arcNotchWidth * Math.PI) / 180 / 2;\n\n\t\t\tconst x1 = centerX + Math.cos(radians - halfWidth) * outerRadius;\n\t\t\tconst y1 = centerY + Math.sin(radians - halfWidth) * outerRadius;\n\t\t\tconst x2 = centerX + Math.cos(radians + halfWidth) * outerRadius;\n\t\t\tconst y2 = centerY + Math.sin(radians + halfWidth) * outerRadius;\n\n\t\t\tlet x3: number;\n\t\t\tlet y3: number;\n\t\t\tlet x4: number;\n\t\t\tlet y4: number;\n\n\t\t\tif (uniformWidth) {\n\t\t\t\tconst perpX = Math.cos(radians);\n\t\t\t\tconst perpY = Math.sin(radians);\n\t\t\t\tx3 = x2 - perpX * notchLength;\n\t\t\t\ty3 = y2 - perpY * notchLength;\n\t\t\t\tx4 = x1 - perpX * notchLength;\n\t\t\t\ty4 = y1 - perpY * notchLength;\n\t\t\t} else {\n\t\t\t\tx3 = centerX + Math.cos(radians + halfWidth) * innerRadius;\n\t\t\t\ty3 = centerY + Math.sin(radians + halfWidth) * innerRadius;\n\t\t\t\tx4 = centerX + Math.cos(radians - halfWidth) * innerRadius;\n\t\t\t\ty4 = centerY + Math.sin(radians - halfWidth) * innerRadius;\n\t\t\t}\n\n\t\t\tconst denom = totalNotches > 1 ? totalNotches - 1 : 1;\n\t\t\tconst gradientColor =\n\t\t\t\tuseGradient && !fillState.useThemePaletteGradient\n\t\t\t\t\t? interpolateGaugeHex(\n\t\t\t\t\t\t\tfillState.activeGrad0,\n\t\t\t\t\t\t\tfillState.activeGrad1,\n\t\t\t\t\t\t\ti / denom,\n\t\t\t\t\t\t)\n\t\t\t\t\t: \"var(--chart-1)\";\n\n\t\t\treturn {\n\t\t\t\tindex: i,\n\t\t\t\tpoints: { x1, y1, x2, y2, x3, y3, x4, y4 },\n\t\t\t\tisActive: i < activeNotches,\n\t\t\t\tgradientColor,\n\t\t\t\txCenter: centerX,\n\t\t\t\tyCenter: centerY,\n\t\t\t};\n\t\t});\n\t}, [\n\t\ttotalNotches,\n\t\tnotchAngle,\n\t\tgapAngle,\n\t\tcenterX,\n\t\tcenterY,\n\t\touterRadius,\n\t\tinnerRadius,\n\t\tactiveNotches,\n\t\tstartAngle,\n\t\tuniformWidth,\n\t\tnotchLength,\n\t\tuseGradient,\n\t\tfillState.useThemePaletteGradient,\n\t\tfillState.activeGrad0,\n\t\tfillState.activeGrad1,\n\t]);\n\n\tconst resolveBgFill = (notchIndex: number) =>\n\t\tresolveGaugeBgFill({\n\t\t\tnotchIndex,\n\t\t\ttotalNotches,\n\t\t\thasCustomInactive: fillState.hasCustomInactive,\n\t\t\tinactiveFill,\n\t\t\tuseThemePaletteGradient: fillState.useThemePaletteGradient,\n\t\t\tuseGradient,\n\t\t\tinactiveGrad0: fillState.inactiveGrad0,\n\t\t\tinactiveGrad1: fillState.inactiveGrad1,\n\t\t\tarcTrackFill: \"var(--border)\",\n\t\t\tlinearTrackFill: \"var(--chart-background)\",\n\t\t\tlinearMode: false,\n\t\t});\n\n\tconst resolveActiveFill = (notch: ComputedNotch) =>\n\t\tresolveGaugeActiveFill({\n\t\t\tnotch,\n\t\t\thasCustomActive: fillState.hasCustomActive,\n\t\t\tactiveFill,\n\t\t\tuseThemePaletteGradient: fillState.useThemePaletteGradient,\n\t\t\tthemeActiveGradientId: fillState.themeActiveGradientId,\n\t\t\tuseGradient,\n\t\t\tactiveFillSolid: \"var(--chart-1)\",\n\t\t});\n\n\tconst showCenter = centerValue != null;\n\n\treturn (\n\t\t<div className=\"relative w-full\" style={{ height, width }}>\n\t\t\t<GaugeNotchSvg\n\t\t\t\tcornerDepth={notchLength}\n\t\t\t\tdefsChildren={fillState.defsChildren}\n\t\t\t\tgeometryScrubbing={false}\n\t\t\t\theight={height}\n\t\t\t\tnotchCornerRadius={notchCornerRadius}\n\t\t\t\tnotches={notches}\n\t\t\t\tnotchTransition={notchTransition}\n\t\t\t\tresolveActiveFill={resolveActiveFill}\n\t\t\t\tresolveBgFill={resolveBgFill}\n\t\t\t\tresolvedActiveFillOpacity={fillState.resolvedActiveFillOpacity}\n\t\t\t\tresolvedInactiveFillOpacity={fillState.resolvedInactiveFillOpacity}\n\t\t\t\tstagger={stagger}\n\t\t\t\tthemeActiveGradientId={fillState.themeActiveGradientId}\n\t\t\t\tuseThemePaletteGradient={fillState.useThemePaletteGradient}\n\t\t\t\twidth={width}\n\t\t\t/>\n\t\t\t{showCenter ? (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"pointer-events-none absolute inset-0 flex flex-col items-center justify-center\"\n\t\t\t\t\tstyle={{ paddingTop: size * 0.08 }}\n\t\t\t\t>\n\t\t\t\t\t<PieCenterShell\n\t\t\t\t\t\tcenterValue={centerValue}\n\t\t\t\t\t\tcontextSize={size}\n\t\t\t\t\t\tdefaultLabel={defaultLabel}\n\t\t\t\t\t\tformatOptions={formatOptions}\n\t\t\t\t\t\tinnerRadiusPx={Math.max(size * 0.2, 52)}\n\t\t\t\t\t\tprefix={prefix}\n\t\t\t\t\t\tsuffix={suffix}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n\nfunction GaugeLinearInner(props: GaugeInnerProps) {\n\tconst {\n\t\tvalue,\n\t\ttotalNotches = 40,\n\t\tspacing = 25,\n\t\tnotchCornerRadius = 0,\n\t\tuniformWidth = true,\n\t\twidth,\n\t\theight,\n\t\tuseGradient = false,\n\t\tcenterValue,\n\t\tdefaultLabel = \"Total\",\n\t\tprefix,\n\t\tsuffix,\n\t\tformatOptions = defaultChartStatFlowFormat,\n\t\tlabelPlacement = \"top\",\n\t\tlabelAlign = \"start\",\n\t\tinactiveFill,\n\t\tactiveFill,\n\t\tnotchLengthPercent = 100,\n\t\tnotchWidthPercent = 80,\n\t\tenterTransition,\n\t\tenterStaggerScale = 1,\n\t\tgeometryScrubbing = false,\n\t} = props;\n\n\tconst prefersReducedMotion = useReducedMotion();\n\tconst fillState = useGaugeFillState(props);\n\n\tconst notchTransition: Transition = prefersReducedMotion\n\t\t? { duration: 0 }\n\t\t: (enterTransition ?? DEFAULT_NOTCH_ENTER_TRANSITION);\n\tconst stagger = Math.max(0.25, Math.min(2.5, enterStaggerScale));\n\n\tconst centerY = height / 2;\n\tconst depthFactor = Math.min(100, Math.max(5, notchLengthPercent)) / 100;\n\tconst outerOffset = (height / 2) * depthFactor;\n\tconst taperRatio = 28 / 42;\n\tconst innerOffset = uniformWidth ? outerOffset : outerOffset * taperRatio;\n\tconst notchDepth = uniformWidth ? outerOffset * 2 : outerOffset - innerOffset;\n\tconst cornerVerticalDepth = uniformWidth ? notchDepth : outerOffset * 2;\n\tconst widthFactor = Math.min(100, Math.max(10, notchWidthPercent)) / 100;\n\n\tconst activeNotches = Math.round((value / 100) * totalNotches);\n\tconst availableWidth = width * (1 - spacing / 100);\n\tconst slotWidth = totalNotches > 0 ? availableWidth / totalNotches : 0;\n\tconst gapDen = totalNotches - 1 > 0 ? totalNotches - 1 : 1;\n\tconst gapWidth = (width * (spacing / 100)) / gapDen;\n\n\tconst notches = useMemo(() => {\n\t\treturn Array.from({ length: totalNotches }, (_, i) => {\n\t\t\tconst xCenter = i * (slotWidth + gapWidth) + slotWidth / 2;\n\t\t\tconst halfWidth = (slotWidth * widthFactor) / 2;\n\n\t\t\tlet x1: number;\n\t\t\tlet y1: number;\n\t\t\tlet x2: number;\n\t\t\tlet y2: number;\n\t\t\tlet x3: number;\n\t\t\tlet y3: number;\n\t\t\tlet x4: number;\n\t\t\tlet y4: number;\n\n\t\t\tif (uniformWidth) {\n\t\t\t\tconst halfHeight = notchDepth / 2;\n\t\t\t\tx1 = xCenter - halfWidth;\n\t\t\t\ty1 = centerY - halfHeight;\n\t\t\t\tx2 = xCenter + halfWidth;\n\t\t\t\ty2 = centerY - halfHeight;\n\t\t\t\tx3 = xCenter + halfWidth;\n\t\t\t\ty3 = centerY + halfHeight;\n\t\t\t\tx4 = xCenter - halfWidth;\n\t\t\t\ty4 = centerY + halfHeight;\n\t\t\t} else {\n\t\t\t\tx1 = xCenter - halfWidth;\n\t\t\t\ty1 = centerY - outerOffset;\n\t\t\t\tx2 = xCenter + halfWidth;\n\t\t\t\ty2 = centerY - outerOffset;\n\t\t\t\tconst innerHalfWidth = halfWidth * (innerOffset / outerOffset);\n\t\t\t\tx3 = xCenter + innerHalfWidth;\n\t\t\t\ty3 = centerY + outerOffset;\n\t\t\t\tx4 = xCenter - innerHalfWidth;\n\t\t\t\ty4 = centerY + outerOffset;\n\t\t\t}\n\n\t\t\tconst denom = totalNotches > 1 ? totalNotches - 1 : 1;\n\t\t\tconst gradientColor =\n\t\t\t\tuseGradient && !fillState.useThemePaletteGradient\n\t\t\t\t\t? interpolateGaugeHex(\n\t\t\t\t\t\t\tfillState.activeGrad0,\n\t\t\t\t\t\t\tfillState.activeGrad1,\n\t\t\t\t\t\t\ti / denom,\n\t\t\t\t\t\t)\n\t\t\t\t\t: \"var(--chart-1)\";\n\n\t\t\treturn {\n\t\t\t\tindex: i,\n\t\t\t\tpoints: { x1, y1, x2, y2, x3, y3, x4, y4 },\n\t\t\t\tisActive: i < activeNotches,\n\t\t\t\tgradientColor,\n\t\t\t\txCenter,\n\t\t\t\tyCenter: centerY,\n\t\t\t};\n\t\t});\n\t}, [\n\t\ttotalNotches,\n\t\tslotWidth,\n\t\tgapWidth,\n\t\tcenterY,\n\t\touterOffset,\n\t\tinnerOffset,\n\t\tactiveNotches,\n\t\tuniformWidth,\n\t\tnotchDepth,\n\t\twidthFactor,\n\t\tuseGradient,\n\t\tfillState.useThemePaletteGradient,\n\t\tfillState.activeGrad0,\n\t\tfillState.activeGrad1,\n\t]);\n\n\tconst resolveBgFill = (notchIndex: number) =>\n\t\tresolveGaugeBgFill({\n\t\t\tnotchIndex,\n\t\t\ttotalNotches,\n\t\t\thasCustomInactive: fillState.hasCustomInactive,\n\t\t\tinactiveFill,\n\t\t\tuseThemePaletteGradient: fillState.useThemePaletteGradient,\n\t\t\tuseGradient,\n\t\t\tinactiveGrad0: fillState.inactiveGrad0,\n\t\t\tinactiveGrad1: fillState.inactiveGrad1,\n\t\t\tarcTrackFill: \"var(--border)\",\n\t\t\tlinearTrackFill: \"var(--chart-background)\",\n\t\t\tlinearMode: true,\n\t\t});\n\n\tconst resolveActiveFill = (notch: ComputedNotch) =>\n\t\tresolveGaugeActiveFill({\n\t\t\tnotch,\n\t\t\thasCustomActive: fillState.hasCustomActive,\n\t\t\tactiveFill,\n\t\t\tuseThemePaletteGradient: fillState.useThemePaletteGradient,\n\t\t\tthemeActiveGradientId: fillState.themeActiveGradientId,\n\t\t\tuseGradient,\n\t\t\tactiveFillSolid: \"var(--chart-1)\",\n\t\t});\n\n\tconst label =\n\t\tcenterValue == null ? null : (\n\t\t\t<GaugeLabelShell\n\t\t\t\talign={labelAlign}\n\t\t\t\tcenterValue={centerValue}\n\t\t\t\tdefaultLabel={defaultLabel}\n\t\t\t\tformatOptions={formatOptions}\n\t\t\t\tprefix={prefix}\n\t\t\t\tsuffix={suffix}\n\t\t\t/>\n\t\t);\n\n\tconst track = (\n\t\t<div className=\"relative w-full\" style={{ height, width }}>\n\t\t\t<GaugeNotchSvg\n\t\t\t\tcornerDepth={cornerVerticalDepth}\n\t\t\t\tdefsChildren={fillState.defsChildren}\n\t\t\t\tgeometryScrubbing={geometryScrubbing}\n\t\t\t\theight={height}\n\t\t\t\tnotchCornerRadius={notchCornerRadius}\n\t\t\t\tnotches={notches}\n\t\t\t\tnotchTransition={notchTransition}\n\t\t\t\tresolveActiveFill={resolveActiveFill}\n\t\t\t\tresolveBgFill={resolveBgFill}\n\t\t\t\tresolvedActiveFillOpacity={fillState.resolvedActiveFillOpacity}\n\t\t\t\tresolvedInactiveFillOpacity={fillState.resolvedInactiveFillOpacity}\n\t\t\t\tstagger={stagger}\n\t\t\t\tthemeActiveGradientId={fillState.themeActiveGradientId}\n\t\t\t\tuseThemePaletteGradient={fillState.useThemePaletteGradient}\n\t\t\t\twidth={width}\n\t\t\t/>\n\t\t</div>\n\t);\n\n\treturn (\n\t\t<GaugeLabelLayout\n\t\t\talign={labelAlign}\n\t\t\tlabel={label}\n\t\t\tplacement={labelPlacement}\n\t\t>\n\t\t\t{track}\n\t\t</GaugeLabelLayout>\n\t);\n}\n\nfunction GaugeInner(props: GaugeInnerProps) {\n\tif (props.orientation === \"linear\") {\n\t\treturn <GaugeLinearInner {...props} />;\n\t}\n\treturn <GaugeArcInner {...props} />;\n}\n\nexport function Gauge({\n\twidth: widthProp,\n\theight: heightProp,\n\tclassName,\n\tminWidth,\n\torientation = \"arc\",\n\tlinearHeight,\n\t...props\n}: GaugeProps) {\n\tconst isLinear = orientation === \"linear\";\n\tconst resolvedMinWidth = minWidth ?? (isLinear ? 200 : 300);\n\tconst resolvedLinearHeight = linearHeight ?? DEFAULT_LINEAR_GAUGE_HEIGHT;\n\n\tif (isLinear) {\n\t\tif (widthProp != null) {\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\"relative w-full max-w-full\", className)}\n\t\t\t\t\tstyle={{ width: widthProp }}\n\t\t\t\t>\n\t\t\t\t\t<GaugeInner\n\t\t\t\t\t\theight={heightProp ?? resolvedLinearHeight}\n\t\t\t\t\t\torientation=\"linear\"\n\t\t\t\t\t\twidth={widthProp}\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<div className={cn(\"relative w-full min-w-0 max-w-full\", className)}>\n\t\t\t\t<div className=\"w-full min-w-0\" style={{ minWidth: resolvedMinWidth }}>\n\t\t\t\t\t<ParentSize debounceTime={10}>\n\t\t\t\t\t\t{({ width }) =>\n\t\t\t\t\t\t\twidth > 0 ? (\n\t\t\t\t\t\t\t\t<GaugeInner\n\t\t\t\t\t\t\t\t\theight={resolvedLinearHeight}\n\t\t\t\t\t\t\t\t\torientation=\"linear\"\n\t\t\t\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null\n\t\t\t\t\t\t}\n\t\t\t\t\t</ParentSize>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (widthProp != null && heightProp != null) {\n\t\treturn (\n\t\t\t<div className={cn(\"relative inline-flex max-w-full\", className)}>\n\t\t\t\t<GaugeInner\n\t\t\t\t\theight={heightProp}\n\t\t\t\t\torientation=\"arc\"\n\t\t\t\t\twidth={widthProp}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"relative w-full max-w-full\", className)}\n\t\t\tstyle={{ minWidth: resolvedMinWidth }}\n\t\t>\n\t\t\t<div className=\"mx-auto aspect-[21/16] w-full max-w-[560px]\">\n\t\t\t\t<ParentSize debounceTime={10}>\n\t\t\t\t\t{({ width, height }) =>\n\t\t\t\t\t\twidth > 0 && height > 0 ? (\n\t\t\t\t\t\t\t<GaugeInner\n\t\t\t\t\t\t\t\theight={height}\n\t\t\t\t\t\t\t\torientation=\"arc\"\n\t\t\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null\n\t\t\t\t\t}\n\t\t\t\t</ParentSize>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nGauge.displayName = \"Gauge\";\n","\"use client\";\n\nimport type { Transition } from \"motion/react\";\nimport {\n\tcreateContext,\n\ttype ReactNode,\n\ttype RefObject,\n\tuseContext,\n\tuseMemo,\n} from \"react\";\n\n// CSS variable references for ring chart theming\nexport const ringCssVars = {\n\tbackground: \"var(--chart-background)\",\n\tforeground: \"var(--chart-foreground)\",\n\tforegroundMuted: \"var(--chart-foreground-muted)\",\n\tlabel: \"var(--chart-label)\",\n\tringBackground: \"var(--border)\",\n\t// Default ring colors from chart palette\n\tring1: \"var(--chart-1)\",\n\tring2: \"var(--chart-2)\",\n\tring3: \"var(--chart-3)\",\n\tring4: \"var(--chart-4)\",\n\tring5: \"var(--chart-5)\",\n};\n\n// Default ring color palette\nexport const defaultRingColors = [\n\tringCssVars.ring1,\n\tringCssVars.ring2,\n\tringCssVars.ring3,\n\tringCssVars.ring4,\n\tringCssVars.ring5,\n];\n\nexport interface RingData {\n\t/** Display label for the ring */\n\tlabel: string;\n\t/** Current value */\n\tvalue: number;\n\t/** Maximum value (determines progress percentage) */\n\tmaxValue: number;\n\t/** Optional color override - falls back to palette */\n\tcolor?: string;\n}\n\nexport interface RingHoverContextValue {\n\thoveredIndex: number | null;\n\tsetHoveredIndex: (index: number | null) => void;\n}\n\nexport interface RingStableContextValue {\n\t// Data\n\tdata: RingData[];\n\n\t// Dimensions\n\tsize: number;\n\tcenter: number;\n\tstrokeWidth: number;\n\tringGap: number;\n\tbaseInnerRadius: number;\n\n\t// Animation state\n\tanimationKey: number;\n\tisLoaded: boolean;\n\tenterTransition?: Transition;\n\tenterStaggerScale: number;\n\n\t// Container ref for portals\n\tcontainerRef: RefObject<HTMLDivElement | null>;\n\n\t// Computed values\n\ttotalValue: number;\n\n\t// Get color for a ring index\n\tgetColor: (index: number) => string;\n\n\t// Get ring radii for an index\n\tgetRingRadii: (index: number) => { innerRadius: number; outerRadius: number };\n\n\t// Arc angle range\n\tstartAngle: number;\n\tendAngle: number;\n\n\t/**\n\t * Studio geometry scrub — skip Motion path morphing and use plain SVG paths.\n\t * @default false\n\t */\n\tgeometryScrubbing: boolean;\n}\n\nexport type RingContextValue = RingStableContextValue & RingHoverContextValue;\n\nconst RingStableContext = createContext<RingStableContextValue | null>(null);\nconst RingHoverContext = createContext<RingHoverContextValue | null>(null);\n\nexport function RingProvider({\n\tchildren,\n\tvalue,\n}: {\n\tchildren: ReactNode;\n\tvalue: RingContextValue;\n}) {\n\tconst stable = useMemo<RingStableContextValue>(\n\t\t() => ({\n\t\t\tdata: value.data,\n\t\t\tsize: value.size,\n\t\t\tcenter: value.center,\n\t\t\tstrokeWidth: value.strokeWidth,\n\t\t\tringGap: value.ringGap,\n\t\t\tbaseInnerRadius: value.baseInnerRadius,\n\t\t\tanimationKey: value.animationKey,\n\t\t\tisLoaded: value.isLoaded,\n\t\t\tenterTransition: value.enterTransition,\n\t\t\tenterStaggerScale: value.enterStaggerScale,\n\t\t\tcontainerRef: value.containerRef,\n\t\t\ttotalValue: value.totalValue,\n\t\t\tgetColor: value.getColor,\n\t\t\tgetRingRadii: value.getRingRadii,\n\t\t\tstartAngle: value.startAngle,\n\t\t\tendAngle: value.endAngle,\n\t\t\tgeometryScrubbing: value.geometryScrubbing,\n\t\t}),\n\t\t[\n\t\t\tvalue.data,\n\t\t\tvalue.size,\n\t\t\tvalue.center,\n\t\t\tvalue.strokeWidth,\n\t\t\tvalue.ringGap,\n\t\t\tvalue.baseInnerRadius,\n\t\t\tvalue.animationKey,\n\t\t\tvalue.isLoaded,\n\t\t\tvalue.enterTransition,\n\t\t\tvalue.enterStaggerScale,\n\t\t\tvalue.containerRef,\n\t\t\tvalue.totalValue,\n\t\t\tvalue.getColor,\n\t\t\tvalue.getRingRadii,\n\t\t\tvalue.startAngle,\n\t\t\tvalue.endAngle,\n\t\t\tvalue.geometryScrubbing,\n\t\t],\n\t);\n\n\tconst hover = useMemo<RingHoverContextValue>(\n\t\t() => ({\n\t\t\thoveredIndex: value.hoveredIndex,\n\t\t\tsetHoveredIndex: value.setHoveredIndex,\n\t\t}),\n\t\t[value.hoveredIndex, value.setHoveredIndex],\n\t);\n\n\treturn (\n\t\t<RingStableContext.Provider value={stable}>\n\t\t\t<RingHoverContext.Provider value={hover}>\n\t\t\t\t{children}\n\t\t\t</RingHoverContext.Provider>\n\t\t</RingStableContext.Provider>\n\t);\n}\n\nexport function useRingStable(): RingStableContextValue {\n\tconst context = useContext(RingStableContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"useRingStable must be used within a RingProvider. \" +\n\t\t\t\t\"Make sure your component is wrapped in <RingChart>.\",\n\t\t);\n\t}\n\treturn context;\n}\n\nexport function useRingHover(): RingHoverContextValue {\n\tconst context = useContext(RingHoverContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"useRingHover must be used within a RingProvider. \" +\n\t\t\t\t\"Make sure your component is wrapped in <RingChart>.\",\n\t\t);\n\t}\n\treturn context;\n}\n\nexport function useRing(): RingContextValue {\n\treturn { ...useRingStable(), ...useRingHover() };\n}\n\nexport default RingStableContext;\n","\"use client\";\n\nimport { Group } from \"@visx/group\";\nimport { ParentSize } from \"@visx/responsive\";\nimport { arc as arcGenerator } from \"@visx/shape\";\nimport type { Transition } from \"motion/react\";\nimport {\n\tChildren,\n\tisValidElement,\n\tmemo,\n\ttype ReactNode,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tdefaultRingColors,\n\ttype RingContextValue,\n\ttype RingData,\n\tRingProvider,\n\tringCssVars,\n} from \"./ring-context\";\n\nfunction generateRingArcPath(\n\tinnerRadius: number,\n\touterRadius: number,\n\tstartAngle: number,\n\tendAngle: number,\n\tcornerRadius: number,\n): string {\n\tconst generator = arcGenerator<unknown>({\n\t\tinnerRadius,\n\t\touterRadius,\n\t\tcornerRadius,\n\t});\n\treturn generator({ startAngle, endAngle } as unknown as null) || \"\";\n}\n\nexport interface RingChartProps {\n\t/** Data array - each item represents a ring */\n\tdata: RingData[];\n\t/** Chart size in pixels. If not provided, uses parent container size */\n\tsize?: number;\n\t/** Stroke width of each ring. Default: 12 */\n\tstrokeWidth?: number;\n\t/** Gap between rings. Default: 6 */\n\tringGap?: number;\n\t/** Inner radius of the innermost ring. Default: 60 */\n\tbaseInnerRadius?: number;\n\t/** Animation duration in milliseconds. Default: 1100 */\n\tanimationDuration?: number;\n\t/** Additional class name for the container */\n\tclassName?: string;\n\t/** Controlled hover state - index of hovered ring */\n\thoveredIndex?: number | null;\n\t/** Callback when hover state changes */\n\tonHoverChange?: (index: number | null) => void;\n\t/** Start angle in radians. Default: -PI/2 (top) */\n\tstartAngle?: number;\n\t/** End angle in radians. Default: 3*PI/2 (full circle) */\n\tendAngle?: number;\n\t/** Framer Motion transition for ring enter animation */\n\tenterTransition?: Transition;\n\t/** Scales ring stagger delays (1 = default). */\n\tenterStaggerScale?: number;\n\t/**\n\t * High-frequency geometry updates (e.g. studio NumberField scrub).\n\t * Uses plain SVG paths instead of Motion `d` morphing.\n\t */\n\tgeometryScrubbing?: boolean;\n\t/** Child components (Ring, RingCenter, etc.) */\n\tchildren: ReactNode;\n}\n\ninterface RingChartInnerProps {\n\twidth: number;\n\theight: number;\n\tdata: RingData[];\n\tstrokeWidth: number;\n\tringGap: number;\n\tbaseInnerRadius: number;\n\tchildren: ReactNode;\n\tcontainerRef: React.RefObject<HTMLDivElement | null>;\n\thoveredIndexProp?: number | null;\n\tonHoverChange?: (index: number | null) => void;\n\tstartAngle: number;\n\tendAngle: number;\n\tenterTransition?: Transition;\n\tenterStaggerScale: number;\n\tgeometryScrubbing: boolean;\n}\n\nfunction isRing(child: ReactNode): boolean {\n\treturn (\n\t\tisValidElement(child) &&\n\t\ttypeof child.type === \"function\" &&\n\t\t((child.type as { displayName?: string }).displayName === \"Ring\" ||\n\t\t\t(child.type as { name?: string }).name === \"Ring\")\n\t);\n}\n\n// Helper to check if a child is a RingCenter component\nfunction isRingCenter(child: ReactNode): boolean {\n\treturn (\n\t\tisValidElement(child) &&\n\t\ttypeof child.type === \"function\" &&\n\t\t((child.type as { displayName?: string }).displayName === \"RingCenter\" ||\n\t\t\tchild.type.name === \"RingCenter\")\n\t);\n}\n\nfunction RingChartInner(props: RingChartInnerProps) {\n\tconst size = Math.min(props.width, props.height);\n\n\tif (size < 10) {\n\t\treturn null;\n\t}\n\n\treturn <RingChartCore {...props} />;\n}\n\ninterface ScrubRingLayer {\n\tbgPath: string;\n\tprogressPath: string;\n\tcolor: string;\n}\n\nconst RingChartCore = memo(function RingChartCore({\n\twidth,\n\theight,\n\tdata,\n\tstrokeWidth: strokeWidthProp,\n\tringGap: ringGapProp,\n\tbaseInnerRadius: baseInnerRadiusProp,\n\tchildren,\n\tcontainerRef,\n\thoveredIndexProp,\n\tonHoverChange,\n\tstartAngle,\n\tendAngle,\n\tenterTransition,\n\tenterStaggerScale,\n\tgeometryScrubbing,\n}: RingChartInnerProps) {\n\tconst [internalHoveredIndex, setInternalHoveredIndex] = useState<\n\t\tnumber | null\n\t>(null);\n\tconst [animationKey] = useState(0);\n\tconst [isLoaded, setIsLoaded] = useState(false);\n\n\t// Use controlled or uncontrolled hover state\n\tconst isControlled = hoveredIndexProp !== undefined;\n\tconst hoveredIndex = isControlled ? hoveredIndexProp : internalHoveredIndex;\n\tconst setHoveredIndex = useCallback(\n\t\t(index: number | null) => {\n\t\t\tif (isControlled) {\n\t\t\t\tonHoverChange?.(index);\n\t\t\t} else {\n\t\t\t\tsetInternalHoveredIndex(index);\n\t\t\t}\n\t\t},\n\t\t[isControlled, onHoverChange],\n\t);\n\n\t// Use the smaller dimension to ensure the chart fits\n\tconst size = Math.min(width, height);\n\tconst center = size / 2;\n\n\t// Calculate scaled dimensions to fit within the available space\n\t// The outermost ring needs to fit within the chart with some padding\n\tconst ringCount = data.length;\n\tconst padding = 8; // Padding from edge\n\tconst availableRadius = center - padding;\n\n\t// Calculate the \"design\" outer radius (what we'd need at 1:1 scale)\n\tconst designOuterRadius =\n\t\tbaseInnerRadiusProp +\n\t\t(ringCount - 1) * (strokeWidthProp + ringGapProp) +\n\t\tstrokeWidthProp;\n\n\t// Scale factor to fit within available space\n\tconst scale = Math.min(1, availableRadius / designOuterRadius);\n\n\t// Apply scaling to all dimensions\n\tconst strokeWidth = strokeWidthProp * scale;\n\tconst ringGap = ringGapProp * scale;\n\tconst baseInnerRadius = baseInnerRadiusProp * scale;\n\n\t// Calculate total value\n\tconst totalValue = useMemo(\n\t\t() => data.reduce((sum, d) => sum + d.value, 0),\n\t\t[data],\n\t);\n\n\t// Get color for a ring index\n\tconst getColor = useCallback(\n\t\t(index: number) => {\n\t\t\tconst item = data[index];\n\t\t\tif (item?.color) {\n\t\t\t\treturn item.color;\n\t\t\t}\n\t\t\treturn defaultRingColors[index % defaultRingColors.length] as string;\n\t\t},\n\t\t[data],\n\t);\n\n\t// Get ring radii for an index\n\tconst getRingRadii = useCallback(\n\t\t(index: number) => {\n\t\t\tconst innerRadius = baseInnerRadius + index * (strokeWidth + ringGap);\n\t\t\tconst outerRadius = innerRadius + strokeWidth;\n\t\t\treturn { innerRadius, outerRadius };\n\t\t},\n\t\t[baseInnerRadius, strokeWidth, ringGap],\n\t);\n\n\tconst arcRange = endAngle - startAngle;\n\tconst scrubRingLayers = useMemo((): readonly ScrubRingLayer[] | null => {\n\t\tif (!geometryScrubbing) {\n\t\t\treturn null;\n\t\t}\n\t\treturn data.map((ringData, index) => {\n\t\t\tconst { innerRadius, outerRadius } = getRingRadii(index);\n\t\t\tconst cornerRadius = (outerRadius - innerRadius) / 2;\n\t\t\tconst progress = ringData.value / ringData.maxValue;\n\t\t\tconst progressEndAngle = startAngle + arcRange * progress;\n\t\t\treturn {\n\t\t\t\tbgPath: generateRingArcPath(\n\t\t\t\t\tinnerRadius,\n\t\t\t\t\touterRadius,\n\t\t\t\t\tstartAngle,\n\t\t\t\t\tendAngle,\n\t\t\t\t\tcornerRadius,\n\t\t\t\t),\n\t\t\t\tprogressPath:\n\t\t\t\t\tprogressEndAngle <= startAngle + 0.01\n\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t: generateRingArcPath(\n\t\t\t\t\t\t\t\tinnerRadius,\n\t\t\t\t\t\t\t\touterRadius,\n\t\t\t\t\t\t\t\tstartAngle,\n\t\t\t\t\t\t\t\tprogressEndAngle,\n\t\t\t\t\t\t\t\tcornerRadius,\n\t\t\t\t\t\t\t),\n\t\t\t\tcolor: getColor(index),\n\t\t\t};\n\t\t});\n\t}, [\n\t\tgeometryScrubbing,\n\t\tdata,\n\t\tgetRingRadii,\n\t\tgetColor,\n\t\tstartAngle,\n\t\tendAngle,\n\t\tarcRange,\n\t]);\n\n\tconst effectiveIsLoaded = geometryScrubbing || isLoaded;\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: enterTransition\n\tuseEffect(() => {\n\t\tif (geometryScrubbing) {\n\t\t\treturn;\n\t\t}\n\t\tsetIsLoaded(false);\n\t\tconst timer = setTimeout(() => {\n\t\t\tsetIsLoaded(true);\n\t\t}, 100);\n\t\treturn () => clearTimeout(timer);\n\t}, [enterTransition, enterStaggerScale, geometryScrubbing]);\n\n\t// Separate SVG children (rings) from HTML children (RingCenter)\n\t// This avoids Safari's foreignObject positioning bugs (WebKit #23113)\n\tconst { svgChildren, centerChildren } = useMemo(() => {\n\t\tconst svgNodes: ReactNode[] = [];\n\t\tconst centerNodes: ReactNode[] = [];\n\n\t\tChildren.forEach(children, (child) => {\n\t\t\tif (isRingCenter(child)) {\n\t\t\t\tcenterNodes.push(child);\n\t\t\t} else if (geometryScrubbing && isRing(child)) {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tsvgNodes.push(child);\n\t\t\t}\n\t\t});\n\n\t\treturn { svgChildren: svgNodes, centerChildren: centerNodes };\n\t}, [children, geometryScrubbing]);\n\n\tconst contextValue: RingContextValue = useMemo(\n\t\t() => ({\n\t\t\tdata,\n\t\t\tsize,\n\t\t\tcenter,\n\t\t\tstrokeWidth,\n\t\t\tringGap,\n\t\t\tbaseInnerRadius,\n\t\t\thoveredIndex,\n\t\t\tsetHoveredIndex,\n\t\t\tanimationKey,\n\t\t\tisLoaded: effectiveIsLoaded,\n\t\t\tenterTransition,\n\t\t\tenterStaggerScale,\n\t\t\tcontainerRef,\n\t\t\ttotalValue,\n\t\t\tgetColor,\n\t\t\tgetRingRadii,\n\t\t\tstartAngle,\n\t\t\tendAngle,\n\t\t\tgeometryScrubbing,\n\t\t}),\n\t\t[\n\t\t\tdata,\n\t\t\tsize,\n\t\t\tcenter,\n\t\t\tstrokeWidth,\n\t\t\tringGap,\n\t\t\tbaseInnerRadius,\n\t\t\thoveredIndex,\n\t\t\tsetHoveredIndex,\n\t\t\tanimationKey,\n\t\t\teffectiveIsLoaded,\n\t\t\tenterTransition,\n\t\t\tenterStaggerScale,\n\t\t\tcontainerRef,\n\t\t\ttotalValue,\n\t\t\tgetColor,\n\t\t\tgetRingRadii,\n\t\t\tstartAngle,\n\t\t\tendAngle,\n\t\t\tgeometryScrubbing,\n\t\t],\n\t);\n\n\t// Use CSS Grid stacking to layer SVG and HTML content\n\t// This avoids Safari's foreignObject rendering bugs where HTML content\n\t// inside SVG foreignObject renders at wrong positions when it has a RenderLayer\n\treturn (\n\t\t<RingProvider value={contextValue}>\n\t\t\t<div\n\t\t\t\tclassName=\"grid\"\n\t\t\t\tstyle={{\n\t\t\t\t\tgridTemplateColumns: \"1fr\",\n\t\t\t\t\tgridTemplateRows: \"1fr\",\n\t\t\t\t\twidth: size,\n\t\t\t\t\theight: size,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{/* SVG layer with rings */}\n\t\t\t\t<svg\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\theight={size}\n\t\t\t\t\tstyle={{ gridArea: \"1 / 1\", contain: \"layout style paint\" }}\n\t\t\t\t\twidth={size}\n\t\t\t\t>\n\t\t\t\t\t<Group left={center} top={center}>\n\t\t\t\t\t\t{scrubRingLayers\n\t\t\t\t\t\t\t? scrubRingLayers.map((layer, index) => (\n\t\t\t\t\t\t\t\t\t<g key={data[index]?.label ?? index}>\n\t\t\t\t\t\t\t\t\t\t<path d={layer.bgPath} fill={ringCssVars.ringBackground} />\n\t\t\t\t\t\t\t\t\t\t{layer.progressPath ? (\n\t\t\t\t\t\t\t\t\t\t\t<path d={layer.progressPath} fill={layer.color} />\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t{svgChildren}\n\t\t\t\t\t</Group>\n\t\t\t\t</svg>\n\n\t\t\t\t{/* HTML layer with center content - stacked on top via grid */}\n\t\t\t\t{centerChildren.length > 0 && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"pointer-events-none flex items-center justify-center\"\n\t\t\t\t\t\tstyle={{ gridArea: \"1 / 1\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{centerChildren}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</RingProvider>\n\t);\n}, ringChartCorePropsEqual);\n\nfunction ringChartCorePropsEqual(\n\tprev: RingChartInnerProps,\n\tnext: RingChartInnerProps,\n): boolean {\n\treturn (\n\t\tprev.width === next.width &&\n\t\tprev.height === next.height &&\n\t\tprev.data === next.data &&\n\t\tprev.strokeWidth === next.strokeWidth &&\n\t\tprev.ringGap === next.ringGap &&\n\t\tprev.baseInnerRadius === next.baseInnerRadius &&\n\t\tprev.hoveredIndexProp === next.hoveredIndexProp &&\n\t\tprev.onHoverChange === next.onHoverChange &&\n\t\tprev.startAngle === next.startAngle &&\n\t\tprev.endAngle === next.endAngle &&\n\t\tprev.enterTransition === next.enterTransition &&\n\t\tprev.enterStaggerScale === next.enterStaggerScale &&\n\t\tprev.geometryScrubbing === next.geometryScrubbing &&\n\t\tprev.children === next.children\n\t);\n}\n\nexport function RingChart({\n\tdata,\n\tsize: fixedSize,\n\tstrokeWidth = 12,\n\tringGap = 6,\n\tbaseInnerRadius = 60,\n\tclassName = \"\",\n\thoveredIndex,\n\tonHoverChange,\n\tstartAngle = -Math.PI / 2,\n\tendAngle = (3 * Math.PI) / 2,\n\tenterTransition,\n\tenterStaggerScale = 1,\n\tgeometryScrubbing = false,\n\tchildren,\n}: RingChartProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\n\t// If fixed size is provided, use it directly\n\tif (fixedSize) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\"relative flex items-center justify-center\", className)}\n\t\t\t\tref={containerRef}\n\t\t\t\tstyle={{ width: fixedSize, height: fixedSize }}\n\t\t\t>\n\t\t\t\t<RingChartInner\n\t\t\t\t\tbaseInnerRadius={baseInnerRadius}\n\t\t\t\t\tcontainerRef={containerRef}\n\t\t\t\t\tdata={data}\n\t\t\t\t\tendAngle={endAngle}\n\t\t\t\t\tenterStaggerScale={enterStaggerScale}\n\t\t\t\t\tenterTransition={enterTransition}\n\t\t\t\t\tgeometryScrubbing={geometryScrubbing}\n\t\t\t\t\theight={fixedSize}\n\t\t\t\t\thoveredIndexProp={hoveredIndex}\n\t\t\t\t\tonHoverChange={onHoverChange}\n\t\t\t\t\tringGap={ringGap}\n\t\t\t\t\tstartAngle={startAngle}\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\twidth={fixedSize}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</RingChartInner>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Otherwise use ParentSize for responsive sizing\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"relative aspect-square w-full\", className)}\n\t\t\tref={containerRef}\n\t\t>\n\t\t\t<ParentSize debounceTime={10}>\n\t\t\t\t{({ width, height }) => (\n\t\t\t\t\t<RingChartInner\n\t\t\t\t\t\tbaseInnerRadius={baseInnerRadius}\n\t\t\t\t\t\tcontainerRef={containerRef}\n\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\tendAngle={endAngle}\n\t\t\t\t\t\tenterStaggerScale={enterStaggerScale}\n\t\t\t\t\t\tenterTransition={enterTransition}\n\t\t\t\t\t\tgeometryScrubbing={geometryScrubbing}\n\t\t\t\t\t\theight={height}\n\t\t\t\t\t\thoveredIndexProp={hoveredIndex}\n\t\t\t\t\t\tonHoverChange={onHoverChange}\n\t\t\t\t\t\tringGap={ringGap}\n\t\t\t\t\t\tstartAngle={startAngle}\n\t\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\t\twidth={width}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</RingChartInner>\n\t\t\t\t)}\n\t\t\t</ParentSize>\n\t\t</div>\n\t);\n}\n\nexport default RingChart;\n","\"use client\";\n\nimport { arc as arcGenerator } from \"@visx/shape\";\nimport { type MotionValue, motion, useTransform } from \"motion/react\";\nimport { memo, useCallback } from \"react\";\nimport { ringCssVars, useRingHover, useRingStable } from \"./ring-context\";\nimport { useEnterComplete } from \"./use-enter-complete\";\nimport { useMountProgress } from \"./use-mount-progress\";\n\nfunction generateArcPath(\n\tinnerRadius: number,\n\touterRadius: number,\n\tstartAngle: number,\n\tendAngle: number,\n\tcornerRadius: number,\n): string {\n\tconst generator = arcGenerator<unknown>({\n\t\tinnerRadius,\n\t\touterRadius,\n\t\tcornerRadius,\n\t});\n\treturn generator({ startAngle, endAngle } as unknown as null) || \"\";\n}\n\nexport type RingLineCap = \"round\" | \"butt\";\n\nexport interface RingProps {\n\tindex: number;\n\tcolor?: string;\n\tanimate?: boolean;\n\tshowGlow?: boolean;\n\tlineCap?: RingLineCap;\n}\n\nfunction ringHoverScale(isHovered: boolean, isPushedOut: boolean): number {\n\tif (isHovered) {\n\t\treturn 1.03;\n\t}\n\tif (isPushedOut) {\n\t\treturn 1.02;\n\t}\n\treturn 1;\n}\n\nfunction RingProgressPath({\n\tprogressComplete,\n\tprogressPath,\n\tanimatedProgressPath,\n\tcolor,\n}: {\n\tprogressComplete: boolean;\n\tprogressPath: string;\n\tanimatedProgressPath: MotionValue<string>;\n\tcolor: string;\n}) {\n\tif (progressComplete) {\n\t\tif (!progressPath) {\n\t\t\treturn null;\n\t\t}\n\t\treturn <path d={progressPath} fill={color} />;\n\t}\n\treturn <motion.path d={animatedProgressPath} fill={color} />;\n}\n\nexport const Ring = memo(function Ring({\n\tindex,\n\tcolor: colorProp,\n\tanimate = true,\n\tshowGlow = true,\n\tlineCap = \"round\",\n}: RingProps) {\n\tconst {\n\t\tdata,\n\t\tgetColor,\n\t\tgetRingRadii,\n\t\tstartAngle,\n\t\tendAngle,\n\t\tenterTransition,\n\t\tenterStaggerScale,\n\t\tanimationKey,\n\t} = useRingStable();\n\tconst { hoveredIndex, setHoveredIndex } = useRingHover();\n\n\tconst expandDelay = index * 0.08 * enterStaggerScale;\n\tconst expandProgress = useMountProgress(\n\t\tenterTransition,\n\t\texpandDelay,\n\t\t`${animationKey}-expand-${index}`,\n\t);\n\tconst expandComplete = useEnterComplete(expandProgress);\n\n\tconst progressDelay = (0.6 + index * 0.1) * enterStaggerScale;\n\tconst progressMount = useMountProgress(\n\t\tenterTransition,\n\t\tprogressDelay,\n\t\t`${animationKey}-progress-${index}`,\n\t);\n\tconst progressComplete = useEnterComplete(progressMount);\n\n\tconst ringData = data[index];\n\tconst progress = ringData ? ringData.value / ringData.maxValue : 0;\n\tconst arcRange = endAngle - startAngle;\n\n\tconst animatedProgressPath = useTransform(progressMount, (v) => {\n\t\tif (!ringData) {\n\t\t\treturn \"\";\n\t\t}\n\t\tconst currentEndAngle = startAngle + arcRange * progress * v;\n\t\tif (currentEndAngle <= startAngle + 0.01) {\n\t\t\treturn \"\";\n\t\t}\n\t\tconst radii = getRingRadii(index);\n\t\tconst corner =\n\t\t\tlineCap === \"round\" ? (radii.outerRadius - radii.innerRadius) / 2 : 0;\n\t\treturn generateArcPath(\n\t\t\tradii.innerRadius,\n\t\t\tradii.outerRadius,\n\t\t\tstartAngle,\n\t\t\tcurrentEndAngle,\n\t\t\tcorner,\n\t\t);\n\t});\n\n\tconst enterScale = useTransform(expandProgress, [0, 1], [0, 1]);\n\n\tconst handleMouseEnter = useCallback(\n\t\t() => setHoveredIndex(index),\n\t\t[index, setHoveredIndex],\n\t);\n\tconst handleMouseLeave = useCallback(\n\t\t() => setHoveredIndex(null),\n\t\t[setHoveredIndex],\n\t);\n\n\tif (!ringData) {\n\t\treturn null;\n\t}\n\n\tconst { innerRadius, outerRadius } = getRingRadii(index);\n\tconst color = colorProp || getColor(index);\n\n\tconst isHovered = hoveredIndex === index;\n\tconst isFaded = hoveredIndex !== null && hoveredIndex !== index;\n\tconst isPushedOut = hoveredIndex !== null && hoveredIndex < index;\n\n\tconst cornerRadius =\n\t\tlineCap === \"round\" ? (outerRadius - innerRadius) / 2 : 0;\n\tconst bgPath = generateArcPath(\n\t\tinnerRadius,\n\t\touterRadius,\n\t\tstartAngle,\n\t\tendAngle,\n\t\tcornerRadius,\n\t);\n\tconst progressEndAngle = startAngle + arcRange * progress;\n\tconst progressPath =\n\t\tprogressEndAngle <= startAngle + 0.01\n\t\t\t? \"\"\n\t\t\t: generateArcPath(\n\t\t\t\t\tinnerRadius,\n\t\t\t\t\touterRadius,\n\t\t\t\t\tstartAngle,\n\t\t\t\t\tprogressEndAngle,\n\t\t\t\t\tcornerRadius,\n\t\t\t\t);\n\n\tconst hoverScale = ringHoverScale(isHovered, isPushedOut);\n\tconst layerOpacity = isFaded ? 0.35 : 1;\n\tconst enterDone = !animate || (expandComplete && progressComplete);\n\n\tconst groupStyle = {\n\t\tcursor: \"pointer\" as const,\n\t\ttransformOrigin: \"0px 0px\",\n\t\tfilter: showGlow && isHovered ? `drop-shadow(0 0 12px ${color})` : \"none\",\n\t};\n\n\tif (enterDone) {\n\t\treturn (\n\t\t\t<motion.g\n\t\t\t\tanimate={{ scale: hoverScale, opacity: layerOpacity }}\n\t\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\tstyle={groupStyle}\n\t\t\t\ttransition={{\n\t\t\t\t\tscale: { type: \"spring\", stiffness: 400, damping: 25 },\n\t\t\t\t\topacity: { duration: 0.15 },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<path d={bgPath} fill={ringCssVars.ringBackground} />\n\t\t\t\t{progressPath ? <path d={progressPath} fill={color} /> : null}\n\t\t\t</motion.g>\n\t\t);\n\t}\n\n\tif (!expandComplete) {\n\t\treturn (\n\t\t\t<motion.g\n\t\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\tstyle={{\n\t\t\t\t\t...groupStyle,\n\t\t\t\t\tscale: enterScale,\n\t\t\t\t\topacity: layerOpacity,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<path d={bgPath} fill={ringCssVars.ringBackground} />\n\t\t\t</motion.g>\n\t\t);\n\t}\n\n\treturn (\n\t\t<motion.g\n\t\t\tanimate={{ scale: hoverScale, opacity: layerOpacity }}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\tstyle={groupStyle}\n\t\t\ttransition={{\n\t\t\t\tscale: { type: \"spring\", stiffness: 400, damping: 25 },\n\t\t\t\topacity: { duration: 0.15 },\n\t\t\t}}\n\t\t>\n\t\t\t<path d={bgPath} fill={ringCssVars.ringBackground} />\n\t\t\t<RingProgressPath\n\t\t\t\tanimatedProgressPath={animatedProgressPath}\n\t\t\t\tcolor={color}\n\t\t\t\tprogressComplete={progressComplete}\n\t\t\t\tprogressPath={progressPath}\n\t\t\t/>\n\t\t</motion.g>\n\t);\n});\n\nRing.displayName = \"Ring\";\n\nexport default Ring;\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tchartCenterContainerClassName,\n\tchartCenterLabelClassName,\n\tchartCenterValueClassName,\n} from \"./chart-center-typography\";\nimport {\n\tChartStatFlow,\n\ttype ChartStatFlowFormat,\n\tdefaultChartStatFlowFormat,\n} from \"./chart-stat-flow\";\nimport { useRingHover, useRingStable } from \"./ring-context\";\n\nexport interface RingCenterProps {\n\t/** Label shown below the value. Default: \"Total\" when not hovering */\n\tdefaultLabel?: string;\n\t/** Format options for NumberFlow. Default: standard notation */\n\tformatOptions?: ChartStatFlowFormat;\n\t/** Custom render function for complete control over center content */\n\tchildren?: (props: {\n\t\tvalue: number;\n\t\tlabel: string;\n\t\tisHovered: boolean;\n\t\tdata: { label: string; value: number; maxValue: number; color?: string };\n\t}) => ReactNode;\n\t/** Additional class name for the container */\n\tclassName?: string;\n\t/** Class name for the value text. Scales with center size via container queries. */\n\tvalueClassName?: string;\n\t/** Class name for the label text. Scales with center size via container queries. */\n\tlabelClassName?: string;\n\t/** Prefix to show before the number (e.g., \"$\") */\n\tprefix?: string;\n\t/** Suffix to show after the number (e.g., \"%\") */\n\tsuffix?: string;\n}\n\n/**\n * RingCenter displays content in the center of the ring chart.\n *\n * This component renders as pure HTML (not inside SVG foreignObject) to avoid\n * Safari's WebKit bug #23113 where HTML content with CSS transforms/opacity\n * inside foreignObject renders at incorrect positions.\n *\n * The parent RingChart uses CSS Grid stacking to overlay this HTML content\n * on top of the SVG rings.\n */\nexport function RingCenter({\n\tdefaultLabel = \"Total\",\n\tformatOptions = defaultChartStatFlowFormat,\n\tchildren,\n\tclassName = \"\",\n\tvalueClassName = chartCenterValueClassName,\n\tlabelClassName = chartCenterLabelClassName,\n\tprefix,\n\tsuffix,\n}: RingCenterProps) {\n\tconst { data, totalValue, baseInnerRadius } = useRingStable();\n\tconst { hoveredIndex } = useRingHover();\n\n\tconst hoveredData = hoveredIndex === null ? null : data[hoveredIndex];\n\tconst displayValue = hoveredData ? hoveredData.value : totalValue;\n\tconst displayLabel = hoveredData ? hoveredData.label : defaultLabel;\n\n\t// Calculate center area size based on scaled baseInnerRadius\n\t// Leave some padding so text doesn't touch the inner ring\n\tconst centerSize = baseInnerRadius * 2 - 16;\n\n\t// If custom render function is provided, use it\n\tif (children && hoveredData) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\tchartCenterContainerClassName,\n\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{ width: centerSize, height: centerSize }}\n\t\t\t>\n\t\t\t\t{children({\n\t\t\t\t\tvalue: displayValue,\n\t\t\t\t\tlabel: displayLabel,\n\t\t\t\t\tisHovered: hoveredIndex !== null,\n\t\t\t\t\tdata: hoveredData,\n\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Default center content with NumberFlow animations\n\t// Now renders as pure HTML, avoiding Safari's foreignObject bugs\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tchartCenterContainerClassName,\n\t\t\t\t\"flex flex-col items-center justify-center text-center\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={{ width: centerSize, height: centerSize }}\n\t\t>\n\t\t\t<ChartStatFlow\n\t\t\t\tformatOptions={formatOptions}\n\t\t\t\tlabel={displayLabel}\n\t\t\t\tlabelClassName={labelClassName}\n\t\t\t\tprefix={prefix}\n\t\t\t\tsuffix={suffix}\n\t\t\t\tvalue={displayValue}\n\t\t\t\tvalueClassName={valueClassName}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nRingCenter.displayName = \"RingCenter\";\n\nexport default RingCenter;\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"card\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"card-header\"\n\t\t\tclassName={cn(\n\t\t\t\t\"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"card-title\"\n\t\t\tclassName={cn(\"leading-none font-semibold\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"card-description\"\n\t\t\tclassName={cn(\"text-sm text-muted-foreground\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"card-action\"\n\t\t\tclassName={cn(\n\t\t\t\t\"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"card-content\"\n\t\t\tclassName={cn(\"px-6\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"card-footer\"\n\t\t\tclassName={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tCard,\n\tCardHeader,\n\tCardFooter,\n\tCardTitle,\n\tCardAction,\n\tCardDescription,\n\tCardContent,\n};\n","export const revenueSeries = [\n\t{ date: new Date(\"2024-01-01\"), value: 5200 },\n\t{ date: new Date(\"2024-02-01\"), value: 6100 },\n\t{ date: new Date(\"2024-03-01\"), value: 5400 },\n\t{ date: new Date(\"2024-04-01\"), value: 4700 },\n\t{ date: new Date(\"2024-05-01\"), value: 5100 },\n\t{ date: new Date(\"2024-06-01\"), value: 6800 },\n\t{ date: new Date(\"2024-07-01\"), value: 6400 },\n\t{ date: new Date(\"2024-08-01\"), value: 7200 },\n\t{ date: new Date(\"2024-09-01\"), value: 6900 },\n\t{ date: new Date(\"2024-10-01\"), value: 8100 },\n\t{ date: new Date(\"2024-11-01\"), value: 7600 },\n\t{ date: new Date(\"2024-12-01\"), value: 8800 },\n];\n\nexport const revenueStats = {\n\taverage:\n\t\trevenueSeries.reduce((sum, point) => sum + point.value, 0) /\n\t\trevenueSeries.length,\n\ttrend: 12.4,\n};\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface StatCardHoverState {\n\tvalue: number | null;\n\tlabel: string | null;\n\ttrend: number | null;\n}\n\nexport const statCardValueClassName =\n\t\"text-3xl font-semibold leading-none tracking-tight\";\n\nexport const statCardLabelClassName = \"mt-0 text-xs\";\n\nexport const statCardChartHeights = {\n\tsm: \"[--stat-card-chart-h:96px]\",\n\tmd: \"[--stat-card-chart-h:190px]\",\n\tlg: \"[--stat-card-chart-h:420px]\",\n} as const;\n\n/** Bleeds charts edge-to-edge inside stat card content padding. */\nexport function StatCardChart({\n\tchildren,\n\tclassName,\n\tsize = \"sm\",\n}: {\n\tchildren: ReactNode;\n\tclassName?: string;\n\tsize?: keyof typeof statCardChartHeights;\n}) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"relative -mx-4 -mb-3 overflow-hidden\",\n\t\t\t\t\"[&_.relative.w-full]:aspect-auto! [&_.relative.w-full]:h-[var(--stat-card-chart-h)]!\",\n\t\t\t\tstatCardChartHeights[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useChart } from \"@/components/charts\";\nimport { useEffect } from \"react\";\nimport type { StatCardHoverState } from \"./stat-card-chart\";\n\nexport type { StatCardHoverState } from \"./stat-card-chart\";\n\nexport function formatStatCardMonth(date: Date) {\n\treturn date.toLocaleDateString(\"en-US\", { month: \"short\" });\n}\n\nexport function formatStatCardWeekday(date: Date) {\n\treturn date.toLocaleDateString(\"en-US\", { weekday: \"long\" });\n}\n\nfunction parsePointDate(raw: unknown): Date | null {\n\tif (raw instanceof Date) {\n\t\treturn raw;\n\t}\n\tif (typeof raw === \"string\") {\n\t\treturn new Date(raw);\n\t}\n\treturn null;\n}\n\nfunction computePeriodTrend(\n\tdata: Record<string, unknown>[],\n\tindex: number,\n\tdataKey: string,\n): number | null {\n\tif (index <= 0) {\n\t\treturn null;\n\t}\n\n\tconst current = data[index]?.[dataKey];\n\tconst previous = data[index - 1]?.[dataKey];\n\n\tif (\n\t\ttypeof current !== \"number\" ||\n\t\ttypeof previous !== \"number\" ||\n\t\tprevious === 0\n\t) {\n\t\treturn null;\n\t}\n\n\treturn ((current - previous) / previous) * 100;\n}\n\n/** Syncs hovered chart values, labels, and trend into stat card UI. */\nexport function StatCardHoverBridge({\n\tdataKey,\n\tdateKey = \"date\",\n\tformatLabel,\n\tonHoverChange,\n}: {\n\tdataKey: string;\n\tdateKey?: string;\n\tformatLabel: (date: Date) => string;\n\tonHoverChange: (state: StatCardHoverState) => void;\n}) {\n\tconst { data, tooltipData } = useChart();\n\n\tuseEffect(() => {\n\t\tif (!tooltipData?.point) {\n\t\t\tonHoverChange({ value: null, label: null, trend: null });\n\t\t\treturn;\n\t\t}\n\n\t\tconst raw = tooltipData.point[dataKey];\n\t\tconst value = typeof raw === \"number\" ? raw : null;\n\t\tconst date = parsePointDate(tooltipData.point[dateKey]);\n\t\tconst label = date ? formatLabel(date) : null;\n\t\tconst trend = computePeriodTrend(data, tooltipData.index, dataKey);\n\n\t\tonHoverChange({ value, label, trend });\n\t}, [data, dataKey, dateKey, formatLabel, onHoverChange, tooltipData]);\n\n\treturn null;\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot } from \"radix-ui\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst badgeVariants = cva(\n\t\"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n\t\t\t\tsecondary:\n\t\t\t\t\t\"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n\t\t\t\tdestructive:\n\t\t\t\t\t\"bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90\",\n\t\t\t\toutline:\n\t\t\t\t\t\"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n\t\t\t\tghost: \"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n\t\t\t\tlink: \"text-primary underline-offset-4 [a&]:hover:underline\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t},\n\t},\n);\n\nfunction Badge({\n\tclassName,\n\tvariant = \"default\",\n\tasChild = false,\n\t...props\n}: React.ComponentProps<\"span\"> &\n\tVariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n\tconst Comp = asChild ? Slot.Root : \"span\";\n\n\treturn (\n\t\t<Comp\n\t\t\tdata-slot=\"badge\"\n\t\t\tdata-variant={variant}\n\t\t\tclassName={cn(badgeVariants({ variant }), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Badge, badgeVariants };\n","\"use client\";\n\nimport { CentralIcon } from \"@central-icons-react/all\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { cn } from \"@/lib/utils\";\n\nexport function TrendBadge({\n\tvalue,\n\tclassName,\n}: {\n\tvalue: number;\n\tclassName?: string;\n}) {\n\tconst positive = value >= 0;\n\n\treturn (\n\t\t<Badge\n\t\t\tclassName={cn(\n\t\t\t\tpositive &&\n\t\t\t\t\t\"border-emerald-500/20 bg-emerald-500/10 text-emerald-600 dark:text-emerald-400\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tvariant={positive ? \"outline\" : \"destructive\"}\n\t\t>\n\t\t\t<CentralIcon\n\t\t\t\tclassName=\"size-3\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\tfill=\"outlined\"\n\t\t\t\tjoin=\"round\"\n\t\t\t\tname={positive ? \"IconArrowUp\" : \"IconArrowDown\"}\n\t\t\t\tradius=\"0\"\n\t\t\t\tstroke=\"1.5\"\n\t\t\t/>\n\t\t\t{positive ? \"+\" : \"\"}\n\t\t\t{value.toFixed(1)}%\n\t\t</Badge>\n\t);\n}\n","\"use client\";\n\nimport {\n\tArea,\n\tAreaChart,\n\tChartStatFlow,\n\tLinearGradient,\n} from \"@/components/charts\";\nimport { curveCardinal } from \"@visx/curve\";\nimport { useState } from \"react\";\nimport {\n\tCard,\n\tCardAction,\n\tCardContent,\n\tCardHeader,\n\tCardTitle,\n} from \"@/components/ui/card\";\nimport { revenueSeries, revenueStats } from \"../data/revenue-series\";\nimport {\n\tStatCardChart,\n\tstatCardLabelClassName,\n\tstatCardValueClassName,\n} from \"./stat-card-chart\";\nimport {\n\tformatStatCardMonth,\n\tStatCardHoverBridge,\n\ttype StatCardHoverState,\n} from \"./stat-card-hover-bridge\";\nimport { TrendBadge } from \"./trend-badge\";\n\nexport function StatCardArea() {\n\tconst [hover, setHover] = useState<StatCardHoverState>({\n\t\tvalue: null,\n\t\tlabel: null,\n\t\ttrend: null,\n\t});\n\tconst displayValue = hover.value ?? revenueStats.average;\n\tconst displayLabel = hover.label ?? \"Avg\";\n\tconst displayTrend = hover.trend ?? revenueStats.trend;\n\n\treturn (\n\t\t<Card className=\"w-full gap-0 py-0\">\n\t\t\t<CardHeader className=\"px-4 py-3\">\n\t\t\t\t<CardTitle>Total Revenue</CardTitle>\n\t\t\t\t<CardAction>\n\t\t\t\t\t<TrendBadge value={displayTrend} />\n\t\t\t\t</CardAction>\n\t\t\t</CardHeader>\n\n\t\t\t<CardContent className=\"flex flex-col gap-3 px-4 pt-2 pb-3\">\n\t\t\t\t<ChartStatFlow\n\t\t\t\t\tformatOptions={{\n\t\t\t\t\t\tcurrency: \"USD\",\n\t\t\t\t\t\tmaximumFractionDigits: 0,\n\t\t\t\t\t\tstyle: \"currency\",\n\t\t\t\t\t}}\n\t\t\t\t\tlabel={displayLabel}\n\t\t\t\t\tlabelClassName={statCardLabelClassName}\n\t\t\t\t\tvalue={displayValue}\n\t\t\t\t\tvalueClassName={statCardValueClassName}\n\t\t\t\t/>\n\n\t\t\t\t<StatCardChart size=\"md\">\n\t\t\t\t\t<AreaChart\n\t\t\t\t\t\taspectRatio=\"2.5 / 1\"\n\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\tdata={revenueSeries}\n\t\t\t\t\t\tmargin={{ top: 0, right: 0, bottom: 0, left: 0 }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<StatCardHoverBridge\n\t\t\t\t\t\t\tdataKey=\"value\"\n\t\t\t\t\t\t\tformatLabel={formatStatCardMonth}\n\t\t\t\t\t\t\tonHoverChange={setHover}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<LinearGradient\n\t\t\t\t\t\t\tfrom=\"var(--chart-1)\"\n\t\t\t\t\t\t\tfromOpacity={0.45}\n\t\t\t\t\t\t\tid=\"stat-card-area-fill\"\n\t\t\t\t\t\t\tto=\"var(--chart-1)\"\n\t\t\t\t\t\t\ttoOpacity={0}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Area\n\t\t\t\t\t\t\tcurve={curveCardinal.tension(0.65)}\n\t\t\t\t\t\t\tdataKey=\"value\"\n\t\t\t\t\t\t\tfill=\"url(#stat-card-area-fill)\"\n\t\t\t\t\t\t\tfillOpacity={1}\n\t\t\t\t\t\t\tgradientToOpacity={0}\n\t\t\t\t\t\t\tshowHighlight\n\t\t\t\t\t\t\tstroke=\"var(--chart-1)\"\n\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</AreaChart>\n\t\t\t\t</StatCardChart>\n\t\t\t</CardContent>\n\t\t</Card>\n\t);\n}\n","export const sessionsSeries = [\n\t{ date: new Date(\"2024-06-03\"), value: 920 },\n\t{ date: new Date(\"2024-06-04\"), value: 1380 },\n\t{ date: new Date(\"2024-06-05\"), value: 1120 },\n\t{ date: new Date(\"2024-06-06\"), value: 1580 },\n\t{ date: new Date(\"2024-06-07\"), value: 1240 },\n\t{ date: new Date(\"2024-06-08\"), value: 1710 },\n\t{ date: new Date(\"2024-06-09\"), value: 1460 },\n];\n\nexport const sessionsStats = {\n\taverage:\n\t\tsessionsSeries.reduce((sum, point) => sum + point.value, 0) /\n\t\tsessionsSeries.length,\n\ttrend: 8.2,\n};\n","\"use client\";\n\nimport { ChartStatFlow, Line, LineChart } from \"@/components/charts\";\nimport { curveBasis } from \"@visx/curve\";\nimport { useState } from \"react\";\nimport {\n\tCard,\n\tCardAction,\n\tCardContent,\n\tCardHeader,\n\tCardTitle,\n} from \"@/components/ui/card\";\nimport { sessionsSeries, sessionsStats } from \"../data/sessions-series\";\nimport {\n\tStatCardChart,\n\tstatCardLabelClassName,\n\tstatCardValueClassName,\n} from \"./stat-card-chart\";\nimport {\n\tformatStatCardWeekday,\n\tStatCardHoverBridge,\n\ttype StatCardHoverState,\n} from \"./stat-card-hover-bridge\";\nimport { TrendBadge } from \"./trend-badge\";\n\nexport function StatCardLine() {\n\tconst [hover, setHover] = useState<StatCardHoverState>({\n\t\tvalue: null,\n\t\tlabel: null,\n\t\ttrend: null,\n\t});\n\tconst average = Math.round(sessionsStats.average);\n\tconst displayValue = hover.value === null ? average : Math.round(hover.value);\n\tconst displayLabel = hover.label ?? \"Avg\";\n\tconst displayTrend = hover.trend ?? sessionsStats.trend;\n\n\treturn (\n\t\t<Card className=\"w-full gap-0 py-0\">\n\t\t\t<CardHeader className=\"px-4 py-3\">\n\t\t\t\t<CardTitle>Active Sessions</CardTitle>\n\t\t\t\t<CardAction>\n\t\t\t\t\t<TrendBadge value={displayTrend} />\n\t\t\t\t</CardAction>\n\t\t\t</CardHeader>\n\n\t\t\t<CardContent className=\"px-4 pt-2 pb-3\">\n\t\t\t\t<StatCardChart size=\"md\">\n\t\t\t\t\t<div className=\"pointer-events-none absolute right-4 bottom-4 z-10 flex flex-col items-end text-right\">\n\t\t\t\t\t\t<ChartStatFlow\n\t\t\t\t\t\t\tlabel={displayLabel}\n\t\t\t\t\t\t\tlabelClassName={statCardLabelClassName}\n\t\t\t\t\t\t\tvalue={displayValue}\n\t\t\t\t\t\t\tvalueClassName={statCardValueClassName}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<LineChart\n\t\t\t\t\t\taspectRatio=\"2.5 / 1\"\n\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\tdata={sessionsSeries}\n\t\t\t\t\t\tmargin={{ top: 0, right: 0, bottom: 0, left: 0 }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<StatCardHoverBridge\n\t\t\t\t\t\t\tdataKey=\"value\"\n\t\t\t\t\t\t\tformatLabel={formatStatCardWeekday}\n\t\t\t\t\t\t\tonHoverChange={setHover}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Line\n\t\t\t\t\t\t\tcurve={curveBasis}\n\t\t\t\t\t\t\tdataKey=\"value\"\n\t\t\t\t\t\t\tshowHighlight\n\t\t\t\t\t\t\tstroke=\"var(--chart-3)\"\n\t\t\t\t\t\t\tstrokeWidth={2.5}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</LineChart>\n\t\t\t\t</StatCardChart>\n\t\t\t</CardContent>\n\t\t</Card>\n\t);\n}\n","/**\n * Pure helpers for sparse rollup series → chart-ready points.\n * Locale-aware formatting via Intl; no React / chart deps.\n */\n\nexport type ChartPoint = {\n\tdate: string;\n\tvalue: number;\n\t[key: string]: string | number | null | undefined;\n};\n\nexport type FillSeriesGapsOptions = {\n\t/** Inclusive start, `YYYY-MM-DD`. */\n\tfrom: string;\n\t/** Inclusive end, `YYYY-MM-DD`. */\n\tto: string;\n\t/** Field holding the date key (default `date`). */\n\tdateKey?: string;\n\t/** Field holding the numeric value (default `value`). */\n\tvalueKey?: string;\n\t/** Fill missing days with this value (default `0`). */\n\tfill?: number;\n};\n\nfunction parseUtcDay(iso: string): Date {\n\tconst [y, m, d] = iso.split(\"-\").map(Number);\n\treturn new Date(Date.UTC(y, (m ?? 1) - 1, d ?? 1));\n}\n\nfunction formatUtcDay(date: Date): string {\n\tconst y = date.getUTCFullYear();\n\tconst m = String(date.getUTCMonth() + 1).padStart(2, \"0\");\n\tconst d = String(date.getUTCDate()).padStart(2, \"0\");\n\treturn `${y}-${m}-${d}`;\n}\n\n/**\n * Expand a sparse daily series into a contiguous day range, filling gaps.\n */\nexport function fillSeriesGaps(\n\tpoints: ChartPoint[],\n\toptions: FillSeriesGapsOptions,\n): ChartPoint[] {\n\tconst dateKey = options.dateKey ?? \"date\";\n\tconst valueKey = options.valueKey ?? \"value\";\n\tconst fill = options.fill ?? 0;\n\tconst byDate = new Map<string, ChartPoint>();\n\tfor (const p of points) {\n\t\tconst key = String(p[dateKey] ?? \"\");\n\t\tif (key) byDate.set(key, p);\n\t}\n\n\tconst out: ChartPoint[] = [];\n\tconst cursor = parseUtcDay(options.from);\n\tconst end = parseUtcDay(options.to);\n\twhile (cursor.getTime() <= end.getTime()) {\n\t\tconst key = formatUtcDay(cursor);\n\t\tconst existing = byDate.get(key);\n\t\tif (existing) {\n\t\t\tout.push({\n\t\t\t\t...existing,\n\t\t\t\tdate: key,\n\t\t\t\tvalue: Number(existing[valueKey] ?? 0),\n\t\t\t});\n\t\t} else {\n\t\t\tout.push({ date: key, value: fill, [dateKey]: key, [valueKey]: fill });\n\t\t}\n\t\tcursor.setUTCDate(cursor.getUTCDate() + 1);\n\t}\n\treturn out;\n}\n\nexport type TrendDelta = {\n\t/** Absolute change from previous → current. */\n\tdelta: number;\n\t/** Percent change; `null` when previous is 0. */\n\tpercent: number | null;\n\t/** Sign of the change for badges. */\n\tdirection: \"up\" | \"down\" | \"flat\";\n};\n\n/**\n * Compare the last point to the previous (or to the first when only two).\n */\nexport function trendDelta(\n\tpoints: Array<{ value: number }>,\n): TrendDelta | null {\n\tif (points.length < 2) return null;\n\tconst current = points[points.length - 1]?.value ?? 0;\n\tconst previous = points[points.length - 2]?.value ?? 0;\n\tconst delta = current - previous;\n\tconst percent =\n\t\tprevious === 0 ? (current === 0 ? 0 : null) : (delta / previous) * 100;\n\tconst direction = delta > 0 ? \"up\" : delta < 0 ? \"down\" : (\"flat\" as const);\n\treturn { delta, percent, direction };\n}\n\nexport function formatChartNumber(\n\tvalue: number,\n\tlocale: string,\n\toptions?: Intl.NumberFormatOptions,\n): string {\n\treturn new Intl.NumberFormat(locale, {\n\t\tmaximumFractionDigits: 0,\n\t\t...options,\n\t}).format(value);\n}\n\nexport function formatChartDate(\n\tisoDate: string,\n\tlocale: string,\n\toptions?: Intl.DateTimeFormatOptions,\n): string {\n\tconst date = parseUtcDay(isoDate);\n\treturn new Intl.DateTimeFormat(locale, {\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t\t...options,\n\t}).format(date);\n}\n\n/**\n * Map `{ period, value }` rollup rows into chart points keyed by `date`.\n */\nexport function toChartPoints(\n\trows: Array<{ period: string; value: number }>,\n): ChartPoint[] {\n\treturn rows.map((row) => ({\n\t\tdate: row.period,\n\t\tvalue: row.value,\n\t}));\n}\n"]}