bruv-ui 0.2.0 → 0.3.1
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.
- package/dist/area-chart.js +2 -0
- package/dist/area-chart.js.map +1 -1
- package/dist/bar-chart.js +2 -0
- package/dist/bar-chart.js.map +1 -1
- package/dist/charts.js +2 -0
- package/dist/charts.js.map +1 -1
- package/dist/composed-chart.js +2 -0
- package/dist/composed-chart.js.map +1 -1
- package/dist/form-rhf.js +2 -0
- package/dist/form-rhf.js.map +1 -1
- package/dist/index.d.ts +37 -3
- package/dist/index.js +1152 -1005
- package/dist/index.js.map +1 -1
- package/dist/line-chart.js +2 -0
- package/dist/line-chart.js.map +1 -1
- package/dist/pie-chart.js +2 -0
- package/dist/pie-chart.js.map +1 -1
- package/dist/radar-chart.js +2 -0
- package/dist/radar-chart.js.map +1 -1
- package/dist/radial-chart.js +2 -0
- package/dist/radial-chart.js.map +1 -1
- package/dist/sankey-chart.js +2 -0
- package/dist/sankey-chart.js.map +1 -1
- package/package.json +1 -1
package/dist/sankey-chart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/charts/chart.tsx","../src/lib/cn.ts","../src/components/charts/chart-tooltip.tsx","../src/components/charts/chart-background.tsx","../src/components/charts/sankey-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 { 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 { 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\tLoadingIndicator,\n} from \"./chart\"\nimport {\n\tChartTooltip,\n\tChartTooltipContent,\n\ttype TooltipRoundness,\n\ttype TooltipVariant,\n} from \"./chart-tooltip\"\nimport { ChartBackground, type BackgroundVariant } from \"./chart-background\"\nimport {\n\tChildren,\n\tcreateContext,\n\tisValidElement,\n\tuse,\n\tuseCallback,\n\tuseId,\n\tuseMemo,\n\tuseState,\n\ttype FC,\n\ttype ReactElement,\n\ttype ReactNode,\n} from \"react\"\nimport {\n\tSankey as RechartsSankey,\n\tLayer,\n\ttype SankeyProps,\n\ttype SankeyNodeProps,\n\ttype SankeyLinkProps,\n\ttype SankeyData,\n\ttype SankeyNode as RechartsSankeyNode,\n} from \"recharts\"\nimport { motion } from \"motion/react\"\n\nconst LOADING_ANIMATION_DURATION = 2000\nconst DEFAULT_NODE_WIDTH = 10\nconst DEFAULT_NODE_PADDING = 10\nconst DEFAULT_LINK_CURVATURE = 0.5\nconst DEFAULT_ITERATIONS = 32\n\ntype LinkVariant = \"gradient\" | \"solid\" | \"source\" | \"target\"\ntype NodeLabelPosition = \"inside\" | \"outside\"\n\ntype SankeyChartContextValue = {\n\tdata: SankeyData\n\tconfig: ChartConfig\n\tchartId: string\n\tisLoading: boolean\n\tselectedNode: string | null\n\tselectNode: (nodeName: string | null) => void\n}\n\nconst SankeyChartContext = createContext<SankeyChartContextValue | null>(null)\n\nfunction useSankeyChart() {\n\tconst context = use(SankeyChartContext)\n\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"Sankey chart parts (<Node />, <Link />, <Tooltip />, …) must be used within <SankeyChart />\",\n\t\t)\n\t}\n\n\treturn context\n}\n\ntype SankeyChartBaseProps = {\n\tdata: SankeyData\n\tconfig: ChartConfig\n\tchildren: ReactNode\n\tclassName?: string\n\tsankeyProps?: Omit<SankeyProps, \"data\">\n\tnodeWidth?: number\n\tnodePadding?: number\n\tlinkCurvature?: number\n\titerations?: number\n\tsort?: boolean\n\talign?: \"left\" | \"justify\"\n\tverticalAlign?: \"justify\" | \"top\"\n\tbackgroundVariant?: BackgroundVariant\n\tdefaultSelectedNode?: string | null\n\tonSelectionChange?: (\n\t\tselection: { dataKey: string; value: number } | null,\n\t) => void\n\tisLoading?: boolean\n}\n\ntype SankeyChartProps = SankeyChartBaseProps\n\nexport type { SankeyChartProps }\n\nexport function SankeyChart({\n\tdata,\n\tconfig,\n\tchildren,\n\tclassName,\n\tsankeyProps,\n\tnodeWidth = DEFAULT_NODE_WIDTH,\n\tnodePadding = DEFAULT_NODE_PADDING,\n\tlinkCurvature = DEFAULT_LINK_CURVATURE,\n\titerations = DEFAULT_ITERATIONS,\n\tsort = true,\n\talign = \"justify\",\n\tverticalAlign = \"justify\",\n\tbackgroundVariant,\n\tdefaultSelectedNode = null,\n\tonSelectionChange,\n\tisLoading = false,\n}: SankeyChartProps) {\n\tconst chartId = useId().replace(/:/g, \"\")\n\tconst [selectedNode, setSelectedNode] = useState<string | null>(\n\t\tdefaultSelectedNode,\n\t)\n\n\tconst selectNode = useCallback(\n\t\t(nodeName: string | null) => {\n\t\t\tsetSelectedNode(nodeName)\n\n\t\t\tif (!onSelectionChange) return\n\n\t\t\tif (nodeName === null) {\n\t\t\t\tonSelectionChange(null)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tonSelectionChange({\n\t\t\t\tdataKey: nodeName,\n\t\t\t\tvalue: getNodeValue(data, nodeName),\n\t\t\t})\n\t\t},\n\t\t[onSelectionChange, data],\n\t)\n\n\tconst contextValue = useMemo<SankeyChartContextValue>(\n\t\t() => ({ data, config, chartId, isLoading, selectedNode, selectNode }),\n\t\t[data, config, chartId, isLoading, selectedNode, selectNode],\n\t)\n\n\treturn (\n\t\t<SankeyChartContext value={contextValue}>\n\t\t\t<Chart className={className} config={config}>\n\t\t\t\t<LoadingIndicator isLoading={isLoading} />\n\t\t\t\t{backgroundVariant && <ChartBackground variant={backgroundVariant} />}\n\t\t\t\t{!isLoading && (\n\t\t\t\t\t<RechartsSankey\n\t\t\t\t\t\tid={chartId}\n\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\tnodeWidth={nodeWidth}\n\t\t\t\t\t\tnodePadding={nodePadding}\n\t\t\t\t\t\tlinkCurvature={linkCurvature}\n\t\t\t\t\t\titerations={iterations}\n\t\t\t\t\t\tsort={sort}\n\t\t\t\t\t\talign={align}\n\t\t\t\t\t\tverticalAlign={verticalAlign}\n\t\t\t\t\t\t{...resolveSankeyRenderers(children)}\n\t\t\t\t\t\t{...sankeyProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t\t<defs>\n\t\t\t\t\t\t\t<NodeColorGradients config={config} chartId={chartId} />\n\t\t\t\t\t\t</defs>\n\t\t\t\t\t</RechartsSankey>\n\t\t\t\t)}\n\t\t\t\t{isLoading && (\n\t\t\t\t\t<svg\n\t\t\t\t\t\tviewBox=\"0 0 500 250\"\n\t\t\t\t\t\tpreserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\tclassName=\"absolute inset-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<LoadingSankey />\n\t\t\t\t\t</svg>\n\t\t\t\t)}\n\t\t\t</Chart>\n\t\t</SankeyChartContext>\n\t)\n}\n\ntype NodeProps = {\n\tradius?: number\n\tisClickable?: boolean\n\tchildren?: ReactNode\n}\n\nexport const Node: FC<NodeProps> = () => null\n\ntype NodeLabelProps = {\n\tposition?: NodeLabelPosition\n\tshowValues?: boolean\n\tvalueFormatter?: (value: number) => string\n}\n\nexport const NodeLabel: FC<NodeLabelProps> = () => null\n\ntype LinkProps = {\n\tvariant?: LinkVariant\n\tverticalPadding?: number\n}\n\nexport const Link: FC<LinkProps> = () => null\n\ntype TooltipProps = {\n\tvariant?: TooltipVariant\n\troundness?: TooltipRoundness\n\tdefaultIndex?: number\n}\n\nexport function Tooltip({ variant, roundness, defaultIndex }: TooltipProps) {\n\tconst { isLoading } = useSankeyChart()\n\n\tif (isLoading) return null\n\n\treturn (\n\t\t<ChartTooltip\n\t\t\tdefaultIndex={defaultIndex}\n\t\t\tcontent={\n\t\t\t\t<ChartTooltipContent\n\t\t\t\t\tnameKey=\"name\"\n\t\t\t\t\thideLabel\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\nconst getNodeValue = (data: SankeyData, nodeName: string): number => {\n\tconst nodeIndex = data.nodes.findIndex(node => node.name === nodeName)\n\tif (nodeIndex === -1) return 0\n\n\tconst outgoing = data.links\n\t\t.filter(link => link.source === nodeIndex)\n\t\t.reduce((sum, link) => sum + link.value, 0)\n\tconst incoming = data.links\n\t\t.filter(link => link.target === nodeIndex)\n\t\t.reduce((sum, link) => sum + link.value, 0)\n\n\treturn outgoing > 0 ? outgoing : incoming\n}\n\nconst resolveSankeyRenderers = (\n\tchildren: ReactNode,\n): Pick<SankeyProps, \"node\" | \"link\"> => {\n\tlet nodeProps: NodeProps | null = null\n\tlet linkProps: LinkProps | null = null\n\n\tChildren.forEach(children, child => {\n\t\tif (!isValidElement(child)) return\n\n\t\tif (child.type === Node) {\n\t\t\tnodeProps = (child as ReactElement<NodeProps>).props\n\t\t}\n\n\t\tif (child.type === Link) {\n\t\t\tlinkProps = (child as ReactElement<LinkProps>).props\n\t\t}\n\t})\n\n\treturn {\n\t\tnode: (props: SankeyNodeProps) => (\n\t\t\t<SankeyNode {...props} nodeConfig={nodeProps} />\n\t\t),\n\t\tlink: (props: SankeyLinkProps) => (\n\t\t\t<SankeyLink {...props} linkConfig={linkProps} />\n\t\t),\n\t}\n}\n\nconst resolveNodeLabel = (children: ReactNode): NodeLabelProps | null => {\n\tlet label: NodeLabelProps | null = null\n\n\tChildren.forEach(children, child => {\n\t\tif (isValidElement(child) && child.type === NodeLabel) {\n\t\t\tlabel = (child as ReactElement<NodeLabelProps>).props\n\t\t}\n\t})\n\n\treturn label\n}\n\ntype SankeyNodeRendererProps = SankeyNodeProps & {\n\tnodeConfig: NodeProps | null\n}\n\nconst SankeyNode = ({\n\tx,\n\ty,\n\twidth,\n\theight,\n\tpayload,\n\tnodeConfig,\n}: SankeyNodeRendererProps) => {\n\tconst { config, chartId, data, selectedNode, selectNode } = useSankeyChart()\n\n\tconst radius = nodeConfig?.radius ?? 0\n\tconst isClickable = nodeConfig?.isClickable ?? false\n\tconst label = resolveNodeLabel(nodeConfig?.children)\n\n\tconst nodeName = payload.name\n\tconst nodeValue = payload.value\n\tconst nodeIcon = (payload as RechartsSankeyNode & { icon?: ReactNode }).icon\n\n\tconst isHighlighted = isNodeConnected(data, selectedNode, nodeName)\n\tconst hasConfigColor = nodeName in config\n\tconst configLabel = config[nodeName]?.label ?? nodeName\n\tconst dimmed = isClickable && !isHighlighted\n\n\tconst valueFormatter =\n\t\tlabel?.valueFormatter ?? ((value: number) => value.toLocaleString())\n\tconst showValues = label?.showValues ?? false\n\n\tconst labelX = x + width / 2\n\tconst labelY = showValues ? y + height / 2 - 8 : y + height / 2\n\tconst valueY = y + height / 2 + 8\n\tconst outsideLabelX = x + width + 8\n\tconst outsideLabelY = y + height / 2\n\n\treturn (\n\t\t<Layer>\n\t\t\t<rect\n\t\t\t\tx={x}\n\t\t\t\ty={y}\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\trx={radius}\n\t\t\t\try={radius}\n\t\t\t\tfill={\n\t\t\t\t\thasConfigColor\n\t\t\t\t\t\t? `url(#${chartId}-sankey-colors-${nodeName})`\n\t\t\t\t\t\t: \"currentColor\"\n\t\t\t\t}\n\t\t\t\tfillOpacity={dimmed ? 0.3 : 0.9}\n\t\t\t\tclassName=\"transition-opacity duration-200\"\n\t\t\t\tstyle={isClickable ? { cursor: \"pointer\" } : undefined}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tif (!isClickable) return\n\t\t\t\t\tselectNode(selectedNode === nodeName ? null : nodeName)\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{label?.position === \"inside\" && (\n\t\t\t\t<>\n\t\t\t\t\t<rect\n\t\t\t\t\t\tx={x + 1}\n\t\t\t\t\t\ty={y + 1}\n\t\t\t\t\t\twidth={width - 2}\n\t\t\t\t\t\theight={height - 2}\n\t\t\t\t\t\trx={Math.max(0, radius - 1)}\n\t\t\t\t\t\try={Math.max(0, radius - 1)}\n\t\t\t\t\t\topacity={dimmed ? 0.3 : 1}\n\t\t\t\t\t\tclassName=\"fill-white/50 transition-opacity duration-200 dark:fill-black/60\"\n\t\t\t\t\t\tstyle={{ pointerEvents: \"none\" }}\n\t\t\t\t\t/>\n\t\t\t\t\t{nodeIcon && (\n\t\t\t\t\t\t<foreignObject\n\t\t\t\t\t\t\tx={labelX - 8}\n\t\t\t\t\t\t\ty={labelY - 30}\n\t\t\t\t\t\t\twidth={16}\n\t\t\t\t\t\t\theight={16}\n\t\t\t\t\t\t\topacity={dimmed ? 0.3 : 1}\n\t\t\t\t\t\t\tclassName=\"transition-opacity duration-200\"\n\t\t\t\t\t\t\tstyle={{ pointerEvents: \"none\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"text-bruv-primary/80 flex items-center justify-center dark:text-white/80\">\n\t\t\t\t\t\t\t\t{nodeIcon}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</foreignObject>\n\t\t\t\t\t)}\n\t\t\t\t\t<text\n\t\t\t\t\t\tx={labelX}\n\t\t\t\t\t\ty={nodeIcon ? labelY - 4 : labelY}\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tdominantBaseline=\"middle\"\n\t\t\t\t\t\tclassName=\"fill-foreground text-[10px] font-medium transition-opacity duration-200 dark:fill-white\"\n\t\t\t\t\t\topacity={dimmed ? 0.3 : 1}\n\t\t\t\t\t\tstyle={{ pointerEvents: \"none\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{configLabel}\n\t\t\t\t\t</text>\n\t\t\t\t\t{showValues && (\n\t\t\t\t\t\t<text\n\t\t\t\t\t\t\tx={labelX}\n\t\t\t\t\t\t\ty={valueY}\n\t\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\t\tdominantBaseline=\"middle\"\n\t\t\t\t\t\t\tclassName=\"fill-foreground/60 font-mono text-xs font-medium tabular-nums transition-opacity duration-200 dark:fill-white\"\n\t\t\t\t\t\t\topacity={dimmed ? 0.3 : 0.6}\n\t\t\t\t\t\t\tstyle={{ pointerEvents: \"none\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{valueFormatter(nodeValue)}\n\t\t\t\t\t\t</text>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t\t{label?.position === \"outside\" && (\n\t\t\t\t<>\n\t\t\t\t\t<text\n\t\t\t\t\t\tx={outsideLabelX}\n\t\t\t\t\t\ty={outsideLabelY - (showValues ? 8 : 0)}\n\t\t\t\t\t\ttextAnchor=\"start\"\n\t\t\t\t\t\tdominantBaseline=\"middle\"\n\t\t\t\t\t\tclassName=\"fill-foreground text-xs\"\n\t\t\t\t\t\tstyle={{ pointerEvents: \"none\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{configLabel}\n\t\t\t\t\t</text>\n\t\t\t\t\t{showValues && (\n\t\t\t\t\t\t<text\n\t\t\t\t\t\t\tx={outsideLabelX}\n\t\t\t\t\t\t\ty={outsideLabelY + 8}\n\t\t\t\t\t\t\ttextAnchor=\"start\"\n\t\t\t\t\t\t\tdominantBaseline=\"middle\"\n\t\t\t\t\t\t\topacity={0.5}\n\t\t\t\t\t\t\tclassName=\"fill-foreground font-mono text-xs tabular-nums dark:fill-white\"\n\t\t\t\t\t\t\tstyle={{ pointerEvents: \"none\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{valueFormatter(nodeValue)}\n\t\t\t\t\t\t</text>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</Layer>\n\t)\n}\n\ntype SankeyLinkRendererProps = SankeyLinkProps & {\n\tlinkConfig: LinkProps | null\n}\n\nconst SankeyLink = ({\n\tsourceX,\n\ttargetX,\n\tsourceY,\n\ttargetY,\n\tsourceControlX,\n\ttargetControlX,\n\tlinkWidth,\n\tindex,\n\tpayload,\n\tlinkConfig,\n}: SankeyLinkRendererProps) => {\n\tconst { config, chartId, selectedNode } = useSankeyChart()\n\n\tconst variant = linkConfig?.variant ?? \"gradient\"\n\tconst verticalPadding = linkConfig?.verticalPadding ?? 0\n\n\tconst sourceName = payload.source.name\n\tconst targetName = payload.target.name\n\n\tconst isConnected =\n\t\tselectedNode === null ||\n\t\tselectedNode === sourceName ||\n\t\tselectedNode === targetName\n\n\tconst paddedLinkWidth = Math.max(1, linkWidth - verticalPadding)\n\tconst halfWidth = paddedLinkWidth / 2\n\n\tconst linkAreaPath = `M${sourceX},${sourceY - halfWidth}\n C${sourceControlX},${sourceY - halfWidth} ${targetControlX},${targetY - halfWidth} ${targetX},${targetY - halfWidth}\n L${targetX},${targetY + halfWidth}\n C${targetControlX},${targetY + halfWidth} ${sourceControlX},${sourceY + halfWidth} ${sourceX},${sourceY + halfWidth}\n Z`\n\n\treturn (\n\t\t<Layer>\n\t\t\t<defs>\n\t\t\t\t{variant === \"gradient\" && (\n\t\t\t\t\t<LinkGradient\n\t\t\t\t\t\tchartId={chartId}\n\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\tconfig={config}\n\t\t\t\t\t\tsourceName={sourceName}\n\t\t\t\t\t\ttargetName={targetName}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<LinkStrokeGradient chartId={chartId} index={index} />\n\t\t\t</defs>\n\t\t\t<path\n\t\t\t\td={linkAreaPath}\n\t\t\t\tfill={getLinkFill(\n\t\t\t\t\tvariant,\n\t\t\t\t\tchartId,\n\t\t\t\t\tindex,\n\t\t\t\t\tconfig,\n\t\t\t\t\tsourceName,\n\t\t\t\t\ttargetName,\n\t\t\t\t)}\n\t\t\t\tfillOpacity={isConnected ? 0.4 : 0.1}\n\t\t\t\tstroke={\n\t\t\t\t\tselectedNode !== null && isConnected\n\t\t\t\t\t\t? `url(#${chartId}-link-stroke-${index})`\n\t\t\t\t\t\t: \"none\"\n\t\t\t\t}\n\t\t\t\tstrokeWidth={1}\n\t\t\t\tstrokeOpacity={0.3}\n\t\t\t\tclassName=\"transition-opacity duration-200\"\n\t\t\t/>\n\t\t</Layer>\n\t)\n}\n\nconst isNodeConnected = (\n\tdata: SankeyData,\n\tselectedNode: string | null,\n\tnodeName: string,\n): boolean => {\n\tif (selectedNode === null || selectedNode === nodeName) return true\n\n\tconst selectedIdx = data.nodes.findIndex(node => node.name === selectedNode)\n\tconst nodeIdx = data.nodes.findIndex(node => node.name === nodeName)\n\n\treturn data.links.some(\n\t\tlink =>\n\t\t\t(link.source === selectedIdx && link.target === nodeIdx) ||\n\t\t\t(link.source === nodeIdx && link.target === selectedIdx),\n\t)\n}\n\nconst getLinkFill = (\n\tvariant: LinkVariant,\n\tchartId: string,\n\tindex: number,\n\tconfig: ChartConfig,\n\tsourceName: string,\n\ttargetName: string,\n): string => {\n\tswitch (variant) {\n\t\tcase \"gradient\":\n\t\t\treturn `url(#${chartId}-link-gradient-${index})`\n\t\tcase \"source\":\n\t\t\treturn sourceName in config\n\t\t\t\t? `url(#${chartId}-sankey-colors-${sourceName})`\n\t\t\t\t: \"currentColor\"\n\t\tcase \"target\":\n\t\t\treturn targetName in config\n\t\t\t\t? `url(#${chartId}-sankey-colors-${targetName})`\n\t\t\t\t: \"currentColor\"\n\t\tcase \"solid\":\n\t\tdefault:\n\t\t\treturn \"currentColor\"\n\t}\n}\n\nconst NodeColorGradients = ({\n\tconfig,\n\tchartId,\n}: {\n\tconfig: ChartConfig\n\tchartId: string\n}) => {\n\treturn (\n\t\t<>\n\t\t\t{Object.entries(config).map(([dataKey, nodeConfig]) => {\n\t\t\t\tconst colorsCount = getColorsCount(nodeConfig)\n\n\t\t\t\treturn (\n\t\t\t\t\t<linearGradient\n\t\t\t\t\t\tkey={`${chartId}-sankey-colors-${dataKey}`}\n\t\t\t\t\t\tid={`${chartId}-sankey-colors-${dataKey}`}\n\t\t\t\t\t\tx1=\"0\"\n\t\t\t\t\t\ty1=\"0\"\n\t\t\t\t\t\tx2=\"0\"\n\t\t\t\t\t\ty2=\"1\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{colorsCount === 1 ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<stop offset=\"0%\" stopColor={`var(--color-${dataKey}-0)`} />\n\t\t\t\t\t\t\t\t<stop offset=\"100%\" stopColor={`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\t\tArray.from({ length: colorsCount }, (_, index) => {\n\t\t\t\t\t\t\t\tconst offset = `${(index / (colorsCount - 1)) * 100}%`\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\t\t\tkey={offset}\n\t\t\t\t\t\t\t\t\t\toffset={offset}\n\t\t\t\t\t\t\t\t\t\tstopColor={`var(--color-${dataKey}-${index}, var(--color-${dataKey}-0))`}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)}\n\t\t\t\t\t</linearGradient>\n\t\t\t\t)\n\t\t\t})}\n\t\t</>\n\t)\n}\n\nconst LinkGradient = ({\n\tchartId,\n\tindex,\n\tconfig,\n\tsourceName,\n\ttargetName,\n}: {\n\tchartId: string\n\tindex: number\n\tconfig: ChartConfig\n\tsourceName: string\n\ttargetName: string\n}) => {\n\tconst sourceColor =\n\t\tsourceName in config ? `var(--color-${sourceName}-0)` : \"currentColor\"\n\tconst targetColor =\n\t\ttargetName in config ? `var(--color-${targetName}-0)` : \"currentColor\"\n\n\treturn (\n\t\t<linearGradient\n\t\t\tid={`${chartId}-link-gradient-${index}`}\n\t\t\tx1=\"0%\"\n\t\t\ty1=\"0%\"\n\t\t\tx2=\"100%\"\n\t\t\ty2=\"0%\"\n\t\t>\n\t\t\t<stop offset=\"0%\" stopColor={sourceColor} stopOpacity={0.2} />\n\t\t\t<stop offset=\"50%\" stopColor={sourceColor} stopOpacity={0.5} />\n\t\t\t<stop offset=\"100%\" stopColor={targetColor} stopOpacity={0.2} />\n\t\t</linearGradient>\n\t)\n}\n\nconst LinkStrokeGradient = ({\n\tchartId,\n\tindex,\n}: {\n\tchartId: string\n\tindex: number\n}) => {\n\treturn (\n\t\t<linearGradient\n\t\t\tid={`${chartId}-link-stroke-${index}`}\n\t\t\tx1=\"0%\"\n\t\t\ty1=\"0%\"\n\t\t\tx2=\"100%\"\n\t\t\ty2=\"0%\"\n\t\t>\n\t\t\t<stop offset=\"0%\" stopColor=\"var(--primary)\" stopOpacity={0} />\n\t\t\t<stop offset=\"15%\" stopColor=\"var(--primary)\" stopOpacity={0.8} />\n\t\t\t<stop offset=\"50%\" stopColor=\"var(--primary)\" stopOpacity={1} />\n\t\t\t<stop offset=\"85%\" stopColor=\"var(--primary)\" stopOpacity={0.8} />\n\t\t\t<stop offset=\"100%\" stopColor=\"var(--primary)\" stopOpacity={0} />\n\t\t</linearGradient>\n\t)\n}\n\nconst LoadingSankey = () => {\n\tconst nodes = [\n\t\t{ x: 30, y: 25, width: 12, height: 65, delay: 0 },\n\t\t{ x: 30, y: 110, width: 12, height: 50, delay: 0.3 },\n\t\t{ x: 30, y: 180, width: 12, height: 45, delay: 0.15 },\n\t\t{ x: 244, y: 20, width: 12, height: 55, delay: 0.45 },\n\t\t{ x: 244, y: 95, width: 12, height: 75, delay: 0.6 },\n\t\t{ x: 244, y: 190, width: 12, height: 40, delay: 0.25 },\n\t\t{ x: 458, y: 35, width: 12, height: 80, delay: 0.5 },\n\t\t{ x: 458, y: 135, width: 12, height: 90, delay: 0.1 },\n\t]\n\n\tconst links = [\n\t\t{ from: 0, to: 3, width: 26, delay: 0.2 },\n\t\t{ from: 0, to: 4, width: 18, delay: 0.7 },\n\t\t{ from: 1, to: 4, width: 24, delay: 0.4 },\n\t\t{ from: 1, to: 5, width: 12, delay: 0.9 },\n\t\t{ from: 2, to: 4, width: 16, delay: 0.1 },\n\t\t{ from: 2, to: 5, width: 14, delay: 0.55 },\n\t\t{ from: 3, to: 6, width: 22, delay: 0.35 },\n\t\t{ from: 3, to: 7, width: 18, delay: 0.8 },\n\t\t{ from: 4, to: 6, width: 28, delay: 0.05 },\n\t\t{ from: 4, to: 7, width: 32, delay: 0.65 },\n\t\t{ from: 5, to: 7, width: 16, delay: 0.45 },\n\t]\n\n\tconst getLinkPath = (fromIdx: number, toIdx: number) => {\n\t\tconst from = nodes[fromIdx]\n\t\tconst to = nodes[toIdx]\n\t\tconst startX = from.x + from.width\n\t\tconst startY = from.y + from.height / 2\n\t\tconst endX = to.x\n\t\tconst endY = to.y + to.height / 2\n\t\tconst controlX1 = startX + (endX - startX) * 0.4\n\t\tconst controlX2 = startX + (endX - startX) * 0.6\n\t\treturn `M${startX},${startY} C${controlX1},${startY} ${controlX2},${endY} ${endX},${endY}`\n\t}\n\n\tconst baseDuration = LOADING_ANIMATION_DURATION / 1000\n\n\treturn (\n\t\t<>\n\t\t\t{links.map((link, i) => (\n\t\t\t\t<motion.path\n\t\t\t\t\tkey={`loading-link-${link.from}-${link.to}`}\n\t\t\t\t\td={getLinkPath(link.from, link.to)}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstrokeWidth={link.width}\n\t\t\t\t\tinitial={{ opacity: 0.04 }}\n\t\t\t\t\tanimate={{ opacity: [0.04, 0.14, 0.04] }}\n\t\t\t\t\ttransition={{\n\t\t\t\t\t\tduration: baseDuration * (0.8 + (i % 3) * 0.2),\n\t\t\t\t\t\tdelay: link.delay,\n\t\t\t\t\t\trepeat: Infinity,\n\t\t\t\t\t\tease: \"easeInOut\",\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t))}\n\t\t\t{nodes.map((node, i) => (\n\t\t\t\t<motion.rect\n\t\t\t\t\tkey={`loading-node-${node.x}-${node.y}`}\n\t\t\t\t\tx={node.x}\n\t\t\t\t\ty={node.y}\n\t\t\t\t\twidth={node.width}\n\t\t\t\t\theight={node.height}\n\t\t\t\t\trx={2}\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tinitial={{ opacity: 0.15 }}\n\t\t\t\t\tanimate={{ opacity: [0.15, 0.4, 0.15] }}\n\t\t\t\t\ttransition={{\n\t\t\t\t\t\tduration: baseDuration * (0.9 + (i % 4) * 0.1),\n\t\t\t\t\t\tdelay: node.delay,\n\t\t\t\t\t\trepeat: Infinity,\n\t\t\t\t\t\tease: \"easeInOut\",\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</>\n\t)\n}\n"],"mappings":";AAAA,YAAY,uBAAuB;;;ACAnC,SAA0B,YAAY;AACtC,SAAS,2BAA2B;AAEpC,IAAM,UAAU,oBAAoB;AAAA,EACnC,QAAQ;AAAA,IACP,aAAa;AAAA,MACZ,aAAa,CAAC,EAAE,YAAY,CAAC,MAAM,QAAQ,MAAM,IAAI,EAAE,CAAC;AAAA,MACxD,cAAc;AAAA,QACb;AAAA,UACC,YAAY;AAAA,YACX;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD,CAAC;AAEM,SAAS,MAAM,QAAsB;AAC3C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC5B;;;AD7BA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIM;AA+IJ,SAYC,KAZD;AA7IH,IAAM,SAAS,EAAE,OAAO,IAAI,MAAM,sBAAsB;AAaxD,IAAM,mBAAmB,OAAO,KAAK,MAAM;AAE3C,IAAM,kBAAkB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAgBA,IAAM,eAAe,cAAwC,IAAI;AAE1D,SAAS,WAAW;AAC1B,QAAM,UAAU,WAAW,YAAY;AACvC,MAAI,CAAC,SAAS;AACb,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC3D;AACA,SAAO;AACR;AAEA,SAAS,0BAA0B,QAA2B;AAC7D,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AAClD,QAAI,MAAM,QAAQ;AACjB,YAAM,mBAAmB,iBAAiB;AAAA,QACzC,cAAY,MAAM,SAAS,QAAQ,MAAM;AAAA,MAC1C;AACA,UAAI,CAAC,kBAAkB;AACtB,cAAM,IAAI;AAAA,UACT,0CAA0C,GAAG,sDAAsD,iBAAiB,KAAK,IAAI,CAAC;AAAA,QAC/H;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;AAEO,SAAS,wBAAwB,QAAkC;AACzE,QAAM,UAAU,OAAO,QAAQ,MAAM;AACrC,SAAO,OAAO;AAAA,IACb,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,UAAU;AACnC,UAAI,KAAK,UAAU,KAAK,OAAO;AAC9B,YAAI,KAAK,SAAS,CAAC,KAAK,QAAQ;AAC/B,iBAAO;AAAA,YACN;AAAA,YACA;AAAA,cACC,GAAG;AAAA,cACH,QAAQ;AAAA,gBACP,OAAO,CAAC,KAAK,KAAK;AAAA,gBAClB,MAAM,CAAC,KAAK,KAAK;AAAA,cAClB;AAAA,YACD;AAAA,UACD;AAAA,QACD;AACA,eAAO,CAAC,KAAK,IAAI;AAAA,MAClB;AACA,YAAM,eACL,gBAAgB,QAAQ,gBAAgB,MAAM,KAAK,gBAAgB,CAAC;AACrE,aAAO;AAAA,QACN;AAAA,QACA;AAAA,UACC,GAAG;AAAA,UACH,QAAQ;AAAA,YACP,OAAO,CAAC,YAAY;AAAA,YACpB,MAAM,CAAC,YAAY;AAAA,UACpB;AAAA,QACD;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AACD;AAyBO,IAAM,QAAQ,WAAuC,SAASA,OACpE;AAAA,EACC;AAAA,EACA;AAAA,EACA,mBAAmB,EAAE,OAAO,KAAK,QAAQ,IAAI;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACJ,GACA,KACC;AACD,QAAM,WAAW,MAAM;AACvB,QAAM,UAAU,SAAS,MAAM,SAAS,QAAQ,MAAM,EAAE,CAAC;AACzD,QAAM,iBAAiB,wBAAwB,MAAM;AAErD,4BAA0B,cAAc;AAExC,SACC,oBAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,QAAQ,eAAe,GACtD;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,WAAW;AAAA,QACV;AAAA,QACA;AAAA,QACA,CAAC,UAAU;AAAA,QACX;AAAA,MACD;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,4BAAC,cAAW,IAAI,SAAS,QAAQ,gBAAgB;AAAA,QACjD;AAAA,UAAmB;AAAA,UAAlB;AAAA,YACA,WAAU;AAAA,YACV;AAAA,YAEC;AAAA;AAAA,QACF;AAAA,QACC;AAAA;AAAA;AAAA,EACF,GACD;AAEF,CAAC;AAEM,SAAS,iBAAiB,EAAE,UAAU,GAA2B;AACvE,MAAI,CAAC,UAAW,QAAO;AAEvB,SACC,oBAAC,SAAI,WAAU,8EACd,+BAAC,SAAI,WAAU,+IACd;AAAA,wBAAC,SAAI,WAAU,oFAAmF;AAAA,IAClG,oBAAC,UAAK,qBAAO;AAAA,KACd,GACD;AAEF;AAEA,SAAS,iBAAiB,aAAuB,UAA4B;AAC5E,QAAM,iBAAiB,YAAY;AACnC,MAAI,kBAAkB,UAAU;AAC/B,WAAO,YAAY,MAAM,GAAG,QAAQ;AAAA,EACrC;AAEA,QAAM,SAAmB,CAAC;AAC1B,QAAM,YAAY,KAAK,MAAM,WAAW,cAAc;AACtD,QAAM,aAAa,WAAW;AAE9B,WAAS,WAAW,GAAG,WAAW,gBAAgB,YAAY;AAC7D,UAAM,eAAe,YAAY,iBAAiB;AAClD,UAAM,oBAAoB,aAAa,eAAe,IAAI;AAC1D,aAAS,IAAI,GAAG,IAAI,mBAAmB,KAAK;AAC3C,YAAM,QAAQ,YAAY,QAAQ;AAClC,UAAI,MAAO,QAAO,KAAK,KAAK;AAAA,IAC7B;AAAA,EACD;AAEA,SAAO;AACR;AAEO,SAAS,WAAW;AAAA,EAC1B;AAAA,EACA;AACD,GAGG;AACF,QAAM,cAAc,OAAO,QAAQ,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,MAAM,KAAK,MAAM;AAE3E,MAAI,CAAC,YAAY,OAAQ,QAAO;AAEhC,QAAM,kBAAkB,CAAC,UACxB,YACE,QAAQ,CAAC,CAAC,KAAK,UAAU,MAAM;AAC/B,UAAM,cAAc,WAAW,SAAS,KAAK;AAC7C,QAAI,CAAC,aAAa,OAAQ,QAAO,CAAC;AAElC,UAAM,WAAW,eAAe,UAAU;AAC1C,UAAM,oBAAoB,iBAAiB,aAAa,QAAQ;AAEhE,WAAO,kBAAkB;AAAA,MACxB,CAAC,OAAO,UAAU,aAAa,GAAG,IAAI,KAAK,KAAK,KAAK;AAAA,IACtD;AAAA,EACD,CAAC,EACA,OAAO,OAAO,EACd,KAAK,IAAI;AAEZ,QAAM,MAAM,OAAO,QAAQ,MAAM,EAC/B;AAAA,IACA,CAAC,CAAC,OAAO,MAAM,MACd,GAAG,MAAM,gBAAgB,EAAE;AAAA,EAAQ,gBAAgB,KAA4B,CAAC;AAAA;AAAA,EAClF,EACC,KAAK,IAAI;AAEX,SAAO,oBAAC,WAAM,yBAAyB,EAAE,QAAQ,IAAI,GAAG;AACzD;AAEO,SAAS,4BACf,QACA,SACA,KACC;AACD,MAAI,OAAO,YAAY,YAAY,YAAY,KAAM,QAAO;AAE5D,QAAM,iBACL,aAAa,WACb,OAAO,QAAQ,YAAY,YAC3B,QAAQ,YAAY,OACjB,QAAQ,UACR;AAEJ,MAAI,iBAAyB;AAE7B,MACC,OAAO,WACP,OAAO,QAAQ,GAA2B,MAAM,UAC/C;AACD,qBAAiB,QAAQ,GAA2B;AAAA,EACrD,WACC,kBACA,OAAO,kBACP,OAAO,eAAe,GAAkC,MAAM,UAC7D;AACD,qBAAiB,eAChB,GACD;AAAA,EACD;AAEA,SAAO,kBAAkB,SAAS,OAAO,cAAc,IAAI,OAAO,GAAG;AACtE;AAMO,SAAS,eAAe,QAAqC;AACnE,MAAI,CAAC,OAAO,OAAQ,QAAO;AAC3B,QAAM,SAAS,iBAAiB;AAAA,IAC/B,WAAS,OAAO,SAAS,KAAK,GAAG,UAAU;AAAA,EAC5C;AACA,SAAO,KAAK,IAAI,GAAG,QAAQ,CAAC;AAC7B;;;AEjSA,YAAYC,wBAAuB;AAEnC,YAAY,WAAW;AAgEnB,SAmEK,UAnEL,OAAAC,MA0FO,QAAAC,aA1FP;AA3DJ,IAAM,eAAiD;AAAA,EACtD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACL;AAEA,IAAM,aAA6C;AAAA,EAClD,SAAS;AAAA,EACT,iBAAiB;AAClB;AAEA,SAAS,oBAAoB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,UAAU;AACX,GAaI;AACH,QAAM,EAAE,OAAO,IAAI,SAAS;AAE5B,QAAM,eAAqB,cAAQ,MAAM;AACxC,QAAI,aAAa,CAAC,SAAS,QAAQ;AAClC,aAAO;AAAA,IACR;AAEA,UAAM,CAAC,IAAI,IAAI;AACf,UAAM,MAAM,GAAG,YAAY,MAAM,WAAW,MAAM,QAAQ,OAAO;AACjE,UAAM,aAAa,4BAA4B,QAAQ,MAAM,GAAG;AAChE,UAAM,QACL,CAAC,YAAY,OAAO,UAAU,WAC1B,OAAO,KAAK,GAAG,SAAS,QACzB,YAAY;AAEhB,QAAI,gBAAgB;AACnB,aACC,gBAAAD,KAAC,SAAI,WAAW,GAAG,eAAe,cAAc,GAC9C,yBAAe,OAAO,OAAO,GAC/B;AAAA,IAEF;AAEA,QAAI,CAAC,OAAO;AACX,aAAO;AAAA,IACR;AAEA,WAAO,gBAAAA,KAAC,SAAI,WAAW,GAAG,eAAe,cAAc,GAAI,iBAAM;AAAA,EAClE,GAAG;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAED,MAAI,CAAC,UAAU,CAAC,SAAS,QAAQ;AAEhC,WAAO,gBAAAA,KAAC,UAAK,WAAU,OAAM;AAAA,EAC9B;AAEA,QAAM,YAAY,QAAQ,WAAW,KAAK,cAAc;AAExD,SACC,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACA,WAAW;AAAA,QACV;AAAA,QACA,aAAa,SAAS;AAAA,QACtB,WAAW,OAAO;AAAA,QAClB;AAAA,MACD;AAAA,MAEC;AAAA,SAAC,YAAY,eAAe;AAAA,QAC7B,gBAAAD,KAAC,SAAI,WAAU,gBACb,kBACC,OAAO,UAAQ,KAAK,SAAS,MAAM,EACnC,IAAI,CAAC,MAAM,UAAU;AAIrB,gBAAM,cACL,WAAW,KAAK,UACZ,KAAK,QAAoC,OAAO,IACjD;AACJ,gBAAM,MAAM,GAAG,eAAe,KAAK,QAAQ,KAAK,WAAW,OAAO;AAClE,gBAAM,aAAa,4BAA4B,QAAQ,MAAM,GAAG;AAGhE,gBAAM,cAAc,aAAa,eAAe,UAAU,IAAI;AAE9D,iBACC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cAEA,WAAW;AAAA,gBACV;AAAA,gBACA,cAAc,SAAS;AAAA,gBACvB,YAAY,QAAQ,aAAa,KAAK,WAAW;AAAA,cAClD;AAAA,cAEC,uBAAa,MAAM,UAAU,UAAa,KAAK,OAC/C,UAAU,KAAK,OAAO,KAAK,MAAM,MAAM,OAAO,KAAK,OAAO,IAE1D,gBAAAC,MAAA,YACE;AAAA,4BAAY,OACZ,gBAAAD,KAAC,WAAW,MAAX,EAAgB,IAEjB,CAAC,iBACA,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACA,WAAW,GAAG,0BAA0B;AAAA,sBACvC,eAAe,cAAc;AAAA,sBAC7B,OAAO,cAAc;AAAA,sBACrB,oDACC,cAAc;AAAA,sBACf,UAAU,aAAa,cAAc;AAAA,oBACtC,CAAC;AAAA,oBACD,OAAO,uBAAuB,KAAK,WAAW;AAAA;AAAA,gBAC/C;AAAA,gBAGF,gBAAAC;AAAA,kBAAC;AAAA;AAAA,oBACA,WAAW;AAAA,sBACV;AAAA,sBACA,YAAY,cAAc;AAAA,oBAC3B;AAAA,oBAEA;AAAA,sCAAAA,MAAC,SAAI,WAAU,gBACb;AAAA,oCAAY,eAAe;AAAA,wBAC5B,gBAAAD,KAAC,UAAK,WAAU,uBACd,sBAAY,SAAS,KAAK,MAC5B;AAAA,yBACD;AAAA,sBACC,KAAK,SAAS,QACd,gBAAAA,KAAC,UAAK,WAAU,wDACd,iBAAO,KAAK,UAAU,WACpB,KAAK,MAAM,eAAe,IAC1B,OAAO,KAAK,KAAK,GACrB;AAAA;AAAA;AAAA,gBAEF;AAAA,iBACD;AAAA;AAAA,YA/CI;AAAA,UAiDN;AAAA,QAEF,CAAC,GACH;AAAA;AAAA;AAAA,EACD;AAEF;AAEA,SAAS,uBACR,SACA,aACsB;AACtB,MAAI,eAAe,GAAG;AACrB,WAAO,EAAE,YAAY,eAAe,OAAO,MAAM;AAAA,EAClD;AAGA,QAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,YAAY,GAAG,CAAC,GAAG,UAAU;AAC/D,UAAM,SAAU,SAAS,cAAc,KAAM;AAC7C,WAAO,eAAe,OAAO,IAAI,KAAK,KAAK,MAAM;AAAA,EAClD,CAAC,EAAE,KAAK,IAAI;AAEZ,SAAO,EAAE,YAAY,6BAA6B,KAAK,IAAI;AAC5D;AAEA,IAAM,eAAe,CAAC;AAAA,EACrB,oBAAoB;AAAA,EACpB,GAAG;AACJ,MACC,gBAAAA,KAAmB,4BAAlB,EAA0B,mBAAuC,GAAG,OAAO;;;AC9M7E,SAAS,mBAAmB;AAC5B,SAAS,SAAAE,cAAa;AAkCpB,gBAAAC,MA+OC,QAAAC,aA/OD;AATF,IAAM,cAAc,CAAC,EAAE,GAAG,MACzB,gBAAAD;AAAA,EAAC;AAAA;AAAA,IACA;AAAA,IACA,GAAE;AAAA,IACF,GAAE;AAAA,IACF,OAAM;AAAA,IACN,QAAO;AAAA,IACP,cAAa;AAAA,IAEb,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACA,WAAU;AAAA,QACV,IAAG;AAAA,QACH,IAAG;AAAA,QACH,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACN;AAAA;AACD;AAGD,IAAM,cAAc,CAAC,EAAE,GAAG,MACzB,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACA;AAAA,IACA,GAAE;AAAA,IACF,GAAE;AAAA,IACF,OAAM;AAAA,IACN,QAAO;AAAA,IACP,cAAa;AAAA,IAEb,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACA,WAAU;AAAA,QACV,GAAE;AAAA,QACF,MAAK;AAAA,QACL,QAAO;AAAA,QACP,aAAY;AAAA;AAAA,IACb;AAAA;AACD;AAGD,IAAM,oBAAoB,CAAC,EAAE,GAAG,MAC/B,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACA;AAAA,IACA,GAAE;AAAA,IACF,GAAE;AAAA,IACF,OAAM;AAAA,IACN,QAAO;AAAA,IACP,cAAa;AAAA,IAEb,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACA,WAAU;AAAA,QACV,GAAE;AAAA,QACF,MAAK;AAAA,QACL,QAAO;AAAA,QACP,aAAY;AAAA;AAAA,IACb;AAAA;AACD;AAGD,IAAM,uBAAuB,CAAC,EAAE,GAAG,MAClC,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACA;AAAA,IACA,GAAE;AAAA,IACF,GAAE;AAAA,IACF,OAAM;AAAA,IACN,QAAO;AAAA,IACP,cAAa;AAAA,IACb,kBAAiB;AAAA,IAEjB,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACA,WAAU;AAAA,QACV,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,QAAO;AAAA,QACP,aAAY;AAAA;AAAA,IACb;AAAA;AACD;AAGD,IAAM,cAAc,CAAC,EAAE,GAAG,MACzB,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACA;AAAA,IACA,GAAE;AAAA,IACF,GAAE;AAAA,IACF,OAAM;AAAA,IACN,QAAO;AAAA,IACP,cAAa;AAAA,IAEb,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACA,WAAU;AAAA,QACV,GAAE;AAAA,QACF,MAAK;AAAA,QACL,QAAO;AAAA,QACP,aAAY;AAAA,QACZ,eAAc;AAAA;AAAA,IACf;AAAA;AACD;AAGD,IAAM,0BAA0B,CAAC,EAAE,GAAG,MACrC,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACA;AAAA,IACA,GAAE;AAAA,IACF,GAAE;AAAA,IACF,OAAM;AAAA,IACN,QAAO;AAAA,IACP,cAAa;AAAA,IAEb,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACA,WAAU;AAAA,QACV,GAAE;AAAA,QACF,WAAU;AAAA,QACV,MAAK;AAAA,QACL,aAAY;AAAA;AAAA,IACb;AAAA;AACD;AAGD,IAAM,yBAAyB,CAAC,EAAE,GAAG,MACpC,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACA;AAAA,IACA,GAAE;AAAA,IACF,GAAE;AAAA,IACF,OAAM;AAAA,IACN,QAAO;AAAA,IACP,cAAa;AAAA,IAEb,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACA,WAAU;AAAA,QACV,UAAS;AAAA,QACT,QAAO;AAAA,QACP,MAAK;AAAA,QACL,aAAY;AAAA;AAAA,IACb;AAAA;AACD;AAGD,IAAM,sBAAsB,CAAC,EAAE,GAAG,MACjC,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACA;AAAA,IACA,GAAE;AAAA,IACF,GAAE;AAAA,IACF,OAAM;AAAA,IACN,QAAO;AAAA,IACP,cAAa;AAAA,IAEb,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACA,WAAU;AAAA,QACV,UAAS;AAAA,QACT,GAAE;AAAA,QACF,MAAK;AAAA,QACL,aAAY;AAAA;AAAA,IACb;AAAA;AACD;AAGD,IAAM,4BAA4B,CAAC,EAAE,GAAG,MACvC,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACA;AAAA,IACA,GAAE;AAAA,IACF,GAAE;AAAA,IACF,OAAM;AAAA,IACN,QAAO;AAAA,IACP,cAAa;AAAA,IAEb,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACA,WAAU;AAAA,QACV,UAAS;AAAA,QACT,GAAE;AAAA,QACF,MAAK;AAAA,QACL,aAAY;AAAA;AAAA,IACb;AAAA;AACD;AAGD,IAAM,qBAAqB,CAAC,EAAE,GAAG,MAChC,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACA;AAAA,IACA,GAAE;AAAA,IACF,GAAE;AAAA,IACF,OAAM;AAAA,IACN,QAAO;AAAA,IACP,cAAa;AAAA,IACb,kBAAiB;AAAA,IAEjB,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACA,WAAU;AAAA,QACV,GAAE;AAAA,QACF,MAAK;AAAA,QACL,aAAY;AAAA;AAAA,IACb;AAAA;AACD;AAGD,IAAM,iBAAiB,CAAC,EAAE,GAAG,MAC5B,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACA;AAAA,IACA,GAAE;AAAA,IACF,GAAE;AAAA,IACF,OAAM;AAAA,IACN,QAAO;AAAA,IACP,cAAa;AAAA,IACb,kBAAiB;AAAA,IAEjB,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACA,WAAU;AAAA,QACV,GAAE;AAAA,QACF,MAAK;AAAA,QACL,aAAY;AAAA,QACZ,UAAS;AAAA;AAAA,IACV;AAAA;AACD;AAMD,IAAM,cAAiE;AAAA,EACtE,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,uBAAuB;AAAA,EACvB,gBAAgB;AACjB;AAUO,SAAS,gBAAgB,EAAE,QAAQ,GAAyB;AAClE,QAAM,SAASD,OAAM,EAAE,QAAQ,MAAM,EAAE;AACvC,QAAM,YAAY,GAAG,MAAM,OAAO,OAAO;AACzC,QAAM,SAAS,GAAG,MAAM;AACxB,QAAM,WAAW,GAAG,MAAM;AAC1B,QAAM,mBAAmB,YAAY,OAAO;AAE5C,SACC,gBAAAE,MAAC,eAAY,QAAQ,IACpB;AAAA,oBAAAA,MAAC,UACA;AAAA,sBAAAD,KAAC,oBAAiB,IAAI,WAAW;AAAA,MAEjC,gBAAAA,KAAC,YAAO,IAAI,UACX,0BAAAA,KAAC,oBAAe,cAAa,MAAK,GACnC;AAAA,MAEA,gBAAAA,KAAC,UAAK,IAAI,QAAQ,WAAU,kBAC3B,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACA,GAAE;AAAA,UACF,GAAE;AAAA,UACF,OAAM;AAAA,UACN,QAAO;AAAA,UACP,MAAK;AAAA,UACL,QAAQ,QAAQ,QAAQ;AAAA;AAAA,MACzB,GACD;AAAA,OACD;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACA,OAAM;AAAA,QACN,QAAO;AAAA,QACP,MAAM,QAAQ,SAAS;AAAA,QACvB,MAAM,QAAQ,MAAM;AAAA;AAAA,IACrB;AAAA,KACD;AAEF;;;AC/RA;AAAA,EACC;AAAA,EACA,iBAAAE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA;AAAA,OAIM;AACP;AAAA,EACC,UAAU;AAAA,EACV;AAAA,OAMM;AACP,SAAS,cAAc;AA6GnB,SAyMA,YAAAC,WAzMA,OAAAC,MAGC,QAAAC,aAHD;AA3GJ,IAAM,6BAA6B;AACnC,IAAM,qBAAqB;AAC3B,IAAM,uBAAuB;AAC7B,IAAM,yBAAyB;AAC/B,IAAM,qBAAqB;AAc3B,IAAM,qBAAqBL,eAA8C,IAAI;AAE7E,SAAS,iBAAiB;AACzB,QAAM,UAAU,IAAI,kBAAkB;AAEtC,MAAI,CAAC,SAAS;AACb,UAAM,IAAI;AAAA,MACT;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AA2BO,SAAS,YAAY;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB;AAAA,EACA,sBAAsB;AAAA,EACtB;AAAA,EACA,YAAY;AACb,GAAqB;AACpB,QAAM,UAAUC,OAAM,EAAE,QAAQ,MAAM,EAAE;AACxC,QAAM,CAAC,cAAc,eAAe,IAAI;AAAA,IACvC;AAAA,EACD;AAEA,QAAM,aAAa;AAAA,IAClB,CAAC,aAA4B;AAC5B,sBAAgB,QAAQ;AAExB,UAAI,CAAC,kBAAmB;AAExB,UAAI,aAAa,MAAM;AACtB,0BAAkB,IAAI;AACtB;AAAA,MACD;AAEA,wBAAkB;AAAA,QACjB,SAAS;AAAA,QACT,OAAO,aAAa,MAAM,QAAQ;AAAA,MACnC,CAAC;AAAA,IACF;AAAA,IACA,CAAC,mBAAmB,IAAI;AAAA,EACzB;AAEA,QAAM,eAAeC;AAAA,IACpB,OAAO,EAAE,MAAM,QAAQ,SAAS,WAAW,cAAc,WAAW;AAAA,IACpE,CAAC,MAAM,QAAQ,SAAS,WAAW,cAAc,UAAU;AAAA,EAC5D;AAEA,SACC,gBAAAE,KAAC,sBAAmB,OAAO,cAC1B,0BAAAC,MAAC,SAAM,WAAsB,QAC5B;AAAA,oBAAAD,KAAC,oBAAiB,WAAsB;AAAA,IACvC,qBAAqB,gBAAAA,KAAC,mBAAgB,SAAS,mBAAmB;AAAA,IAClE,CAAC,aACD,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACA,IAAI;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACC,GAAG,uBAAuB,QAAQ;AAAA,QAClC,GAAG;AAAA,QAEH;AAAA;AAAA,UACD,gBAAAD,KAAC,UACA,0BAAAA,KAAC,sBAAmB,QAAgB,SAAkB,GACvD;AAAA;AAAA;AAAA,IACD;AAAA,IAEA,aACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACA,SAAQ;AAAA,QACR,qBAAoB;AAAA,QACpB,OAAM;AAAA,QACN,QAAO;AAAA,QACP,WAAU;AAAA,QAEV,0BAAAA,KAAC,iBAAc;AAAA;AAAA,IAChB;AAAA,KAEF,GACD;AAEF;AAQO,IAAM,OAAsB,MAAM;AAQlC,IAAM,YAAgC,MAAM;AAO5C,IAAM,OAAsB,MAAM;AAQlC,SAASE,SAAQ,EAAE,SAAS,WAAW,aAAa,GAAiB;AAC3E,QAAM,EAAE,UAAU,IAAI,eAAe;AAErC,MAAI,UAAW,QAAO;AAEtB,SACC,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,SACC,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACA,SAAQ;AAAA,UACR,WAAS;AAAA,UACT;AAAA,UACA;AAAA;AAAA,MACD;AAAA;AAAA,EAEF;AAEF;AAEA,IAAM,eAAe,CAAC,MAAkB,aAA6B;AACpE,QAAM,YAAY,KAAK,MAAM,UAAU,UAAQ,KAAK,SAAS,QAAQ;AACrE,MAAI,cAAc,GAAI,QAAO;AAE7B,QAAM,WAAW,KAAK,MACpB,OAAO,UAAQ,KAAK,WAAW,SAAS,EACxC,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,OAAO,CAAC;AAC3C,QAAM,WAAW,KAAK,MACpB,OAAO,UAAQ,KAAK,WAAW,SAAS,EACxC,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,OAAO,CAAC;AAE3C,SAAO,WAAW,IAAI,WAAW;AAClC;AAEA,IAAM,yBAAyB,CAC9B,aACwC;AACxC,MAAI,YAA8B;AAClC,MAAI,YAA8B;AAElC,WAAS,QAAQ,UAAU,WAAS;AACnC,QAAI,CAAC,eAAe,KAAK,EAAG;AAE5B,QAAI,MAAM,SAAS,MAAM;AACxB,kBAAa,MAAkC;AAAA,IAChD;AAEA,QAAI,MAAM,SAAS,MAAM;AACxB,kBAAa,MAAkC;AAAA,IAChD;AAAA,EACD,CAAC;AAED,SAAO;AAAA,IACN,MAAM,CAAC,UACN,gBAAAA,KAAC,cAAY,GAAG,OAAO,YAAY,WAAW;AAAA,IAE/C,MAAM,CAAC,UACN,gBAAAA,KAAC,cAAY,GAAG,OAAO,YAAY,WAAW;AAAA,EAEhD;AACD;AAEA,IAAM,mBAAmB,CAAC,aAA+C;AACxE,MAAI,QAA+B;AAEnC,WAAS,QAAQ,UAAU,WAAS;AACnC,QAAI,eAAe,KAAK,KAAK,MAAM,SAAS,WAAW;AACtD,cAAS,MAAuC;AAAA,IACjD;AAAA,EACD,CAAC;AAED,SAAO;AACR;AAMA,IAAM,aAAa,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,MAA+B;AAC9B,QAAM,EAAE,QAAQ,SAAS,MAAM,cAAc,WAAW,IAAI,eAAe;AAE3E,QAAM,SAAS,YAAY,UAAU;AACrC,QAAM,cAAc,YAAY,eAAe;AAC/C,QAAM,QAAQ,iBAAiB,YAAY,QAAQ;AAEnD,QAAM,WAAW,QAAQ;AACzB,QAAM,YAAY,QAAQ;AAC1B,QAAM,WAAY,QAAsD;AAExE,QAAM,gBAAgB,gBAAgB,MAAM,cAAc,QAAQ;AAClE,QAAM,iBAAiB,YAAY;AACnC,QAAM,cAAc,OAAO,QAAQ,GAAG,SAAS;AAC/C,QAAM,SAAS,eAAe,CAAC;AAE/B,QAAM,iBACL,OAAO,mBAAmB,CAAC,UAAkB,MAAM,eAAe;AACnE,QAAM,aAAa,OAAO,cAAc;AAExC,QAAM,SAAS,IAAI,QAAQ;AAC3B,QAAM,SAAS,aAAa,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS;AAC9D,QAAM,SAAS,IAAI,SAAS,IAAI;AAChC,QAAM,gBAAgB,IAAI,QAAQ;AAClC,QAAM,gBAAgB,IAAI,SAAS;AAEnC,SACC,gBAAAC,MAAC,SACA;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MACC,iBACG,QAAQ,OAAO,kBAAkB,QAAQ,MACzC;AAAA,QAEJ,aAAa,SAAS,MAAM;AAAA,QAC5B,WAAU;AAAA,QACV,OAAO,cAAc,EAAE,QAAQ,UAAU,IAAI;AAAA,QAC7C,SAAS,MAAM;AACd,cAAI,CAAC,YAAa;AAClB,qBAAW,iBAAiB,WAAW,OAAO,QAAQ;AAAA,QACvD;AAAA;AAAA,IACD;AAAA,IACC,OAAO,aAAa,YACpB,gBAAAC,MAAAF,WAAA,EACC;AAAA,sBAAAC;AAAA,QAAC;AAAA;AAAA,UACA,GAAG,IAAI;AAAA,UACP,GAAG,IAAI;AAAA,UACP,OAAO,QAAQ;AAAA,UACf,QAAQ,SAAS;AAAA,UACjB,IAAI,KAAK,IAAI,GAAG,SAAS,CAAC;AAAA,UAC1B,IAAI,KAAK,IAAI,GAAG,SAAS,CAAC;AAAA,UAC1B,SAAS,SAAS,MAAM;AAAA,UACxB,WAAU;AAAA,UACV,OAAO,EAAE,eAAe,OAAO;AAAA;AAAA,MAChC;AAAA,MACC,YACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACA,GAAG,SAAS;AAAA,UACZ,GAAG,SAAS;AAAA,UACZ,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,SAAS,SAAS,MAAM;AAAA,UACxB,WAAU;AAAA,UACV,OAAO,EAAE,eAAe,OAAO;AAAA,UAE/B,0BAAAA,KAAC,SAAI,WAAU,4EACb,oBACF;AAAA;AAAA,MACD;AAAA,MAED,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACA,GAAG;AAAA,UACH,GAAG,WAAW,SAAS,IAAI;AAAA,UAC3B,YAAW;AAAA,UACX,kBAAiB;AAAA,UACjB,WAAU;AAAA,UACV,SAAS,SAAS,MAAM;AAAA,UACxB,OAAO,EAAE,eAAe,OAAO;AAAA,UAE9B;AAAA;AAAA,MACF;AAAA,MACC,cACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACA,GAAG;AAAA,UACH,GAAG;AAAA,UACH,YAAW;AAAA,UACX,kBAAiB;AAAA,UACjB,WAAU;AAAA,UACV,SAAS,SAAS,MAAM;AAAA,UACxB,OAAO,EAAE,eAAe,OAAO;AAAA,UAE9B,yBAAe,SAAS;AAAA;AAAA,MAC1B;AAAA,OAEF;AAAA,IAEA,OAAO,aAAa,aACpB,gBAAAC,MAAAF,WAAA,EACC;AAAA,sBAAAC;AAAA,QAAC;AAAA;AAAA,UACA,GAAG;AAAA,UACH,GAAG,iBAAiB,aAAa,IAAI;AAAA,UACrC,YAAW;AAAA,UACX,kBAAiB;AAAA,UACjB,WAAU;AAAA,UACV,OAAO,EAAE,eAAe,OAAO;AAAA,UAE9B;AAAA;AAAA,MACF;AAAA,MACC,cACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACA,GAAG;AAAA,UACH,GAAG,gBAAgB;AAAA,UACnB,YAAW;AAAA,UACX,kBAAiB;AAAA,UACjB,SAAS;AAAA,UACT,WAAU;AAAA,UACV,OAAO,EAAE,eAAe,OAAO;AAAA,UAE9B,yBAAe,SAAS;AAAA;AAAA,MAC1B;AAAA,OAEF;AAAA,KAEF;AAEF;AAMA,IAAM,aAAa,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,MAA+B;AAC9B,QAAM,EAAE,QAAQ,SAAS,aAAa,IAAI,eAAe;AAEzD,QAAM,UAAU,YAAY,WAAW;AACvC,QAAM,kBAAkB,YAAY,mBAAmB;AAEvD,QAAM,aAAa,QAAQ,OAAO;AAClC,QAAM,aAAa,QAAQ,OAAO;AAElC,QAAM,cACL,iBAAiB,QACjB,iBAAiB,cACjB,iBAAiB;AAElB,QAAM,kBAAkB,KAAK,IAAI,GAAG,YAAY,eAAe;AAC/D,QAAM,YAAY,kBAAkB;AAEpC,QAAM,eAAe,IAAI,OAAO,IAAI,UAAU,SAAS;AAAA,OACjD,cAAc,IAAI,UAAU,SAAS,IAAI,cAAc,IAAI,UAAU,SAAS,IAAI,OAAO,IAAI,UAAU,SAAS;AAAA,OAChH,OAAO,IAAI,UAAU,SAAS;AAAA,OAC9B,cAAc,IAAI,UAAU,SAAS,IAAI,cAAc,IAAI,UAAU,SAAS,IAAI,OAAO,IAAI,UAAU,SAAS;AAAA;AAGtH,SACC,gBAAAC,MAAC,SACA;AAAA,oBAAAA,MAAC,UACC;AAAA,kBAAY,cACZ,gBAAAD;AAAA,QAAC;AAAA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACD;AAAA,MAED,gBAAAA,KAAC,sBAAmB,SAAkB,OAAc;AAAA,OACrD;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACA,GAAG;AAAA,QACH,MAAM;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD;AAAA,QACA,aAAa,cAAc,MAAM;AAAA,QACjC,QACC,iBAAiB,QAAQ,cACtB,QAAQ,OAAO,gBAAgB,KAAK,MACpC;AAAA,QAEJ,aAAa;AAAA,QACb,eAAe;AAAA,QACf,WAAU;AAAA;AAAA,IACX;AAAA,KACD;AAEF;AAEA,IAAM,kBAAkB,CACvB,MACA,cACA,aACa;AACb,MAAI,iBAAiB,QAAQ,iBAAiB,SAAU,QAAO;AAE/D,QAAM,cAAc,KAAK,MAAM,UAAU,UAAQ,KAAK,SAAS,YAAY;AAC3E,QAAM,UAAU,KAAK,MAAM,UAAU,UAAQ,KAAK,SAAS,QAAQ;AAEnE,SAAO,KAAK,MAAM;AAAA,IACjB,UACE,KAAK,WAAW,eAAe,KAAK,WAAW,WAC/C,KAAK,WAAW,WAAW,KAAK,WAAW;AAAA,EAC9C;AACD;AAEA,IAAM,cAAc,CACnB,SACA,SACA,OACA,QACA,YACA,eACY;AACZ,UAAQ,SAAS;AAAA,IAChB,KAAK;AACJ,aAAO,QAAQ,OAAO,kBAAkB,KAAK;AAAA,IAC9C,KAAK;AACJ,aAAO,cAAc,SAClB,QAAQ,OAAO,kBAAkB,UAAU,MAC3C;AAAA,IACJ,KAAK;AACJ,aAAO,cAAc,SAClB,QAAQ,OAAO,kBAAkB,UAAU,MAC3C;AAAA,IACJ,KAAK;AAAA,IACL;AACC,aAAO;AAAA,EACT;AACD;AAEA,IAAM,qBAAqB,CAAC;AAAA,EAC3B;AAAA,EACA;AACD,MAGM;AACL,SACC,gBAAAA,KAAAD,WAAA,EACE,iBAAO,QAAQ,MAAM,EAAE,IAAI,CAAC,CAAC,SAAS,UAAU,MAAM;AACtD,UAAM,cAAc,eAAe,UAAU;AAE7C,WACC,gBAAAC;AAAA,MAAC;AAAA;AAAA,QAEA,IAAI,GAAG,OAAO,kBAAkB,OAAO;AAAA,QACvC,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QAEF,0BAAgB,IAChB,gBAAAC,MAAAF,WAAA,EACC;AAAA,0BAAAC,KAAC,UAAK,QAAO,MAAK,WAAW,eAAe,OAAO,OAAO;AAAA,UAC1D,gBAAAA,KAAC,UAAK,QAAO,QAAO,WAAW,eAAe,OAAO,OAAO;AAAA,WAC7D,IAEA,MAAM,KAAK,EAAE,QAAQ,YAAY,GAAG,CAAC,GAAG,UAAU;AACjD,gBAAM,SAAS,GAAI,SAAS,cAAc,KAAM,GAAG;AACnD,iBACC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cAEA;AAAA,cACA,WAAW,eAAe,OAAO,IAAI,KAAK,iBAAiB,OAAO;AAAA;AAAA,YAF7D;AAAA,UAGN;AAAA,QAEF,CAAC;AAAA;AAAA,MAtBG,GAAG,OAAO,kBAAkB,OAAO;AAAA,IAwBzC;AAAA,EAEF,CAAC,GACF;AAEF;AAEA,IAAM,eAAe,CAAC;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,MAMM;AACL,QAAM,cACL,cAAc,SAAS,eAAe,UAAU,QAAQ;AACzD,QAAM,cACL,cAAc,SAAS,eAAe,UAAU,QAAQ;AAEzD,SACC,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACA,IAAI,GAAG,OAAO,kBAAkB,KAAK;AAAA,MACrC,IAAG;AAAA,MACH,IAAG;AAAA,MACH,IAAG;AAAA,MACH,IAAG;AAAA,MAEH;AAAA,wBAAAD,KAAC,UAAK,QAAO,MAAK,WAAW,aAAa,aAAa,KAAK;AAAA,QAC5D,gBAAAA,KAAC,UAAK,QAAO,OAAM,WAAW,aAAa,aAAa,KAAK;AAAA,QAC7D,gBAAAA,KAAC,UAAK,QAAO,QAAO,WAAW,aAAa,aAAa,KAAK;AAAA;AAAA;AAAA,EAC/D;AAEF;AAEA,IAAM,qBAAqB,CAAC;AAAA,EAC3B;AAAA,EACA;AACD,MAGM;AACL,SACC,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACA,IAAI,GAAG,OAAO,gBAAgB,KAAK;AAAA,MACnC,IAAG;AAAA,MACH,IAAG;AAAA,MACH,IAAG;AAAA,MACH,IAAG;AAAA,MAEH;AAAA,wBAAAD,KAAC,UAAK,QAAO,MAAK,WAAU,kBAAiB,aAAa,GAAG;AAAA,QAC7D,gBAAAA,KAAC,UAAK,QAAO,OAAM,WAAU,kBAAiB,aAAa,KAAK;AAAA,QAChE,gBAAAA,KAAC,UAAK,QAAO,OAAM,WAAU,kBAAiB,aAAa,GAAG;AAAA,QAC9D,gBAAAA,KAAC,UAAK,QAAO,OAAM,WAAU,kBAAiB,aAAa,KAAK;AAAA,QAChE,gBAAAA,KAAC,UAAK,QAAO,QAAO,WAAU,kBAAiB,aAAa,GAAG;AAAA;AAAA;AAAA,EAChE;AAEF;AAEA,IAAM,gBAAgB,MAAM;AAC3B,QAAM,QAAQ;AAAA,IACb,EAAE,GAAG,IAAI,GAAG,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAO,EAAE;AAAA,IAChD,EAAE,GAAG,IAAI,GAAG,KAAK,OAAO,IAAI,QAAQ,IAAI,OAAO,IAAI;AAAA,IACnD,EAAE,GAAG,IAAI,GAAG,KAAK,OAAO,IAAI,QAAQ,IAAI,OAAO,KAAK;AAAA,IACpD,EAAE,GAAG,KAAK,GAAG,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAO,KAAK;AAAA,IACpD,EAAE,GAAG,KAAK,GAAG,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAO,IAAI;AAAA,IACnD,EAAE,GAAG,KAAK,GAAG,KAAK,OAAO,IAAI,QAAQ,IAAI,OAAO,KAAK;AAAA,IACrD,EAAE,GAAG,KAAK,GAAG,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAO,IAAI;AAAA,IACnD,EAAE,GAAG,KAAK,GAAG,KAAK,OAAO,IAAI,QAAQ,IAAI,OAAO,IAAI;AAAA,EACrD;AAEA,QAAM,QAAQ;AAAA,IACb,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,IAAI,OAAO,IAAI;AAAA,IACxC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,IAAI,OAAO,IAAI;AAAA,IACxC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,IAAI,OAAO,IAAI;AAAA,IACxC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,IAAI,OAAO,IAAI;AAAA,IACxC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,IAAI,OAAO,IAAI;AAAA,IACxC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,IAAI,OAAO,KAAK;AAAA,IACzC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,IAAI,OAAO,KAAK;AAAA,IACzC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,IAAI,OAAO,IAAI;AAAA,IACxC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,IAAI,OAAO,KAAK;AAAA,IACzC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,IAAI,OAAO,KAAK;AAAA,IACzC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,IAAI,OAAO,KAAK;AAAA,EAC1C;AAEA,QAAM,cAAc,CAAC,SAAiB,UAAkB;AACvD,UAAM,OAAO,MAAM,OAAO;AAC1B,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,SAAS,KAAK,IAAI,KAAK;AAC7B,UAAM,SAAS,KAAK,IAAI,KAAK,SAAS;AACtC,UAAM,OAAO,GAAG;AAChB,UAAM,OAAO,GAAG,IAAI,GAAG,SAAS;AAChC,UAAM,YAAY,UAAU,OAAO,UAAU;AAC7C,UAAM,YAAY,UAAU,OAAO,UAAU;AAC7C,WAAO,IAAI,MAAM,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA,EACzF;AAEA,QAAM,eAAe,6BAA6B;AAElD,SACC,gBAAAC,MAAAF,WAAA,EACE;AAAA,UAAM,IAAI,CAAC,MAAM,MACjB,gBAAAC;AAAA,MAAC,OAAO;AAAA,MAAP;AAAA,QAEA,GAAG,YAAY,KAAK,MAAM,KAAK,EAAE;AAAA,QACjC,MAAK;AAAA,QACL,QAAO;AAAA,QACP,aAAa,KAAK;AAAA,QAClB,SAAS,EAAE,SAAS,KAAK;AAAA,QACzB,SAAS,EAAE,SAAS,CAAC,MAAM,MAAM,IAAI,EAAE;AAAA,QACvC,YAAY;AAAA,UACX,UAAU,gBAAgB,MAAO,IAAI,IAAK;AAAA,UAC1C,OAAO,KAAK;AAAA,UACZ,QAAQ;AAAA,UACR,MAAM;AAAA,QACP;AAAA;AAAA,MAZK,gBAAgB,KAAK,IAAI,IAAI,KAAK,EAAE;AAAA,IAa1C,CACA;AAAA,IACA,MAAM,IAAI,CAAC,MAAM,MACjB,gBAAAA;AAAA,MAAC,OAAO;AAAA,MAAP;AAAA,QAEA,GAAG,KAAK;AAAA,QACR,GAAG,KAAK;AAAA,QACR,OAAO,KAAK;AAAA,QACZ,QAAQ,KAAK;AAAA,QACb,IAAI;AAAA,QACJ,MAAK;AAAA,QACL,SAAS,EAAE,SAAS,KAAK;AAAA,QACzB,SAAS,EAAE,SAAS,CAAC,MAAM,KAAK,IAAI,EAAE;AAAA,QACtC,YAAY;AAAA,UACX,UAAU,gBAAgB,MAAO,IAAI,IAAK;AAAA,UAC1C,OAAO,KAAK;AAAA,UACZ,QAAQ;AAAA,UACR,MAAM;AAAA,QACP;AAAA;AAAA,MAdK,gBAAgB,KAAK,CAAC,IAAI,KAAK,CAAC;AAAA,IAetC,CACA;AAAA,KACF;AAEF;","names":["Chart","RechartsPrimitive","jsx","jsxs","useId","jsx","jsxs","createContext","useId","useMemo","Fragment","jsx","jsxs","Tooltip"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/charts/chart.tsx","../src/lib/cn.ts","../src/components/charts/chart-tooltip.tsx","../src/components/charts/chart-background.tsx","../src/components/charts/sankey-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 { 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 { 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\tLoadingIndicator,\n} from \"./chart\"\nimport {\n\tChartTooltip,\n\tChartTooltipContent,\n\ttype TooltipRoundness,\n\ttype TooltipVariant,\n} from \"./chart-tooltip\"\nimport { ChartBackground, type BackgroundVariant } from \"./chart-background\"\nimport {\n\tChildren,\n\tcreateContext,\n\tisValidElement,\n\tuse,\n\tuseCallback,\n\tuseId,\n\tuseMemo,\n\tuseState,\n\ttype FC,\n\ttype ReactElement,\n\ttype ReactNode,\n} from \"react\"\nimport {\n\tSankey as RechartsSankey,\n\tLayer,\n\ttype SankeyProps,\n\ttype SankeyNodeProps,\n\ttype SankeyLinkProps,\n\ttype SankeyData,\n\ttype SankeyNode as RechartsSankeyNode,\n} from \"recharts\"\nimport { motion } from \"motion/react\"\n\nconst LOADING_ANIMATION_DURATION = 2000\nconst DEFAULT_NODE_WIDTH = 10\nconst DEFAULT_NODE_PADDING = 10\nconst DEFAULT_LINK_CURVATURE = 0.5\nconst DEFAULT_ITERATIONS = 32\n\ntype LinkVariant = \"gradient\" | \"solid\" | \"source\" | \"target\"\ntype NodeLabelPosition = \"inside\" | \"outside\"\n\ntype SankeyChartContextValue = {\n\tdata: SankeyData\n\tconfig: ChartConfig\n\tchartId: string\n\tisLoading: boolean\n\tselectedNode: string | null\n\tselectNode: (nodeName: string | null) => void\n}\n\nconst SankeyChartContext = createContext<SankeyChartContextValue | null>(null)\n\nfunction useSankeyChart() {\n\tconst context = use(SankeyChartContext)\n\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"Sankey chart parts (<Node />, <Link />, <Tooltip />, …) must be used within <SankeyChart />\",\n\t\t)\n\t}\n\n\treturn context\n}\n\ntype SankeyChartBaseProps = {\n\tdata: SankeyData\n\tconfig: ChartConfig\n\tchildren: ReactNode\n\tclassName?: string\n\tsankeyProps?: Omit<SankeyProps, \"data\">\n\tnodeWidth?: number\n\tnodePadding?: number\n\tlinkCurvature?: number\n\titerations?: number\n\tsort?: boolean\n\talign?: \"left\" | \"justify\"\n\tverticalAlign?: \"justify\" | \"top\"\n\tbackgroundVariant?: BackgroundVariant\n\tdefaultSelectedNode?: string | null\n\tonSelectionChange?: (\n\t\tselection: { dataKey: string; value: number } | null,\n\t) => void\n\tisLoading?: boolean\n}\n\ntype SankeyChartProps = SankeyChartBaseProps\n\nexport type { SankeyChartProps }\n\nexport function SankeyChart({\n\tdata,\n\tconfig,\n\tchildren,\n\tclassName,\n\tsankeyProps,\n\tnodeWidth = DEFAULT_NODE_WIDTH,\n\tnodePadding = DEFAULT_NODE_PADDING,\n\tlinkCurvature = DEFAULT_LINK_CURVATURE,\n\titerations = DEFAULT_ITERATIONS,\n\tsort = true,\n\talign = \"justify\",\n\tverticalAlign = \"justify\",\n\tbackgroundVariant,\n\tdefaultSelectedNode = null,\n\tonSelectionChange,\n\tisLoading = false,\n}: SankeyChartProps) {\n\tconst chartId = useId().replace(/:/g, \"\")\n\tconst [selectedNode, setSelectedNode] = useState<string | null>(\n\t\tdefaultSelectedNode,\n\t)\n\n\tconst selectNode = useCallback(\n\t\t(nodeName: string | null) => {\n\t\t\tsetSelectedNode(nodeName)\n\n\t\t\tif (!onSelectionChange) return\n\n\t\t\tif (nodeName === null) {\n\t\t\t\tonSelectionChange(null)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tonSelectionChange({\n\t\t\t\tdataKey: nodeName,\n\t\t\t\tvalue: getNodeValue(data, nodeName),\n\t\t\t})\n\t\t},\n\t\t[onSelectionChange, data],\n\t)\n\n\tconst contextValue = useMemo<SankeyChartContextValue>(\n\t\t() => ({ data, config, chartId, isLoading, selectedNode, selectNode }),\n\t\t[data, config, chartId, isLoading, selectedNode, selectNode],\n\t)\n\n\treturn (\n\t\t<SankeyChartContext value={contextValue}>\n\t\t\t<Chart className={className} config={config}>\n\t\t\t\t<LoadingIndicator isLoading={isLoading} />\n\t\t\t\t{backgroundVariant && <ChartBackground variant={backgroundVariant} />}\n\t\t\t\t{!isLoading && (\n\t\t\t\t\t<RechartsSankey\n\t\t\t\t\t\tid={chartId}\n\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\tnodeWidth={nodeWidth}\n\t\t\t\t\t\tnodePadding={nodePadding}\n\t\t\t\t\t\tlinkCurvature={linkCurvature}\n\t\t\t\t\t\titerations={iterations}\n\t\t\t\t\t\tsort={sort}\n\t\t\t\t\t\talign={align}\n\t\t\t\t\t\tverticalAlign={verticalAlign}\n\t\t\t\t\t\t{...resolveSankeyRenderers(children)}\n\t\t\t\t\t\t{...sankeyProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t\t<defs>\n\t\t\t\t\t\t\t<NodeColorGradients config={config} chartId={chartId} />\n\t\t\t\t\t\t</defs>\n\t\t\t\t\t</RechartsSankey>\n\t\t\t\t)}\n\t\t\t\t{isLoading && (\n\t\t\t\t\t<svg\n\t\t\t\t\t\tviewBox=\"0 0 500 250\"\n\t\t\t\t\t\tpreserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\tclassName=\"absolute inset-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<LoadingSankey />\n\t\t\t\t\t</svg>\n\t\t\t\t)}\n\t\t\t</Chart>\n\t\t</SankeyChartContext>\n\t)\n}\n\ntype NodeProps = {\n\tradius?: number\n\tisClickable?: boolean\n\tchildren?: ReactNode\n}\n\nexport const Node: FC<NodeProps> = () => null\n\ntype NodeLabelProps = {\n\tposition?: NodeLabelPosition\n\tshowValues?: boolean\n\tvalueFormatter?: (value: number) => string\n}\n\nexport const NodeLabel: FC<NodeLabelProps> = () => null\n\ntype LinkProps = {\n\tvariant?: LinkVariant\n\tverticalPadding?: number\n}\n\nexport const Link: FC<LinkProps> = () => null\n\ntype TooltipProps = {\n\tvariant?: TooltipVariant\n\troundness?: TooltipRoundness\n\tdefaultIndex?: number\n}\n\nexport function Tooltip({ variant, roundness, defaultIndex }: TooltipProps) {\n\tconst { isLoading } = useSankeyChart()\n\n\tif (isLoading) return null\n\n\treturn (\n\t\t<ChartTooltip\n\t\t\tdefaultIndex={defaultIndex}\n\t\t\tcontent={\n\t\t\t\t<ChartTooltipContent\n\t\t\t\t\tnameKey=\"name\"\n\t\t\t\t\thideLabel\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\nconst getNodeValue = (data: SankeyData, nodeName: string): number => {\n\tconst nodeIndex = data.nodes.findIndex(node => node.name === nodeName)\n\tif (nodeIndex === -1) return 0\n\n\tconst outgoing = data.links\n\t\t.filter(link => link.source === nodeIndex)\n\t\t.reduce((sum, link) => sum + link.value, 0)\n\tconst incoming = data.links\n\t\t.filter(link => link.target === nodeIndex)\n\t\t.reduce((sum, link) => sum + link.value, 0)\n\n\treturn outgoing > 0 ? outgoing : incoming\n}\n\nconst resolveSankeyRenderers = (\n\tchildren: ReactNode,\n): Pick<SankeyProps, \"node\" | \"link\"> => {\n\tlet nodeProps: NodeProps | null = null\n\tlet linkProps: LinkProps | null = null\n\n\tChildren.forEach(children, child => {\n\t\tif (!isValidElement(child)) return\n\n\t\tif (child.type === Node) {\n\t\t\tnodeProps = (child as ReactElement<NodeProps>).props\n\t\t}\n\n\t\tif (child.type === Link) {\n\t\t\tlinkProps = (child as ReactElement<LinkProps>).props\n\t\t}\n\t})\n\n\treturn {\n\t\tnode: (props: SankeyNodeProps) => (\n\t\t\t<SankeyNode {...props} nodeConfig={nodeProps} />\n\t\t),\n\t\tlink: (props: SankeyLinkProps) => (\n\t\t\t<SankeyLink {...props} linkConfig={linkProps} />\n\t\t),\n\t}\n}\n\nconst resolveNodeLabel = (children: ReactNode): NodeLabelProps | null => {\n\tlet label: NodeLabelProps | null = null\n\n\tChildren.forEach(children, child => {\n\t\tif (isValidElement(child) && child.type === NodeLabel) {\n\t\t\tlabel = (child as ReactElement<NodeLabelProps>).props\n\t\t}\n\t})\n\n\treturn label\n}\n\ntype SankeyNodeRendererProps = SankeyNodeProps & {\n\tnodeConfig: NodeProps | null\n}\n\nconst SankeyNode = ({\n\tx,\n\ty,\n\twidth,\n\theight,\n\tpayload,\n\tnodeConfig,\n}: SankeyNodeRendererProps) => {\n\tconst { config, chartId, data, selectedNode, selectNode } = useSankeyChart()\n\n\tconst radius = nodeConfig?.radius ?? 0\n\tconst isClickable = nodeConfig?.isClickable ?? false\n\tconst label = resolveNodeLabel(nodeConfig?.children)\n\n\tconst nodeName = payload.name\n\tconst nodeValue = payload.value\n\tconst nodeIcon = (payload as RechartsSankeyNode & { icon?: ReactNode }).icon\n\n\tconst isHighlighted = isNodeConnected(data, selectedNode, nodeName)\n\tconst hasConfigColor = nodeName in config\n\tconst configLabel = config[nodeName]?.label ?? nodeName\n\tconst dimmed = isClickable && !isHighlighted\n\n\tconst valueFormatter =\n\t\tlabel?.valueFormatter ?? ((value: number) => value.toLocaleString())\n\tconst showValues = label?.showValues ?? false\n\n\tconst labelX = x + width / 2\n\tconst labelY = showValues ? y + height / 2 - 8 : y + height / 2\n\tconst valueY = y + height / 2 + 8\n\tconst outsideLabelX = x + width + 8\n\tconst outsideLabelY = y + height / 2\n\n\treturn (\n\t\t<Layer>\n\t\t\t<rect\n\t\t\t\tx={x}\n\t\t\t\ty={y}\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\trx={radius}\n\t\t\t\try={radius}\n\t\t\t\tfill={\n\t\t\t\t\thasConfigColor\n\t\t\t\t\t\t? `url(#${chartId}-sankey-colors-${nodeName})`\n\t\t\t\t\t\t: \"currentColor\"\n\t\t\t\t}\n\t\t\t\tfillOpacity={dimmed ? 0.3 : 0.9}\n\t\t\t\tclassName=\"transition-opacity duration-200\"\n\t\t\t\tstyle={isClickable ? { cursor: \"pointer\" } : undefined}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tif (!isClickable) return\n\t\t\t\t\tselectNode(selectedNode === nodeName ? null : nodeName)\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{label?.position === \"inside\" && (\n\t\t\t\t<>\n\t\t\t\t\t<rect\n\t\t\t\t\t\tx={x + 1}\n\t\t\t\t\t\ty={y + 1}\n\t\t\t\t\t\twidth={width - 2}\n\t\t\t\t\t\theight={height - 2}\n\t\t\t\t\t\trx={Math.max(0, radius - 1)}\n\t\t\t\t\t\try={Math.max(0, radius - 1)}\n\t\t\t\t\t\topacity={dimmed ? 0.3 : 1}\n\t\t\t\t\t\tclassName=\"fill-white/50 transition-opacity duration-200 dark:fill-black/60\"\n\t\t\t\t\t\tstyle={{ pointerEvents: \"none\" }}\n\t\t\t\t\t/>\n\t\t\t\t\t{nodeIcon && (\n\t\t\t\t\t\t<foreignObject\n\t\t\t\t\t\t\tx={labelX - 8}\n\t\t\t\t\t\t\ty={labelY - 30}\n\t\t\t\t\t\t\twidth={16}\n\t\t\t\t\t\t\theight={16}\n\t\t\t\t\t\t\topacity={dimmed ? 0.3 : 1}\n\t\t\t\t\t\t\tclassName=\"transition-opacity duration-200\"\n\t\t\t\t\t\t\tstyle={{ pointerEvents: \"none\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"text-bruv-primary/80 flex items-center justify-center dark:text-white/80\">\n\t\t\t\t\t\t\t\t{nodeIcon}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</foreignObject>\n\t\t\t\t\t)}\n\t\t\t\t\t<text\n\t\t\t\t\t\tx={labelX}\n\t\t\t\t\t\ty={nodeIcon ? labelY - 4 : labelY}\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tdominantBaseline=\"middle\"\n\t\t\t\t\t\tclassName=\"fill-foreground text-[10px] font-medium transition-opacity duration-200 dark:fill-white\"\n\t\t\t\t\t\topacity={dimmed ? 0.3 : 1}\n\t\t\t\t\t\tstyle={{ pointerEvents: \"none\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{configLabel}\n\t\t\t\t\t</text>\n\t\t\t\t\t{showValues && (\n\t\t\t\t\t\t<text\n\t\t\t\t\t\t\tx={labelX}\n\t\t\t\t\t\t\ty={valueY}\n\t\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\t\tdominantBaseline=\"middle\"\n\t\t\t\t\t\t\tclassName=\"fill-foreground/60 font-mono text-xs font-medium tabular-nums transition-opacity duration-200 dark:fill-white\"\n\t\t\t\t\t\t\topacity={dimmed ? 0.3 : 0.6}\n\t\t\t\t\t\t\tstyle={{ pointerEvents: \"none\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{valueFormatter(nodeValue)}\n\t\t\t\t\t\t</text>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t\t{label?.position === \"outside\" && (\n\t\t\t\t<>\n\t\t\t\t\t<text\n\t\t\t\t\t\tx={outsideLabelX}\n\t\t\t\t\t\ty={outsideLabelY - (showValues ? 8 : 0)}\n\t\t\t\t\t\ttextAnchor=\"start\"\n\t\t\t\t\t\tdominantBaseline=\"middle\"\n\t\t\t\t\t\tclassName=\"fill-foreground text-xs\"\n\t\t\t\t\t\tstyle={{ pointerEvents: \"none\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{configLabel}\n\t\t\t\t\t</text>\n\t\t\t\t\t{showValues && (\n\t\t\t\t\t\t<text\n\t\t\t\t\t\t\tx={outsideLabelX}\n\t\t\t\t\t\t\ty={outsideLabelY + 8}\n\t\t\t\t\t\t\ttextAnchor=\"start\"\n\t\t\t\t\t\t\tdominantBaseline=\"middle\"\n\t\t\t\t\t\t\topacity={0.5}\n\t\t\t\t\t\t\tclassName=\"fill-foreground font-mono text-xs tabular-nums dark:fill-white\"\n\t\t\t\t\t\t\tstyle={{ pointerEvents: \"none\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{valueFormatter(nodeValue)}\n\t\t\t\t\t\t</text>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</Layer>\n\t)\n}\n\ntype SankeyLinkRendererProps = SankeyLinkProps & {\n\tlinkConfig: LinkProps | null\n}\n\nconst SankeyLink = ({\n\tsourceX,\n\ttargetX,\n\tsourceY,\n\ttargetY,\n\tsourceControlX,\n\ttargetControlX,\n\tlinkWidth,\n\tindex,\n\tpayload,\n\tlinkConfig,\n}: SankeyLinkRendererProps) => {\n\tconst { config, chartId, selectedNode } = useSankeyChart()\n\n\tconst variant = linkConfig?.variant ?? \"gradient\"\n\tconst verticalPadding = linkConfig?.verticalPadding ?? 0\n\n\tconst sourceName = payload.source.name\n\tconst targetName = payload.target.name\n\n\tconst isConnected =\n\t\tselectedNode === null ||\n\t\tselectedNode === sourceName ||\n\t\tselectedNode === targetName\n\n\tconst paddedLinkWidth = Math.max(1, linkWidth - verticalPadding)\n\tconst halfWidth = paddedLinkWidth / 2\n\n\tconst linkAreaPath = `M${sourceX},${sourceY - halfWidth}\n C${sourceControlX},${sourceY - halfWidth} ${targetControlX},${targetY - halfWidth} ${targetX},${targetY - halfWidth}\n L${targetX},${targetY + halfWidth}\n C${targetControlX},${targetY + halfWidth} ${sourceControlX},${sourceY + halfWidth} ${sourceX},${sourceY + halfWidth}\n Z`\n\n\treturn (\n\t\t<Layer>\n\t\t\t<defs>\n\t\t\t\t{variant === \"gradient\" && (\n\t\t\t\t\t<LinkGradient\n\t\t\t\t\t\tchartId={chartId}\n\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\tconfig={config}\n\t\t\t\t\t\tsourceName={sourceName}\n\t\t\t\t\t\ttargetName={targetName}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<LinkStrokeGradient chartId={chartId} index={index} />\n\t\t\t</defs>\n\t\t\t<path\n\t\t\t\td={linkAreaPath}\n\t\t\t\tfill={getLinkFill(\n\t\t\t\t\tvariant,\n\t\t\t\t\tchartId,\n\t\t\t\t\tindex,\n\t\t\t\t\tconfig,\n\t\t\t\t\tsourceName,\n\t\t\t\t\ttargetName,\n\t\t\t\t)}\n\t\t\t\tfillOpacity={isConnected ? 0.4 : 0.1}\n\t\t\t\tstroke={\n\t\t\t\t\tselectedNode !== null && isConnected\n\t\t\t\t\t\t? `url(#${chartId}-link-stroke-${index})`\n\t\t\t\t\t\t: \"none\"\n\t\t\t\t}\n\t\t\t\tstrokeWidth={1}\n\t\t\t\tstrokeOpacity={0.3}\n\t\t\t\tclassName=\"transition-opacity duration-200\"\n\t\t\t/>\n\t\t</Layer>\n\t)\n}\n\nconst isNodeConnected = (\n\tdata: SankeyData,\n\tselectedNode: string | null,\n\tnodeName: string,\n): boolean => {\n\tif (selectedNode === null || selectedNode === nodeName) return true\n\n\tconst selectedIdx = data.nodes.findIndex(node => node.name === selectedNode)\n\tconst nodeIdx = data.nodes.findIndex(node => node.name === nodeName)\n\n\treturn data.links.some(\n\t\tlink =>\n\t\t\t(link.source === selectedIdx && link.target === nodeIdx) ||\n\t\t\t(link.source === nodeIdx && link.target === selectedIdx),\n\t)\n}\n\nconst getLinkFill = (\n\tvariant: LinkVariant,\n\tchartId: string,\n\tindex: number,\n\tconfig: ChartConfig,\n\tsourceName: string,\n\ttargetName: string,\n): string => {\n\tswitch (variant) {\n\t\tcase \"gradient\":\n\t\t\treturn `url(#${chartId}-link-gradient-${index})`\n\t\tcase \"source\":\n\t\t\treturn sourceName in config\n\t\t\t\t? `url(#${chartId}-sankey-colors-${sourceName})`\n\t\t\t\t: \"currentColor\"\n\t\tcase \"target\":\n\t\t\treturn targetName in config\n\t\t\t\t? `url(#${chartId}-sankey-colors-${targetName})`\n\t\t\t\t: \"currentColor\"\n\t\tcase \"solid\":\n\t\tdefault:\n\t\t\treturn \"currentColor\"\n\t}\n}\n\nconst NodeColorGradients = ({\n\tconfig,\n\tchartId,\n}: {\n\tconfig: ChartConfig\n\tchartId: string\n}) => {\n\treturn (\n\t\t<>\n\t\t\t{Object.entries(config).map(([dataKey, nodeConfig]) => {\n\t\t\t\tconst colorsCount = getColorsCount(nodeConfig)\n\n\t\t\t\treturn (\n\t\t\t\t\t<linearGradient\n\t\t\t\t\t\tkey={`${chartId}-sankey-colors-${dataKey}`}\n\t\t\t\t\t\tid={`${chartId}-sankey-colors-${dataKey}`}\n\t\t\t\t\t\tx1=\"0\"\n\t\t\t\t\t\ty1=\"0\"\n\t\t\t\t\t\tx2=\"0\"\n\t\t\t\t\t\ty2=\"1\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{colorsCount === 1 ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<stop offset=\"0%\" stopColor={`var(--color-${dataKey}-0)`} />\n\t\t\t\t\t\t\t\t<stop offset=\"100%\" stopColor={`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\t\tArray.from({ length: colorsCount }, (_, index) => {\n\t\t\t\t\t\t\t\tconst offset = `${(index / (colorsCount - 1)) * 100}%`\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\t\t\tkey={offset}\n\t\t\t\t\t\t\t\t\t\toffset={offset}\n\t\t\t\t\t\t\t\t\t\tstopColor={`var(--color-${dataKey}-${index}, var(--color-${dataKey}-0))`}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)}\n\t\t\t\t\t</linearGradient>\n\t\t\t\t)\n\t\t\t})}\n\t\t</>\n\t)\n}\n\nconst LinkGradient = ({\n\tchartId,\n\tindex,\n\tconfig,\n\tsourceName,\n\ttargetName,\n}: {\n\tchartId: string\n\tindex: number\n\tconfig: ChartConfig\n\tsourceName: string\n\ttargetName: string\n}) => {\n\tconst sourceColor =\n\t\tsourceName in config ? `var(--color-${sourceName}-0)` : \"currentColor\"\n\tconst targetColor =\n\t\ttargetName in config ? `var(--color-${targetName}-0)` : \"currentColor\"\n\n\treturn (\n\t\t<linearGradient\n\t\t\tid={`${chartId}-link-gradient-${index}`}\n\t\t\tx1=\"0%\"\n\t\t\ty1=\"0%\"\n\t\t\tx2=\"100%\"\n\t\t\ty2=\"0%\"\n\t\t>\n\t\t\t<stop offset=\"0%\" stopColor={sourceColor} stopOpacity={0.2} />\n\t\t\t<stop offset=\"50%\" stopColor={sourceColor} stopOpacity={0.5} />\n\t\t\t<stop offset=\"100%\" stopColor={targetColor} stopOpacity={0.2} />\n\t\t</linearGradient>\n\t)\n}\n\nconst LinkStrokeGradient = ({\n\tchartId,\n\tindex,\n}: {\n\tchartId: string\n\tindex: number\n}) => {\n\treturn (\n\t\t<linearGradient\n\t\t\tid={`${chartId}-link-stroke-${index}`}\n\t\t\tx1=\"0%\"\n\t\t\ty1=\"0%\"\n\t\t\tx2=\"100%\"\n\t\t\ty2=\"0%\"\n\t\t>\n\t\t\t<stop offset=\"0%\" stopColor=\"var(--primary)\" stopOpacity={0} />\n\t\t\t<stop offset=\"15%\" stopColor=\"var(--primary)\" stopOpacity={0.8} />\n\t\t\t<stop offset=\"50%\" stopColor=\"var(--primary)\" stopOpacity={1} />\n\t\t\t<stop offset=\"85%\" stopColor=\"var(--primary)\" stopOpacity={0.8} />\n\t\t\t<stop offset=\"100%\" stopColor=\"var(--primary)\" stopOpacity={0} />\n\t\t</linearGradient>\n\t)\n}\n\nconst LoadingSankey = () => {\n\tconst nodes = [\n\t\t{ x: 30, y: 25, width: 12, height: 65, delay: 0 },\n\t\t{ x: 30, y: 110, width: 12, height: 50, delay: 0.3 },\n\t\t{ x: 30, y: 180, width: 12, height: 45, delay: 0.15 },\n\t\t{ x: 244, y: 20, width: 12, height: 55, delay: 0.45 },\n\t\t{ x: 244, y: 95, width: 12, height: 75, delay: 0.6 },\n\t\t{ x: 244, y: 190, width: 12, height: 40, delay: 0.25 },\n\t\t{ x: 458, y: 35, width: 12, height: 80, delay: 0.5 },\n\t\t{ x: 458, y: 135, width: 12, height: 90, delay: 0.1 },\n\t]\n\n\tconst links = [\n\t\t{ from: 0, to: 3, width: 26, delay: 0.2 },\n\t\t{ from: 0, to: 4, width: 18, delay: 0.7 },\n\t\t{ from: 1, to: 4, width: 24, delay: 0.4 },\n\t\t{ from: 1, to: 5, width: 12, delay: 0.9 },\n\t\t{ from: 2, to: 4, width: 16, delay: 0.1 },\n\t\t{ from: 2, to: 5, width: 14, delay: 0.55 },\n\t\t{ from: 3, to: 6, width: 22, delay: 0.35 },\n\t\t{ from: 3, to: 7, width: 18, delay: 0.8 },\n\t\t{ from: 4, to: 6, width: 28, delay: 0.05 },\n\t\t{ from: 4, to: 7, width: 32, delay: 0.65 },\n\t\t{ from: 5, to: 7, width: 16, delay: 0.45 },\n\t]\n\n\tconst getLinkPath = (fromIdx: number, toIdx: number) => {\n\t\tconst from = nodes[fromIdx]\n\t\tconst to = nodes[toIdx]\n\t\tconst startX = from.x + from.width\n\t\tconst startY = from.y + from.height / 2\n\t\tconst endX = to.x\n\t\tconst endY = to.y + to.height / 2\n\t\tconst controlX1 = startX + (endX - startX) * 0.4\n\t\tconst controlX2 = startX + (endX - startX) * 0.6\n\t\treturn `M${startX},${startY} C${controlX1},${startY} ${controlX2},${endY} ${endX},${endY}`\n\t}\n\n\tconst baseDuration = LOADING_ANIMATION_DURATION / 1000\n\n\treturn (\n\t\t<>\n\t\t\t{links.map((link, i) => (\n\t\t\t\t<motion.path\n\t\t\t\t\tkey={`loading-link-${link.from}-${link.to}`}\n\t\t\t\t\td={getLinkPath(link.from, link.to)}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstrokeWidth={link.width}\n\t\t\t\t\tinitial={{ opacity: 0.04 }}\n\t\t\t\t\tanimate={{ opacity: [0.04, 0.14, 0.04] }}\n\t\t\t\t\ttransition={{\n\t\t\t\t\t\tduration: baseDuration * (0.8 + (i % 3) * 0.2),\n\t\t\t\t\t\tdelay: link.delay,\n\t\t\t\t\t\trepeat: Infinity,\n\t\t\t\t\t\tease: \"easeInOut\",\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t))}\n\t\t\t{nodes.map((node, i) => (\n\t\t\t\t<motion.rect\n\t\t\t\t\tkey={`loading-node-${node.x}-${node.y}`}\n\t\t\t\t\tx={node.x}\n\t\t\t\t\ty={node.y}\n\t\t\t\t\twidth={node.width}\n\t\t\t\t\theight={node.height}\n\t\t\t\t\trx={2}\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tinitial={{ opacity: 0.15 }}\n\t\t\t\t\tanimate={{ opacity: [0.15, 0.4, 0.15] }}\n\t\t\t\t\ttransition={{\n\t\t\t\t\t\tduration: baseDuration * (0.9 + (i % 4) * 0.1),\n\t\t\t\t\t\tdelay: node.delay,\n\t\t\t\t\t\trepeat: Infinity,\n\t\t\t\t\t\tease: \"easeInOut\",\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</>\n\t)\n}\n"],"mappings":"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","names":["Chart","RechartsPrimitive","jsx","jsxs","useId","jsx","jsxs","createContext","useId","useMemo","Fragment","jsx","jsxs","Tooltip"]}
|