bruv-ui 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/area-chart.d.ts +84 -0
  2. package/dist/area-chart.js +2002 -0
  3. package/dist/area-chart.js.map +1 -0
  4. package/dist/bar-chart.d.ts +80 -0
  5. package/dist/bar-chart.js +2251 -0
  6. package/dist/bar-chart.js.map +1 -0
  7. package/dist/chart-background-BK77UXhl.d.ts +9 -0
  8. package/dist/chart-brush-BoxY9aDm.d.ts +72 -0
  9. package/dist/chart-dot-8H287EDv.d.ts +17 -0
  10. package/dist/chart-legend-Dv9pqes-.d.ts +16 -0
  11. package/dist/chart-tooltip-DajpzJRy.d.ts +68 -0
  12. package/dist/charts.d.ts +17 -0
  13. package/dist/charts.js +5097 -0
  14. package/dist/charts.js.map +1 -0
  15. package/dist/composed-chart.d.ts +93 -0
  16. package/dist/composed-chart.js +2338 -0
  17. package/dist/composed-chart.js.map +1 -0
  18. package/dist/form-dK_DJRTw.d.ts +43 -0
  19. package/dist/form-rhf.d.ts +26 -0
  20. package/dist/form-rhf.js +268 -0
  21. package/dist/form-rhf.js.map +1 -0
  22. package/dist/index.d.ts +2881 -0
  23. package/dist/index.js +9368 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/line-chart.d.ts +81 -0
  26. package/dist/line-chart.js +1879 -0
  27. package/dist/line-chart.js.map +1 -0
  28. package/dist/pie-chart.d.ts +64 -0
  29. package/dist/pie-chart.js +1094 -0
  30. package/dist/pie-chart.js.map +1 -0
  31. package/dist/radar-chart.d.ts +67 -0
  32. package/dist/radar-chart.js +1318 -0
  33. package/dist/radar-chart.js.map +1 -0
  34. package/dist/radial-chart.d.ts +56 -0
  35. package/dist/radial-chart.js +1051 -0
  36. package/dist/radial-chart.js.map +1 -0
  37. package/dist/sankey-chart.d.ts +58 -0
  38. package/dist/sankey-chart.js +1179 -0
  39. package/dist/sankey-chart.js.map +1 -0
  40. package/package.json +135 -0
  41. package/src/scales.css +288 -0
  42. package/src/shiki.css +37 -0
  43. package/src/styles.css +23 -0
  44. package/src/theme.css +659 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/charts/chart.tsx","../src/lib/cn.ts","../src/components/charts/chart-brush.tsx","../src/components/charts/chart-tooltip.tsx","../src/components/charts/chart-legend.tsx","../src/components/charts/chart-background.tsx","../src/components/charts/bar-chart.tsx"],"sourcesContent":["import * as RechartsPrimitive from \"recharts\"\nimport { cn } from \"../../lib/cn\"\nimport {\n\tforwardRef,\n\tuseId,\n\tcreateContext,\n\tuseContext,\n\ttype ComponentProps,\n\ttype ComponentType,\n\ttype ReactNode,\n} from \"react\"\n\nconst THEMES = { light: \"\", dark: '[data-theme=\"dark\"]' } as const\n\ntype ThemeKey = keyof typeof THEMES\n\ntype ThemeColorsBase = {\n\t[K in ThemeKey]?: string[]\n}\n\ntype AtLeastOneThemeColor = {\n\t[K in ThemeKey]: Required<Pick<ThemeColorsBase, K>> &\n\t\tPartial<Omit<ThemeColorsBase, K>>\n}[ThemeKey]\n\nconst VALID_THEME_KEYS = Object.keys(THEMES) as ThemeKey[]\n\nconst DEFAULT_PALETTE = [\n\t\"var(--color-bruv-chart-1)\",\n\t\"var(--color-bruv-chart-2)\",\n\t\"var(--color-bruv-chart-3)\",\n\t\"var(--color-bruv-chart-4)\",\n\t\"var(--color-bruv-chart-5)\",\n\t\"var(--color-bruv-chart-6)\",\n] as const\n\nexport type ChartConfig = Record<\n\tstring,\n\t{\n\t\tlabel?: ReactNode\n\t\ticon?: ComponentType\n\t\tcolor?: string\n\t\tcolors?: AtLeastOneThemeColor\n\t}\n>\n\ninterface ChartContextProps {\n\tconfig: ChartConfig\n}\n\nconst ChartContext = createContext<ChartContextProps | null>(null)\n\nexport function useChart() {\n\tconst context = useContext(ChartContext)\n\tif (!context) {\n\t\tthrow new Error(\"useChart must be used within a <Chart />\")\n\t}\n\treturn context\n}\n\nfunction validateChartConfigColors(config: ChartConfig): void {\n\tfor (const [key, value] of Object.entries(config)) {\n\t\tif (value.colors) {\n\t\t\tconst hasValidThemeKey = VALID_THEME_KEYS.some(\n\t\t\t\tthemeKey => value.colors?.[themeKey] !== undefined,\n\t\t\t)\n\t\t\tif (!hasValidThemeKey) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`[BruvCharts] Invalid chart config for \"${key}\": colors object must have at least one theme key (${VALID_THEME_KEYS.join(\", \")}).`,\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function applyDefaultChartColors(config: ChartConfig): ChartConfig {\n\tconst entries = Object.entries(config)\n\treturn Object.fromEntries(\n\t\tentries.map(([key, item], index) => {\n\t\t\tif (item.colors || item.color) {\n\t\t\t\tif (item.color && !item.colors) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...item,\n\t\t\t\t\t\t\tcolors: {\n\t\t\t\t\t\t\t\tlight: [item.color],\n\t\t\t\t\t\t\t\tdark: [item.color],\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\t\treturn [key, item]\n\t\t\t}\n\t\t\tconst paletteColor =\n\t\t\t\tDEFAULT_PALETTE[index % DEFAULT_PALETTE.length] ?? DEFAULT_PALETTE[0]\n\t\t\treturn [\n\t\t\t\tkey,\n\t\t\t\t{\n\t\t\t\t\t...item,\n\t\t\t\t\tcolors: {\n\t\t\t\t\t\tlight: [paletteColor],\n\t\t\t\t\t\tdark: [paletteColor],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t]\n\t\t}),\n\t)\n}\n\nexport interface ChartProps\n\textends\n\t\tOmit<ComponentProps<\"div\">, \"children\">,\n\t\tPick<\n\t\t\tComponentProps<typeof RechartsPrimitive.ResponsiveContainer>,\n\t\t\t| \"initialDimension\"\n\t\t\t| \"aspect\"\n\t\t\t| \"debounce\"\n\t\t\t| \"minHeight\"\n\t\t\t| \"minWidth\"\n\t\t\t| \"maxHeight\"\n\t\t\t| \"height\"\n\t\t\t| \"width\"\n\t\t\t| \"onResize\"\n\t\t\t| \"children\"\n\t\t> {\n\tconfig: ChartConfig\n\tinnerResponsiveContainerStyle?: ComponentProps<\n\t\ttypeof RechartsPrimitive.ResponsiveContainer\n\t>[\"style\"]\n\tfooter?: ReactNode\n}\n\nexport const Chart = forwardRef<HTMLDivElement, ChartProps>(function Chart(\n\t{\n\t\tid,\n\t\tconfig,\n\t\tinitialDimension = { width: 320, height: 200 },\n\t\tclassName,\n\t\tchildren,\n\t\tfooter,\n\t\t...props\n\t},\n\tref,\n) {\n\tconst uniqueId = useId()\n\tconst chartId = `chart-${id ?? uniqueId.replace(/:/g, \"\")}`\n\tconst resolvedConfig = applyDefaultChartColors(config)\n\n\tvalidateChartConfigColors(resolvedConfig)\n\n\treturn (\n\t\t<ChartContext.Provider value={{ config: resolvedConfig }}>\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"chart\"\n\t\t\t\tdata-chart={chartId}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"bruv-chart relative flex min-h-0 w-full flex-1 flex-col justify-center text-bruv-sm text-bruv-secondary\",\n\t\t\t\t\t\"[&_.recharts-cartesian-axis-tick_text]:fill-bruv-chart-axis [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-bruv-chart-grid/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-bruv-chart-cursor [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-bruv-chart-grid [&_.recharts-radial-bar-background-sector]:fill-bruv-subtle [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-bruv-subtle [&_.recharts-reference-line_[stroke='#ccc']]:stroke-bruv-chart-grid [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n\t\t\t\t\t!footer && \"aspect-video\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<ChartStyle id={chartId} config={resolvedConfig} />\n\t\t\t\t<RechartsPrimitive.ResponsiveContainer\n\t\t\t\t\tclassName=\"min-h-0 w-full flex-1\"\n\t\t\t\t\tinitialDimension={initialDimension}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</RechartsPrimitive.ResponsiveContainer>\n\t\t\t\t{footer}\n\t\t\t</div>\n\t\t</ChartContext.Provider>\n\t)\n})\n\nexport function LoadingIndicator({ isLoading }: { isLoading: boolean }) {\n\tif (!isLoading) return null\n\n\treturn (\n\t\t<div className=\"pointer-events-none absolute inset-0 z-20 flex items-center justify-center\">\n\t\t\t<div className=\"border-bruv-neutral bg-bruv-base-2 text-bruv-sm text-bruv-primary rounded-bruv-md flex items-center justify-center gap-2 border px-2 py-0.5\">\n\t\t\t\t<div className=\"border-bruv-neutral border-t-bruv-accent size-3 animate-spin rounded-full border\" />\n\t\t\t\t<span>Loading</span>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction distributeColors(colorsArray: string[], maxCount: number): string[] {\n\tconst availableCount = colorsArray.length\n\tif (availableCount >= maxCount) {\n\t\treturn colorsArray.slice(0, maxCount)\n\t}\n\n\tconst result: string[] = []\n\tconst baseSlots = Math.floor(maxCount / availableCount)\n\tconst extraSlots = maxCount % availableCount\n\n\tfor (let colorIdx = 0; colorIdx < availableCount; colorIdx++) {\n\t\tconst isExtraColor = colorIdx >= availableCount - extraSlots\n\t\tconst slotsForThisColor = baseSlots + (isExtraColor ? 1 : 0)\n\t\tfor (let j = 0; j < slotsForThisColor; j++) {\n\t\t\tconst color = colorsArray[colorIdx]\n\t\t\tif (color) result.push(color)\n\t\t}\n\t}\n\n\treturn result\n}\n\nexport function ChartStyle({\n\tid,\n\tconfig,\n}: {\n\tid: string\n\tconfig: ChartConfig\n}) {\n\tconst colorConfig = Object.entries(config).filter(([, item]) => item.colors)\n\n\tif (!colorConfig.length) return null\n\n\tconst generateCssVars = (theme: keyof typeof THEMES) =>\n\t\tcolorConfig\n\t\t\t.flatMap(([key, itemConfig]) => {\n\t\t\t\tconst colorsArray = itemConfig.colors?.[theme]\n\t\t\t\tif (!colorsArray?.length) return []\n\n\t\t\t\tconst maxCount = getColorsCount(itemConfig)\n\t\t\t\tconst distributedColors = distributeColors(colorsArray, maxCount)\n\n\t\t\t\treturn distributedColors.map(\n\t\t\t\t\t(color, index) => ` --color-${key}-${index}: ${color};`,\n\t\t\t\t)\n\t\t\t})\n\t\t\t.filter(Boolean)\n\t\t\t.join(\"\\n\")\n\n\tconst css = Object.entries(THEMES)\n\t\t.map(\n\t\t\t([theme, prefix]) =>\n\t\t\t\t`${prefix} [data-chart=${id}] {\\n${generateCssVars(theme as keyof typeof THEMES)}\\n}`,\n\t\t)\n\t\t.join(\"\\n\")\n\n\treturn <style dangerouslySetInnerHTML={{ __html: css }} />\n}\n\nexport function getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: unknown,\n\tkey: string,\n) {\n\tif (typeof payload !== \"object\" || payload === null) return undefined\n\n\tconst payloadPayload =\n\t\t\"payload\" in payload &&\n\t\ttypeof payload.payload === \"object\" &&\n\t\tpayload.payload !== null\n\t\t\t? payload.payload\n\t\t\t: undefined\n\n\tlet configLabelKey: string = key\n\n\tif (\n\t\tkey in payload &&\n\t\ttypeof payload[key as keyof typeof payload] === \"string\"\n\t) {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string\n\t} else if (\n\t\tpayloadPayload &&\n\t\tkey in payloadPayload &&\n\t\ttypeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadPayload[\n\t\t\tkey as keyof typeof payloadPayload\n\t\t] as string\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key]\n}\n\nexport function axisValueToPercentFormatter(value: number) {\n\treturn `${Math.round(value * 100).toFixed(0)}%`\n}\n\nexport function getColorsCount(config: ChartConfig[string]): number {\n\tif (!config.colors) return 1\n\tconst counts = VALID_THEME_KEYS.map(\n\t\ttheme => config.colors?.[theme]?.length ?? 0,\n\t)\n\treturn Math.max(...counts, 1)\n}\n\nexport const getLoadingData = (\n\tpoints: number = 10,\n\tmin: number = 0,\n\tmax: number = 70,\n) => {\n\tconst range = max - min\n\treturn Array.from({ length: points }, () => ({\n\t\tloading: Math.floor(Math.random() * range) + min,\n\t}))\n}\n","import { type ClassValue, clsx } from \"clsx\"\nimport { extendTailwindMerge } from \"tailwind-merge\"\n\nconst twMerge = extendTailwindMerge({\n\textend: {\n\t\tclassGroups: {\n\t\t\t\"font-size\": [{ \"text-cui\": [\"sm\", \"base\", \"lg\", \"xl\"] }],\n\t\t\t\"text-color\": [\n\t\t\t\t{\n\t\t\t\t\t\"text-cui\": [\n\t\t\t\t\t\t\"primary\",\n\t\t\t\t\t\t\"secondary\",\n\t\t\t\t\t\t\"tertiary\",\n\t\t\t\t\t\t\"inverse\",\n\t\t\t\t\t\t\"accent\",\n\t\t\t\t\t\t\"accent-on\",\n\t\t\t\t\t\t\"danger\",\n\t\t\t\t\t\t\"danger-on\",\n\t\t\t\t\t\t\"warn\",\n\t\t\t\t\t\t\"warn-on\",\n\t\t\t\t\t\t\"success\",\n\t\t\t\t\t\t\"success-on\",\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t},\n})\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs))\n}\n","import {\n\tmotion,\n\tuseMotionValue,\n\tuseMotionValueEvent,\n\tuseSpring,\n\tuseTransform,\n} from \"motion/react\"\nimport {\n\tResponsiveContainer,\n\tAreaChart,\n\tArea,\n\tLineChart,\n\tLine,\n\tBarChart,\n\tBar,\n} from \"recharts\"\nimport { ChartStyle, getColorsCount, type ChartConfig } from \"./chart\"\nimport { useCallback, useEffect, type ComponentProps } from \"react\"\nimport type { MotionValue } from \"motion/react\"\nimport { cn } from \"../../lib/cn\"\nimport * as React from \"react\"\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\ntype BrushVariant = \"line\" | \"area\" | \"bar\"\ntype CurveType = ComponentProps<typeof Area>[\"type\"]\n\ninterface BrushRange {\n\tstartIndex: number\n\tendIndex: number\n}\n\ninterface BrushProps {\n\t/** Full dataset – always rendered in the miniature chart */\n\tdata: Record<string, unknown>[]\n\t/** Chart config with colour definitions */\n\tchartConfig: ChartConfig\n\t/** Data keys to plot (default: all keys from chartConfig) */\n\tdataKeys?: string[]\n\t/** X-axis data key – used for handle labels */\n\txDataKey?: string\n\t/** Visual variant of the mini chart */\n\tvariant?: BrushVariant\n\t/** Pixel height of the brush */\n\theight?: number\n\t/** Extra className */\n\tclassName?: string\n\t/** Whether areas/bars should be stacked in the mini chart */\n\tstacked?: boolean\n\t/** Stroke variant for line / area strokes in the mini chart */\n\tstrokeVariant?: \"solid\" | \"dashed\" | \"animated-dashed\"\n\t/** Whether to connect null data points in line / area variants */\n\tconnectNulls?: boolean\n\t/** Radius for bar corners in the bar variant */\n\tbarRadius?: number\n\n\t// ── Controlled mode ──────────────────────────────────────────────────\n\t/** Controlled start index */\n\tstartIndex?: number\n\t/** Controlled end index */\n\tendIndex?: number\n\n\t// ── Uncontrolled mode ────────────────────────────────────────────────\n\t/** Initial start index (uncontrolled) */\n\tdefaultStartIndex?: number\n\t/** Initial end index (uncontrolled) */\n\tdefaultEndIndex?: number\n\n\t/** Fired whenever the visible range changes */\n\tonChange?: (range: BrushRange) => void\n\t/** Format the handle label from the xDataKey value */\n\tformatLabel?: (value: unknown, index: number) => string\n\t/** Curve type for line / area variants */\n\tcurveType?: CurveType\n\t/** Minimum number of data points that must remain selected */\n\tminSpan?: number\n\t/** Whether to render labels on the handles */\n\tshowLabels?: boolean\n\t/** Skip rendering own ChartStyle (when inside a Chart that already provides CSS vars) */\n\tskipStyle?: boolean\n}\n\n// ─── Spring config ──────────────────────────────────────────────────────────\n\nconst SPRING_CONFIG = { stiffness: 300, damping: 35, mass: 0.8 }\n\n// ─── Pointer-capture drag hook ──────────────────────────────────────────────\n// Replaces raw addEventListener with the modern Pointer Events API.\n// setPointerCapture routes all pointer events to the originating element,\n// so we get mouse + touch + pen support with zero global listeners.\n\ntype DragType = \"left\" | \"right\" | \"middle\"\n\ninterface DragState {\n\ttype: DragType\n\toriginX: number\n\toriginRange: BrushRange\n}\n\nfunction useBrushDrag({\n\trange,\n\ttotalPoints,\n\tcontainerRef,\n\tcommit,\n}: {\n\trange: BrushRange\n\ttotalPoints: number\n\tcontainerRef: React.RefObject<HTMLDivElement | null>\n\tcommit: (next: BrushRange, mode?: DragType) => void\n}) {\n\tconst dragRef = React.useRef<DragState | null>(null)\n\tconst [isDragging, setIsDragging] = React.useState(false)\n\n\tconst toIndexDelta = useCallback(\n\t\t(px: number) => {\n\t\t\tif (!containerRef.current || totalPoints <= 1) return 0\n\t\t\treturn Math.round(\n\t\t\t\t(px / containerRef.current.getBoundingClientRect().width) *\n\t\t\t\t\t(totalPoints - 1),\n\t\t\t)\n\t\t},\n\t\t[totalPoints, containerRef],\n\t)\n\n\tconst onPointerDown = useCallback(\n\t\t(e: React.PointerEvent, type: DragType) => {\n\t\t\te.preventDefault()\n\t\t\t;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n\t\t\tdragRef.current = { type, originX: e.clientX, originRange: { ...range } }\n\t\t\tsetIsDragging(true)\n\t\t},\n\t\t[range],\n\t)\n\n\tconst onPointerMove = useCallback(\n\t\t(e: React.PointerEvent) => {\n\t\t\tconst d = dragRef.current\n\t\t\tif (!d) return\n\n\t\t\tconst delta = toIndexDelta(e.clientX - d.originX)\n\t\t\tconst { type, originRange: o } = d\n\n\t\t\tif (type === \"left\") {\n\t\t\t\tcommit(\n\t\t\t\t\t{ startIndex: o.startIndex + delta, endIndex: o.endIndex },\n\t\t\t\t\t\"left\",\n\t\t\t\t)\n\t\t\t} else if (type === \"right\") {\n\t\t\t\tcommit(\n\t\t\t\t\t{ startIndex: o.startIndex, endIndex: o.endIndex + delta },\n\t\t\t\t\t\"right\",\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tconst span = o.endIndex - o.startIndex\n\t\t\t\tlet s = o.startIndex + delta\n\t\t\t\tlet e2 = s + span\n\t\t\t\tif (s < 0) {\n\t\t\t\t\ts = 0\n\t\t\t\t\te2 = span\n\t\t\t\t}\n\t\t\t\tif (e2 > totalPoints - 1) {\n\t\t\t\t\te2 = totalPoints - 1\n\t\t\t\t\ts = Math.max(0, e2 - span)\n\t\t\t\t}\n\t\t\t\tcommit({ startIndex: s, endIndex: e2 }, \"middle\")\n\t\t\t}\n\t\t},\n\t\t[toIndexDelta, totalPoints, commit],\n\t)\n\n\tconst onPointerUp = useCallback((e: React.PointerEvent) => {\n\t\t;(e.target as HTMLElement).releasePointerCapture(e.pointerId)\n\t\tdragRef.current = null\n\t\tsetIsDragging(false)\n\t}, [])\n\n\t// Helper to bind all three pointer handlers for a given drag type\n\tconst bind = useCallback(\n\t\t(type: DragType) => ({\n\t\t\tonPointerDown: (e: React.PointerEvent) => onPointerDown(e, type),\n\t\t\tonPointerMove,\n\t\t\tonPointerUp,\n\t\t}),\n\t\t[onPointerDown, onPointerMove, onPointerUp],\n\t)\n\n\treturn { isDragging, bind }\n}\n\n// ─── Brush ────────────────────────────────────────────────────────────\n\nfunction Brush({\n\tdata,\n\tchartConfig,\n\tdataKeys,\n\txDataKey,\n\tvariant = \"area\",\n\theight = 56,\n\tclassName,\n\tstacked = false,\n\tstrokeVariant = \"solid\",\n\tconnectNulls = false,\n\tbarRadius,\n\tstartIndex: controlledStart,\n\tendIndex: controlledEnd,\n\tdefaultStartIndex = 0,\n\tdefaultEndIndex,\n\tonChange,\n\tformatLabel,\n\tcurveType = \"monotone\",\n\tminSpan = 2,\n\tshowLabels = true,\n\tskipStyle = false,\n}: BrushProps) {\n\tconst containerRef = React.useRef<HTMLDivElement>(null)\n\tconst keys = React.useMemo(\n\t\t() => dataKeys ?? Object.keys(chartConfig),\n\t\t[dataKeys, chartConfig],\n\t)\n\tconst totalPoints = data.length\n\tconst chartId = React.useId().replace(/:/g, \"\")\n\n\t// ── Controlled vs uncontrolled ──────────────────────────────────────────\n\n\tconst isControlled =\n\t\tcontrolledStart !== undefined && controlledEnd !== undefined\n\n\tconst [internalRange, setInternalRange] = React.useState<BrushRange>(() => ({\n\t\tstartIndex: Math.max(0, Math.min(defaultStartIndex, totalPoints - 1)),\n\t\tendIndex: Math.max(\n\t\t\t0,\n\t\t\tMath.min(defaultEndIndex ?? totalPoints - 1, totalPoints - 1),\n\t\t),\n\t}))\n\n\t// Track the last committed range to avoid duplicate updates when small\n\t// mouse movements don't produce index changes (e.g., at boundaries)\n\tconst lastCommittedRef = React.useRef<BrushRange>(internalRange)\n\n\tuseEffect(() => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalRange(prev => {\n\t\t\t\tconst adjusted = {\n\t\t\t\t\tstartIndex: Math.min(prev.startIndex, Math.max(0, totalPoints - 1)),\n\t\t\t\t\tendIndex: Math.min(prev.endIndex, Math.max(0, totalPoints - 1)),\n\t\t\t\t}\n\t\t\t\tlastCommittedRef.current = adjusted\n\t\t\t\treturn adjusted\n\t\t\t})\n\t\t}\n\t}, [totalPoints, isControlled])\n\n\t// ── Clamping & committing ───────────────────────────────────────────────\n\n\tconst clampRange = useCallback(\n\t\t(range: BrushRange, mode?: DragType): BrushRange => {\n\t\t\tlet { startIndex, endIndex } = range\n\t\t\tconst maxIndex = Math.max(0, totalPoints - 1)\n\n\t\t\tstartIndex = Math.max(0, Math.min(startIndex, maxIndex))\n\t\t\tendIndex = Math.max(0, Math.min(endIndex, maxIndex))\n\n\t\t\tif (mode === \"left\") {\n\t\t\t\tconst maxStart = Math.max(0, endIndex - minSpan)\n\t\t\t\tstartIndex = Math.min(startIndex, maxStart)\n\t\t\t\treturn { startIndex, endIndex }\n\t\t\t}\n\n\t\t\tif (mode === \"right\") {\n\t\t\t\tconst minEnd = Math.min(maxIndex, startIndex + minSpan)\n\t\t\t\tendIndex = Math.max(endIndex, minEnd)\n\t\t\t\treturn { startIndex, endIndex }\n\t\t\t}\n\n\t\t\tif (endIndex - startIndex < minSpan) {\n\t\t\t\tendIndex = Math.min(startIndex + minSpan, maxIndex)\n\t\t\t\tif (endIndex - startIndex < minSpan) {\n\t\t\t\t\tstartIndex = Math.max(0, endIndex - minSpan)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { startIndex, endIndex }\n\t\t},\n\t\t[totalPoints, minSpan],\n\t)\n\n\tconst commit = useCallback(\n\t\t(next: BrushRange, mode?: DragType) => {\n\t\t\tconst clamped = clampRange(next, mode)\n\t\t\tconst last = lastCommittedRef.current\n\n\t\t\t// Only update if the range has actually changed — avoids unnecessary\n\t\t\t// re-renders when the brush is at a boundary and small mouse movements\n\t\t\t// don't produce index changes\n\t\t\tif (\n\t\t\t\tlast.startIndex === clamped.startIndex &&\n\t\t\t\tlast.endIndex === clamped.endIndex\n\t\t\t) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tlastCommittedRef.current = clamped\n\t\t\tsetInternalRange(clamped)\n\t\t\t// Defer the parent callback — chart re-render happens at lower priority,\n\t\t\t// React can skip intermediate frames during fast drags\n\t\t\tReact.startTransition(() => {\n\t\t\t\tonChange?.(clamped)\n\t\t\t})\n\t\t},\n\t\t[clampRange, onChange],\n\t)\n\n\t// ── Drag ────────────────────────────────────────────────────────────────\n\n\tconst { isDragging, bind } = useBrushDrag({\n\t\trange: internalRange,\n\t\ttotalPoints,\n\t\tcontainerRef,\n\t\tcommit,\n\t})\n\n\t// Position always driven by internalRange (never lags behind controlled props)\n\tconst range = internalRange\n\n\t// Sync internalRange with controlled props when not dragging\n\tuseEffect(() => {\n\t\tif (isControlled && !isDragging) {\n\t\t\tconst syncedRange = {\n\t\t\t\tstartIndex: controlledStart,\n\t\t\t\tendIndex: controlledEnd,\n\t\t\t}\n\t\t\t// eslint-disable-next-line react-hooks/set-state-in-effect\n\t\t\tsetInternalRange(syncedRange)\n\t\t\tlastCommittedRef.current = syncedRange\n\t\t}\n\t}, [isControlled, controlledStart, controlledEnd, isDragging])\n\n\t// ── Computed positions (%) ──────────────────────────────────────────────\n\n\tconst leftPct =\n\t\ttotalPoints > 1 ? (range.startIndex / (totalPoints - 1)) * 100 : 0\n\tconst rightPct =\n\t\ttotalPoints > 1 ? (range.endIndex / (totalPoints - 1)) * 100 : 100\n\n\t// Drive all moving brush UI from the same springed edge values.\n\tconst leftTarget = useMotionValue(leftPct)\n\tconst rightTarget = useMotionValue(rightPct)\n\tif (leftTarget.get() !== leftPct) leftTarget.set(leftPct)\n\tif (rightTarget.get() !== rightPct) rightTarget.set(rightPct)\n\n\tconst leftSpring = useSpring(leftTarget, SPRING_CONFIG)\n\tconst rightSpring = useSpring(rightTarget, SPRING_CONFIG)\n\tconst leftPosition = useTransform(leftSpring, (v: number) => `${v}%`)\n\tconst rightPosition = useTransform(rightSpring, (v: number) => `${v}%`)\n\tconst leftOverlayWidth = useTransform(leftSpring, (v: number) => `${v}%`)\n\tconst rightOverlayWidth = useTransform(\n\t\trightSpring,\n\t\t(v: number) => `${Math.max(0, 100 - v)}%`,\n\t)\n\tconst selectedWidth = useMotionValue(`${Math.max(0, rightPct - leftPct)}%`)\n\n\tconst updateSelectedWidth = useCallback(() => {\n\t\tselectedWidth.set(`${Math.max(0, rightSpring.get() - leftSpring.get())}%`)\n\t}, [leftSpring, rightSpring, selectedWidth])\n\n\tuseMotionValueEvent(leftSpring, \"change\", updateSelectedWidth)\n\tuseMotionValueEvent(rightSpring, \"change\", updateSelectedWidth)\n\n\tconst getLabel = useCallback(\n\t\t(idx: number) => {\n\t\t\tif (!xDataKey) return String(idx)\n\t\t\tconst v = data[idx]?.[xDataKey]\n\t\t\treturn formatLabel ? formatLabel(v, idx) : String(v ?? idx)\n\t\t},\n\t\t[data, xDataKey, formatLabel],\n\t)\n\n\t// ── Render ──────────────────────────────────────────────────────────────\n\n\tif (totalPoints === 0) return null\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tdata-chart={skipStyle ? undefined : chartId}\n\t\t\tclassName={cn(\"group relative select-none\", className)}\n\t\t\tstyle={{ height }}\n\t\t>\n\t\t\t{!skipStyle && <ChartStyle id={chartId} config={chartConfig} />}\n\n\t\t\t{/* Mini chart – always shows all data */}\n\t\t\t<div className=\"rounded-bruv-md absolute inset-0 overflow-hidden\">\n\t\t\t\t<MiniChart\n\t\t\t\t\tdata={data}\n\t\t\t\t\tkeys={keys}\n\t\t\t\t\tchartConfig={chartConfig}\n\t\t\t\t\tvariant={variant}\n\t\t\t\t\tcurveType={curveType}\n\t\t\t\t\tchartId={chartId}\n\t\t\t\t\tstacked={stacked}\n\t\t\t\t\tstrokeVariant={\n\t\t\t\t\t\tstrokeVariant === \"animated-dashed\" ? \"dashed\" : strokeVariant\n\t\t\t\t\t}\n\t\t\t\t\tconnectNulls={connectNulls}\n\t\t\t\t\tbarRadius={barRadius}\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t{/* Dim overlay – left */}\n\t\t\t<motion.div\n\t\t\t\tclassName=\"bg-bruv-base-2/70 pointer-events-none absolute inset-y-0 left-0 rounded-l-md backdrop-blur-[2px]\"\n\t\t\t\tstyle={{ width: leftOverlayWidth }}\n\t\t\t/>\n\t\t\t{/* Dim overlay – right */}\n\t\t\t<motion.div\n\t\t\t\tclassName=\"bg-bruv-base-2/70 pointer-events-none absolute inset-y-0 right-0 rounded-r-md backdrop-blur-[2px]\"\n\t\t\t\tstyle={{ width: rightOverlayWidth }}\n\t\t\t/>\n\n\t\t\t{/* Selected region – draggable to pan */}\n\t\t\t<motion.div\n\t\t\t\tclassName=\"rounded-bruv-sm absolute inset-y-0 cursor-grab touch-none border active:cursor-grabbing\"\n\t\t\t\tstyle={{ left: leftPosition, width: selectedWidth }}\n\t\t\t\t{...bind(\"middle\")}\n\t\t\t/>\n\n\t\t\t{/* Left handle */}\n\t\t\t<BrushHandle\n\t\t\t\tside=\"left\"\n\t\t\t\tposition={leftPosition}\n\t\t\t\tlabel={showLabels ? getLabel(range.startIndex) : undefined}\n\t\t\t\tbind={bind(\"left\")}\n\t\t\t/>\n\n\t\t\t{/* Right handle */}\n\t\t\t<BrushHandle\n\t\t\t\tside=\"right\"\n\t\t\t\tposition={rightPosition}\n\t\t\t\tlabel={showLabels ? getLabel(range.endIndex) : undefined}\n\t\t\t\tbind={bind(\"right\")}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n\n// ─── Brush Handle ───────────────────────────────────────────────────────────\n\nfunction BrushHandle({\n\tside,\n\tposition,\n\tlabel,\n\tbind,\n}: {\n\tside: \"left\" | \"right\"\n\tposition: MotionValue<string>\n\tlabel?: string\n\tbind: {\n\t\tonPointerDown: (e: React.PointerEvent) => void\n\t\tonPointerMove: (e: React.PointerEvent) => void\n\t\tonPointerUp: (e: React.PointerEvent) => void\n\t}\n}) {\n\tconst isLeft = side === \"left\"\n\n\treturn (\n\t\t<motion.div className=\"absolute inset-y-0 z-10\" style={{ left: position }}>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"group absolute inset-y-0 flex w-3 cursor-ew-resize touch-none items-center justify-center after:absolute after:inset-y-0 after:-left-4 after:w-11 after:content-['']\",\n\t\t\t\t\tisLeft ? \"\" : \"-translate-x-full\",\n\t\t\t\t)}\n\t\t\t\t{...bind}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"bg-muted-foreground group-hover:bg-foreground relative flex h-4 w-1.5 items-center justify-center rounded-bruv-md transition-colors\",\n\t\t\t\t\t\tisLeft ? \"-left-[5.5px]\" : \"-right-[5.5px]\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"flex flex-col gap-[2px]\">\n\t\t\t\t\t\t<div className=\"bg-bruv-base-2/70 h-[2px] w-[2px] rounded-full\" />\n\t\t\t\t\t\t<div className=\"bg-bruv-base-2/70 h-[2px] w-[2px] rounded-full\" />\n\t\t\t\t\t\t<div className=\"bg-bruv-base-2/70 h-[2px] w-[2px] rounded-full\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{label && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"bg-foreground text-bruv-base-1 pointer-events-none absolute -bottom-3 -translate-y-1/2 rounded-[3px] px-1 py-px text-[8px] leading-tight font-medium whitespace-nowrap opacity-0 group-hover:opacity-100\",\n\t\t\t\t\t\tisLeft ? \"left-1.5\" : \"right-1.5\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</motion.div>\n\t)\n}\n\n// ─── Mini Chart ─────────────────────────────────────────────────────────────\n\nfunction MiniChart({\n\tdata,\n\tkeys,\n\tchartConfig,\n\tvariant,\n\tcurveType,\n\tchartId,\n\tstacked,\n\tstrokeVariant = \"solid\",\n\tconnectNulls = false,\n\tbarRadius,\n}: {\n\tdata: Record<string, unknown>[]\n\tkeys: string[]\n\tchartConfig: ChartConfig\n\tvariant: BrushVariant\n\tcurveType: CurveType\n\tchartId: string\n\tstacked: boolean\n\tstrokeVariant?: \"solid\" | \"dashed\" | \"animated-dashed\"\n\tconnectNulls?: boolean\n\tbarRadius?: number\n}) {\n\tconst gradients = React.useMemo(\n\t\t() =>\n\t\t\tObject.entries(chartConfig)\n\t\t\t\t.filter(([key]) => keys.includes(key))\n\t\t\t\t.map(([dataKey, config]) => ({\n\t\t\t\t\tdataKey,\n\t\t\t\t\tcolorsCount: getColorsCount(config),\n\t\t\t\t})),\n\t\t[chartConfig, keys],\n\t)\n\n\tconst dashArray =\n\t\tstrokeVariant === \"dashed\" || strokeVariant === \"animated-dashed\"\n\t\t\t? \"4 4\"\n\t\t\t: undefined\n\n\tconst defsContent = (\n\t\t<>\n\t\t\t{/* Vertical fade gradient for area fill mask */}\n\t\t\t{variant === \"area\" && (\n\t\t\t\t<linearGradient\n\t\t\t\t\tid={`${chartId}-zm-vertical-fade`}\n\t\t\t\t\tx1=\"0\"\n\t\t\t\t\ty1=\"0\"\n\t\t\t\t\tx2=\"0\"\n\t\t\t\t\ty2=\"1\"\n\t\t\t\t>\n\t\t\t\t\t<stop offset=\"0%\" stopColor=\"white\" stopOpacity={0.15} />\n\t\t\t\t\t<stop offset=\"100%\" stopColor=\"white\" stopOpacity={0} />\n\t\t\t\t</linearGradient>\n\t\t\t)}\n\t\t\t{gradients.map(({ dataKey, colorsCount }) => {\n\t\t\t\tconst colorStops =\n\t\t\t\t\tcolorsCount === 1 ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<stop offset=\"0%\" stopColor={`var(--color-${dataKey}-0)`} />\n\t\t\t\t\t\t\t<stop offset=\"100%\" stopColor={`var(--color-${dataKey}-0)`} />\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\tArray.from({ length: colorsCount }, (_, i) => (\n\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\toffset={`${(i / (colorsCount - 1)) * 100}%`}\n\t\t\t\t\t\t\t\tstopColor={`var(--color-${dataKey}-${i}, var(--color-${dataKey}-0))`}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))\n\t\t\t\t\t)\n\n\t\t\t\treturn (\n\t\t\t\t\t<React.Fragment key={dataKey}>\n\t\t\t\t\t\t{/* Vertical color gradient (stroke + bar fill) */}\n\t\t\t\t\t\t<linearGradient\n\t\t\t\t\t\t\tid={`${chartId}-zm-${dataKey}`}\n\t\t\t\t\t\t\tx1=\"0\"\n\t\t\t\t\t\t\ty1=\"0\"\n\t\t\t\t\t\t\tx2=\"0\"\n\t\t\t\t\t\t\ty2=\"1\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{colorStops}\n\t\t\t\t\t\t</linearGradient>\n\n\t\t\t\t\t\t{/* Area fill: color gradient masked with vertical fade */}\n\t\t\t\t\t\t{variant === \"area\" && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<mask id={`${chartId}-zm-fill-mask-${dataKey}`}>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\t\t\t\t\tfill={`url(#${chartId}-zm-vertical-fade)`}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</mask>\n\t\t\t\t\t\t\t\t<pattern\n\t\t\t\t\t\t\t\t\tid={`${chartId}-zm-fill-${dataKey}`}\n\t\t\t\t\t\t\t\t\tpatternUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\t\t\t\t\tfill={`url(#${chartId}-zm-${dataKey})`}\n\t\t\t\t\t\t\t\t\t\tmask={`url(#${chartId}-zm-fill-mask-${dataKey})`}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</pattern>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t)\n\t\t\t})}\n\t\t</>\n\t)\n\n\tif (variant === \"line\") {\n\t\treturn (\n\t\t\t<ResponsiveContainer width=\"100%\" height=\"100%\">\n\t\t\t\t<LineChart\n\t\t\t\t\tdata={data}\n\t\t\t\t\tmargin={{ top: 4, right: 0, bottom: 0, left: 0 }}\n\t\t\t\t>\n\t\t\t\t\t<defs>{defsContent}</defs>\n\t\t\t\t\t{keys.map(dk => (\n\t\t\t\t\t\t<Line\n\t\t\t\t\t\t\tkey={dk}\n\t\t\t\t\t\t\ttype={curveType}\n\t\t\t\t\t\t\tdataKey={dk}\n\t\t\t\t\t\t\tstroke={`url(#${chartId}-zm-${dk})`}\n\t\t\t\t\t\t\tstrokeWidth={1}\n\t\t\t\t\t\t\tstrokeOpacity={0.5}\n\t\t\t\t\t\t\tstrokeDasharray={dashArray}\n\t\t\t\t\t\t\tconnectNulls={connectNulls}\n\t\t\t\t\t\t\tdot={false}\n\t\t\t\t\t\t\tactiveDot={false}\n\t\t\t\t\t\t\tisAnimationActive={false}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</LineChart>\n\t\t\t</ResponsiveContainer>\n\t\t)\n\t}\n\n\tif (variant === \"bar\") {\n\t\tconst r = barRadius ?? 3\n\t\treturn (\n\t\t\t<ResponsiveContainer width=\"100%\" height=\"100%\">\n\t\t\t\t<BarChart\n\t\t\t\t\tdata={data}\n\t\t\t\t\tmargin={{ top: 2, right: 0, bottom: 0, left: 0 }}\n\t\t\t\t\tbarGap={2}\n\t\t\t\t\tbarSize={14}\n\t\t\t\t>\n\t\t\t\t\t<defs>{defsContent}</defs>\n\t\t\t\t\t{keys.map(dk => (\n\t\t\t\t\t\t<Bar\n\t\t\t\t\t\t\tkey={dk}\n\t\t\t\t\t\t\tdataKey={dk}\n\t\t\t\t\t\t\tfill={`url(#${chartId}-zm-${dk})`}\n\t\t\t\t\t\t\tfillOpacity={0.35}\n\t\t\t\t\t\t\tstackId={stacked ? \"zm-stack\" : undefined}\n\t\t\t\t\t\t\tisAnimationActive={false}\n\t\t\t\t\t\t\tradius={[r, r, r, r]}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</BarChart>\n\t\t\t</ResponsiveContainer>\n\t\t)\n\t}\n\n\t// Default: area\n\treturn (\n\t\t<ResponsiveContainer width=\"100%\" height=\"100%\">\n\t\t\t<AreaChart data={data} margin={{ top: 4, right: 0, bottom: 0, left: 0 }}>\n\t\t\t\t<defs>{defsContent}</defs>\n\t\t\t\t{keys.map(dk => (\n\t\t\t\t\t<Area\n\t\t\t\t\t\tkey={dk}\n\t\t\t\t\t\ttype={curveType}\n\t\t\t\t\t\tdataKey={dk}\n\t\t\t\t\t\tstroke={`url(#${chartId}-zm-${dk})`}\n\t\t\t\t\t\tfill={`url(#${chartId}-zm-fill-${dk})`}\n\t\t\t\t\t\tstrokeWidth={1}\n\t\t\t\t\t\tstrokeOpacity={0.5}\n\t\t\t\t\t\tstrokeDasharray={dashArray}\n\t\t\t\t\t\tconnectNulls={connectNulls}\n\t\t\t\t\t\tfillOpacity={1}\n\t\t\t\t\t\tstackId={stacked ? \"zm-stack\" : undefined}\n\t\t\t\t\t\tdot={false}\n\t\t\t\t\t\tactiveDot={false}\n\t\t\t\t\t\tisAnimationActive={false}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</AreaChart>\n\t\t</ResponsiveContainer>\n\t)\n}\n\n// ─── useBrush Hook ──────────────────────────────────────────────────────\n\nfunction useBrush<TData extends Record<string, unknown>>({\n\tdata,\n\tdefaultStartIndex = 0,\n\tdefaultEndIndex,\n}: {\n\tdata: TData[]\n\tdefaultStartIndex?: number\n\tdefaultEndIndex?: number\n}) {\n\tconst [range, setRange] = React.useState<BrushRange>({\n\t\tstartIndex: defaultStartIndex,\n\t\tendIndex: defaultEndIndex ?? Math.max(0, data.length - 1),\n\t})\n\n\t// Defer the range used for data slicing — the brush handles move at the\n\n\t// immediate `range` cadence while the expensive chart re-render uses the\n\t// deferred value. React can skip intermediate slices during fast drags.\n\tconst deferredRange = React.useDeferredValue(range)\n\n\tuseEffect(() => {\n\t\t// eslint-disable-next-line react-hooks/set-state-in-effect\n\t\tsetRange({\n\t\t\tstartIndex: 0,\n\t\t\tendIndex: Math.max(0, data.length - 1),\n\t\t})\n\t}, [data.length])\n\n\tconst visibleData = React.useMemo(\n\t\t() => data.slice(deferredRange.startIndex, deferredRange.endIndex + 1),\n\t\t[data, deferredRange.startIndex, deferredRange.endIndex],\n\t)\n\n\treturn {\n\t\trange,\n\t\tvisibleData,\n\t\tbrushProps: {\n\t\t\tstartIndex: range.startIndex,\n\t\t\tendIndex: range.endIndex,\n\t\t\tonChange: setRange,\n\t\t} satisfies Pick<BrushProps, \"startIndex\" | \"endIndex\" | \"onChange\">,\n\t}\n}\n\nexport { Brush, useBrush, type BrushProps, type BrushRange, type BrushVariant }\n","import { getPayloadConfigFromPayload, getColorsCount, useChart } from \"./chart\"\nimport type {\n\tNameType,\n\tValueType,\n} from \"recharts/types/component/DefaultTooltipContent\"\nimport * as RechartsPrimitive from \"recharts\"\nimport { cn } from \"../../lib/cn\"\nimport * as React from \"react\"\n\ntype TooltipRoundness = \"sm\" | \"md\" | \"lg\" | \"xl\"\ntype TooltipVariant = \"default\" | \"frosted-glass\"\n\nconst roundnessMap: Record<TooltipRoundness, string> = {\n\tsm: \"rounded-bruv-sm\",\n\tmd: \"rounded-bruv-md\",\n\tlg: \"rounded-bruv-lg\",\n\txl: \"rounded-bruv-xl\",\n}\n\nconst variantMap: Record<TooltipVariant, string> = {\n\tdefault: \"bg-bruv-base-2\",\n\t\"frosted-glass\": \"bg-bruv-base-2/70 backdrop-blur-sm\",\n}\n\nfunction ChartTooltipContent({\n\tactive,\n\tpayload,\n\tclassName,\n\tindicator = \"dot\",\n\thideLabel = false,\n\thideIndicator = false,\n\tlabel,\n\tlabelFormatter,\n\tlabelClassName,\n\tformatter,\n\tnameKey,\n\tlabelKey,\n\tselected,\n\troundness = \"lg\",\n\tvariant = \"default\",\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n\tReact.ComponentProps<\"div\"> & {\n\t\thideLabel?: boolean\n\t\thideIndicator?: boolean\n\t\tindicator?: \"line\" | \"dot\" | \"dashed\"\n\t\tnameKey?: string\n\t\tlabelKey?: string\n\t\tselected?: string | null\n\t\troundness?: TooltipRoundness\n\t\tvariant?: TooltipVariant\n\t} & Omit<\n\t\tRechartsPrimitive.DefaultTooltipContentProps<ValueType, NameType>,\n\t\t\"accessibilityLayer\"\n\t>) {\n\tconst { config } = useChart()\n\n\tconst tooltipLabel = React.useMemo(() => {\n\t\tif (hideLabel || !payload?.length) {\n\t\t\treturn null\n\t\t}\n\n\t\tconst [item] = payload\n\t\tconst key = `${labelKey ?? item?.dataKey ?? item?.name ?? \"value\"}`\n\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key)\n\t\tconst value =\n\t\t\t!labelKey && typeof label === \"string\"\n\t\t\t\t? (config[label]?.label ?? label)\n\t\t\t\t: itemConfig?.label\n\n\t\tif (labelFormatter) {\n\t\t\treturn (\n\t\t\t\t<div className={cn(\"font-medium\", labelClassName)}>\n\t\t\t\t\t{labelFormatter(value, payload)}\n\t\t\t\t</div>\n\t\t\t)\n\t\t}\n\n\t\tif (!value) {\n\t\t\treturn null\n\t\t}\n\n\t\treturn <div className={cn(\"font-medium\", labelClassName)}>{value}</div>\n\t}, [\n\t\tlabel,\n\t\tlabelFormatter,\n\t\tpayload,\n\t\thideLabel,\n\t\tlabelClassName,\n\t\tconfig,\n\t\tlabelKey,\n\t])\n\n\tif (!active || !payload?.length) {\n\t\t// Empty tooltip - to prevent position getting 0.0 so it doesnt animate tooltip every time from 0.0 origin\n\t\treturn <span className=\"p-4\" />\n\t}\n\n\tconst nestLabel = payload.length === 1 && indicator !== \"dot\"\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"border-bruv-neutral/50 grid min-w-32 items-start gap-1.5 border px-2.5 py-1.5 text-xs shadow-xl\",\n\t\t\t\troundnessMap[roundness],\n\t\t\t\tvariantMap[variant],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!nestLabel ? tooltipLabel : null}\n\t\t\t<div className=\"grid gap-1.5\">\n\t\t\t\t{payload\n\t\t\t\t\t.filter(item => item.type !== \"none\")\n\t\t\t\t\t.map((item, index) => {\n\t\t\t\t\t\t// For pie charts, item.name contains the sector name (e.g., \"chrome\")\n\t\t\t\t\t\t// For radial charts, the name is in item.payload[nameKey]\n\t\t\t\t\t\t// For other charts, item.name or item.dataKey contains the series name\n\t\t\t\t\t\tconst payloadName =\n\t\t\t\t\t\t\tnameKey && item.payload\n\t\t\t\t\t\t\t\t? (item.payload as Record<string, unknown>)[nameKey]\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\tconst key = `${payloadName ?? item.name ?? item.dataKey ?? \"value\"}`\n\t\t\t\t\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key)\n\n\t\t\t\t\t\t// Get colors count for this item to determine gradient vs solid\n\t\t\t\t\t\tconst colorsCount = itemConfig ? getColorsCount(itemConfig) : 1\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"[&>svg]:text-bruv-secondary flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5\",\n\t\t\t\t\t\t\t\t\tindicator === \"dot\" && \"items-center\",\n\t\t\t\t\t\t\t\t\tselected != null && selected !== item.dataKey && \"opacity-30\",\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{formatter && item?.value !== undefined && item.name ? (\n\t\t\t\t\t\t\t\t\tformatter(item.value, item.name, item, index, item.payload)\n\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\t\t{itemConfig?.icon ? (\n\t\t\t\t\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t!hideIndicator && (\n\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\"shrink-0 rounded-[2px]\", {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"h-2.5 w-2.5\": indicator === \"dot\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"w-1\": indicator === \"line\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"w-0 border-[1.5px] border-dashed bg-transparent!\":\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tindicator === \"dashed\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"my-0.5\": nestLabel && indicator === \"dashed\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={getIndicatorColorStyle(key, colorsCount)}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\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\t<div\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"flex flex-1 justify-between gap-4 leading-none\",\n\t\t\t\t\t\t\t\t\t\t\t\tnestLabel ? \"items-end\" : \"items-center\",\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\t\t<div className=\"grid gap-1.5\">\n\t\t\t\t\t\t\t\t\t\t\t\t{nestLabel ? tooltipLabel : null}\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-bruv-secondary\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{itemConfig?.label ?? item.name}\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t{item.value != null && (\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-bruv-primary font-mono font-medium tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{typeof item.value === \"number\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? item.value.toLocaleString()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: String(item.value)}\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\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</div>\n\t\t\t\t\t\t)\n\t\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction getIndicatorColorStyle(\n\tdataKey: string,\n\tcolorsCount: number,\n): React.CSSProperties {\n\tif (colorsCount <= 1) {\n\t\treturn { background: `var(--color-${dataKey}-0)` }\n\t}\n\n\t// Multiple colors: create linear gradient with evenly distributed stops\n\tconst stops = Array.from({ length: colorsCount }, (_, index) => {\n\t\tconst offset = (index / (colorsCount - 1)) * 100\n\t\treturn `var(--color-${dataKey}-${index}) ${offset}%`\n\t}).join(\", \")\n\n\treturn { background: `linear-gradient(to right, ${stops})` }\n}\n\nconst ChartTooltip = ({\n\tanimationDuration = 200,\n\t...props\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip>) => (\n\t<RechartsPrimitive.Tooltip animationDuration={animationDuration} {...props} />\n)\n\nexport { ChartTooltip, ChartTooltipContent }\nexport type { TooltipRoundness, TooltipVariant }\n","import { getPayloadConfigFromPayload, getColorsCount, useChart } from \"./chart\"\nimport * as RechartsPrimitive from \"recharts\"\nimport { cn } from \"../../lib/cn\"\nimport * as React from \"react\"\n\ntype ChartLegendVariant =\n\t| \"square\"\n\t| \"circle\"\n\t| \"circle-outline\"\n\t| \"rounded-square\"\n\t| \"rounded-square-outline\"\n\t| \"vertical-bar\"\n\t| \"horizontal-bar\"\n\nfunction ChartLegendContent({\n\tclassName,\n\thideIcon = false,\n\tnameKey,\n\tpayload,\n\tverticalAlign,\n\talign = \"right\",\n\tselected,\n\tonSelectChange,\n\tisClickable,\n\tvariant = \"rounded-square\",\n}: React.ComponentProps<\"div\"> & {\n\thideIcon?: boolean\n\tnameKey?: string\n\tselected?: string | null\n\tisClickable?: boolean\n\tonSelectChange?: (selected: string | null) => void\n\tvariant?: ChartLegendVariant\n} & RechartsPrimitive.DefaultLegendContentProps) {\n\tconst { config } = useChart()\n\n\tif (!payload?.length) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-4 select-none\",\n\t\t\t\talign === \"left\" && \"justify-start\",\n\t\t\t\talign === \"center\" && \"justify-center\",\n\t\t\t\talign === \"right\" && \"justify-end\",\n\t\t\t\tverticalAlign === \"top\" ? \"pb-4\" : \"pt-4\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{payload\n\t\t\t\t.filter(item => item.type !== \"none\")\n\t\t\t\t.map(item => {\n\t\t\t\t\t// For pie charts, item.value contains the sector name (e.g., \"chrome\")\n\t\t\t\t\t// For radial charts, the name is in item.payload[nameKey]\n\t\t\t\t\t// For other charts, item.dataKey contains the series name (e.g., \"desktop\")\n\t\t\t\t\tconst payloadName =\n\t\t\t\t\t\tnameKey && item.payload\n\t\t\t\t\t\t\t? (item.payload as Record<string, unknown>)[nameKey]\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\tconst key = `${payloadName ?? item.value ?? item.dataKey ?? \"value\"}`\n\t\t\t\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key)\n\t\t\t\t\tconst isSelected = selected === null || selected === key\n\n\t\t\t\t\t// Get colors count for this item to determine gradient vs solid\n\t\t\t\t\tconst colorsCount = itemConfig ? getColorsCount(itemConfig) : 1\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"[&>svg]:text-bruv-secondary flex items-center gap-1.5 transition-opacity [&>svg]:h-3 [&>svg]:w-3\",\n\t\t\t\t\t\t\t\t!isSelected && \"opacity-30\",\n\t\t\t\t\t\t\t\tisClickable && \"cursor-pointer\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tif (!isClickable) return\n\n\t\t\t\t\t\t\t\tonSelectChange?.(selected === key ? null : key)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{itemConfig?.icon && !hideIcon ? (\n\t\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<LegendIndicator\n\t\t\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\t\t\tdataKey={key}\n\t\t\t\t\t\t\t\t\tcolorsCount={colorsCount}\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{itemConfig?.label}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t</div>\n\t)\n}\n\n// ---------------------------------------------------------------------------\n// Legend indicator — each variant gets its own branch so future variants\n// can diverge freely in markup & style.\n// ---------------------------------------------------------------------------\n\nfunction LegendIndicator({\n\tvariant,\n\tdataKey,\n\tcolorsCount,\n}: {\n\tvariant: ChartLegendVariant\n\tdataKey: string\n\tcolorsCount: number\n}) {\n\tconst fillStyle = getLegendFillStyle(dataKey, colorsCount)\n\tconst outlineStyle = getLegendOutlineStyle(dataKey, colorsCount)\n\n\tswitch (variant) {\n\t\tcase \"square\":\n\t\t\treturn <div className=\"h-2 w-2 shrink-0\" style={fillStyle} />\n\n\t\tcase \"circle\":\n\t\t\treturn <div className=\"h-2 w-2 shrink-0 rounded-full\" style={fillStyle} />\n\n\t\tcase \"circle-outline\":\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"h-2.5 w-2.5 shrink-0 rounded-full p-[1.5px]\"\n\t\t\t\t\tstyle={outlineStyle}\n\t\t\t\t/>\n\t\t\t)\n\n\t\tcase \"vertical-bar\":\n\t\t\treturn (\n\t\t\t\t<div className=\"h-3 w-1 shrink-0 rounded-[2px]\" style={fillStyle} />\n\t\t\t)\n\n\t\tcase \"horizontal-bar\":\n\t\t\treturn (\n\t\t\t\t<div className=\"h-1 w-3 shrink-0 rounded-[2px]\" style={fillStyle} />\n\t\t\t)\n\n\t\tcase \"rounded-square-outline\":\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"h-2.5 w-2.5 shrink-0 rounded-[3px] p-[1.5px]\"\n\t\t\t\t\tstyle={outlineStyle}\n\t\t\t\t/>\n\t\t\t)\n\n\t\tcase \"rounded-square\":\n\t\tdefault:\n\t\t\treturn (\n\t\t\t\t<div className=\"h-2 w-2 shrink-0 rounded-[2px]\" style={fillStyle} />\n\t\t\t)\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Style helpers\n// ---------------------------------------------------------------------------\n\n/** Solid fill / gradient background for filled variants. */\nfunction getLegendFillStyle(\n\tdataKey: string,\n\tcolorsCount: number,\n): React.CSSProperties {\n\tif (colorsCount <= 1) {\n\t\treturn { backgroundColor: `var(--color-${dataKey}-0)` }\n\t}\n\n\tconst stops = Array.from({ length: colorsCount }, (_, i) => {\n\t\tconst offset = (i / (colorsCount - 1)) * 100\n\t\treturn `var(--color-${dataKey}-${i}) ${offset}%`\n\t}).join(\", \")\n\n\treturn { background: `linear-gradient(to right, ${stops})` }\n}\n\n/**\n * Outline style for stroke variants.\n * Uses background + mask-composite to punch out the center, leaving only the\n * \"border\" visible. Works with both solid colors and gradients, and respects\n * border-radius — unlike plain `border-color`.\n */\nfunction getLegendOutlineStyle(\n\tdataKey: string,\n\tcolorsCount: number,\n): React.CSSProperties {\n\tconst maskStyle: React.CSSProperties = {\n\t\tWebkitMask:\n\t\t\t\"linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)\",\n\t\tWebkitMaskComposite: \"xor\",\n\t\tmask: \"linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)\",\n\t\tmaskComposite: \"exclude\",\n\t}\n\n\tif (colorsCount <= 1) {\n\t\treturn {\n\t\t\tbackgroundColor: `var(--color-${dataKey}-0)`,\n\t\t\t...maskStyle,\n\t\t}\n\t}\n\n\tconst stops = Array.from({ length: colorsCount }, (_, i) => {\n\t\tconst offset = (i / (colorsCount - 1)) * 100\n\t\treturn `var(--color-${dataKey}-${i}) ${offset}%`\n\t}).join(\", \")\n\n\treturn {\n\t\tbackground: `linear-gradient(to right, ${stops})`,\n\t\t...maskStyle,\n\t}\n}\n\nconst ChartLegend = RechartsPrimitive.Legend\n\nexport { ChartLegend, ChartLegendContent, type ChartLegendVariant }\n","import { ZIndexLayer } from \"recharts\"\nimport { useId } from \"react\"\n\n// ── Background Variant Types ─────────────────────────────────────────────────\n// To add a new variant:\n// 1. Add its name to the BackgroundVariant union type below\n// 2. Create a pattern component with PatternProps\n// 3. Register it in PATTERN_MAP\n\nexport type BackgroundVariant =\n\t| \"dots\"\n\t| \"grid\"\n\t| \"cross-hatch\"\n\t| \"diagonal-lines\"\n\t| \"plus\"\n\t| \"falling-triangles\"\n\t| \"4-pointed-star\"\n\t| \"tiny-checkers\"\n\t| \"overlapping-circles\"\n\t| \"wiggle-lines\"\n\t| \"bubbles\"\n\n// ── Pattern Components ───────────────────────────────────────────────────────\n\ntype PatternProps = { id: string }\n\nconst DotsPattern = ({ id }: PatternProps) => (\n\t<pattern\n\t\tid={id}\n\t\tx=\"0\"\n\t\ty=\"0\"\n\t\twidth=\"20\"\n\t\theight=\"20\"\n\t\tpatternUnits=\"userSpaceOnUse\"\n\t>\n\t\t<circle\n\t\t\tclassName=\"text-bruv-chart-grid text-bruv-chart-grid\"\n\t\t\tcx=\"2\"\n\t\t\tcy=\"2\"\n\t\t\tr=\"1\"\n\t\t\tfill=\"currentColor\"\n\t\t/>\n\t</pattern>\n)\n\nconst GridPattern = ({ id }: PatternProps) => (\n\t<pattern\n\t\tid={id}\n\t\tx=\"0\"\n\t\ty=\"0\"\n\t\twidth=\"20\"\n\t\theight=\"20\"\n\t\tpatternUnits=\"userSpaceOnUse\"\n\t>\n\t\t<path\n\t\t\tclassName=\"text-bruv-chart-grid text-bruv-chart-grid\"\n\t\t\td=\"M 20 0 L 0 0 0 20\"\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth=\"0.5\"\n\t\t/>\n\t</pattern>\n)\n\nconst CrossHatchPattern = ({ id }: PatternProps) => (\n\t<pattern\n\t\tid={id}\n\t\tx=\"0\"\n\t\ty=\"0\"\n\t\twidth=\"20\"\n\t\theight=\"20\"\n\t\tpatternUnits=\"userSpaceOnUse\"\n\t>\n\t\t<path\n\t\t\tclassName=\"text-bruv-chart-grid/60 text-bruv-chart-grid/50\"\n\t\t\td=\"M 0 0 L 20 20 M 20 0 L 0 20\"\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth=\"0.5\"\n\t\t/>\n\t</pattern>\n)\n\nconst DiagonalLinesPattern = ({ id }: PatternProps) => (\n\t<pattern\n\t\tid={id}\n\t\tx=\"0\"\n\t\ty=\"0\"\n\t\twidth=\"6\"\n\t\theight=\"6\"\n\t\tpatternUnits=\"userSpaceOnUse\"\n\t\tpatternTransform=\"rotate(45)\"\n\t>\n\t\t<line\n\t\t\tclassName=\"text-bruv-chart-grid text-bruv-chart-grid\"\n\t\t\tx1=\"0\"\n\t\t\ty1=\"0\"\n\t\t\tx2=\"0\"\n\t\t\ty2=\"6\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth=\"0.5\"\n\t\t/>\n\t</pattern>\n)\n\nconst PlusPattern = ({ id }: PatternProps) => (\n\t<pattern\n\t\tid={id}\n\t\tx=\"0\"\n\t\ty=\"0\"\n\t\twidth=\"16\"\n\t\theight=\"16\"\n\t\tpatternUnits=\"userSpaceOnUse\"\n\t>\n\t\t<path\n\t\t\tclassName=\"text-bruv-chart-grid text-bruv-chart-grid\"\n\t\t\td=\"M 8 4 L 8 12 M 4 8 L 12 8\"\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth=\"0.5\"\n\t\t\tstrokeLinecap=\"round\"\n\t\t/>\n\t</pattern>\n)\n\nconst FallingTrianglesPattern = ({ id }: PatternProps) => (\n\t<pattern\n\t\tid={id}\n\t\tx=\"0\"\n\t\ty=\"0\"\n\t\twidth=\"18\"\n\t\theight=\"36\"\n\t\tpatternUnits=\"userSpaceOnUse\"\n\t>\n\t\t<path\n\t\t\tclassName=\"text-bruv-chart-grid text-bruv-chart-grid\"\n\t\t\td=\"M2 6h12L8 18 2 6zm18 36h12l-6 12-6-12z\"\n\t\t\ttransform=\"scale(0.5)\"\n\t\t\tfill=\"currentColor\"\n\t\t\tfillOpacity=\"0.4\"\n\t\t/>\n\t</pattern>\n)\n\nconst FourPointedStarPattern = ({ id }: PatternProps) => (\n\t<pattern\n\t\tid={id}\n\t\tx=\"0\"\n\t\ty=\"0\"\n\t\twidth=\"16\"\n\t\theight=\"16\"\n\t\tpatternUnits=\"userSpaceOnUse\"\n\t>\n\t\t<polygon\n\t\t\tclassName=\"text-bruv-chart-grid text-bruv-chart-grid\"\n\t\t\tfillRule=\"evenodd\"\n\t\t\tpoints=\"5 3 8 4 5 5 4 8 3 5 0 4 3 3 4 0 5 3\"\n\t\t\tfill=\"currentColor\"\n\t\t\tfillOpacity=\"0.4\"\n\t\t/>\n\t</pattern>\n)\n\nconst TinyCheckersPattern = ({ id }: PatternProps) => (\n\t<pattern\n\t\tid={id}\n\t\tx=\"0\"\n\t\ty=\"0\"\n\t\twidth=\"8\"\n\t\theight=\"8\"\n\t\tpatternUnits=\"userSpaceOnUse\"\n\t>\n\t\t<path\n\t\t\tclassName=\"text-bruv-chart-grid text-bruv-chart-grid\"\n\t\t\tfillRule=\"evenodd\"\n\t\t\td=\"M0 0h4v4H0V0zm4 4h4v4H4V4z\"\n\t\t\tfill=\"currentColor\"\n\t\t\tfillOpacity=\"0.2\"\n\t\t/>\n\t</pattern>\n)\n\nconst OverlappingCirclesPattern = ({ id }: PatternProps) => (\n\t<pattern\n\t\tid={id}\n\t\tx=\"0\"\n\t\ty=\"0\"\n\t\twidth=\"40\"\n\t\theight=\"40\"\n\t\tpatternUnits=\"userSpaceOnUse\"\n\t>\n\t\t<path\n\t\t\tclassName=\"text-bruv-chart-grid text-bruv-chart-grid\"\n\t\t\tfillRule=\"evenodd\"\n\t\t\td=\"M25 25c0-2.762 2.238-5 5-5s5 2.238 5 5-2.238 5-5 5c0 2.762-2.238 5-5 5s-5-2.238-5-5 2.238-5 5-5zM5 5c0-2.762 2.238-5 5-5s5 2.238 5 5-2.238 5-5 5c0 2.762-2.238 5-5 5S0 12.762 0 10s2.238-5 5-5zm5 4c2.209 0 4-1.791 4-4s-1.791-4-4-4-4 1.791-4 4 1.791 4 4 4zm20 20c2.209 0 4-1.791 4-4s-1.791-4-4-4-4 1.791-4 4 1.791 4 4 4z\"\n\t\t\tfill=\"currentColor\"\n\t\t\tfillOpacity=\"0.4\"\n\t\t/>\n\t</pattern>\n)\n\nconst WiggleLinesPattern = ({ id }: PatternProps) => (\n\t<pattern\n\t\tid={id}\n\t\tx=\"0\"\n\t\ty=\"0\"\n\t\twidth=\"52\"\n\t\theight=\"26\"\n\t\tpatternUnits=\"userSpaceOnUse\"\n\t\tpatternTransform=\"scale(0.6)\"\n\t>\n\t\t<path\n\t\t\tclassName=\"text-bruv-chart-grid text-bruv-chart-grid\"\n\t\t\td=\"M10 10c0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6h2c0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4v2c-3.314 0-6-2.686-6-6 0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6zm25.464-1.95l8.486 8.486-1.414 1.414-8.486-8.486 1.414-1.414z\"\n\t\t\tfill=\"currentColor\"\n\t\t\tfillOpacity=\"0.4\"\n\t\t/>\n\t</pattern>\n)\n\nconst BubblesPattern = ({ id }: PatternProps) => (\n\t<pattern\n\t\tid={id}\n\t\tx=\"0\"\n\t\ty=\"0\"\n\t\twidth=\"100\"\n\t\theight=\"100\"\n\t\tpatternUnits=\"userSpaceOnUse\"\n\t\tpatternTransform=\"scale(0.6667)\"\n\t>\n\t\t<path\n\t\t\tclassName=\"text-bruv-chart-grid text-bruv-chart-grid\"\n\t\t\td=\"M11 18c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm48 25c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm-43-7c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm63 31c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM34 90c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm56-76c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM12 86c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm28-65c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm23-11c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-6 60c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm29 22c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zM32 63c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm57-13c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-9-21c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM60 91c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM35 41c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM12 60c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2z\"\n\t\t\tfill=\"currentColor\"\n\t\t\tfillOpacity=\"0.4\"\n\t\t\tfillRule=\"evenodd\"\n\t\t/>\n\t</pattern>\n)\n\n// ── Pattern Registry ─────────────────────────────────────────────────────────\n// Map variant names to pattern components\n\nconst PATTERN_MAP: Record<BackgroundVariant, React.FC<PatternProps>> = {\n\tdots: DotsPattern,\n\tgrid: GridPattern,\n\tplus: PlusPattern,\n\tbubbles: BubblesPattern,\n\t\"cross-hatch\": CrossHatchPattern,\n\t\"diagonal-lines\": DiagonalLinesPattern,\n\t\"falling-triangles\": FallingTrianglesPattern,\n\t\"4-pointed-star\": FourPointedStarPattern,\n\t\"tiny-checkers\": TinyCheckersPattern,\n\t\"overlapping-circles\": OverlappingCirclesPattern,\n\t\"wiggle-lines\": WiggleLinesPattern,\n}\n\n// ── Main Component ───────────────────────────────────────────────────────────\n// Usage: Place <ChartBackground variant=\"dots\" /> inside any Recharts chart component.\n// ZIndexLayer with zIndex={-1} ensures the background renders behind all chart content.\n\ninterface ChartBackgroundProps {\n\tvariant: BackgroundVariant\n}\n\nexport function ChartBackground({ variant }: ChartBackgroundProps) {\n\tconst baseId = useId().replace(/:/g, \"\")\n\tconst patternId = `${baseId}-bg-${variant}`\n\tconst maskId = `${baseId}-bg-edge-fade`\n\tconst filterId = `${baseId}-bg-blur`\n\tconst PatternComponent = PATTERN_MAP[variant]\n\n\treturn (\n\t\t<ZIndexLayer zIndex={-1}>\n\t\t\t<defs>\n\t\t\t\t<PatternComponent id={patternId} />\n\t\t\t\t{/* Gaussian blur filter for soft edge fade */}\n\t\t\t\t<filter id={filterId}>\n\t\t\t\t\t<feGaussianBlur stdDeviation=\"25\" />\n\t\t\t\t</filter>\n\t\t\t\t{/* Mask: a slightly inset white rect with blur creates smooth transparent edges */}\n\t\t\t\t<mask id={maskId} maskUnits=\"userSpaceOnUse\">\n\t\t\t\t\t<rect\n\t\t\t\t\t\tx=\"8%\"\n\t\t\t\t\t\ty=\"20%\"\n\t\t\t\t\t\twidth=\"85%\"\n\t\t\t\t\t\theight=\"60%\"\n\t\t\t\t\t\tfill=\"white\"\n\t\t\t\t\t\tfilter={`url(#${filterId})`}\n\t\t\t\t\t/>\n\t\t\t\t</mask>\n\t\t\t</defs>\n\t\t\t<rect\n\t\t\t\twidth=\"100%\"\n\t\t\t\theight=\"100%\"\n\t\t\t\tfill={`url(#${patternId})`}\n\t\t\t\tmask={`url(#${maskId})`}\n\t\t\t/>\n\t\t</ZIndexLayer>\n\t)\n}\n","import {\n\ttype ChartConfig,\n\tChart,\n\tgetColorsCount,\n\tgetLoadingData,\n\tLoadingIndicator,\n} from \"./chart\"\nimport { Brush, useBrush, type BrushRange } from \"./chart-brush\"\nimport {\n\tChartTooltip,\n\tChartTooltipContent,\n\ttype TooltipRoundness,\n\ttype TooltipVariant,\n} from \"./chart-tooltip\"\nimport {\n\tChartLegend,\n\tChartLegendContent,\n\ttype ChartLegendVariant,\n} from \"./chart-legend\"\nimport { ChartBackground, type BackgroundVariant } from \"./chart-background\"\nimport {\n\tcreateContext,\n\tuse,\n\tuseCallback,\n\tuseId,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype ComponentProps,\n\ttype ReactNode,\n} from \"react\"\nimport {\n\tBar as RechartsBar,\n\tBarChart as RechartsBarChart,\n\tCartesianGrid,\n\tRectangle,\n\tReferenceLine,\n\tXAxis as RechartsXAxis,\n\tYAxis as RechartsYAxis,\n} from \"recharts\"\nimport type { RectRadius } from \"recharts/types/shape/Rectangle\"\nimport { motion, useReducedMotion } from \"motion/react\"\n\nconst DEFAULT_BAR_RADIUS = 2\nconst LOADING_BAR_DATA_KEY = \"loading\"\nconst LOADING_ANIMATION_DURATION = 2000\nconst STACK_ID = \"evil-stacked\"\nconst BAR_GROW_DURATION = 0.5\nconst BAR_STAGGER = 0.05\nconst REVEAL_EASE: [number, number, number, number] = [0, 0.7, 0.5, 1]\n\ntype BarVariant =\n\t| \"default\"\n\t| \"duotone\"\n\t| \"duotone-reverse\"\n\t| \"gradient\"\n\t| \"stripped\"\ntype StackType = \"default\" | \"stacked\" | \"percent\"\ntype BarLayout = \"vertical\" | \"horizontal\"\n\ntype BarAnimationType =\n\t| \"none\"\n\t| \"left-to-right\"\n\t| \"right-to-left\"\n\t| \"center-out\"\n\t| \"edges-in\"\n\ntype BarChartContextValue = {\n\tconfig: ChartConfig\n\tisStacked: boolean\n\tisHorizontal: boolean\n\tisLoading: boolean\n\tbarRadius: number\n\tanimationType: BarAnimationType\n\tintroStartedAt: number\n\tdataLength: number\n\tselectedDataKey: string | null\n\tselectDataKey: (dataKey: string | null) => void\n\tisMouseInChart: boolean\n}\n\nconst BarChartContext = createContext<BarChartContextValue | null>(null)\n\nfunction useBarChart() {\n\tconst context = use(BarChartContext)\n\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"Bar chart parts (<Bar />, <XAxis />, …) must be used within <BarChart />\",\n\t\t)\n\t}\n\n\treturn context\n}\n\ntype ValidateConfigKeys<TData, TConfig> = {\n\t[K in keyof TConfig]: K extends keyof TData ? ChartConfig[string] : never\n}\n\ntype BarChartBaseProps<\n\tTData extends Record<string, unknown>,\n\tTConfig extends Record<string, ChartConfig[string]>,\n> = {\n\tconfig: TConfig & ValidateConfigKeys<TData, TConfig>\n\tdata: TData[]\n\tchildren: ReactNode\n\tclassName?: string\n\tchartProps?: ComponentProps<typeof RechartsBarChart>\n\tstackType?: StackType\n\tlayout?: BarLayout\n\tbarRadius?: number\n\tanimationType?: BarAnimationType\n\tbarGap?: number\n\tbarCategoryGap?: number\n\tbackgroundVariant?: BackgroundVariant\n\tdefaultSelectedDataKey?: string | null\n\tonSelectionChange?: (selectedDataKey: string | null) => void\n\tisLoading?: boolean\n\tloadingBars?: number\n\tshowBrush?: boolean\n\txDataKey?: keyof TData & string\n\tbrushHeight?: number\n\tbrushFormatLabel?: (value: unknown, index: number) => string\n\tonBrushChange?: (range: BrushRange) => void\n}\n\ntype BarChartProps<\n\tTData extends Record<string, unknown>,\n\tTConfig extends Record<string, ChartConfig[string]>,\n> = BarChartBaseProps<TData, TConfig>\n\nexport type { BarChartProps }\n\nexport function BarChart<\n\tTData extends Record<string, unknown>,\n\tTConfig extends Record<string, ChartConfig[string]>,\n>({\n\tconfig,\n\tdata,\n\tchildren,\n\tclassName,\n\tchartProps,\n\tstackType = \"default\",\n\tlayout = \"vertical\",\n\tbarRadius = DEFAULT_BAR_RADIUS,\n\tanimationType = \"left-to-right\",\n\tbarGap,\n\tbarCategoryGap,\n\tbackgroundVariant,\n\tdefaultSelectedDataKey = null,\n\tonSelectionChange,\n\tisLoading = false,\n\tloadingBars,\n\tshowBrush = false,\n\txDataKey,\n\tbrushHeight,\n\tbrushFormatLabel,\n\tonBrushChange,\n}: BarChartProps<TData, TConfig>) {\n\tconst chartId = useId().replace(/:/g, \"\")\n\n\tconst [introStartedAt] = useState(() => Date.now())\n\tconst [selectedDataKey, setSelectedDataKey] = useState<string | null>(\n\t\tdefaultSelectedDataKey,\n\t)\n\tconst [isMouseInChart, setIsMouseInChart] = useState(false)\n\tconst { loadingData, onShimmerExit } = useLoadingData(isLoading, loadingBars)\n\tconst { visibleData, brushProps } = useBrush({ data })\n\n\tconst isStacked = stackType === \"stacked\" || stackType === \"percent\"\n\tconst isHorizontal = layout === \"horizontal\"\n\tconst displayData = showBrush && !isLoading ? visibleData : data\n\n\tconst selectDataKey = useCallback(\n\t\t(newSelectedDataKey: string | null) => {\n\t\t\tsetSelectedDataKey(newSelectedDataKey)\n\t\t\tonSelectionChange?.(newSelectedDataKey)\n\t\t},\n\t\t[onSelectionChange],\n\t)\n\n\tconst contextValue = useMemo<BarChartContextValue>(\n\t\t() => ({\n\t\t\tconfig,\n\t\t\tisStacked,\n\t\t\tisHorizontal,\n\t\t\tisLoading,\n\t\t\tbarRadius,\n\t\t\tanimationType,\n\t\t\tintroStartedAt,\n\t\t\tdataLength: displayData.length,\n\t\t\tselectedDataKey,\n\t\t\tselectDataKey,\n\t\t\tisMouseInChart,\n\t\t}),\n\t\t[\n\t\t\tconfig,\n\t\t\tisStacked,\n\t\t\tisHorizontal,\n\t\t\tisLoading,\n\t\t\tbarRadius,\n\t\t\tanimationType,\n\t\t\tintroStartedAt,\n\t\t\tdisplayData.length,\n\t\t\tselectedDataKey,\n\t\t\tselectDataKey,\n\t\t\tisMouseInChart,\n\t\t],\n\t)\n\n\treturn (\n\t\t<BarChartContext value={contextValue}>\n\t\t\t<Chart\n\t\t\t\tclassName={className}\n\t\t\t\tconfig={config}\n\t\t\t\tfooter={\n\t\t\t\t\tshowBrush &&\n\t\t\t\t\t!isLoading && (\n\t\t\t\t\t\t<Brush\n\t\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\t\tchartConfig={config}\n\t\t\t\t\t\t\txDataKey={xDataKey}\n\t\t\t\t\t\t\tvariant=\"bar\"\n\t\t\t\t\t\t\tbarRadius={barRadius}\n\t\t\t\t\t\t\theight={brushHeight}\n\t\t\t\t\t\t\tformatLabel={brushFormatLabel}\n\t\t\t\t\t\t\tstacked={isStacked}\n\t\t\t\t\t\t\tskipStyle\n\t\t\t\t\t\t\tclassName=\"mt-1\"\n\t\t\t\t\t\t\t{...brushProps}\n\t\t\t\t\t\t\tonChange={range => {\n\t\t\t\t\t\t\t\tbrushProps.onChange(range)\n\t\t\t\t\t\t\t\tonBrushChange?.(range)\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\t>\n\t\t\t\t<LoadingIndicator isLoading={isLoading} />\n\t\t\t\t<RechartsBarChart\n\t\t\t\t\tid={chartId}\n\t\t\t\t\taccessibilityLayer\n\t\t\t\t\tlayout={isHorizontal ? \"vertical\" : \"horizontal\"}\n\t\t\t\t\tdata={isLoading ? loadingData : displayData}\n\t\t\t\t\tbarGap={barGap}\n\t\t\t\t\tbarCategoryGap={barCategoryGap}\n\t\t\t\t\tstackOffset={stackType === \"percent\" ? \"expand\" : undefined}\n\t\t\t\t\tonMouseEnter={() => setIsMouseInChart(true)}\n\t\t\t\t\tonMouseLeave={() => setIsMouseInChart(false)}\n\t\t\t\t\t{...chartProps}\n\t\t\t\t>\n\t\t\t\t\t{backgroundVariant && <ChartBackground variant={backgroundVariant} />}\n\t\t\t\t\t<ReferenceLine color=\"white\" />\n\t\t\t\t\t{children}\n\t\t\t\t\t{isLoading && (\n\t\t\t\t\t\t<LoadingBar chartId={chartId} onShimmerExit={onShimmerExit} />\n\t\t\t\t\t)}\n\t\t\t\t</RechartsBarChart>\n\t\t\t</Chart>\n\t\t</BarChartContext>\n\t)\n}\n\ntype BarProps = {\n\tdataKey: string\n\tvariant?: BarVariant\n\tradius?: number\n\tanimationType?: BarAnimationType\n\tisClickable?: boolean\n\tenableHoverHighlight?: boolean\n\tbufferBar?: boolean\n\tbarProps?: ComponentProps<typeof RechartsBar>\n}\n\nexport function Bar({\n\tdataKey,\n\tvariant = \"default\",\n\tradius,\n\tanimationType,\n\tisClickable = false,\n\tenableHoverHighlight = false,\n\tbufferBar = false,\n\tbarProps,\n}: BarProps) {\n\tconst {\n\t\tconfig,\n\t\tisStacked,\n\t\tisHorizontal,\n\t\tisLoading,\n\t\tbarRadius: defaultRadius,\n\t\tanimationType: defaultAnimation,\n\t\tintroStartedAt,\n\t\tdataLength,\n\t\tselectedDataKey,\n\t\tselectDataKey,\n\t\tisMouseInChart,\n\t} = useBarChart()\n\tconst id = useId().replace(/:/g, \"\")\n\n\tconst shouldReduceMotion = useReducedMotion()\n\n\tif (isLoading) return null\n\n\tconst resolvedRadius = radius ?? defaultRadius\n\tconst isSelected = selectedDataKey === dataKey\n\n\tconst revealType: BarAnimationType = shouldReduceMotion\n\t\t? \"none\"\n\t\t: (animationType ?? defaultAnimation)\n\n\tconst customBarProps = {\n\t\tid,\n\t\tdataKey,\n\t\tvariant,\n\t\tbarRadius: resolvedRadius,\n\t\tbufferBar,\n\t\tisClickable,\n\t\tenableHoverHighlight,\n\t\tisMouseInChart,\n\t\tisHorizontal,\n\t\tintroStartedAt,\n\t\tselectedDataKey,\n\t\tdataLength,\n\t\tonClick: () => {\n\t\t\tif (!isClickable) return\n\n\t\t\tselectDataKey(isSelected ? null : dataKey)\n\t\t},\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<RechartsBar\n\t\t\t\tdataKey={dataKey}\n\t\t\t\tstackId={isStacked ? STACK_ID : undefined}\n\t\t\t\tfill={`url(#${id}-colors-${dataKey})`}\n\t\t\t\tradius={resolvedRadius}\n\t\t\t\tisAnimationActive={false}\n\t\t\t\tstyle={\n\t\t\t\t\tisClickable || enableHoverHighlight\n\t\t\t\t\t\t? { cursor: \"pointer\" }\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\tshape={(props: unknown) => (\n\t\t\t\t\t<CustomBar\n\t\t\t\t\t\t{...(props as BarShapeProps)}\n\t\t\t\t\t\t{...customBarProps}\n\t\t\t\t\t\tanimationType={revealType}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\tactiveBar={(props: unknown) => (\n\t\t\t\t\t<CustomBar\n\t\t\t\t\t\t{...(props as BarShapeProps)}\n\t\t\t\t\t\t{...customBarProps}\n\t\t\t\t\t\tanimationType=\"none\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t{...barProps}\n\t\t\t/>\n\t\t\t<defs>\n\t\t\t\t<ColorGradient id={id} dataKey={dataKey} config={config} />\n\t\t\t\t{variant === \"duotone\" && (\n\t\t\t\t\t<DuotonePattern id={id} dataKey={dataKey} config={config} />\n\t\t\t\t)}\n\t\t\t\t{variant === \"duotone-reverse\" && (\n\t\t\t\t\t<DuotoneReversePattern id={id} dataKey={dataKey} config={config} />\n\t\t\t\t)}\n\t\t\t\t{variant === \"gradient\" && (\n\t\t\t\t\t<GradientPattern id={id} dataKey={dataKey} />\n\t\t\t\t)}\n\t\t\t\t{variant === \"stripped\" && (\n\t\t\t\t\t<StrippedPattern id={id} dataKey={dataKey} />\n\t\t\t\t)}\n\t\t\t</defs>\n\t\t</>\n\t)\n}\n\ntype XAxisProps = ComponentProps<typeof RechartsXAxis>\n\nexport function XAxis({\n\ttickLine = false,\n\taxisLine = false,\n\ttickMargin = 8,\n\tminTickGap = 8,\n\ttype,\n\t...props\n}: XAxisProps) {\n\tconst { isLoading, isHorizontal } = useBarChart()\n\n\tif (isLoading) return null\n\n\treturn (\n\t\t<RechartsXAxis\n\t\t\ttickLine={tickLine}\n\t\t\taxisLine={axisLine}\n\t\t\ttickMargin={tickMargin}\n\t\t\tminTickGap={minTickGap}\n\t\t\ttype={type ?? (isHorizontal ? \"number\" : \"category\")}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\ntype YAxisProps = ComponentProps<typeof RechartsYAxis>\n\nexport function YAxis({\n\ttickLine = false,\n\taxisLine = false,\n\ttickMargin = 8,\n\tminTickGap = 8,\n\twidth = \"auto\",\n\ttype,\n\t...props\n}: YAxisProps) {\n\tconst { isLoading, isHorizontal } = useBarChart()\n\n\tif (isLoading) return null\n\n\treturn (\n\t\t<RechartsYAxis\n\t\t\ttickLine={tickLine}\n\t\t\taxisLine={axisLine}\n\t\t\ttickMargin={tickMargin}\n\t\t\tminTickGap={minTickGap}\n\t\t\twidth={width}\n\t\t\ttype={type ?? (isHorizontal ? \"category\" : \"number\")}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\ntype GridProps = ComponentProps<typeof CartesianGrid>\n\nexport function Grid({\n\tstrokeDasharray = \"3 3\",\n\tvertical,\n\thorizontal,\n\t...props\n}: GridProps) {\n\tconst { isHorizontal } = useBarChart()\n\n\treturn (\n\t\t<CartesianGrid\n\t\t\tstrokeDasharray={strokeDasharray}\n\t\t\tvertical={vertical ?? isHorizontal}\n\t\t\thorizontal={horizontal ?? !isHorizontal}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\ntype TooltipProps = {\n\tvariant?: TooltipVariant\n\troundness?: TooltipRoundness\n\tdefaultIndex?: number\n}\n\nexport function Tooltip({ variant, roundness, defaultIndex }: TooltipProps) {\n\tconst { isLoading, selectedDataKey } = useBarChart()\n\n\tif (isLoading) return null\n\n\treturn (\n\t\t<ChartTooltip\n\t\t\tcursor={false}\n\t\t\tdefaultIndex={defaultIndex}\n\t\t\tcontent={\n\t\t\t\t<ChartTooltipContent\n\t\t\t\t\tselected={selectedDataKey}\n\t\t\t\t\troundness={roundness}\n\t\t\t\t\tvariant={variant}\n\t\t\t\t/>\n\t\t\t}\n\t\t/>\n\t)\n}\n\ntype LegendProps = {\n\tvariant?: ChartLegendVariant\n\talign?: \"left\" | \"center\" | \"right\"\n\tverticalAlign?: \"top\" | \"middle\" | \"bottom\"\n\tisClickable?: boolean\n}\n\nexport function Legend({\n\tvariant,\n\talign = \"right\",\n\tverticalAlign = \"top\",\n\tisClickable = false,\n}: LegendProps) {\n\tconst { selectedDataKey, selectDataKey } = useBarChart()\n\n\treturn (\n\t\t<ChartLegend\n\t\t\tverticalAlign={verticalAlign}\n\t\t\talign={align}\n\t\t\tcontent={\n\t\t\t\t<ChartLegendContent\n\t\t\t\t\tselected={selectedDataKey}\n\t\t\t\t\tonSelectChange={selectDataKey}\n\t\t\t\t\tisClickable={isClickable}\n\t\t\t\t\tvariant={variant}\n\t\t\t\t/>\n\t\t\t}\n\t\t/>\n\t)\n}\n\ntype BarShapeProps = {\n\tx?: number\n\ty?: number\n\twidth?: number\n\theight?: number\n\tfill?: string\n\tfillOpacity?: number\n\tdataKey?: string\n\tindex?: number\n\t[key: string]: unknown\n}\n\ntype CustomBarProps = {\n\tid: string\n\tdataKey: string\n\tvariant: BarVariant\n\tbarRadius: number\n\tbufferBar?: boolean\n\tisClickable?: boolean\n\tenableHoverHighlight?: boolean\n\tisMouseInChart?: boolean\n\tisHorizontal?: boolean\n\tanimationType?: BarAnimationType\n\tintroStartedAt?: number\n\tselectedDataKey?: string | null\n\tisActive?: boolean\n\tdataLength?: number\n\tonClick?: () => void\n} & BarShapeProps\n\nconst CustomBar = (props: CustomBarProps) => {\n\tconst {\n\t\tx = 0,\n\t\ty = 0,\n\t\twidth = 0,\n\t\theight = 0,\n\t\tid,\n\t\tdataKey,\n\t\tvariant,\n\t\tbarRadius,\n\t\tbufferBar,\n\t\tisClickable,\n\t\tenableHoverHighlight,\n\t\tisMouseInChart,\n\t\tisHorizontal = false,\n\t\tanimationType = \"none\",\n\t\tintroStartedAt = 0,\n\t\tselectedDataKey,\n\t\tisActive,\n\t\tdataLength = 0,\n\t\tonClick,\n\t} = props\n\n\tconst index = typeof props.index === \"number\" ? props.index : -1\n\tconst isLastBar = bufferBar && dataLength > 0 && index === dataLength - 1\n\tconst isStripped = variant === \"stripped\"\n\tconst grow = getBarGrowAnimation(\n\t\tanimationType,\n\t\tindex,\n\t\tdataLength,\n\t\tisHorizontal,\n\t\tintroStartedAt,\n\t)\n\n\tconst fill = getVariantFill(variant, id, dataKey)\n\n\tconst fillOpacity = getBarOpacity({\n\t\tisClickable,\n\t\tselectedDataKey,\n\t\tdataKey,\n\t\tenableHoverHighlight,\n\t\tisMouseInChart,\n\t\tisActive,\n\t})\n\tconst barFillOpacity = isLastBar ? fillOpacity * 0.35 : fillOpacity\n\tconst cursorStyle =\n\t\tisClickable || enableHoverHighlight ? { cursor: \"pointer\" } : undefined\n\n\tconst radius: RectRadius = isStripped\n\t\t? [barRadius, barRadius, 0, 0]\n\t\t: barRadius\n\n\tconst visibleBar = (\n\t\t<>\n\t\t\t<Rectangle\n\t\t\t\tx={x}\n\t\t\t\ty={y}\n\t\t\t\twidth={width}\n\t\t\t\topacity={barFillOpacity}\n\t\t\t\theight={Math.max(0, height - 3)}\n\t\t\t\tradius={radius}\n\t\t\t\tfill={fill}\n\t\t\t\tstroke={isLastBar ? `url(#${id}-colors-${dataKey})` : undefined}\n\t\t\t\tstrokeWidth={isLastBar ? 1 : undefined}\n\t\t\t\tstrokeDasharray={isLastBar ? \"4 4\" : undefined}\n\t\t\t\tstrokeOpacity={isLastBar ? 0.6 : undefined}\n\t\t\t/>\n\t\t\t{isStripped && (\n\t\t\t\t<Rectangle\n\t\t\t\t\tx={x}\n\t\t\t\t\ty={y - 4}\n\t\t\t\t\twidth={width}\n\t\t\t\t\theight={2}\n\t\t\t\t\tradius={1}\n\t\t\t\t\tfill={`url(#${id}-colors-${dataKey})`}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t)\n\n\treturn (\n\t\t<g style={cursorStyle} onClick={onClick}>\n\t\t\t<Rectangle {...props} fill=\"transparent\" />\n\t\t\t{grow ? (\n\t\t\t\t<motion.g\n\t\t\t\t\tinitial={grow.initial}\n\t\t\t\t\tanimate={grow.animate}\n\t\t\t\t\ttransition={grow.transition}\n\t\t\t\t\tstyle={grow.style}\n\t\t\t\t>\n\t\t\t\t\t{visibleBar}\n\t\t\t\t</motion.g>\n\t\t\t) : (\n\t\t\t\tvisibleBar\n\t\t\t)}\n\t\t</g>\n\t)\n}\n\nconst getBarGrowAnimation = (\n\tanimationType: BarAnimationType,\n\tindex: number,\n\tdataLength: number,\n\tisHorizontal: boolean,\n\tintroStartedAt: number,\n) => {\n\tif (animationType === \"none\" || index < 0 || dataLength <= 0) return null\n\n\tconst lastIndex = dataLength - 1\n\tconst center = lastIndex / 2\n\n\tlet step: number\n\tswitch (animationType) {\n\t\tcase \"right-to-left\":\n\t\t\tstep = lastIndex - index\n\t\t\tbreak\n\t\tcase \"center-out\":\n\t\t\tstep = Math.abs(index - center)\n\t\t\tbreak\n\t\tcase \"edges-in\":\n\t\t\tstep = center - Math.abs(index - center)\n\t\t\tbreak\n\t\tdefault:\n\t\t\tstep = index\n\t}\n\n\tconst startMs = step * BAR_STAGGER * 1000\n\tconst durationMs = BAR_GROW_DURATION * 1000\n\tconst endMs = startMs + durationMs\n\tconst elapsed = Date.now() - introStartedAt\n\n\tif (elapsed >= endMs) return null\n\n\tconst from = elapsed <= startMs ? 0 : (elapsed - startMs) / durationMs\n\tconst transition = {\n\t\tduration: (endMs - Math.max(elapsed, startMs)) / 1000,\n\t\tease: REVEAL_EASE,\n\t\tdelay: Math.max(0, startMs - elapsed) / 1000,\n\t}\n\n\treturn isHorizontal\n\t\t? {\n\t\t\t\tinitial: { scaleX: from },\n\t\t\t\tanimate: { scaleX: 1 },\n\t\t\t\ttransition,\n\t\t\t\tstyle: { originX: 0 },\n\t\t\t}\n\t\t: {\n\t\t\t\tinitial: { scaleY: from },\n\t\t\t\tanimate: { scaleY: 1 },\n\t\t\t\ttransition,\n\t\t\t\tstyle: { originY: 1 },\n\t\t\t}\n}\n\nconst getVariantFill = (\n\tvariant: BarVariant,\n\tid: string,\n\tdataKey: string,\n): string => {\n\tswitch (variant) {\n\t\tcase \"duotone\":\n\t\t\treturn `url(#${id}-duotone-${dataKey})`\n\t\tcase \"duotone-reverse\":\n\t\t\treturn `url(#${id}-duotone-reverse-${dataKey})`\n\t\tcase \"gradient\":\n\t\t\treturn `url(#${id}-gradient-${dataKey})`\n\t\tcase \"stripped\":\n\t\t\treturn `url(#${id}-stripped-${dataKey})`\n\t\tdefault:\n\t\t\treturn `url(#${id}-colors-${dataKey})`\n\t}\n}\n\nconst getBarOpacity = ({\n\tisClickable,\n\tselectedDataKey,\n\tdataKey,\n\tenableHoverHighlight,\n\tisMouseInChart,\n\tisActive,\n}: {\n\tisClickable?: boolean\n\tselectedDataKey?: string | null\n\tdataKey: string\n\tenableHoverHighlight?: boolean\n\tisMouseInChart?: boolean\n\tisActive?: boolean\n}) => {\n\tconst isSelectedDataKey =\n\t\tselectedDataKey === null || selectedDataKey === dataKey\n\tconst clickOpacity =\n\t\tisClickable && selectedDataKey !== null ? (isSelectedDataKey ? 1 : 0.3) : 1\n\n\tif (enableHoverHighlight && isMouseInChart) {\n\t\treturn isActive ? clickOpacity : clickOpacity * 0.3\n\t}\n\n\treturn clickOpacity\n}\n\ntype StyleProps = {\n\tid: string\n\tdataKey: string\n}\n\nconst ColorGradient = ({\n\tid,\n\tdataKey,\n\tconfig,\n}: StyleProps & { config: ChartConfig }) => {\n\tconst colorsCount = getColorsCount(config[dataKey] ?? {})\n\n\treturn (\n\t\t<linearGradient id={`${id}-colors-${dataKey}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n\t\t\t{colorsCount === 1 ? (\n\t\t\t\t<>\n\t\t\t\t\t<stop offset=\"0%\" stopColor={`var(--color-${dataKey}-0)`} />\n\t\t\t\t\t<stop offset=\"100%\" stopColor={`var(--color-${dataKey}-0)`} />\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\tArray.from({ length: colorsCount }, (_, index) => {\n\t\t\t\t\tconst offset = `${(index / (colorsCount - 1)) * 100}%`\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\tkey={offset}\n\t\t\t\t\t\t\toffset={offset}\n\t\t\t\t\t\t\tstopColor={`var(--color-${dataKey}-${index}, var(--color-${dataKey}-0))`}\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</linearGradient>\n\t)\n}\n\nconst DuotonePattern = ({\n\tid,\n\tdataKey,\n\tconfig,\n}: StyleProps & { config: ChartConfig }) => {\n\tconst colorsCount = getColorsCount(config[dataKey] ?? {})\n\n\treturn (\n\t\t<>\n\t\t\t<linearGradient\n\t\t\t\tid={`${id}-duotone-mask-gradient-${dataKey}`}\n\t\t\t\tgradientUnits=\"objectBoundingBox\"\n\t\t\t\tx1=\"0\"\n\t\t\t\ty1=\"0\"\n\t\t\t\tx2=\"1\"\n\t\t\t\ty2=\"0\"\n\t\t\t>\n\t\t\t\t<stop offset=\"50%\" stopColor=\"white\" stopOpacity={0.4} />\n\t\t\t\t<stop offset=\"50%\" stopColor=\"white\" stopOpacity={1} />\n\t\t\t</linearGradient>\n\t\t\t<linearGradient\n\t\t\t\tid={`${id}-duotone-colors-${dataKey}`}\n\t\t\t\tgradientUnits=\"objectBoundingBox\"\n\t\t\t\tx1=\"0\"\n\t\t\t\ty1=\"0\"\n\t\t\t\tx2=\"0\"\n\t\t\t\ty2=\"1\"\n\t\t\t>\n\t\t\t\t{colorsCount === 1 ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<stop offset=\"0%\" stopColor={`var(--color-${dataKey}-0)`} />\n\t\t\t\t\t\t<stop offset=\"100%\" stopColor={`var(--color-${dataKey}-0)`} />\n\t\t\t\t\t</>\n\t\t\t\t) : (\n\t\t\t\t\tArray.from({ length: colorsCount }, (_, index) => {\n\t\t\t\t\t\tconst offset = `${(index / (colorsCount - 1)) * 100}%`\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\tkey={offset}\n\t\t\t\t\t\t\t\toffset={offset}\n\t\t\t\t\t\t\t\tstopColor={`var(--color-${dataKey}-${index}, var(--color-${dataKey}-0))`}\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\t</linearGradient>\n\t\t\t<mask\n\t\t\t\tid={`${id}-duotone-mask-${dataKey}`}\n\t\t\t\tmaskContentUnits=\"objectBoundingBox\"\n\t\t\t>\n\t\t\t\t<rect\n\t\t\t\t\tx=\"0\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t\twidth=\"1\"\n\t\t\t\t\theight=\"1\"\n\t\t\t\t\tfill={`url(#${id}-duotone-mask-gradient-${dataKey})`}\n\t\t\t\t/>\n\t\t\t</mask>\n\t\t\t<pattern\n\t\t\t\tid={`${id}-duotone-${dataKey}`}\n\t\t\t\tpatternUnits=\"objectBoundingBox\"\n\t\t\t\tpatternContentUnits=\"objectBoundingBox\"\n\t\t\t\twidth=\"1\"\n\t\t\t\theight=\"1\"\n\t\t\t>\n\t\t\t\t<rect\n\t\t\t\t\tx=\"0\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t\twidth=\"1\"\n\t\t\t\t\theight=\"1\"\n\t\t\t\t\tfill={`url(#${id}-duotone-colors-${dataKey})`}\n\t\t\t\t\tmask={`url(#${id}-duotone-mask-${dataKey})`}\n\t\t\t\t/>\n\t\t\t</pattern>\n\t\t</>\n\t)\n}\n\nconst DuotoneReversePattern = ({\n\tid,\n\tdataKey,\n\tconfig,\n}: StyleProps & { config: ChartConfig }) => {\n\tconst colorsCount = getColorsCount(config[dataKey] ?? {})\n\n\treturn (\n\t\t<>\n\t\t\t<linearGradient\n\t\t\t\tid={`${id}-duotone-reverse-mask-gradient-${dataKey}`}\n\t\t\t\tgradientUnits=\"objectBoundingBox\"\n\t\t\t\tx1=\"0\"\n\t\t\t\ty1=\"0\"\n\t\t\t\tx2=\"1\"\n\t\t\t\ty2=\"0\"\n\t\t\t>\n\t\t\t\t<stop offset=\"50%\" stopColor=\"white\" stopOpacity={1} />\n\t\t\t\t<stop offset=\"50%\" stopColor=\"white\" stopOpacity={0.4} />\n\t\t\t</linearGradient>\n\t\t\t<linearGradient\n\t\t\t\tid={`${id}-duotone-reverse-colors-${dataKey}`}\n\t\t\t\tgradientUnits=\"objectBoundingBox\"\n\t\t\t\tx1=\"0\"\n\t\t\t\ty1=\"0\"\n\t\t\t\tx2=\"0\"\n\t\t\t\ty2=\"1\"\n\t\t\t>\n\t\t\t\t{colorsCount === 1 ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<stop offset=\"0%\" stopColor={`var(--color-${dataKey}-0)`} />\n\t\t\t\t\t\t<stop offset=\"100%\" stopColor={`var(--color-${dataKey}-0)`} />\n\t\t\t\t\t</>\n\t\t\t\t) : (\n\t\t\t\t\tArray.from({ length: colorsCount }, (_, index) => {\n\t\t\t\t\t\tconst offset = `${(index / (colorsCount - 1)) * 100}%`\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\tkey={offset}\n\t\t\t\t\t\t\t\toffset={offset}\n\t\t\t\t\t\t\t\tstopColor={`var(--color-${dataKey}-${index}, var(--color-${dataKey}-0))`}\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\t</linearGradient>\n\t\t\t<mask\n\t\t\t\tid={`${id}-duotone-reverse-mask-${dataKey}`}\n\t\t\t\tmaskContentUnits=\"objectBoundingBox\"\n\t\t\t>\n\t\t\t\t<rect\n\t\t\t\t\tx=\"0\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t\twidth=\"1\"\n\t\t\t\t\theight=\"1\"\n\t\t\t\t\tfill={`url(#${id}-duotone-reverse-mask-gradient-${dataKey})`}\n\t\t\t\t/>\n\t\t\t</mask>\n\t\t\t<pattern\n\t\t\t\tid={`${id}-duotone-reverse-${dataKey}`}\n\t\t\t\tpatternUnits=\"objectBoundingBox\"\n\t\t\t\tpatternContentUnits=\"objectBoundingBox\"\n\t\t\t\twidth=\"1\"\n\t\t\t\theight=\"1\"\n\t\t\t>\n\t\t\t\t<rect\n\t\t\t\t\tx=\"0\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t\twidth=\"1\"\n\t\t\t\t\theight=\"1\"\n\t\t\t\t\tfill={`url(#${id}-duotone-reverse-colors-${dataKey})`}\n\t\t\t\t\tmask={`url(#${id}-duotone-reverse-mask-${dataKey})`}\n\t\t\t\t/>\n\t\t\t</pattern>\n\t\t</>\n\t)\n}\n\nconst GradientPattern = ({ id, dataKey }: StyleProps) => {\n\treturn (\n\t\t<>\n\t\t\t<linearGradient\n\t\t\t\tid={`${id}-gradient-mask-gradient`}\n\t\t\t\tx1=\"0\"\n\t\t\t\ty1=\"0\"\n\t\t\t\tx2=\"0\"\n\t\t\t\ty2=\"1\"\n\t\t\t>\n\t\t\t\t<stop offset=\"20%\" stopColor=\"white\" stopOpacity={1} />\n\t\t\t\t<stop offset=\"90%\" stopColor=\"white\" stopOpacity={0} />\n\t\t\t</linearGradient>\n\t\t\t<mask id={`${id}-gradient-mask-${dataKey}`}>\n\t\t\t\t<rect\n\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\theight=\"100%\"\n\t\t\t\t\tfill={`url(#${id}-gradient-mask-gradient)`}\n\t\t\t\t/>\n\t\t\t</mask>\n\t\t\t<pattern\n\t\t\t\tid={`${id}-gradient-${dataKey}`}\n\t\t\t\tpatternUnits=\"userSpaceOnUse\"\n\t\t\t\twidth=\"100%\"\n\t\t\t\theight=\"100%\"\n\t\t\t>\n\t\t\t\t<rect\n\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\theight=\"100%\"\n\t\t\t\t\tfill={`url(#${id}-colors-${dataKey})`}\n\t\t\t\t\tmask={`url(#${id}-gradient-mask-${dataKey})`}\n\t\t\t\t/>\n\t\t\t</pattern>\n\t\t</>\n\t)\n}\n\nconst StrippedPattern = ({ id, dataKey }: StyleProps) => {\n\treturn (\n\t\t<>\n\t\t\t<linearGradient\n\t\t\t\tid={`${id}-stripped-mask-gradient`}\n\t\t\t\tx1=\"0\"\n\t\t\t\ty1=\"0\"\n\t\t\t\tx2=\"0\"\n\t\t\t\ty2=\"1\"\n\t\t\t>\n\t\t\t\t<stop offset=\"0%\" stopColor=\"white\" stopOpacity={0.2} />\n\t\t\t\t<stop offset=\"100%\" stopColor=\"white\" stopOpacity={0.2} />\n\t\t\t</linearGradient>\n\t\t\t<mask id={`${id}-stripped-mask-${dataKey}`}>\n\t\t\t\t<rect\n\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\theight=\"100%\"\n\t\t\t\t\tfill={`url(#${id}-stripped-mask-gradient)`}\n\t\t\t\t/>\n\t\t\t</mask>\n\t\t\t<pattern\n\t\t\t\tid={`${id}-stripped-${dataKey}`}\n\t\t\t\tpatternUnits=\"userSpaceOnUse\"\n\t\t\t\twidth=\"100%\"\n\t\t\t\theight=\"100%\"\n\t\t\t>\n\t\t\t\t<rect\n\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\theight=\"100%\"\n\t\t\t\t\tfill={`url(#${id}-colors-${dataKey})`}\n\t\t\t\t\tmask={`url(#${id}-stripped-mask-${dataKey})`}\n\t\t\t\t/>\n\t\t\t</pattern>\n\t\t</>\n\t)\n}\n\nconst generateEasedGradientStops = (\n\tsteps: number = 17,\n\tminOpacity: number = 0.05,\n\tmaxOpacity: number = 0.9,\n) => {\n\treturn Array.from({ length: steps }, (_, i) => {\n\t\tconst t = i / (steps - 1)\n\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\nexport function useLoadingData(isLoading: boolean, loadingBars: number = 12) {\n\tconst [loadingDataKey, setLoadingDataKey] = useState(false)\n\n\tconst onShimmerExit = useCallback(() => {\n\t\tif (isLoading) {\n\t\t\tsetLoadingDataKey(prev => !prev)\n\t\t}\n\t}, [isLoading])\n\n\tconst loadingData = useMemo(\n\t\t() => getLoadingData(loadingBars, 20, 80),\n\n\t\t[loadingBars, loadingDataKey],\n\t)\n\n\treturn { loadingData, onShimmerExit }\n}\n\nconst LoadingBar = ({\n\tchartId,\n\tonShimmerExit,\n}: {\n\tchartId: string\n\tonShimmerExit: () => void\n}) => {\n\treturn (\n\t\t<>\n\t\t\t<RechartsBar\n\t\t\t\tdataKey={LOADING_BAR_DATA_KEY}\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.15}\n\t\t\t\tradius={DEFAULT_BAR_RADIUS}\n\t\t\t\tisAnimationActive={false}\n\t\t\t\tlegendType=\"none\"\n\t\t\t\tstyle={{ mask: `url(#${chartId}-loading-mask)` }}\n\t\t\t/>\n\t\t\t<defs>\n\t\t\t\t<LoadingBarPattern chartId={chartId} onShimmerExit={onShimmerExit} />\n\t\t\t</defs>\n\t\t</>\n\t)\n}\n\nconst LoadingBarPattern = ({\n\tchartId,\n\tonShimmerExit,\n}: {\n\tchartId: string\n\tonShimmerExit: () => void\n}) => {\n\tconst gradientStops = generateEasedGradientStops()\n\n\tconst patternWidth = 3\n\tconst startX = -1\n\tconst endX = 2\n\n\tconst lastXRef = useRef(startX)\n\n\treturn (\n\t\t<>\n\t\t\t<linearGradient\n\t\t\t\tid={`${chartId}-loading-mask-gradient`}\n\t\t\t\tx1=\"0\"\n\t\t\t\ty1=\"0\"\n\t\t\t\tx2=\"1\"\n\t\t\t\ty2=\"0\"\n\t\t\t>\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\tid={`${chartId}-loading-mask-pattern`}\n\t\t\t\tpatternUnits=\"objectBoundingBox\"\n\t\t\t\tpatternContentUnits=\"objectBoundingBox\"\n\t\t\t\tpatternTransform=\"rotate(25)\"\n\t\t\t\twidth={patternWidth}\n\t\t\t\theight=\"1\"\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\ty=\"0\"\n\t\t\t\t\twidth=\"1\"\n\t\t\t\t\theight=\"1\"\n\t\t\t\t\tfill={`url(#${chartId}-loading-mask-gradient)`}\n\t\t\t\t\tinitial={{ x: startX }}\n\t\t\t\t\tanimate={{ x: endX }}\n\t\t\t\t\ttransition={{\n\t\t\t\t\t\tduration: LOADING_ANIMATION_DURATION / 1000,\n\t\t\t\t\t\tease: \"linear\",\n\t\t\t\t\t\trepeat: Infinity,\n\t\t\t\t\t\trepeatType: \"loop\",\n\t\t\t\t\t}}\n\t\t\t\t\tonUpdate={(latest: { x?: number }) => {\n\t\t\t\t\t\tconst xValue = typeof latest.x === \"number\" ? latest.x : startX\n\t\t\t\t\t\tconst lastX = lastXRef.current\n\n\t\t\t\t\t\tif (xValue >= 1 && lastX < 1) {\n\t\t\t\t\t\t\tonShimmerExit()\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlastXRef.current = xValue\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</pattern>\n\t\t\t<mask id={`${chartId}-loading-mask`} maskUnits=\"userSpaceOnUse\">\n\t\t\t\t<rect\n\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\theight=\"100%\"\n\t\t\t\t\tfill={`url(#${chartId}-loading-mask-pattern)`}\n\t\t\t\t/>\n\t\t\t</mask>\n\t\t</>\n\t)\n}\n"],"mappings":"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","names":["Chart","ResponsiveContainer","Fragment","jsx","jsxs","range","ResponsiveContainer","RechartsPrimitive","React","Fragment","jsx","jsxs","RechartsPrimitive","jsx","jsxs","useId","jsx","jsxs","createContext","useCallback","useId","useMemo","useRef","useState","motion","Fragment","jsx","jsxs","BarChart","Bar","Tooltip","Legend"]}
@@ -0,0 +1,9 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ type BackgroundVariant = "dots" | "grid" | "cross-hatch" | "diagonal-lines" | "plus" | "falling-triangles" | "4-pointed-star" | "tiny-checkers" | "overlapping-circles" | "wiggle-lines" | "bubbles";
4
+ interface ChartBackgroundProps {
5
+ variant: BackgroundVariant;
6
+ }
7
+ declare function ChartBackground({ variant }: ChartBackgroundProps): react_jsx_runtime.JSX.Element;
8
+
9
+ export { type BackgroundVariant as B, ChartBackground as C };
@@ -0,0 +1,72 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { Area } from 'recharts';
3
+ import { a as ChartConfig } from './chart-tooltip-DajpzJRy.js';
4
+ import * as react from 'react';
5
+ import { ComponentProps } from 'react';
6
+
7
+ type BrushVariant = "line" | "area" | "bar";
8
+ type CurveType = ComponentProps<typeof Area>["type"];
9
+ interface BrushRange {
10
+ startIndex: number;
11
+ endIndex: number;
12
+ }
13
+ interface BrushProps {
14
+ /** Full dataset – always rendered in the miniature chart */
15
+ data: Record<string, unknown>[];
16
+ /** Chart config with colour definitions */
17
+ chartConfig: ChartConfig;
18
+ /** Data keys to plot (default: all keys from chartConfig) */
19
+ dataKeys?: string[];
20
+ /** X-axis data key – used for handle labels */
21
+ xDataKey?: string;
22
+ /** Visual variant of the mini chart */
23
+ variant?: BrushVariant;
24
+ /** Pixel height of the brush */
25
+ height?: number;
26
+ /** Extra className */
27
+ className?: string;
28
+ /** Whether areas/bars should be stacked in the mini chart */
29
+ stacked?: boolean;
30
+ /** Stroke variant for line / area strokes in the mini chart */
31
+ strokeVariant?: "solid" | "dashed" | "animated-dashed";
32
+ /** Whether to connect null data points in line / area variants */
33
+ connectNulls?: boolean;
34
+ /** Radius for bar corners in the bar variant */
35
+ barRadius?: number;
36
+ /** Controlled start index */
37
+ startIndex?: number;
38
+ /** Controlled end index */
39
+ endIndex?: number;
40
+ /** Initial start index (uncontrolled) */
41
+ defaultStartIndex?: number;
42
+ /** Initial end index (uncontrolled) */
43
+ defaultEndIndex?: number;
44
+ /** Fired whenever the visible range changes */
45
+ onChange?: (range: BrushRange) => void;
46
+ /** Format the handle label from the xDataKey value */
47
+ formatLabel?: (value: unknown, index: number) => string;
48
+ /** Curve type for line / area variants */
49
+ curveType?: CurveType;
50
+ /** Minimum number of data points that must remain selected */
51
+ minSpan?: number;
52
+ /** Whether to render labels on the handles */
53
+ showLabels?: boolean;
54
+ /** Skip rendering own ChartStyle (when inside a Chart that already provides CSS vars) */
55
+ skipStyle?: boolean;
56
+ }
57
+ declare function Brush({ data, chartConfig, dataKeys, xDataKey, variant, height, className, stacked, strokeVariant, connectNulls, barRadius, startIndex: controlledStart, endIndex: controlledEnd, defaultStartIndex, defaultEndIndex, onChange, formatLabel, curveType, minSpan, showLabels, skipStyle, }: BrushProps): react_jsx_runtime.JSX.Element | null;
58
+ declare function useBrush<TData extends Record<string, unknown>>({ data, defaultStartIndex, defaultEndIndex, }: {
59
+ data: TData[];
60
+ defaultStartIndex?: number;
61
+ defaultEndIndex?: number;
62
+ }): {
63
+ range: BrushRange;
64
+ visibleData: TData[];
65
+ brushProps: {
66
+ startIndex: number;
67
+ endIndex: number;
68
+ onChange: react.Dispatch<react.SetStateAction<BrushRange>>;
69
+ };
70
+ };
71
+
72
+ export { Brush as B, type BrushRange as a, useBrush as u };
@@ -0,0 +1,17 @@
1
+ import * as react from 'react';
2
+
3
+ type DotVariant = "default" | "border" | "colored-border";
4
+ type ChartDotProps = {
5
+ cx?: number;
6
+ cy?: number;
7
+ dataKey: string;
8
+ chartId: string;
9
+ className?: string;
10
+ fillOpacity?: number;
11
+ type?: DotVariant;
12
+ /** Optional SVG <mask> id — lets the dot share an area's intro reveal wipe. */
13
+ maskId?: string;
14
+ };
15
+ declare const ChartDot: react.NamedExoticComponent<ChartDotProps>;
16
+
17
+ export { ChartDot as C, type DotVariant as D };
@@ -0,0 +1,16 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as RechartsPrimitive from 'recharts';
3
+ import * as react from 'react';
4
+
5
+ type ChartLegendVariant = "square" | "circle" | "circle-outline" | "rounded-square" | "rounded-square-outline" | "vertical-bar" | "horizontal-bar";
6
+ declare function ChartLegendContent({ className, hideIcon, nameKey, payload, verticalAlign, align, selected, onSelectChange, isClickable, variant, }: react.ComponentProps<"div"> & {
7
+ hideIcon?: boolean;
8
+ nameKey?: string;
9
+ selected?: string | null;
10
+ isClickable?: boolean;
11
+ onSelectChange?: (selected: string | null) => void;
12
+ variant?: ChartLegendVariant;
13
+ } & RechartsPrimitive.DefaultLegendContentProps): react_jsx_runtime.JSX.Element | null;
14
+ declare const ChartLegend: react.MemoExoticComponent<(outsideProps: RechartsPrimitive.LegendProps) => react.ReactPortal | null>;
15
+
16
+ export { ChartLegend as C, ChartLegendContent as a, type ChartLegendVariant as b };
@@ -0,0 +1,68 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as react from 'react';
3
+ import { ReactNode, ComponentType, ComponentProps } from 'react';
4
+ import * as RechartsPrimitive from 'recharts';
5
+ import { ValueType, NameType } from 'recharts/types/component/DefaultTooltipContent';
6
+
7
+ declare const THEMES: {
8
+ readonly light: "";
9
+ readonly dark: "[data-theme=\"dark\"]";
10
+ };
11
+ type ThemeKey = keyof typeof THEMES;
12
+ type ThemeColorsBase = {
13
+ [K in ThemeKey]?: string[];
14
+ };
15
+ type AtLeastOneThemeColor = {
16
+ [K in ThemeKey]: Required<Pick<ThemeColorsBase, K>> & Partial<Omit<ThemeColorsBase, K>>;
17
+ }[ThemeKey];
18
+ type ChartConfig = Record<string, {
19
+ label?: ReactNode;
20
+ icon?: ComponentType;
21
+ color?: string;
22
+ colors?: AtLeastOneThemeColor;
23
+ }>;
24
+ interface ChartContextProps {
25
+ config: ChartConfig;
26
+ }
27
+ declare function useChart(): ChartContextProps;
28
+ declare function applyDefaultChartColors(config: ChartConfig): ChartConfig;
29
+ interface ChartProps extends Omit<ComponentProps<"div">, "children">, Pick<ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>, "initialDimension" | "aspect" | "debounce" | "minHeight" | "minWidth" | "maxHeight" | "height" | "width" | "onResize" | "children"> {
30
+ config: ChartConfig;
31
+ innerResponsiveContainerStyle?: ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>["style"];
32
+ footer?: ReactNode;
33
+ }
34
+ declare const Chart: react.ForwardRefExoticComponent<Omit<ChartProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
35
+ declare function LoadingIndicator({ isLoading }: {
36
+ isLoading: boolean;
37
+ }): react_jsx_runtime.JSX.Element | null;
38
+ declare function ChartStyle({ id, config, }: {
39
+ id: string;
40
+ config: ChartConfig;
41
+ }): react_jsx_runtime.JSX.Element | null;
42
+ declare function getPayloadConfigFromPayload(config: ChartConfig, payload: unknown, key: string): {
43
+ label?: ReactNode;
44
+ icon?: ComponentType;
45
+ color?: string;
46
+ colors?: AtLeastOneThemeColor;
47
+ } | undefined;
48
+ declare function axisValueToPercentFormatter(value: number): string;
49
+ declare function getColorsCount(config: ChartConfig[string]): number;
50
+ declare const getLoadingData: (points?: number, min?: number, max?: number) => {
51
+ loading: number;
52
+ }[];
53
+
54
+ type TooltipRoundness = "sm" | "md" | "lg" | "xl";
55
+ type TooltipVariant = "default" | "frosted-glass";
56
+ declare function ChartTooltipContent({ active, payload, className, indicator, hideLabel, hideIndicator, label, labelFormatter, labelClassName, formatter, nameKey, labelKey, selected, roundness, variant, }: react.ComponentProps<typeof RechartsPrimitive.Tooltip> & react.ComponentProps<"div"> & {
57
+ hideLabel?: boolean;
58
+ hideIndicator?: boolean;
59
+ indicator?: "line" | "dot" | "dashed";
60
+ nameKey?: string;
61
+ labelKey?: string;
62
+ selected?: string | null;
63
+ roundness?: TooltipRoundness;
64
+ variant?: TooltipVariant;
65
+ } & Omit<RechartsPrimitive.DefaultTooltipContentProps<ValueType, NameType>, "accessibilityLayer">): react_jsx_runtime.JSX.Element;
66
+ declare const ChartTooltip: ({ animationDuration, ...props }: react.ComponentProps<typeof RechartsPrimitive.Tooltip>) => react_jsx_runtime.JSX.Element;
67
+
68
+ export { Chart as C, LoadingIndicator as L, type TooltipRoundness as T, type ChartConfig as a, type ChartProps as b, ChartStyle as c, ChartTooltip as d, ChartTooltipContent as e, type TooltipVariant as f, applyDefaultChartColors as g, axisValueToPercentFormatter as h, getColorsCount as i, getLoadingData as j, getPayloadConfigFromPayload as k, useChart as u };
@@ -0,0 +1,17 @@
1
+ export { C as Chart, a as ChartConfig, b as ChartProps, c as ChartStyle, d as ChartTooltip, e as ChartTooltipContent, L as LoadingIndicator, T as TooltipRoundness, f as TooltipVariant, g as applyDefaultChartColors, h as axisValueToPercentFormatter, i as getColorsCount, j as getLoadingData, k as getPayloadConfigFromPayload, u as useChart } from './chart-tooltip-DajpzJRy.js';
2
+ export { C as ChartLegend, a as ChartLegendContent, b as ChartLegendVariant } from './chart-legend-Dv9pqes-.js';
3
+ export { C as ChartDot, D as DotVariant } from './chart-dot-8H287EDv.js';
4
+ export { B as BackgroundVariant, C as ChartBackground } from './chart-background-BK77UXhl.js';
5
+ export { B as Brush, a as BrushRange, u as useBrush } from './chart-brush-BoxY9aDm.js';
6
+ export { Area, AreaChart, AreaChartProps } from './area-chart.js';
7
+ export { Bar, BarChart, BarChartProps } from './bar-chart.js';
8
+ export { Line, LineChart, LineChartProps } from './line-chart.js';
9
+ export { ComposedChart, ComposedChartProps } from './composed-chart.js';
10
+ export { Pie, PieChart, PieChartProps } from './pie-chart.js';
11
+ export { Radar, RadarChart, RadarChartProps } from './radar-chart.js';
12
+ export { RadialBar, RadialChart, RadialChartProps } from './radial-chart.js';
13
+ export { SankeyChart, SankeyChartProps } from './sankey-chart.js';
14
+ import 'react/jsx-runtime';
15
+ import 'react';
16
+ import 'recharts';
17
+ import 'recharts/types/component/DefaultTooltipContent';