@sesionario/blocks 1.27.0 → 1.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/charts.cjs +1904 -0
- package/dist/charts.cjs.map +1 -0
- package/dist/charts.d.cts +247 -0
- package/dist/charts.d.ts +247 -0
- package/dist/charts.js +1887 -0
- package/dist/charts.js.map +1 -0
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/package.json +19 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/components/charts/chart-stat-flow.tsx","../src/components/charts/chart-center-typography.ts","../src/components/charts/gauge-label-layout.tsx","../src/components/charts/notch-gauge-shared.ts","../src/components/charts/pie-context.tsx","../src/components/charts/pie-center.tsx","../src/components/charts/pie-center-shell.tsx","../src/components/charts/gauge.tsx","../src/components/charts/ring-context.tsx","../src/components/charts/ring-chart.tsx","../src/components/charts/use-enter-complete.ts","../src/components/charts/animation.ts","../src/components/charts/use-mount-progress.ts","../src/components/charts/ring.tsx","../src/components/charts/ring-center.tsx"],"names":["twMerge","clsx","useState","useEffect","useMemo","jsxs","Fragment","jsx","NumberFlow","Children","isValidElement","createContext","useContext","useRef","d3Pie","useCallback","motion","useId","useReducedMotion","ParentSize","arcGenerator","memo","RingChartCore","Group","useMotionValue","animate","Ring","useTransform"],"mappings":"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","file":"charts.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport NumberFlow from \"@number-flow/react\";\nimport { type ReactNode, useEffect, useMemo, useState } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/** Subset of `Intl.NumberFormatOptions` supported by NumberFlow */\nexport interface ChartStatFlowFormat {\n\tnotation?: \"standard\" | \"compact\";\n\tcompactDisplay?: \"short\" | \"long\";\n\tminimumFractionDigits?: number;\n\tmaximumFractionDigits?: number;\n\tminimumIntegerDigits?: number;\n\tminimumSignificantDigits?: number;\n\tmaximumSignificantDigits?: number;\n\tstyle?: \"decimal\" | \"percent\" | \"currency\";\n\tcurrency?: string;\n\tcurrencyDisplay?: \"symbol\" | \"narrowSymbol\" | \"code\" | \"name\";\n\tunit?: string;\n\tunitDisplay?: \"short\" | \"long\" | \"narrow\";\n}\n\nexport const defaultChartStatFlowFormat: ChartStatFlowFormat = {\n\tnotation: \"standard\",\n\tmaximumFractionDigits: 0,\n};\n\nfunction formatStatValue(\n\tvalue: number,\n\tformatOptions: ChartStatFlowFormat,\n\tprefix?: string,\n\tsuffix?: string,\n): string {\n\tconst formatted = new Intl.NumberFormat(undefined, formatOptions).format(\n\t\tvalue,\n\t);\n\treturn `${prefix ?? \"\"}${formatted}${suffix ?? \"\"}`;\n}\n\nfunction useNumberFlowElementReady(): boolean {\n\tconst [ready, setReady] = useState(\n\t\t() =>\n\t\t\ttypeof customElements !== \"undefined\" &&\n\t\t\tBoolean(customElements.get(\"number-flow-react\")),\n\t);\n\n\tuseEffect(() => {\n\t\tif (ready) {\n\t\t\treturn;\n\t\t}\n\t\tlet cancelled = false;\n\t\tcustomElements.whenDefined(\"number-flow-react\").then(() => {\n\t\t\tif (!cancelled) {\n\t\t\t\tsetReady(true);\n\t\t\t}\n\t\t});\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [ready]);\n\n\treturn ready;\n}\n\nexport interface ChartStatFlowProps {\n\tvalue: number;\n\tlabel: string;\n\tformatOptions?: ChartStatFlowFormat;\n\tprefix?: string;\n\tsuffix?: string;\n\tvalueClassName?: string;\n\tlabelClassName?: string;\n\ticon?: ReactNode;\n}\n\n/**\n * Shared value + label stack using NumberFlow (same layout as pie / ring centers).\n * Parent should provide flex alignment and sizing when needed.\n */\nexport function ChartStatFlow({\n\tvalue,\n\tlabel,\n\tformatOptions = defaultChartStatFlowFormat,\n\tprefix,\n\tsuffix,\n\tvalueClassName = \"text-2xl font-bold\",\n\tlabelClassName = \"text-xs\",\n\ticon,\n}: ChartStatFlowProps) {\n\tconst numberFlowReady = useNumberFlowElementReady();\n\tconst staticValue = useMemo(\n\t\t() => formatStatValue(value, formatOptions, prefix, suffix),\n\t\t[value, formatOptions, prefix, suffix],\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t{icon ? (\n\t\t\t\t<div className=\"mb-2 flex h-12 w-12 items-center justify-center rounded-full bg-muted/50\">\n\t\t\t\t\t{icon}\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<span className={cn(\"text-foreground tabular-nums\", valueClassName)}>\n\t\t\t\t{numberFlowReady ? (\n\t\t\t\t\t<NumberFlow\n\t\t\t\t\t\tformat={formatOptions}\n\t\t\t\t\t\tisolate\n\t\t\t\t\t\tprefix={prefix}\n\t\t\t\t\t\tsuffix={suffix}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\twillChange\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\tstaticValue\n\t\t\t\t)}\n\t\t\t</span>\n\t\t\t<span className={cn(\"mt-0.5 text-chart-label\", labelClassName)}>\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t</>\n\t);\n}\n\nChartStatFlow.displayName = \"ChartStatFlow\";\n","export const chartCenterContainerClassName =\n\t\"@container/chart-center size-full min-w-0\";\n\n/** Primary stat — ~22% of center width, clamped between text-sm and text-3xl. */\nexport const chartCenterValueClassName =\n\t\"font-bold tabular-nums leading-none text-[clamp(0.75rem,22cqw,1.875rem)]\";\n\n/** Supporting label — ~9% of center width, clamped between 10px and text-xs. */\nexport const chartCenterLabelClassName =\n\t\"max-w-full truncate leading-tight text-[clamp(0.625rem,9cqw,0.75rem)]\";\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tchartCenterContainerClassName,\n\tchartCenterLabelClassName,\n\tchartCenterValueClassName,\n} from \"./chart-center-typography\";\nimport {\n\tChartStatFlow,\n\ttype ChartStatFlowFormat,\n\tdefaultChartStatFlowFormat,\n} from \"./chart-stat-flow\";\n\nexport type GaugeLabelPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type GaugeLabelAlign = \"start\" | \"center\" | \"end\";\n\nexport interface GaugeLabelShellProps {\n\tcenterValue: number;\n\tdefaultLabel?: string;\n\tprefix?: string;\n\tsuffix?: string;\n\tformatOptions?: ChartStatFlowFormat;\n\talign?: GaugeLabelAlign;\n\tclassName?: string;\n}\n\nconst labelAlignClass: Record<GaugeLabelAlign, string> = {\n\tstart: \"items-start text-left\",\n\tcenter: \"items-center text-center\",\n\tend: \"items-end text-right\",\n};\n\nexport function GaugeLabelShell({\n\tcenterValue,\n\tdefaultLabel = \"Total\",\n\tprefix,\n\tsuffix,\n\tformatOptions = defaultChartStatFlowFormat,\n\talign = \"center\",\n\tclassName,\n}: GaugeLabelShellProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tchartCenterContainerClassName,\n\t\t\t\t\"flex min-w-0 flex-col\",\n\t\t\t\tlabelAlignClass[align],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<ChartStatFlow\n\t\t\t\tformatOptions={formatOptions}\n\t\t\t\tlabel={defaultLabel}\n\t\t\t\tlabelClassName={cn(\n\t\t\t\t\tchartCenterLabelClassName,\n\t\t\t\t\t\"text-[length:var(--chart-foreground-muted)]\",\n\t\t\t\t)}\n\t\t\t\tprefix={prefix}\n\t\t\t\tsuffix={suffix}\n\t\t\t\tvalue={centerValue}\n\t\t\t\tvalueClassName={cn(\n\t\t\t\t\tchartCenterValueClassName,\n\t\t\t\t\t\"text-[length:var(--chart-foreground)]\",\n\t\t\t\t)}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nconst crossAxisSelf: Record<GaugeLabelAlign, string> = {\n\tstart: \"self-start\",\n\tcenter: \"self-center\",\n\tend: \"self-end\",\n};\n\nconst crossAxisAlign: Record<GaugeLabelAlign, string> = {\n\tstart: \"items-start\",\n\tcenter: \"items-center\",\n\tend: \"items-end\",\n};\n\nconst inlineAxisAlign: Record<GaugeLabelAlign, string> = {\n\tstart: \"justify-start\",\n\tcenter: \"justify-center\",\n\tend: \"justify-end\",\n};\n\nexport function GaugeLabelLayout({\n\tplacement,\n\talign,\n\tlabel,\n\tchildren,\n\tclassName,\n}: {\n\tplacement: GaugeLabelPlacement;\n\talign: GaugeLabelAlign;\n\tlabel: ReactNode | null;\n\tchildren: ReactNode;\n\tclassName?: string;\n}) {\n\tif (!label) {\n\t\treturn <div className={cn(\"w-full min-w-0\", className)}>{children}</div>;\n\t}\n\n\tif (placement === \"top\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex w-full min-w-0 flex-col gap-3\",\n\t\t\t\t\tcrossAxisAlign[align],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className={crossAxisSelf[align]}>{label}</div>\n\t\t\t\t<div className=\"w-full min-w-0\">{children}</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (placement === \"bottom\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex w-full min-w-0 flex-col gap-3\",\n\t\t\t\t\tcrossAxisAlign[align],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className=\"w-full min-w-0\">{children}</div>\n\t\t\t\t<div className={crossAxisSelf[align]}>{label}</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (placement === \"left\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex w-full min-w-0 items-center gap-4\",\n\t\t\t\t\tinlineAxisAlign[align],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className=\"shrink-0\">{label}</div>\n\t\t\t\t<div className=\"min-w-0 flex-1\">{children}</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex w-full min-w-0 items-center gap-4\",\n\t\t\t\tinlineAxisAlign[align],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"min-w-0 flex-1\">{children}</div>\n\t\t\t<div className=\"shrink-0\">{label}</div>\n\t\t</div>\n\t);\n}\n","import {\n\tChildren,\n\tFragment,\n\tisValidElement,\n\ttype ReactElement,\n\ttype ReactNode,\n} from \"react\";\n\nexport const DEFAULT_ACTIVE_GRADIENT: readonly [string, string] = [\n\t\"#bef264\",\n\t\"#10b981\",\n];\n\nexport const DEFAULT_ACTIVE_FILL_OPACITY = 1;\nexport const DEFAULT_INACTIVE_FILL_OPACITY = 0.8;\nexport const DEFAULT_LINEAR_GAUGE_HEIGHT = 24;\n\nexport interface NotchPoint {\n\tx1: number;\n\ty1: number;\n\tx2: number;\n\ty2: number;\n\tx3: number;\n\ty3: number;\n\tx4: number;\n\ty4: number;\n}\n\nexport interface ComputedNotch {\n\tindex: number;\n\tpoints: NotchPoint;\n\tisActive: boolean;\n\tgradientColor: string;\n\txCenter: number;\n\tyCenter: number;\n}\n\nfunction isDefsComponent(child: ReactElement): boolean {\n\tconst typeLabel =\n\t\t(child.type as { displayName?: string })?.displayName ||\n\t\t(child.type as { name?: string })?.name ||\n\t\t\"\";\n\treturn (\n\t\ttypeLabel.includes(\"Gradient\") ||\n\t\ttypeLabel.includes(\"Pattern\") ||\n\t\ttypeLabel === \"LinearGradient\" ||\n\t\ttypeLabel === \"RadialGradient\" ||\n\t\ttypeLabel === \"Lines\" ||\n\t\ttypeLabel === \"PatternLines\" ||\n\t\ttypeLabel === \"Circles\" ||\n\t\ttypeLabel === \"Hexagons\" ||\n\t\ttypeLabel === \"Waves\"\n\t);\n}\n\nexport function collectGaugeDefsElements(nodes: ReactNode): ReactElement[] {\n\tconst out: ReactElement[] = [];\n\tChildren.forEach(nodes, (child) => {\n\t\tif (!isValidElement(child)) {\n\t\t\treturn;\n\t\t}\n\t\tif (child.type === Fragment) {\n\t\t\tout.push(\n\t\t\t\t...collectGaugeDefsElements(\n\t\t\t\t\t(child.props as { children?: ReactNode }).children,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (isDefsComponent(child)) {\n\t\t\tout.push(child);\n\t\t}\n\t});\n\treturn out;\n}\n\nexport function interpolateGaugeHex(\n\tcolor1: string,\n\tcolor2: string,\n\tfactor: number,\n): string {\n\tconst hex = (c: string) => Number.parseInt(c, 16);\n\tconst r1 = hex(color1.slice(1, 3));\n\tconst g1 = hex(color1.slice(3, 5));\n\tconst b1 = hex(color1.slice(5, 7));\n\tconst r2 = hex(color2.slice(1, 3));\n\tconst g2 = hex(color2.slice(3, 5));\n\tconst b2 = hex(color2.slice(5, 7));\n\n\tconst r = Math.round(r1 + (r2 - r1) * factor);\n\tconst g = Math.round(g1 + (g2 - g1) * factor);\n\tconst b = Math.round(b1 + (b2 - b1) * factor);\n\n\treturn `#${r.toString(16).padStart(2, \"0\")}${g.toString(16).padStart(2, \"0\")}${b.toString(16).padStart(2, \"0\")}`;\n}\n\nexport function createNotchPath(\n\tpoints: NotchPoint,\n\tcornerRadiusPx: number,\n\tverticalDepth: number,\n): string {\n\tconst { x1, y1, x2, y2, x3, y3, x4, y4 } = points;\n\n\tconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\n\tconst dist = (ax: number, ay: number, bx: number, by: number) =>\n\t\tMath.hypot(bx - ax, by - ay);\n\n\tconst d12 = dist(x1, y1, x2, y2);\n\tconst d23 = dist(x2, y2, x3, y3);\n\tconst d34 = dist(x3, y3, x4, y4);\n\tconst d41 = dist(x4, y4, x1, y1);\n\n\tif (cornerRadiusPx <= 0) {\n\t\treturn `M ${x1} ${y1} L ${x2} ${y2} L ${x3} ${y3} L ${x4} ${y4} Z`;\n\t}\n\n\tconst minEdge = Math.min(d12, d23, d34, d41);\n\tconst cr = Math.min(\n\t\tcornerRadiusPx,\n\t\tverticalDepth * 0.48,\n\t\td12 * 0.49,\n\t\td23 * 0.49,\n\t\td34 * 0.49,\n\t\td41 * 0.49,\n\t\tminEdge * 0.49,\n\t);\n\n\tconst r1 = Math.min(cr / d12, 0.49);\n\tconst r2 = Math.min(cr / d23, 0.49);\n\tconst r3 = Math.min(cr / d34, 0.49);\n\tconst r4 = Math.min(cr / d41, 0.49);\n\n\tconst p1a = { x: lerp(x1, x4, r4), y: lerp(y1, y4, r4) };\n\tconst p1b = { x: lerp(x1, x2, r1), y: lerp(y1, y2, r1) };\n\tconst p2a = { x: lerp(x2, x1, r1), y: lerp(y2, y1, r1) };\n\tconst p2b = { x: lerp(x2, x3, r2), y: lerp(y2, y3, r2) };\n\tconst p3a = { x: lerp(x3, x2, r2), y: lerp(y3, y2, r2) };\n\tconst p3b = { x: lerp(x3, x4, r3), y: lerp(y3, y4, r3) };\n\tconst p4a = { x: lerp(x4, x3, r3), y: lerp(y4, y3, r3) };\n\tconst p4b = { x: lerp(x4, x1, r4), y: lerp(y4, y1, r4) };\n\n\treturn `M ${p1a.x} ${p1a.y} Q ${x1} ${y1} ${p1b.x} ${p1b.y} L ${p2a.x} ${p2a.y} Q ${x2} ${y2} ${p2b.x} ${p2b.y} L ${p3a.x} ${p3a.y} Q ${x3} ${y3} ${p3b.x} ${p3b.y} L ${p4a.x} ${p4a.y} Q ${x4} ${y4} ${p4b.x} ${p4b.y} Z`;\n}\n\nexport function resolveGaugeBgFill(options: {\n\tnotchIndex: number;\n\ttotalNotches: number;\n\thasCustomInactive: boolean;\n\tinactiveFill?: string;\n\tuseThemePaletteGradient: boolean;\n\tuseGradient: boolean;\n\tinactiveGrad0: string;\n\tinactiveGrad1: string;\n\tarcTrackFill: string;\n\tlinearTrackFill: string;\n\tlinearMode: boolean;\n}): string {\n\tconst {\n\t\tnotchIndex,\n\t\ttotalNotches,\n\t\thasCustomInactive,\n\t\tinactiveFill,\n\t\tuseThemePaletteGradient,\n\t\tuseGradient,\n\t\tinactiveGrad0,\n\t\tinactiveGrad1,\n\t\tarcTrackFill,\n\t\tlinearTrackFill,\n\t\tlinearMode,\n\t} = options;\n\n\tif (hasCustomInactive) {\n\t\treturn inactiveFill as string;\n\t}\n\tif (useThemePaletteGradient) {\n\t\treturn linearMode ? \"var(--chart-1)\" : arcTrackFill;\n\t}\n\tif (useGradient) {\n\t\tconst denom = totalNotches > 1 ? totalNotches - 1 : 1;\n\t\treturn interpolateGaugeHex(\n\t\t\tinactiveGrad0,\n\t\t\tinactiveGrad1,\n\t\t\tnotchIndex / denom,\n\t\t);\n\t}\n\treturn linearMode ? linearTrackFill : arcTrackFill;\n}\n\nexport function resolveGaugeActiveFill(options: {\n\tnotch: ComputedNotch;\n\thasCustomActive: boolean;\n\tactiveFill?: string;\n\tuseThemePaletteGradient: boolean;\n\tthemeActiveGradientId: string;\n\tuseGradient: boolean;\n\tactiveFillSolid: string;\n}): string {\n\tconst {\n\t\tnotch,\n\t\thasCustomActive,\n\t\tactiveFill,\n\t\tuseThemePaletteGradient,\n\t\tthemeActiveGradientId,\n\t\tuseGradient,\n\t\tactiveFillSolid,\n\t} = options;\n\n\tif (hasCustomActive) {\n\t\treturn activeFill as string;\n\t}\n\tif (useThemePaletteGradient) {\n\t\treturn `url(#${themeActiveGradientId})`;\n\t}\n\tif (useGradient) {\n\t\treturn notch.gradientColor;\n\t}\n\treturn activeFillSolid;\n}\n","\"use client\";\n\nimport type { Transition } from \"motion/react\";\nimport {\n\tcreateContext,\n\ttype ReactNode,\n\ttype RefObject,\n\tuseContext,\n\tuseMemo,\n} from \"react\";\n\n// CSS variable references for pie chart theming\nexport const pieCssVars = {\n\tbackground: \"var(--chart-background)\",\n\tforeground: \"var(--chart-foreground)\",\n\tforegroundMuted: \"var(--chart-foreground-muted)\",\n\tlabel: \"var(--chart-label)\",\n\t// Default slice colors from chart palette\n\tslice1: \"var(--chart-1)\",\n\tslice2: \"var(--chart-2)\",\n\tslice3: \"var(--chart-3)\",\n\tslice4: \"var(--chart-4)\",\n\tslice5: \"var(--chart-5)\",\n};\n\n// Default slice color palette\nexport const defaultPieColors = [\n\tpieCssVars.slice1,\n\tpieCssVars.slice2,\n\tpieCssVars.slice3,\n\tpieCssVars.slice4,\n\tpieCssVars.slice5,\n];\n\nexport interface PieData {\n\t/** Display label for the slice */\n\tlabel: string;\n\t/** Value for the slice (determines slice size relative to total) */\n\tvalue: number;\n\t/** Optional color override - falls back to palette */\n\tcolor?: string;\n\t/** Optional fill override for patterns/gradients (e.g., \"url(#patternId)\") */\n\tfill?: string;\n}\n\n/** Arc data computed by visx Pie */\nexport interface PieArcData {\n\tdata: PieData;\n\tindex: number;\n\tstartAngle: number;\n\tendAngle: number;\n\tpadAngle: number;\n\tvalue: number;\n}\n\nexport interface PieHoverContextValue {\n\thoveredIndex: number | null;\n\tsetHoveredIndex: (index: number | null) => void;\n}\n\nexport interface PieStableContextValue {\n\t// Data\n\tdata: PieData[];\n\tarcs: PieArcData[];\n\n\t// Dimensions\n\tsize: number;\n\tcenter: number;\n\touterRadius: number;\n\tinnerRadius: number;\n\tpadAngle: number;\n\tcornerRadius: number;\n\n\t// Hover effect\n\thoverOffset: number;\n\n\t// Animation state\n\tanimationKey: number;\n\tisLoaded: boolean;\n\tenterTransition?: Transition;\n\tenterStaggerScale: number;\n\n\t// Container ref for portals\n\tcontainerRef: RefObject<HTMLDivElement | null>;\n\n\t// Computed values\n\ttotalValue: number;\n\n\t// Get color for a slice index\n\tgetColor: (index: number) => string;\n\n\t// Get fill for a slice index (supports patterns/gradients)\n\tgetFill: (index: number) => string;\n\n\t/**\n\t * Studio geometry scrub — skip Motion path morphing and use plain SVG paths.\n\t * @default false\n\t */\n\tgeometryScrubbing: boolean;\n\n\t/** Precomputed slice paths during geometry scrub (one per arc). */\n\tscrubSlicePaths: readonly string[] | null;\n}\n\nexport type PieContextValue = PieStableContextValue & PieHoverContextValue;\n\nconst PieStableContext = createContext<PieStableContextValue | null>(null);\nconst PieHoverContext = createContext<PieHoverContextValue | null>(null);\n\nexport function PieProvider({\n\tchildren,\n\tvalue,\n}: {\n\tchildren: ReactNode;\n\tvalue: PieContextValue;\n}) {\n\tconst stable = useMemo<PieStableContextValue>(\n\t\t() => ({\n\t\t\tdata: value.data,\n\t\t\tarcs: value.arcs,\n\t\t\tsize: value.size,\n\t\t\tcenter: value.center,\n\t\t\touterRadius: value.outerRadius,\n\t\t\tinnerRadius: value.innerRadius,\n\t\t\tpadAngle: value.padAngle,\n\t\t\tcornerRadius: value.cornerRadius,\n\t\t\thoverOffset: value.hoverOffset,\n\t\t\tanimationKey: value.animationKey,\n\t\t\tisLoaded: value.isLoaded,\n\t\t\tenterTransition: value.enterTransition,\n\t\t\tenterStaggerScale: value.enterStaggerScale,\n\t\t\tcontainerRef: value.containerRef,\n\t\t\ttotalValue: value.totalValue,\n\t\t\tgetColor: value.getColor,\n\t\t\tgetFill: value.getFill,\n\t\t\tgeometryScrubbing: value.geometryScrubbing,\n\t\t\tscrubSlicePaths: value.scrubSlicePaths,\n\t\t}),\n\t\t[\n\t\t\tvalue.data,\n\t\t\tvalue.arcs,\n\t\t\tvalue.size,\n\t\t\tvalue.center,\n\t\t\tvalue.outerRadius,\n\t\t\tvalue.innerRadius,\n\t\t\tvalue.padAngle,\n\t\t\tvalue.cornerRadius,\n\t\t\tvalue.hoverOffset,\n\t\t\tvalue.animationKey,\n\t\t\tvalue.isLoaded,\n\t\t\tvalue.enterTransition,\n\t\t\tvalue.enterStaggerScale,\n\t\t\tvalue.containerRef,\n\t\t\tvalue.totalValue,\n\t\t\tvalue.getColor,\n\t\t\tvalue.getFill,\n\t\t\tvalue.geometryScrubbing,\n\t\t\tvalue.scrubSlicePaths,\n\t\t],\n\t);\n\n\tconst hover = useMemo<PieHoverContextValue>(\n\t\t() => ({\n\t\t\thoveredIndex: value.hoveredIndex,\n\t\t\tsetHoveredIndex: value.setHoveredIndex,\n\t\t}),\n\t\t[value.hoveredIndex, value.setHoveredIndex],\n\t);\n\n\treturn (\n\t\t<PieStableContext.Provider value={stable}>\n\t\t\t<PieHoverContext.Provider value={hover}>\n\t\t\t\t{children}\n\t\t\t</PieHoverContext.Provider>\n\t\t</PieStableContext.Provider>\n\t);\n}\n\nexport function usePieStable(): PieStableContextValue {\n\tconst context = useContext(PieStableContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"usePieStable must be used within a PieProvider. \" +\n\t\t\t\t\"Make sure your component is wrapped in <PieChart>.\",\n\t\t);\n\t}\n\treturn context;\n}\n\nexport function usePieHover(): PieHoverContextValue {\n\tconst context = useContext(PieHoverContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"usePieHover must be used within a PieProvider. \" +\n\t\t\t\t\"Make sure your component is wrapped in <PieChart>.\",\n\t\t);\n\t}\n\treturn context;\n}\n\nexport function usePie(): PieContextValue {\n\treturn { ...usePieStable(), ...usePieHover() };\n}\n\nexport default PieStableContext;\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tchartCenterContainerClassName,\n\tchartCenterLabelClassName,\n\tchartCenterValueClassName,\n} from \"./chart-center-typography\";\nimport {\n\tChartStatFlow,\n\ttype ChartStatFlowFormat,\n\tdefaultChartStatFlowFormat,\n} from \"./chart-stat-flow\";\nimport { usePieHover, usePieStable } from \"./pie-context\";\n\nexport interface PieCenterProps {\n\t/** Label shown below the value. Default: \"Total\" when not hovering */\n\tdefaultLabel?: string;\n\t/** Format options for NumberFlow. Default: standard notation */\n\tformatOptions?: ChartStatFlowFormat;\n\t/** Custom render function for complete control over center content */\n\tchildren?: (props: {\n\t\tvalue: number;\n\t\tlabel: string;\n\t\tisHovered: boolean;\n\t\tdata: { label: string; value: number; color?: string; fill?: string };\n\t}) => ReactNode;\n\t/** Additional class name for the container */\n\tclassName?: string;\n\t/** Class name for the value text. Scales with center size via container queries. */\n\tvalueClassName?: string;\n\t/** Class name for the label text. Scales with center size via container queries. */\n\tlabelClassName?: string;\n\t/** Prefix to show before the number (e.g., \"$\") */\n\tprefix?: string;\n\t/** Suffix to show after the number (e.g., \"%\") */\n\tsuffix?: string;\n}\n\n/**\n * PieCenter displays content in the center of a donut/pie chart.\n *\n * This component renders as pure HTML (not inside SVG foreignObject) to avoid\n * Safari's WebKit bug #23113 where HTML content with CSS transforms/opacity\n * inside foreignObject renders at incorrect positions.\n *\n * The parent PieChart uses CSS Grid stacking to overlay this HTML content\n * on top of the SVG slices.\n */\nexport function PieCenter({\n\tdefaultLabel = \"Total\",\n\tformatOptions = defaultChartStatFlowFormat,\n\tchildren,\n\tclassName = \"\",\n\tvalueClassName = chartCenterValueClassName,\n\tlabelClassName = chartCenterLabelClassName,\n\tprefix,\n\tsuffix,\n}: PieCenterProps) {\n\tconst { data, totalValue, innerRadius, geometryScrubbing } = usePieStable();\n\tconst { hoveredIndex } = usePieHover();\n\n\tconst effectiveHoveredIndex = geometryScrubbing ? null : hoveredIndex;\n\tconst hoveredData =\n\t\teffectiveHoveredIndex === null ? null : data[effectiveHoveredIndex];\n\tconst displayValue = hoveredData ? hoveredData.value : totalValue;\n\tconst displayLabel = hoveredData ? hoveredData.label : defaultLabel;\n\n\t// Calculate center area size based on inner radius\n\t// Leave some padding so text doesn't touch the inner edge\n\tconst centerSize = innerRadius * 2 - 16;\n\n\t// Don't render if there's no inner radius (solid pie, not donut)\n\tif (innerRadius <= 0) {\n\t\treturn null;\n\t}\n\n\t// If custom render function is provided, use it\n\tif (children && hoveredData) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\tchartCenterContainerClassName,\n\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{ width: centerSize, height: centerSize }}\n\t\t\t>\n\t\t\t\t{children({\n\t\t\t\t\tvalue: displayValue,\n\t\t\t\t\tlabel: displayLabel,\n\t\t\t\t\tisHovered: effectiveHoveredIndex !== null,\n\t\t\t\t\tdata: hoveredData,\n\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Default center content with NumberFlow animations\n\t// Now renders as pure HTML, avoiding Safari's foreignObject bugs\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tchartCenterContainerClassName,\n\t\t\t\t\"flex flex-col items-center justify-center text-center\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={{ width: centerSize, height: centerSize }}\n\t\t>\n\t\t\t<ChartStatFlow\n\t\t\t\tformatOptions={formatOptions}\n\t\t\t\tlabel={displayLabel}\n\t\t\t\tlabelClassName={labelClassName}\n\t\t\t\tprefix={prefix}\n\t\t\t\tsuffix={suffix}\n\t\t\t\tvalue={displayValue}\n\t\t\t\tvalueClassName={valueClassName}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nPieCenter.displayName = \"PieCenter\";\n\nexport default PieCenter;\n","\"use client\";\n\nimport { pie as d3Pie } from \"d3-shape\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { PieCenter, type PieCenterProps } from \"./pie-center\";\nimport {\n\tdefaultPieColors,\n\ttype PieArcData,\n\ttype PieContextValue,\n\ttype PieData,\n\tPieProvider,\n} from \"./pie-context\";\n\nconst SHELL_HOVER_OFFSET = 10;\n\nexport type PieCenterShellProps = Omit<PieCenterProps, \"children\"> & {\n\t/** Value shown with NumberFlow (same role as pie total when not hovering) */\n\tcenterValue: number;\n\t/** Square reference size for pie context (matches `PieChart` `size`) */\n\tcontextSize: number;\n\t/** Inner radius in px — must be > 0 so `PieCenter` renders */\n\tinnerRadiusPx: number;\n\t/**\n\t * When true (default), the first paint uses `0` then updates to `centerValue`\n\t * on the next frame so NumberFlow can run an entrance transition. Subsequent\n\t * `centerValue` updates animate as usual.\n\t */\n\tanimateEntrance?: boolean;\n};\n\n/**\n * Renders {@link PieCenter} with a minimal {@link PieProvider} so you can reuse\n * the same center layout as a donut pie without mounting slices or a full {@link PieChart}.\n */\nexport function PieCenterShell({\n\tcenterValue,\n\tcontextSize,\n\tinnerRadiusPx,\n\tanimateEntrance = true,\n\t...pieCenterProps\n}: PieCenterShellProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst introStartedRef = useRef(false);\n\n\tconst [flowTotal, setFlowTotal] = useState(() =>\n\t\tanimateEntrance ? 0 : centerValue,\n\t);\n\n\tuseEffect(() => {\n\t\tif (!animateEntrance) {\n\t\t\tsetFlowTotal(centerValue);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!introStartedRef.current) {\n\t\t\tintroStartedRef.current = true;\n\t\t\tsetFlowTotal(0);\n\t\t\tlet innerRaf = 0;\n\t\t\tconst outerRaf = requestAnimationFrame(() => {\n\t\t\t\tinnerRaf = requestAnimationFrame(() => setFlowTotal(centerValue));\n\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tcancelAnimationFrame(outerRaf);\n\t\t\t\tcancelAnimationFrame(innerRaf);\n\t\t\t\tintroStartedRef.current = false;\n\t\t\t};\n\t\t}\n\n\t\tsetFlowTotal(centerValue);\n\t}, [animateEntrance, centerValue]);\n\n\tconst data: PieData[] = useMemo(\n\t\t() => [{ label: \"_pieCenterShell\", value: Math.max(flowTotal, 0) }],\n\t\t[flowTotal],\n\t);\n\n\tconst totalValue = flowTotal;\n\n\tconst arcs = useMemo((): PieArcData[] => {\n\t\tconst v = data[0]?.value ?? 0;\n\t\tif (v > 0) {\n\t\t\tconst pieGenerator = d3Pie<PieData>()\n\t\t\t\t.value((d) => d.value)\n\t\t\t\t.startAngle(-Math.PI / 2)\n\t\t\t\t.endAngle((3 * Math.PI) / 2)\n\t\t\t\t.padAngle(0)\n\t\t\t\t.sort(null);\n\t\t\tconst computed = pieGenerator(data);\n\t\t\treturn computed.map((arc, index) => ({\n\t\t\t\tdata: arc.data,\n\t\t\t\tindex,\n\t\t\t\tstartAngle: arc.startAngle,\n\t\t\t\tendAngle: arc.endAngle,\n\t\t\t\tpadAngle: arc.padAngle,\n\t\t\t\tvalue: arc.value,\n\t\t\t})) as PieArcData[];\n\t\t}\n\t\tconst d0 = data[0];\n\t\tif (!d0) {\n\t\t\treturn [];\n\t\t}\n\t\treturn [\n\t\t\t{\n\t\t\t\tdata: d0,\n\t\t\t\tindex: 0,\n\t\t\t\tstartAngle: -Math.PI / 2,\n\t\t\t\tendAngle: (3 * Math.PI) / 2,\n\t\t\t\tpadAngle: 0,\n\t\t\t\tvalue: 0,\n\t\t\t},\n\t\t];\n\t}, [data]);\n\n\tconst getColor = useCallback((index: number) => {\n\t\treturn defaultPieColors[index % defaultPieColors.length] as string;\n\t}, []);\n\n\tconst getFill = useCallback(\n\t\t(index: number) => {\n\t\t\tconst item = data[index];\n\t\t\tif (item?.fill) {\n\t\t\t\treturn item.fill;\n\t\t\t}\n\t\t\treturn getColor(index);\n\t\t},\n\t\t[data, getColor],\n\t);\n\n\tconst center = contextSize / 2;\n\tconst outerRadius = center - SHELL_HOVER_OFFSET;\n\n\tconst contextValue: PieContextValue = useMemo(\n\t\t() => ({\n\t\t\tdata,\n\t\t\tarcs,\n\t\t\tsize: contextSize,\n\t\t\tcenter,\n\t\t\touterRadius,\n\t\t\tinnerRadius: innerRadiusPx,\n\t\t\tpadAngle: 0,\n\t\t\tcornerRadius: 0,\n\t\t\thoverOffset: SHELL_HOVER_OFFSET,\n\t\t\thoveredIndex: null,\n\t\t\tsetHoveredIndex: () => undefined,\n\t\t\tanimationKey: 0,\n\t\t\tisLoaded: true,\n\t\t\tenterStaggerScale: 1,\n\t\t\tcontainerRef,\n\t\t\ttotalValue,\n\t\t\tgetColor,\n\t\t\tgetFill,\n\t\t\tgeometryScrubbing: false,\n\t\t\tscrubSlicePaths: null,\n\t\t}),\n\t\t[\n\t\t\tdata,\n\t\t\tarcs,\n\t\t\tcontextSize,\n\t\t\tcenter,\n\t\t\touterRadius,\n\t\t\tinnerRadiusPx,\n\t\t\ttotalValue,\n\t\t\tgetColor,\n\t\t\tgetFill,\n\t\t],\n\t);\n\n\treturn (\n\t\t<PieProvider value={contextValue}>\n\t\t\t<PieCenter {...pieCenterProps} />\n\t\t</PieProvider>\n\t);\n}\n\nPieCenterShell.displayName = \"PieCenterShell\";\n","\"use client\";\n\nimport { ParentSize } from \"@visx/responsive\";\nimport { motion, type Transition, useReducedMotion } from \"motion/react\";\nimport { type ReactNode, useId, useMemo } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\ttype ChartStatFlowFormat,\n\tdefaultChartStatFlowFormat,\n} from \"./chart-stat-flow\";\nimport {\n\ttype GaugeLabelAlign,\n\tGaugeLabelLayout,\n\ttype GaugeLabelPlacement,\n\tGaugeLabelShell,\n} from \"./gauge-label-layout\";\nimport {\n\ttype ComputedNotch,\n\tcollectGaugeDefsElements,\n\tcreateNotchPath,\n\tDEFAULT_ACTIVE_FILL_OPACITY,\n\tDEFAULT_ACTIVE_GRADIENT,\n\tDEFAULT_INACTIVE_FILL_OPACITY,\n\tDEFAULT_LINEAR_GAUGE_HEIGHT,\n\tinterpolateGaugeHex,\n\tresolveGaugeActiveFill,\n\tresolveGaugeBgFill,\n} from \"./notch-gauge-shared\";\nimport { PieCenterShell } from \"./pie-center-shell\";\n\nconst DEFAULT_NOTCH_ENTER_TRANSITION: Transition = {\n\ttype: \"spring\",\n\tstiffness: 300,\n\tdamping: 20,\n};\n\nexport type GaugeOrientation = \"arc\" | \"linear\";\n\nexport interface GaugeProps {\n\t/** Arc (default) or horizontal linear notch track */\n\torientation?: GaugeOrientation;\n\t/** Fill level 0–100 */\n\tvalue: number;\n\t/** Number of notches */\n\ttotalNotches?: number;\n\t/** Percentage of the track reserved for gaps between notches */\n\tspacing?: number;\n\tnotchCornerRadius?: number;\n\t/** `true` = rectangular notches; `false` = tapered toward center / midline */\n\tuniformWidth?: boolean;\n\tstartAngle?: number;\n\tendAngle?: number;\n\tuseGradient?: boolean;\n\tactiveGradient?: readonly [string, string];\n\tinactiveGradient?: readonly [string, string];\n\t/** Center statistic — omit to hide the label block */\n\tcenterValue?: number;\n\tdefaultLabel?: string;\n\tprefix?: string;\n\tsuffix?: string;\n\tformatOptions?: ChartStatFlowFormat;\n\t/** Label position for `orientation=\"linear\"`. Arc gauges always overlay center. */\n\tlabelPlacement?: GaugeLabelPlacement;\n\t/** Cross-axis alignment (start / center / end), same model as chart legend */\n\tlabelAlign?: GaugeLabelAlign;\n\tinactiveFill?: string;\n\tactiveFill?: string;\n\tinactiveFillOpacity?: number;\n\tactiveFillOpacity?: number;\n\tchildren?: ReactNode;\n\tclassName?: string;\n\twidth?: number;\n\theight?: number;\n\tminWidth?: number;\n\tnotchLengthPercent?: number;\n\t/** Linear only — notch width as % of each slot (default 80) */\n\tnotchWidthPercent?: number;\n\t/** Linear only — bar thickness in px when responsive (default 24) */\n\tlinearHeight?: number;\n\tenterTransition?: Transition;\n\tenterStaggerScale?: number;\n\t/** Studio-only: static paths while scrubbing geometry controls */\n\tgeometryScrubbing?: boolean;\n}\n\ninterface GaugeInnerProps extends Omit<GaugeProps, \"className\" | \"minWidth\"> {\n\twidth: number;\n\theight: number;\n}\n\nfunction GaugeNotchSvg({\n\tnotches,\n\twidth,\n\theight,\n\tnotchCornerRadius,\n\tcornerDepth,\n\tgeometryScrubbing,\n\tnotchTransition,\n\tstagger,\n\tdefsChildren,\n\tuseThemePaletteGradient,\n\tthemeActiveGradientId,\n\tresolvedInactiveFillOpacity,\n\tresolvedActiveFillOpacity,\n\tresolveBgFill,\n\tresolveActiveFill,\n}: {\n\tnotches: ComputedNotch[];\n\twidth: number;\n\theight: number;\n\tnotchCornerRadius: number;\n\tcornerDepth: number;\n\tgeometryScrubbing: boolean;\n\tnotchTransition: Transition;\n\tstagger: number;\n\tdefsChildren: ReactNode[];\n\tuseThemePaletteGradient: boolean;\n\tthemeActiveGradientId: string;\n\tresolvedInactiveFillOpacity: number;\n\tresolvedActiveFillOpacity: number;\n\tresolveBgFill: (index: number) => string;\n\tresolveActiveFill: (notch: ComputedNotch) => string;\n}) {\n\treturn (\n\t\t<svg\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"block w-full overflow-visible\"\n\t\t\theight={height}\n\t\t\tviewBox={`0 0 ${width} ${height}`}\n\t\t\twidth={width}\n\t\t>\n\t\t\t{defsChildren.length > 0 || useThemePaletteGradient ? (\n\t\t\t\t<defs>\n\t\t\t\t\t{useThemePaletteGradient ? (\n\t\t\t\t\t\t<linearGradient\n\t\t\t\t\t\t\tid={themeActiveGradientId}\n\t\t\t\t\t\t\tx1=\"0%\"\n\t\t\t\t\t\t\tx2=\"100%\"\n\t\t\t\t\t\t\ty1=\"0%\"\n\t\t\t\t\t\t\ty2=\"0%\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<stop offset=\"0%\" stopColor=\"var(--chart-1)\" />\n\t\t\t\t\t\t\t<stop offset=\"100%\" stopColor=\"var(--chart-5)\" />\n\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{defsChildren}\n\t\t\t\t</defs>\n\t\t\t) : null}\n\t\t\t{notches.map((notch) => {\n\t\t\t\tconst pathD = createNotchPath(\n\t\t\t\t\tnotch.points,\n\t\t\t\t\tnotchCornerRadius,\n\t\t\t\t\tcornerDepth,\n\t\t\t\t);\n\t\t\t\tif (geometryScrubbing) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td={pathD}\n\t\t\t\t\t\t\tfill={resolveBgFill(notch.index)}\n\t\t\t\t\t\t\tfillOpacity={resolvedInactiveFillOpacity}\n\t\t\t\t\t\t\tkey={`bg-${notch.index}`}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t<motion.path\n\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\td={pathD}\n\t\t\t\t\t\tfill={resolveBgFill(notch.index)}\n\t\t\t\t\t\tfillOpacity={resolvedInactiveFillOpacity}\n\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0 }}\n\t\t\t\t\t\tkey={`bg-${notch.index}`}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttransformOrigin: `${notch.xCenter}px ${notch.yCenter}px`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t...notchTransition,\n\t\t\t\t\t\t\tdelay: notch.index * 0.015 * stagger,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t})}\n\t\t\t{notches\n\t\t\t\t.filter((n) => n.isActive)\n\t\t\t\t.map((notch) => {\n\t\t\t\t\tconst pathD = createNotchPath(\n\t\t\t\t\t\tnotch.points,\n\t\t\t\t\t\tnotchCornerRadius,\n\t\t\t\t\t\tcornerDepth,\n\t\t\t\t\t);\n\t\t\t\t\tif (geometryScrubbing) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td={pathD}\n\t\t\t\t\t\t\t\tfill={resolveActiveFill(notch)}\n\t\t\t\t\t\t\t\tfillOpacity={resolvedActiveFillOpacity}\n\t\t\t\t\t\t\t\tkey={`active-${notch.index}`}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<motion.path\n\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\t\td={pathD}\n\t\t\t\t\t\t\tfill={resolveActiveFill(notch)}\n\t\t\t\t\t\t\tfillOpacity={resolvedActiveFillOpacity}\n\t\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0 }}\n\t\t\t\t\t\t\tkey={`active-${notch.index}`}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\ttransformOrigin: `${notch.xCenter}px ${notch.yCenter}px`,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t...notchTransition,\n\t\t\t\t\t\t\t\tdelay: (0.3 + notch.index * 0.02) * stagger,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t</svg>\n\t);\n}\n\nfunction useGaugeFillState(props: GaugeInnerProps) {\n\tconst {\n\t\tuseGradient = false,\n\t\tactiveGradient,\n\t\tinactiveGradient,\n\t\tinactiveFill,\n\t\tactiveFill,\n\t\tinactiveFillOpacity,\n\t\tactiveFillOpacity,\n\t\tchildren,\n\t\ttotalNotches = 40,\n\t} = props;\n\n\tconst themeActiveGradientId = `gauge-theme-active-${useId().replace(/:/g, \"\")}`;\n\tconst defsChildren = useMemo(\n\t\t() => collectGaugeDefsElements(children),\n\t\t[children],\n\t);\n\n\tconst hasCustomInactive =\n\t\tinactiveFill !== undefined && inactiveFill.length > 0;\n\tconst hasCustomActive = activeFill !== undefined && activeFill.length > 0;\n\n\tconst activeGrad0 = activeGradient?.[0] ?? DEFAULT_ACTIVE_GRADIENT[0];\n\tconst activeGrad1 = activeGradient?.[1] ?? DEFAULT_ACTIVE_GRADIENT[1];\n\tconst inactiveGrad0 = inactiveGradient?.[0] ?? activeGrad0;\n\tconst inactiveGrad1 = inactiveGradient?.[1] ?? activeGrad1;\n\tconst useThemePaletteGradient = useGradient && activeGradient === undefined;\n\n\treturn {\n\t\tthemeActiveGradientId,\n\t\tdefsChildren,\n\t\thasCustomInactive,\n\t\thasCustomActive,\n\t\tactiveGrad0,\n\t\tactiveGrad1,\n\t\tinactiveGrad0,\n\t\tinactiveGrad1,\n\t\tuseThemePaletteGradient,\n\t\tresolvedActiveFillOpacity: activeFillOpacity ?? DEFAULT_ACTIVE_FILL_OPACITY,\n\t\tresolvedInactiveFillOpacity:\n\t\t\tinactiveFillOpacity ?? DEFAULT_INACTIVE_FILL_OPACITY,\n\t\ttotalNotches,\n\t};\n}\n\nfunction GaugeArcInner(props: GaugeInnerProps) {\n\tconst {\n\t\tvalue,\n\t\ttotalNotches = 40,\n\t\tspacing = 25,\n\t\tnotchCornerRadius = 0,\n\t\tuniformWidth = false,\n\t\twidth,\n\t\theight,\n\t\tstartAngle = 135,\n\t\tendAngle = 405,\n\t\tuseGradient = false,\n\t\tcenterValue,\n\t\tdefaultLabel = \"Total\",\n\t\tprefix,\n\t\tsuffix,\n\t\tformatOptions = defaultChartStatFlowFormat,\n\t\tinactiveFill,\n\t\tactiveFill,\n\t\tnotchLengthPercent = 100,\n\t\tenterTransition,\n\t\tenterStaggerScale = 1,\n\t} = props;\n\n\tconst prefersReducedMotion = useReducedMotion();\n\tconst fillState = useGaugeFillState(props);\n\n\tconst notchTransition: Transition = prefersReducedMotion\n\t\t? { duration: 0 }\n\t\t: (enterTransition ?? DEFAULT_NOTCH_ENTER_TRANSITION);\n\tconst stagger = Math.max(0.25, Math.min(2.5, enterStaggerScale));\n\n\tconst size = Math.min(width, height);\n\tconst centerX = width / 2;\n\tconst centerY = height / 2;\n\tconst outerRadius = size * 0.42;\n\tconst innerRadiusBase = size * 0.28;\n\tconst defaultRadialDepth = outerRadius - innerRadiusBase;\n\tconst depthFactor = Math.min(100, Math.max(5, notchLengthPercent)) / 100;\n\tconst notchLength = defaultRadialDepth * depthFactor;\n\tconst innerRadius = outerRadius - notchLength;\n\n\tconst activeNotches = Math.round((value / 100) * totalNotches);\n\tconst totalAngle = endAngle - startAngle;\n\tconst availableAngle = totalAngle * (1 - spacing / 100);\n\tconst notchAngle = totalNotches > 0 ? availableAngle / totalNotches : 0;\n\tconst gapDen = totalNotches - 1 > 0 ? totalNotches - 1 : 1;\n\tconst gapAngle = (totalAngle * (spacing / 100)) / gapDen;\n\n\tconst notches = useMemo(() => {\n\t\treturn Array.from({ length: totalNotches }, (_, i) => {\n\t\t\tconst angle = startAngle + i * (notchAngle + gapAngle) + notchAngle / 2;\n\t\t\tconst radians = (angle * Math.PI) / 180;\n\t\t\tconst arcNotchWidth = notchAngle * 0.8;\n\t\t\tconst halfWidth = (arcNotchWidth * Math.PI) / 180 / 2;\n\n\t\t\tconst x1 = centerX + Math.cos(radians - halfWidth) * outerRadius;\n\t\t\tconst y1 = centerY + Math.sin(radians - halfWidth) * outerRadius;\n\t\t\tconst x2 = centerX + Math.cos(radians + halfWidth) * outerRadius;\n\t\t\tconst y2 = centerY + Math.sin(radians + halfWidth) * outerRadius;\n\n\t\t\tlet x3: number;\n\t\t\tlet y3: number;\n\t\t\tlet x4: number;\n\t\t\tlet y4: number;\n\n\t\t\tif (uniformWidth) {\n\t\t\t\tconst perpX = Math.cos(radians);\n\t\t\t\tconst perpY = Math.sin(radians);\n\t\t\t\tx3 = x2 - perpX * notchLength;\n\t\t\t\ty3 = y2 - perpY * notchLength;\n\t\t\t\tx4 = x1 - perpX * notchLength;\n\t\t\t\ty4 = y1 - perpY * notchLength;\n\t\t\t} else {\n\t\t\t\tx3 = centerX + Math.cos(radians + halfWidth) * innerRadius;\n\t\t\t\ty3 = centerY + Math.sin(radians + halfWidth) * innerRadius;\n\t\t\t\tx4 = centerX + Math.cos(radians - halfWidth) * innerRadius;\n\t\t\t\ty4 = centerY + Math.sin(radians - halfWidth) * innerRadius;\n\t\t\t}\n\n\t\t\tconst denom = totalNotches > 1 ? totalNotches - 1 : 1;\n\t\t\tconst gradientColor =\n\t\t\t\tuseGradient && !fillState.useThemePaletteGradient\n\t\t\t\t\t? interpolateGaugeHex(\n\t\t\t\t\t\t\tfillState.activeGrad0,\n\t\t\t\t\t\t\tfillState.activeGrad1,\n\t\t\t\t\t\t\ti / denom,\n\t\t\t\t\t\t)\n\t\t\t\t\t: \"var(--chart-1)\";\n\n\t\t\treturn {\n\t\t\t\tindex: i,\n\t\t\t\tpoints: { x1, y1, x2, y2, x3, y3, x4, y4 },\n\t\t\t\tisActive: i < activeNotches,\n\t\t\t\tgradientColor,\n\t\t\t\txCenter: centerX,\n\t\t\t\tyCenter: centerY,\n\t\t\t};\n\t\t});\n\t}, [\n\t\ttotalNotches,\n\t\tnotchAngle,\n\t\tgapAngle,\n\t\tcenterX,\n\t\tcenterY,\n\t\touterRadius,\n\t\tinnerRadius,\n\t\tactiveNotches,\n\t\tstartAngle,\n\t\tuniformWidth,\n\t\tnotchLength,\n\t\tuseGradient,\n\t\tfillState.useThemePaletteGradient,\n\t\tfillState.activeGrad0,\n\t\tfillState.activeGrad1,\n\t]);\n\n\tconst resolveBgFill = (notchIndex: number) =>\n\t\tresolveGaugeBgFill({\n\t\t\tnotchIndex,\n\t\t\ttotalNotches,\n\t\t\thasCustomInactive: fillState.hasCustomInactive,\n\t\t\tinactiveFill,\n\t\t\tuseThemePaletteGradient: fillState.useThemePaletteGradient,\n\t\t\tuseGradient,\n\t\t\tinactiveGrad0: fillState.inactiveGrad0,\n\t\t\tinactiveGrad1: fillState.inactiveGrad1,\n\t\t\tarcTrackFill: \"var(--border)\",\n\t\t\tlinearTrackFill: \"var(--chart-background)\",\n\t\t\tlinearMode: false,\n\t\t});\n\n\tconst resolveActiveFill = (notch: ComputedNotch) =>\n\t\tresolveGaugeActiveFill({\n\t\t\tnotch,\n\t\t\thasCustomActive: fillState.hasCustomActive,\n\t\t\tactiveFill,\n\t\t\tuseThemePaletteGradient: fillState.useThemePaletteGradient,\n\t\t\tthemeActiveGradientId: fillState.themeActiveGradientId,\n\t\t\tuseGradient,\n\t\t\tactiveFillSolid: \"var(--chart-1)\",\n\t\t});\n\n\tconst showCenter = centerValue != null;\n\n\treturn (\n\t\t<div className=\"relative w-full\" style={{ height, width }}>\n\t\t\t<GaugeNotchSvg\n\t\t\t\tcornerDepth={notchLength}\n\t\t\t\tdefsChildren={fillState.defsChildren}\n\t\t\t\tgeometryScrubbing={false}\n\t\t\t\theight={height}\n\t\t\t\tnotchCornerRadius={notchCornerRadius}\n\t\t\t\tnotches={notches}\n\t\t\t\tnotchTransition={notchTransition}\n\t\t\t\tresolveActiveFill={resolveActiveFill}\n\t\t\t\tresolveBgFill={resolveBgFill}\n\t\t\t\tresolvedActiveFillOpacity={fillState.resolvedActiveFillOpacity}\n\t\t\t\tresolvedInactiveFillOpacity={fillState.resolvedInactiveFillOpacity}\n\t\t\t\tstagger={stagger}\n\t\t\t\tthemeActiveGradientId={fillState.themeActiveGradientId}\n\t\t\t\tuseThemePaletteGradient={fillState.useThemePaletteGradient}\n\t\t\t\twidth={width}\n\t\t\t/>\n\t\t\t{showCenter ? (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"pointer-events-none absolute inset-0 flex flex-col items-center justify-center\"\n\t\t\t\t\tstyle={{ paddingTop: size * 0.08 }}\n\t\t\t\t>\n\t\t\t\t\t<PieCenterShell\n\t\t\t\t\t\tcenterValue={centerValue}\n\t\t\t\t\t\tcontextSize={size}\n\t\t\t\t\t\tdefaultLabel={defaultLabel}\n\t\t\t\t\t\tformatOptions={formatOptions}\n\t\t\t\t\t\tinnerRadiusPx={Math.max(size * 0.2, 52)}\n\t\t\t\t\t\tprefix={prefix}\n\t\t\t\t\t\tsuffix={suffix}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n\nfunction GaugeLinearInner(props: GaugeInnerProps) {\n\tconst {\n\t\tvalue,\n\t\ttotalNotches = 40,\n\t\tspacing = 25,\n\t\tnotchCornerRadius = 0,\n\t\tuniformWidth = true,\n\t\twidth,\n\t\theight,\n\t\tuseGradient = false,\n\t\tcenterValue,\n\t\tdefaultLabel = \"Total\",\n\t\tprefix,\n\t\tsuffix,\n\t\tformatOptions = defaultChartStatFlowFormat,\n\t\tlabelPlacement = \"top\",\n\t\tlabelAlign = \"start\",\n\t\tinactiveFill,\n\t\tactiveFill,\n\t\tnotchLengthPercent = 100,\n\t\tnotchWidthPercent = 80,\n\t\tenterTransition,\n\t\tenterStaggerScale = 1,\n\t\tgeometryScrubbing = false,\n\t} = props;\n\n\tconst prefersReducedMotion = useReducedMotion();\n\tconst fillState = useGaugeFillState(props);\n\n\tconst notchTransition: Transition = prefersReducedMotion\n\t\t? { duration: 0 }\n\t\t: (enterTransition ?? DEFAULT_NOTCH_ENTER_TRANSITION);\n\tconst stagger = Math.max(0.25, Math.min(2.5, enterStaggerScale));\n\n\tconst centerY = height / 2;\n\tconst depthFactor = Math.min(100, Math.max(5, notchLengthPercent)) / 100;\n\tconst outerOffset = (height / 2) * depthFactor;\n\tconst taperRatio = 28 / 42;\n\tconst innerOffset = uniformWidth ? outerOffset : outerOffset * taperRatio;\n\tconst notchDepth = uniformWidth ? outerOffset * 2 : outerOffset - innerOffset;\n\tconst cornerVerticalDepth = uniformWidth ? notchDepth : outerOffset * 2;\n\tconst widthFactor = Math.min(100, Math.max(10, notchWidthPercent)) / 100;\n\n\tconst activeNotches = Math.round((value / 100) * totalNotches);\n\tconst availableWidth = width * (1 - spacing / 100);\n\tconst slotWidth = totalNotches > 0 ? availableWidth / totalNotches : 0;\n\tconst gapDen = totalNotches - 1 > 0 ? totalNotches - 1 : 1;\n\tconst gapWidth = (width * (spacing / 100)) / gapDen;\n\n\tconst notches = useMemo(() => {\n\t\treturn Array.from({ length: totalNotches }, (_, i) => {\n\t\t\tconst xCenter = i * (slotWidth + gapWidth) + slotWidth / 2;\n\t\t\tconst halfWidth = (slotWidth * widthFactor) / 2;\n\n\t\t\tlet x1: number;\n\t\t\tlet y1: number;\n\t\t\tlet x2: number;\n\t\t\tlet y2: number;\n\t\t\tlet x3: number;\n\t\t\tlet y3: number;\n\t\t\tlet x4: number;\n\t\t\tlet y4: number;\n\n\t\t\tif (uniformWidth) {\n\t\t\t\tconst halfHeight = notchDepth / 2;\n\t\t\t\tx1 = xCenter - halfWidth;\n\t\t\t\ty1 = centerY - halfHeight;\n\t\t\t\tx2 = xCenter + halfWidth;\n\t\t\t\ty2 = centerY - halfHeight;\n\t\t\t\tx3 = xCenter + halfWidth;\n\t\t\t\ty3 = centerY + halfHeight;\n\t\t\t\tx4 = xCenter - halfWidth;\n\t\t\t\ty4 = centerY + halfHeight;\n\t\t\t} else {\n\t\t\t\tx1 = xCenter - halfWidth;\n\t\t\t\ty1 = centerY - outerOffset;\n\t\t\t\tx2 = xCenter + halfWidth;\n\t\t\t\ty2 = centerY - outerOffset;\n\t\t\t\tconst innerHalfWidth = halfWidth * (innerOffset / outerOffset);\n\t\t\t\tx3 = xCenter + innerHalfWidth;\n\t\t\t\ty3 = centerY + outerOffset;\n\t\t\t\tx4 = xCenter - innerHalfWidth;\n\t\t\t\ty4 = centerY + outerOffset;\n\t\t\t}\n\n\t\t\tconst denom = totalNotches > 1 ? totalNotches - 1 : 1;\n\t\t\tconst gradientColor =\n\t\t\t\tuseGradient && !fillState.useThemePaletteGradient\n\t\t\t\t\t? interpolateGaugeHex(\n\t\t\t\t\t\t\tfillState.activeGrad0,\n\t\t\t\t\t\t\tfillState.activeGrad1,\n\t\t\t\t\t\t\ti / denom,\n\t\t\t\t\t\t)\n\t\t\t\t\t: \"var(--chart-1)\";\n\n\t\t\treturn {\n\t\t\t\tindex: i,\n\t\t\t\tpoints: { x1, y1, x2, y2, x3, y3, x4, y4 },\n\t\t\t\tisActive: i < activeNotches,\n\t\t\t\tgradientColor,\n\t\t\t\txCenter,\n\t\t\t\tyCenter: centerY,\n\t\t\t};\n\t\t});\n\t}, [\n\t\ttotalNotches,\n\t\tslotWidth,\n\t\tgapWidth,\n\t\tcenterY,\n\t\touterOffset,\n\t\tinnerOffset,\n\t\tactiveNotches,\n\t\tuniformWidth,\n\t\tnotchDepth,\n\t\twidthFactor,\n\t\tuseGradient,\n\t\tfillState.useThemePaletteGradient,\n\t\tfillState.activeGrad0,\n\t\tfillState.activeGrad1,\n\t]);\n\n\tconst resolveBgFill = (notchIndex: number) =>\n\t\tresolveGaugeBgFill({\n\t\t\tnotchIndex,\n\t\t\ttotalNotches,\n\t\t\thasCustomInactive: fillState.hasCustomInactive,\n\t\t\tinactiveFill,\n\t\t\tuseThemePaletteGradient: fillState.useThemePaletteGradient,\n\t\t\tuseGradient,\n\t\t\tinactiveGrad0: fillState.inactiveGrad0,\n\t\t\tinactiveGrad1: fillState.inactiveGrad1,\n\t\t\tarcTrackFill: \"var(--border)\",\n\t\t\tlinearTrackFill: \"var(--chart-background)\",\n\t\t\tlinearMode: true,\n\t\t});\n\n\tconst resolveActiveFill = (notch: ComputedNotch) =>\n\t\tresolveGaugeActiveFill({\n\t\t\tnotch,\n\t\t\thasCustomActive: fillState.hasCustomActive,\n\t\t\tactiveFill,\n\t\t\tuseThemePaletteGradient: fillState.useThemePaletteGradient,\n\t\t\tthemeActiveGradientId: fillState.themeActiveGradientId,\n\t\t\tuseGradient,\n\t\t\tactiveFillSolid: \"var(--chart-1)\",\n\t\t});\n\n\tconst label =\n\t\tcenterValue == null ? null : (\n\t\t\t<GaugeLabelShell\n\t\t\t\talign={labelAlign}\n\t\t\t\tcenterValue={centerValue}\n\t\t\t\tdefaultLabel={defaultLabel}\n\t\t\t\tformatOptions={formatOptions}\n\t\t\t\tprefix={prefix}\n\t\t\t\tsuffix={suffix}\n\t\t\t/>\n\t\t);\n\n\tconst track = (\n\t\t<div className=\"relative w-full\" style={{ height, width }}>\n\t\t\t<GaugeNotchSvg\n\t\t\t\tcornerDepth={cornerVerticalDepth}\n\t\t\t\tdefsChildren={fillState.defsChildren}\n\t\t\t\tgeometryScrubbing={geometryScrubbing}\n\t\t\t\theight={height}\n\t\t\t\tnotchCornerRadius={notchCornerRadius}\n\t\t\t\tnotches={notches}\n\t\t\t\tnotchTransition={notchTransition}\n\t\t\t\tresolveActiveFill={resolveActiveFill}\n\t\t\t\tresolveBgFill={resolveBgFill}\n\t\t\t\tresolvedActiveFillOpacity={fillState.resolvedActiveFillOpacity}\n\t\t\t\tresolvedInactiveFillOpacity={fillState.resolvedInactiveFillOpacity}\n\t\t\t\tstagger={stagger}\n\t\t\t\tthemeActiveGradientId={fillState.themeActiveGradientId}\n\t\t\t\tuseThemePaletteGradient={fillState.useThemePaletteGradient}\n\t\t\t\twidth={width}\n\t\t\t/>\n\t\t</div>\n\t);\n\n\treturn (\n\t\t<GaugeLabelLayout\n\t\t\talign={labelAlign}\n\t\t\tlabel={label}\n\t\t\tplacement={labelPlacement}\n\t\t>\n\t\t\t{track}\n\t\t</GaugeLabelLayout>\n\t);\n}\n\nfunction GaugeInner(props: GaugeInnerProps) {\n\tif (props.orientation === \"linear\") {\n\t\treturn <GaugeLinearInner {...props} />;\n\t}\n\treturn <GaugeArcInner {...props} />;\n}\n\nexport function Gauge({\n\twidth: widthProp,\n\theight: heightProp,\n\tclassName,\n\tminWidth,\n\torientation = \"arc\",\n\tlinearHeight,\n\t...props\n}: GaugeProps) {\n\tconst isLinear = orientation === \"linear\";\n\tconst resolvedMinWidth = minWidth ?? (isLinear ? 200 : 300);\n\tconst resolvedLinearHeight = linearHeight ?? DEFAULT_LINEAR_GAUGE_HEIGHT;\n\n\tif (isLinear) {\n\t\tif (widthProp != null) {\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\"relative w-full max-w-full\", className)}\n\t\t\t\t\tstyle={{ width: widthProp }}\n\t\t\t\t>\n\t\t\t\t\t<GaugeInner\n\t\t\t\t\t\theight={heightProp ?? resolvedLinearHeight}\n\t\t\t\t\t\torientation=\"linear\"\n\t\t\t\t\t\twidth={widthProp}\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<div className={cn(\"relative w-full min-w-0 max-w-full\", className)}>\n\t\t\t\t<div className=\"w-full min-w-0\" style={{ minWidth: resolvedMinWidth }}>\n\t\t\t\t\t<ParentSize debounceTime={10}>\n\t\t\t\t\t\t{({ width }) =>\n\t\t\t\t\t\t\twidth > 0 ? (\n\t\t\t\t\t\t\t\t<GaugeInner\n\t\t\t\t\t\t\t\t\theight={resolvedLinearHeight}\n\t\t\t\t\t\t\t\t\torientation=\"linear\"\n\t\t\t\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null\n\t\t\t\t\t\t}\n\t\t\t\t\t</ParentSize>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (widthProp != null && heightProp != null) {\n\t\treturn (\n\t\t\t<div className={cn(\"relative inline-flex max-w-full\", className)}>\n\t\t\t\t<GaugeInner\n\t\t\t\t\theight={heightProp}\n\t\t\t\t\torientation=\"arc\"\n\t\t\t\t\twidth={widthProp}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"relative w-full max-w-full\", className)}\n\t\t\tstyle={{ minWidth: resolvedMinWidth }}\n\t\t>\n\t\t\t<div className=\"mx-auto aspect-[21/16] w-full max-w-[560px]\">\n\t\t\t\t<ParentSize debounceTime={10}>\n\t\t\t\t\t{({ width, height }) =>\n\t\t\t\t\t\twidth > 0 && height > 0 ? (\n\t\t\t\t\t\t\t<GaugeInner\n\t\t\t\t\t\t\t\theight={height}\n\t\t\t\t\t\t\t\torientation=\"arc\"\n\t\t\t\t\t\t\t\twidth={width}\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null\n\t\t\t\t\t}\n\t\t\t\t</ParentSize>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nGauge.displayName = \"Gauge\";\n","\"use client\";\n\nimport type { Transition } from \"motion/react\";\nimport {\n\tcreateContext,\n\ttype ReactNode,\n\ttype RefObject,\n\tuseContext,\n\tuseMemo,\n} from \"react\";\n\n// CSS variable references for ring chart theming\nexport const ringCssVars = {\n\tbackground: \"var(--chart-background)\",\n\tforeground: \"var(--chart-foreground)\",\n\tforegroundMuted: \"var(--chart-foreground-muted)\",\n\tlabel: \"var(--chart-label)\",\n\tringBackground: \"var(--border)\",\n\t// Default ring colors from chart palette\n\tring1: \"var(--chart-1)\",\n\tring2: \"var(--chart-2)\",\n\tring3: \"var(--chart-3)\",\n\tring4: \"var(--chart-4)\",\n\tring5: \"var(--chart-5)\",\n};\n\n// Default ring color palette\nexport const defaultRingColors = [\n\tringCssVars.ring1,\n\tringCssVars.ring2,\n\tringCssVars.ring3,\n\tringCssVars.ring4,\n\tringCssVars.ring5,\n];\n\nexport interface RingData {\n\t/** Display label for the ring */\n\tlabel: string;\n\t/** Current value */\n\tvalue: number;\n\t/** Maximum value (determines progress percentage) */\n\tmaxValue: number;\n\t/** Optional color override - falls back to palette */\n\tcolor?: string;\n}\n\nexport interface RingHoverContextValue {\n\thoveredIndex: number | null;\n\tsetHoveredIndex: (index: number | null) => void;\n}\n\nexport interface RingStableContextValue {\n\t// Data\n\tdata: RingData[];\n\n\t// Dimensions\n\tsize: number;\n\tcenter: number;\n\tstrokeWidth: number;\n\tringGap: number;\n\tbaseInnerRadius: number;\n\n\t// Animation state\n\tanimationKey: number;\n\tisLoaded: boolean;\n\tenterTransition?: Transition;\n\tenterStaggerScale: number;\n\n\t// Container ref for portals\n\tcontainerRef: RefObject<HTMLDivElement | null>;\n\n\t// Computed values\n\ttotalValue: number;\n\n\t// Get color for a ring index\n\tgetColor: (index: number) => string;\n\n\t// Get ring radii for an index\n\tgetRingRadii: (index: number) => { innerRadius: number; outerRadius: number };\n\n\t// Arc angle range\n\tstartAngle: number;\n\tendAngle: number;\n\n\t/**\n\t * Studio geometry scrub — skip Motion path morphing and use plain SVG paths.\n\t * @default false\n\t */\n\tgeometryScrubbing: boolean;\n}\n\nexport type RingContextValue = RingStableContextValue & RingHoverContextValue;\n\nconst RingStableContext = createContext<RingStableContextValue | null>(null);\nconst RingHoverContext = createContext<RingHoverContextValue | null>(null);\n\nexport function RingProvider({\n\tchildren,\n\tvalue,\n}: {\n\tchildren: ReactNode;\n\tvalue: RingContextValue;\n}) {\n\tconst stable = useMemo<RingStableContextValue>(\n\t\t() => ({\n\t\t\tdata: value.data,\n\t\t\tsize: value.size,\n\t\t\tcenter: value.center,\n\t\t\tstrokeWidth: value.strokeWidth,\n\t\t\tringGap: value.ringGap,\n\t\t\tbaseInnerRadius: value.baseInnerRadius,\n\t\t\tanimationKey: value.animationKey,\n\t\t\tisLoaded: value.isLoaded,\n\t\t\tenterTransition: value.enterTransition,\n\t\t\tenterStaggerScale: value.enterStaggerScale,\n\t\t\tcontainerRef: value.containerRef,\n\t\t\ttotalValue: value.totalValue,\n\t\t\tgetColor: value.getColor,\n\t\t\tgetRingRadii: value.getRingRadii,\n\t\t\tstartAngle: value.startAngle,\n\t\t\tendAngle: value.endAngle,\n\t\t\tgeometryScrubbing: value.geometryScrubbing,\n\t\t}),\n\t\t[\n\t\t\tvalue.data,\n\t\t\tvalue.size,\n\t\t\tvalue.center,\n\t\t\tvalue.strokeWidth,\n\t\t\tvalue.ringGap,\n\t\t\tvalue.baseInnerRadius,\n\t\t\tvalue.animationKey,\n\t\t\tvalue.isLoaded,\n\t\t\tvalue.enterTransition,\n\t\t\tvalue.enterStaggerScale,\n\t\t\tvalue.containerRef,\n\t\t\tvalue.totalValue,\n\t\t\tvalue.getColor,\n\t\t\tvalue.getRingRadii,\n\t\t\tvalue.startAngle,\n\t\t\tvalue.endAngle,\n\t\t\tvalue.geometryScrubbing,\n\t\t],\n\t);\n\n\tconst hover = useMemo<RingHoverContextValue>(\n\t\t() => ({\n\t\t\thoveredIndex: value.hoveredIndex,\n\t\t\tsetHoveredIndex: value.setHoveredIndex,\n\t\t}),\n\t\t[value.hoveredIndex, value.setHoveredIndex],\n\t);\n\n\treturn (\n\t\t<RingStableContext.Provider value={stable}>\n\t\t\t<RingHoverContext.Provider value={hover}>\n\t\t\t\t{children}\n\t\t\t</RingHoverContext.Provider>\n\t\t</RingStableContext.Provider>\n\t);\n}\n\nexport function useRingStable(): RingStableContextValue {\n\tconst context = useContext(RingStableContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"useRingStable must be used within a RingProvider. \" +\n\t\t\t\t\"Make sure your component is wrapped in <RingChart>.\",\n\t\t);\n\t}\n\treturn context;\n}\n\nexport function useRingHover(): RingHoverContextValue {\n\tconst context = useContext(RingHoverContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"useRingHover must be used within a RingProvider. \" +\n\t\t\t\t\"Make sure your component is wrapped in <RingChart>.\",\n\t\t);\n\t}\n\treturn context;\n}\n\nexport function useRing(): RingContextValue {\n\treturn { ...useRingStable(), ...useRingHover() };\n}\n\nexport default RingStableContext;\n","\"use client\";\n\nimport { Group } from \"@visx/group\";\nimport { ParentSize } from \"@visx/responsive\";\nimport { arc as arcGenerator } from \"@visx/shape\";\nimport type { Transition } from \"motion/react\";\nimport {\n\tChildren,\n\tisValidElement,\n\tmemo,\n\ttype ReactNode,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tdefaultRingColors,\n\ttype RingContextValue,\n\ttype RingData,\n\tRingProvider,\n\tringCssVars,\n} from \"./ring-context\";\n\nfunction generateRingArcPath(\n\tinnerRadius: number,\n\touterRadius: number,\n\tstartAngle: number,\n\tendAngle: number,\n\tcornerRadius: number,\n): string {\n\tconst generator = arcGenerator<unknown>({\n\t\tinnerRadius,\n\t\touterRadius,\n\t\tcornerRadius,\n\t});\n\treturn generator({ startAngle, endAngle } as unknown as null) || \"\";\n}\n\nexport interface RingChartProps {\n\t/** Data array - each item represents a ring */\n\tdata: RingData[];\n\t/** Chart size in pixels. If not provided, uses parent container size */\n\tsize?: number;\n\t/** Stroke width of each ring. Default: 12 */\n\tstrokeWidth?: number;\n\t/** Gap between rings. Default: 6 */\n\tringGap?: number;\n\t/** Inner radius of the innermost ring. Default: 60 */\n\tbaseInnerRadius?: number;\n\t/** Animation duration in milliseconds. Default: 1100 */\n\tanimationDuration?: number;\n\t/** Additional class name for the container */\n\tclassName?: string;\n\t/** Controlled hover state - index of hovered ring */\n\thoveredIndex?: number | null;\n\t/** Callback when hover state changes */\n\tonHoverChange?: (index: number | null) => void;\n\t/** Start angle in radians. Default: -PI/2 (top) */\n\tstartAngle?: number;\n\t/** End angle in radians. Default: 3*PI/2 (full circle) */\n\tendAngle?: number;\n\t/** Framer Motion transition for ring enter animation */\n\tenterTransition?: Transition;\n\t/** Scales ring stagger delays (1 = default). */\n\tenterStaggerScale?: number;\n\t/**\n\t * High-frequency geometry updates (e.g. studio NumberField scrub).\n\t * Uses plain SVG paths instead of Motion `d` morphing.\n\t */\n\tgeometryScrubbing?: boolean;\n\t/** Child components (Ring, RingCenter, etc.) */\n\tchildren: ReactNode;\n}\n\ninterface RingChartInnerProps {\n\twidth: number;\n\theight: number;\n\tdata: RingData[];\n\tstrokeWidth: number;\n\tringGap: number;\n\tbaseInnerRadius: number;\n\tchildren: ReactNode;\n\tcontainerRef: React.RefObject<HTMLDivElement | null>;\n\thoveredIndexProp?: number | null;\n\tonHoverChange?: (index: number | null) => void;\n\tstartAngle: number;\n\tendAngle: number;\n\tenterTransition?: Transition;\n\tenterStaggerScale: number;\n\tgeometryScrubbing: boolean;\n}\n\nfunction isRing(child: ReactNode): boolean {\n\treturn (\n\t\tisValidElement(child) &&\n\t\ttypeof child.type === \"function\" &&\n\t\t((child.type as { displayName?: string }).displayName === \"Ring\" ||\n\t\t\t(child.type as { name?: string }).name === \"Ring\")\n\t);\n}\n\n// Helper to check if a child is a RingCenter component\nfunction isRingCenter(child: ReactNode): boolean {\n\treturn (\n\t\tisValidElement(child) &&\n\t\ttypeof child.type === \"function\" &&\n\t\t((child.type as { displayName?: string }).displayName === \"RingCenter\" ||\n\t\t\tchild.type.name === \"RingCenter\")\n\t);\n}\n\nfunction RingChartInner(props: RingChartInnerProps) {\n\tconst size = Math.min(props.width, props.height);\n\n\tif (size < 10) {\n\t\treturn null;\n\t}\n\n\treturn <RingChartCore {...props} />;\n}\n\ninterface ScrubRingLayer {\n\tbgPath: string;\n\tprogressPath: string;\n\tcolor: string;\n}\n\nconst RingChartCore = memo(function RingChartCore({\n\twidth,\n\theight,\n\tdata,\n\tstrokeWidth: strokeWidthProp,\n\tringGap: ringGapProp,\n\tbaseInnerRadius: baseInnerRadiusProp,\n\tchildren,\n\tcontainerRef,\n\thoveredIndexProp,\n\tonHoverChange,\n\tstartAngle,\n\tendAngle,\n\tenterTransition,\n\tenterStaggerScale,\n\tgeometryScrubbing,\n}: RingChartInnerProps) {\n\tconst [internalHoveredIndex, setInternalHoveredIndex] = useState<\n\t\tnumber | null\n\t>(null);\n\tconst [animationKey] = useState(0);\n\tconst [isLoaded, setIsLoaded] = useState(false);\n\n\t// Use controlled or uncontrolled hover state\n\tconst isControlled = hoveredIndexProp !== undefined;\n\tconst hoveredIndex = isControlled ? hoveredIndexProp : internalHoveredIndex;\n\tconst setHoveredIndex = useCallback(\n\t\t(index: number | null) => {\n\t\t\tif (isControlled) {\n\t\t\t\tonHoverChange?.(index);\n\t\t\t} else {\n\t\t\t\tsetInternalHoveredIndex(index);\n\t\t\t}\n\t\t},\n\t\t[isControlled, onHoverChange],\n\t);\n\n\t// Use the smaller dimension to ensure the chart fits\n\tconst size = Math.min(width, height);\n\tconst center = size / 2;\n\n\t// Calculate scaled dimensions to fit within the available space\n\t// The outermost ring needs to fit within the chart with some padding\n\tconst ringCount = data.length;\n\tconst padding = 8; // Padding from edge\n\tconst availableRadius = center - padding;\n\n\t// Calculate the \"design\" outer radius (what we'd need at 1:1 scale)\n\tconst designOuterRadius =\n\t\tbaseInnerRadiusProp +\n\t\t(ringCount - 1) * (strokeWidthProp + ringGapProp) +\n\t\tstrokeWidthProp;\n\n\t// Scale factor to fit within available space\n\tconst scale = Math.min(1, availableRadius / designOuterRadius);\n\n\t// Apply scaling to all dimensions\n\tconst strokeWidth = strokeWidthProp * scale;\n\tconst ringGap = ringGapProp * scale;\n\tconst baseInnerRadius = baseInnerRadiusProp * scale;\n\n\t// Calculate total value\n\tconst totalValue = useMemo(\n\t\t() => data.reduce((sum, d) => sum + d.value, 0),\n\t\t[data],\n\t);\n\n\t// Get color for a ring index\n\tconst getColor = useCallback(\n\t\t(index: number) => {\n\t\t\tconst item = data[index];\n\t\t\tif (item?.color) {\n\t\t\t\treturn item.color;\n\t\t\t}\n\t\t\treturn defaultRingColors[index % defaultRingColors.length] as string;\n\t\t},\n\t\t[data],\n\t);\n\n\t// Get ring radii for an index\n\tconst getRingRadii = useCallback(\n\t\t(index: number) => {\n\t\t\tconst innerRadius = baseInnerRadius + index * (strokeWidth + ringGap);\n\t\t\tconst outerRadius = innerRadius + strokeWidth;\n\t\t\treturn { innerRadius, outerRadius };\n\t\t},\n\t\t[baseInnerRadius, strokeWidth, ringGap],\n\t);\n\n\tconst arcRange = endAngle - startAngle;\n\tconst scrubRingLayers = useMemo((): readonly ScrubRingLayer[] | null => {\n\t\tif (!geometryScrubbing) {\n\t\t\treturn null;\n\t\t}\n\t\treturn data.map((ringData, index) => {\n\t\t\tconst { innerRadius, outerRadius } = getRingRadii(index);\n\t\t\tconst cornerRadius = (outerRadius - innerRadius) / 2;\n\t\t\tconst progress = ringData.value / ringData.maxValue;\n\t\t\tconst progressEndAngle = startAngle + arcRange * progress;\n\t\t\treturn {\n\t\t\t\tbgPath: generateRingArcPath(\n\t\t\t\t\tinnerRadius,\n\t\t\t\t\touterRadius,\n\t\t\t\t\tstartAngle,\n\t\t\t\t\tendAngle,\n\t\t\t\t\tcornerRadius,\n\t\t\t\t),\n\t\t\t\tprogressPath:\n\t\t\t\t\tprogressEndAngle <= startAngle + 0.01\n\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t: generateRingArcPath(\n\t\t\t\t\t\t\t\tinnerRadius,\n\t\t\t\t\t\t\t\touterRadius,\n\t\t\t\t\t\t\t\tstartAngle,\n\t\t\t\t\t\t\t\tprogressEndAngle,\n\t\t\t\t\t\t\t\tcornerRadius,\n\t\t\t\t\t\t\t),\n\t\t\t\tcolor: getColor(index),\n\t\t\t};\n\t\t});\n\t}, [\n\t\tgeometryScrubbing,\n\t\tdata,\n\t\tgetRingRadii,\n\t\tgetColor,\n\t\tstartAngle,\n\t\tendAngle,\n\t\tarcRange,\n\t]);\n\n\tconst effectiveIsLoaded = geometryScrubbing || isLoaded;\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: enterTransition\n\tuseEffect(() => {\n\t\tif (geometryScrubbing) {\n\t\t\treturn;\n\t\t}\n\t\tsetIsLoaded(false);\n\t\tconst timer = setTimeout(() => {\n\t\t\tsetIsLoaded(true);\n\t\t}, 100);\n\t\treturn () => clearTimeout(timer);\n\t}, [enterTransition, enterStaggerScale, geometryScrubbing]);\n\n\t// Separate SVG children (rings) from HTML children (RingCenter)\n\t// This avoids Safari's foreignObject positioning bugs (WebKit #23113)\n\tconst { svgChildren, centerChildren } = useMemo(() => {\n\t\tconst svgNodes: ReactNode[] = [];\n\t\tconst centerNodes: ReactNode[] = [];\n\n\t\tChildren.forEach(children, (child) => {\n\t\t\tif (isRingCenter(child)) {\n\t\t\t\tcenterNodes.push(child);\n\t\t\t} else if (geometryScrubbing && isRing(child)) {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tsvgNodes.push(child);\n\t\t\t}\n\t\t});\n\n\t\treturn { svgChildren: svgNodes, centerChildren: centerNodes };\n\t}, [children, geometryScrubbing]);\n\n\tconst contextValue: RingContextValue = useMemo(\n\t\t() => ({\n\t\t\tdata,\n\t\t\tsize,\n\t\t\tcenter,\n\t\t\tstrokeWidth,\n\t\t\tringGap,\n\t\t\tbaseInnerRadius,\n\t\t\thoveredIndex,\n\t\t\tsetHoveredIndex,\n\t\t\tanimationKey,\n\t\t\tisLoaded: effectiveIsLoaded,\n\t\t\tenterTransition,\n\t\t\tenterStaggerScale,\n\t\t\tcontainerRef,\n\t\t\ttotalValue,\n\t\t\tgetColor,\n\t\t\tgetRingRadii,\n\t\t\tstartAngle,\n\t\t\tendAngle,\n\t\t\tgeometryScrubbing,\n\t\t}),\n\t\t[\n\t\t\tdata,\n\t\t\tsize,\n\t\t\tcenter,\n\t\t\tstrokeWidth,\n\t\t\tringGap,\n\t\t\tbaseInnerRadius,\n\t\t\thoveredIndex,\n\t\t\tsetHoveredIndex,\n\t\t\tanimationKey,\n\t\t\teffectiveIsLoaded,\n\t\t\tenterTransition,\n\t\t\tenterStaggerScale,\n\t\t\tcontainerRef,\n\t\t\ttotalValue,\n\t\t\tgetColor,\n\t\t\tgetRingRadii,\n\t\t\tstartAngle,\n\t\t\tendAngle,\n\t\t\tgeometryScrubbing,\n\t\t],\n\t);\n\n\t// Use CSS Grid stacking to layer SVG and HTML content\n\t// This avoids Safari's foreignObject rendering bugs where HTML content\n\t// inside SVG foreignObject renders at wrong positions when it has a RenderLayer\n\treturn (\n\t\t<RingProvider value={contextValue}>\n\t\t\t<div\n\t\t\t\tclassName=\"grid\"\n\t\t\t\tstyle={{\n\t\t\t\t\tgridTemplateColumns: \"1fr\",\n\t\t\t\t\tgridTemplateRows: \"1fr\",\n\t\t\t\t\twidth: size,\n\t\t\t\t\theight: size,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{/* SVG layer with rings */}\n\t\t\t\t<svg\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\theight={size}\n\t\t\t\t\tstyle={{ gridArea: \"1 / 1\", contain: \"layout style paint\" }}\n\t\t\t\t\twidth={size}\n\t\t\t\t>\n\t\t\t\t\t<Group left={center} top={center}>\n\t\t\t\t\t\t{scrubRingLayers\n\t\t\t\t\t\t\t? scrubRingLayers.map((layer, index) => (\n\t\t\t\t\t\t\t\t\t<g key={data[index]?.label ?? index}>\n\t\t\t\t\t\t\t\t\t\t<path d={layer.bgPath} fill={ringCssVars.ringBackground} />\n\t\t\t\t\t\t\t\t\t\t{layer.progressPath ? (\n\t\t\t\t\t\t\t\t\t\t\t<path d={layer.progressPath} fill={layer.color} />\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t{svgChildren}\n\t\t\t\t\t</Group>\n\t\t\t\t</svg>\n\n\t\t\t\t{/* HTML layer with center content - stacked on top via grid */}\n\t\t\t\t{centerChildren.length > 0 && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"pointer-events-none flex items-center justify-center\"\n\t\t\t\t\t\tstyle={{ gridArea: \"1 / 1\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{centerChildren}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</RingProvider>\n\t);\n}, ringChartCorePropsEqual);\n\nfunction ringChartCorePropsEqual(\n\tprev: RingChartInnerProps,\n\tnext: RingChartInnerProps,\n): boolean {\n\treturn (\n\t\tprev.width === next.width &&\n\t\tprev.height === next.height &&\n\t\tprev.data === next.data &&\n\t\tprev.strokeWidth === next.strokeWidth &&\n\t\tprev.ringGap === next.ringGap &&\n\t\tprev.baseInnerRadius === next.baseInnerRadius &&\n\t\tprev.hoveredIndexProp === next.hoveredIndexProp &&\n\t\tprev.onHoverChange === next.onHoverChange &&\n\t\tprev.startAngle === next.startAngle &&\n\t\tprev.endAngle === next.endAngle &&\n\t\tprev.enterTransition === next.enterTransition &&\n\t\tprev.enterStaggerScale === next.enterStaggerScale &&\n\t\tprev.geometryScrubbing === next.geometryScrubbing &&\n\t\tprev.children === next.children\n\t);\n}\n\nexport function RingChart({\n\tdata,\n\tsize: fixedSize,\n\tstrokeWidth = 12,\n\tringGap = 6,\n\tbaseInnerRadius = 60,\n\tclassName = \"\",\n\thoveredIndex,\n\tonHoverChange,\n\tstartAngle = -Math.PI / 2,\n\tendAngle = (3 * Math.PI) / 2,\n\tenterTransition,\n\tenterStaggerScale = 1,\n\tgeometryScrubbing = false,\n\tchildren,\n}: RingChartProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\n\t// If fixed size is provided, use it directly\n\tif (fixedSize) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\"relative flex items-center justify-center\", className)}\n\t\t\t\tref={containerRef}\n\t\t\t\tstyle={{ width: fixedSize, height: fixedSize }}\n\t\t\t>\n\t\t\t\t<RingChartInner\n\t\t\t\t\tbaseInnerRadius={baseInnerRadius}\n\t\t\t\t\tcontainerRef={containerRef}\n\t\t\t\t\tdata={data}\n\t\t\t\t\tendAngle={endAngle}\n\t\t\t\t\tenterStaggerScale={enterStaggerScale}\n\t\t\t\t\tenterTransition={enterTransition}\n\t\t\t\t\tgeometryScrubbing={geometryScrubbing}\n\t\t\t\t\theight={fixedSize}\n\t\t\t\t\thoveredIndexProp={hoveredIndex}\n\t\t\t\t\tonHoverChange={onHoverChange}\n\t\t\t\t\tringGap={ringGap}\n\t\t\t\t\tstartAngle={startAngle}\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\twidth={fixedSize}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</RingChartInner>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Otherwise use ParentSize for responsive sizing\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"relative aspect-square w-full\", className)}\n\t\t\tref={containerRef}\n\t\t>\n\t\t\t<ParentSize debounceTime={10}>\n\t\t\t\t{({ width, height }) => (\n\t\t\t\t\t<RingChartInner\n\t\t\t\t\t\tbaseInnerRadius={baseInnerRadius}\n\t\t\t\t\t\tcontainerRef={containerRef}\n\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\tendAngle={endAngle}\n\t\t\t\t\t\tenterStaggerScale={enterStaggerScale}\n\t\t\t\t\t\tenterTransition={enterTransition}\n\t\t\t\t\t\tgeometryScrubbing={geometryScrubbing}\n\t\t\t\t\t\theight={height}\n\t\t\t\t\t\thoveredIndexProp={hoveredIndex}\n\t\t\t\t\t\tonHoverChange={onHoverChange}\n\t\t\t\t\t\tringGap={ringGap}\n\t\t\t\t\t\tstartAngle={startAngle}\n\t\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\t\twidth={width}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</RingChartInner>\n\t\t\t\t)}\n\t\t\t</ParentSize>\n\t\t</div>\n\t);\n}\n\nexport default RingChart;\n","\"use client\";\n\nimport type { MotionValue } from \"motion/react\";\nimport { useEffect, useState } from \"react\";\n\n/**\n * Returns true once a mount-progress MotionValue reaches 1.\n * Use to swap animated MotionValue-driven props for static values after\n * enter completes — drops per-frame subscriptions during pan/hover.\n */\nexport function useEnterComplete(mountProgress: MotionValue<number>): boolean {\n\tconst [complete, setComplete] = useState(() => mountProgress.get() >= 1);\n\n\tuseEffect(() => {\n\t\tif (mountProgress.get() >= 1) {\n\t\t\tsetComplete(true);\n\t\t\treturn;\n\t\t}\n\n\t\treturn mountProgress.on(\"change\", (value) => {\n\t\t\tif (value >= 1) {\n\t\t\t\tsetComplete(true);\n\t\t\t}\n\t\t});\n\t}, [mountProgress]);\n\n\treturn complete;\n}\n","import type { Transition } from \"motion/react\";\n\n/** Default clip-reveal easing for cartesian charts. */\nexport const DEFAULT_ANIMATION_EASING = \"cubic-bezier(0.85, 0, 0.15, 1)\";\n\nexport const DEFAULT_ANIMATION_DURATION_MS = 1100;\n\n/** Default enter transition — matches the original line chart reveal. */\nexport const DEFAULT_CHART_ENTER_TRANSITION: Transition = {\n\ttype: \"tween\",\n\tduration: DEFAULT_ANIMATION_DURATION_MS / 1000,\n\tease: [0.85, 0, 0.15, 1],\n};\n\n/**\n * Clip-path width reveal must use tween — spring does not reliably animate SVG width.\n */\nexport function clipRevealTransition(enterTransition?: Transition): Transition {\n\tif (enterTransition?.type === \"tween\") {\n\t\treturn {\n\t\t\t...enterTransition,\n\t\t\tease: enterTransition.ease ?? DEFAULT_CHART_ENTER_TRANSITION.ease,\n\t\t};\n\t}\n\n\tconst duration =\n\t\ttypeof enterTransition?.duration === \"number\"\n\t\t\t? enterTransition.duration\n\t\t\t: DEFAULT_ANIMATION_DURATION_MS / 1000;\n\n\treturn {\n\t\ttype: \"tween\",\n\t\tduration,\n\t\tease: DEFAULT_CHART_ENTER_TRANSITION.ease,\n\t};\n}\n","\"use client\";\n\nimport { animate, type Transition, useMotionValue } from \"motion/react\";\nimport { useEffect, useRef } from \"react\";\nimport { DEFAULT_CHART_ENTER_TRANSITION } from \"./animation\";\n\n/** Drives 0→1 enter progress using the studio motion transition (spring or tween). */\nexport function useMountProgress(\n\tenterTransition: Transition | undefined,\n\tdelaySeconds: number,\n\treplayKey: number | string,\n) {\n\tconst progress = useMotionValue(0);\n\tconst transitionRef = useRef(enterTransition);\n\ttransitionRef.current = enterTransition;\n\n\t// replayKey intentionally retriggers enter when motion settings change\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: replayKey\n\tuseEffect(() => {\n\t\tprogress.set(0);\n\t\tconst controls = animate(progress, 1, {\n\t\t\t...(transitionRef.current ?? DEFAULT_CHART_ENTER_TRANSITION),\n\t\t\tdelay: delaySeconds,\n\t\t});\n\t\treturn () => controls.stop();\n\t}, [delaySeconds, replayKey, progress]);\n\n\treturn progress;\n}\n","\"use client\";\n\nimport { arc as arcGenerator } from \"@visx/shape\";\nimport { type MotionValue, motion, useTransform } from \"motion/react\";\nimport { memo, useCallback } from \"react\";\nimport { ringCssVars, useRingHover, useRingStable } from \"./ring-context\";\nimport { useEnterComplete } from \"./use-enter-complete\";\nimport { useMountProgress } from \"./use-mount-progress\";\n\nfunction generateArcPath(\n\tinnerRadius: number,\n\touterRadius: number,\n\tstartAngle: number,\n\tendAngle: number,\n\tcornerRadius: number,\n): string {\n\tconst generator = arcGenerator<unknown>({\n\t\tinnerRadius,\n\t\touterRadius,\n\t\tcornerRadius,\n\t});\n\treturn generator({ startAngle, endAngle } as unknown as null) || \"\";\n}\n\nexport type RingLineCap = \"round\" | \"butt\";\n\nexport interface RingProps {\n\tindex: number;\n\tcolor?: string;\n\tanimate?: boolean;\n\tshowGlow?: boolean;\n\tlineCap?: RingLineCap;\n}\n\nfunction ringHoverScale(isHovered: boolean, isPushedOut: boolean): number {\n\tif (isHovered) {\n\t\treturn 1.03;\n\t}\n\tif (isPushedOut) {\n\t\treturn 1.02;\n\t}\n\treturn 1;\n}\n\nfunction RingProgressPath({\n\tprogressComplete,\n\tprogressPath,\n\tanimatedProgressPath,\n\tcolor,\n}: {\n\tprogressComplete: boolean;\n\tprogressPath: string;\n\tanimatedProgressPath: MotionValue<string>;\n\tcolor: string;\n}) {\n\tif (progressComplete) {\n\t\tif (!progressPath) {\n\t\t\treturn null;\n\t\t}\n\t\treturn <path d={progressPath} fill={color} />;\n\t}\n\treturn <motion.path d={animatedProgressPath} fill={color} />;\n}\n\nexport const Ring = memo(function Ring({\n\tindex,\n\tcolor: colorProp,\n\tanimate = true,\n\tshowGlow = true,\n\tlineCap = \"round\",\n}: RingProps) {\n\tconst {\n\t\tdata,\n\t\tgetColor,\n\t\tgetRingRadii,\n\t\tstartAngle,\n\t\tendAngle,\n\t\tenterTransition,\n\t\tenterStaggerScale,\n\t\tanimationKey,\n\t} = useRingStable();\n\tconst { hoveredIndex, setHoveredIndex } = useRingHover();\n\n\tconst expandDelay = index * 0.08 * enterStaggerScale;\n\tconst expandProgress = useMountProgress(\n\t\tenterTransition,\n\t\texpandDelay,\n\t\t`${animationKey}-expand-${index}`,\n\t);\n\tconst expandComplete = useEnterComplete(expandProgress);\n\n\tconst progressDelay = (0.6 + index * 0.1) * enterStaggerScale;\n\tconst progressMount = useMountProgress(\n\t\tenterTransition,\n\t\tprogressDelay,\n\t\t`${animationKey}-progress-${index}`,\n\t);\n\tconst progressComplete = useEnterComplete(progressMount);\n\n\tconst ringData = data[index];\n\tconst progress = ringData ? ringData.value / ringData.maxValue : 0;\n\tconst arcRange = endAngle - startAngle;\n\n\tconst animatedProgressPath = useTransform(progressMount, (v) => {\n\t\tif (!ringData) {\n\t\t\treturn \"\";\n\t\t}\n\t\tconst currentEndAngle = startAngle + arcRange * progress * v;\n\t\tif (currentEndAngle <= startAngle + 0.01) {\n\t\t\treturn \"\";\n\t\t}\n\t\tconst radii = getRingRadii(index);\n\t\tconst corner =\n\t\t\tlineCap === \"round\" ? (radii.outerRadius - radii.innerRadius) / 2 : 0;\n\t\treturn generateArcPath(\n\t\t\tradii.innerRadius,\n\t\t\tradii.outerRadius,\n\t\t\tstartAngle,\n\t\t\tcurrentEndAngle,\n\t\t\tcorner,\n\t\t);\n\t});\n\n\tconst enterScale = useTransform(expandProgress, [0, 1], [0, 1]);\n\n\tconst handleMouseEnter = useCallback(\n\t\t() => setHoveredIndex(index),\n\t\t[index, setHoveredIndex],\n\t);\n\tconst handleMouseLeave = useCallback(\n\t\t() => setHoveredIndex(null),\n\t\t[setHoveredIndex],\n\t);\n\n\tif (!ringData) {\n\t\treturn null;\n\t}\n\n\tconst { innerRadius, outerRadius } = getRingRadii(index);\n\tconst color = colorProp || getColor(index);\n\n\tconst isHovered = hoveredIndex === index;\n\tconst isFaded = hoveredIndex !== null && hoveredIndex !== index;\n\tconst isPushedOut = hoveredIndex !== null && hoveredIndex < index;\n\n\tconst cornerRadius =\n\t\tlineCap === \"round\" ? (outerRadius - innerRadius) / 2 : 0;\n\tconst bgPath = generateArcPath(\n\t\tinnerRadius,\n\t\touterRadius,\n\t\tstartAngle,\n\t\tendAngle,\n\t\tcornerRadius,\n\t);\n\tconst progressEndAngle = startAngle + arcRange * progress;\n\tconst progressPath =\n\t\tprogressEndAngle <= startAngle + 0.01\n\t\t\t? \"\"\n\t\t\t: generateArcPath(\n\t\t\t\t\tinnerRadius,\n\t\t\t\t\touterRadius,\n\t\t\t\t\tstartAngle,\n\t\t\t\t\tprogressEndAngle,\n\t\t\t\t\tcornerRadius,\n\t\t\t\t);\n\n\tconst hoverScale = ringHoverScale(isHovered, isPushedOut);\n\tconst layerOpacity = isFaded ? 0.35 : 1;\n\tconst enterDone = !animate || (expandComplete && progressComplete);\n\n\tconst groupStyle = {\n\t\tcursor: \"pointer\" as const,\n\t\ttransformOrigin: \"0px 0px\",\n\t\tfilter: showGlow && isHovered ? `drop-shadow(0 0 12px ${color})` : \"none\",\n\t};\n\n\tif (enterDone) {\n\t\treturn (\n\t\t\t<motion.g\n\t\t\t\tanimate={{ scale: hoverScale, opacity: layerOpacity }}\n\t\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\tstyle={groupStyle}\n\t\t\t\ttransition={{\n\t\t\t\t\tscale: { type: \"spring\", stiffness: 400, damping: 25 },\n\t\t\t\t\topacity: { duration: 0.15 },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<path d={bgPath} fill={ringCssVars.ringBackground} />\n\t\t\t\t{progressPath ? <path d={progressPath} fill={color} /> : null}\n\t\t\t</motion.g>\n\t\t);\n\t}\n\n\tif (!expandComplete) {\n\t\treturn (\n\t\t\t<motion.g\n\t\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\tstyle={{\n\t\t\t\t\t...groupStyle,\n\t\t\t\t\tscale: enterScale,\n\t\t\t\t\topacity: layerOpacity,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<path d={bgPath} fill={ringCssVars.ringBackground} />\n\t\t\t</motion.g>\n\t\t);\n\t}\n\n\treturn (\n\t\t<motion.g\n\t\t\tanimate={{ scale: hoverScale, opacity: layerOpacity }}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\tstyle={groupStyle}\n\t\t\ttransition={{\n\t\t\t\tscale: { type: \"spring\", stiffness: 400, damping: 25 },\n\t\t\t\topacity: { duration: 0.15 },\n\t\t\t}}\n\t\t>\n\t\t\t<path d={bgPath} fill={ringCssVars.ringBackground} />\n\t\t\t<RingProgressPath\n\t\t\t\tanimatedProgressPath={animatedProgressPath}\n\t\t\t\tcolor={color}\n\t\t\t\tprogressComplete={progressComplete}\n\t\t\t\tprogressPath={progressPath}\n\t\t\t/>\n\t\t</motion.g>\n\t);\n});\n\nRing.displayName = \"Ring\";\n\nexport default Ring;\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tchartCenterContainerClassName,\n\tchartCenterLabelClassName,\n\tchartCenterValueClassName,\n} from \"./chart-center-typography\";\nimport {\n\tChartStatFlow,\n\ttype ChartStatFlowFormat,\n\tdefaultChartStatFlowFormat,\n} from \"./chart-stat-flow\";\nimport { useRingHover, useRingStable } from \"./ring-context\";\n\nexport interface RingCenterProps {\n\t/** Label shown below the value. Default: \"Total\" when not hovering */\n\tdefaultLabel?: string;\n\t/** Format options for NumberFlow. Default: standard notation */\n\tformatOptions?: ChartStatFlowFormat;\n\t/** Custom render function for complete control over center content */\n\tchildren?: (props: {\n\t\tvalue: number;\n\t\tlabel: string;\n\t\tisHovered: boolean;\n\t\tdata: { label: string; value: number; maxValue: number; color?: string };\n\t}) => ReactNode;\n\t/** Additional class name for the container */\n\tclassName?: string;\n\t/** Class name for the value text. Scales with center size via container queries. */\n\tvalueClassName?: string;\n\t/** Class name for the label text. Scales with center size via container queries. */\n\tlabelClassName?: string;\n\t/** Prefix to show before the number (e.g., \"$\") */\n\tprefix?: string;\n\t/** Suffix to show after the number (e.g., \"%\") */\n\tsuffix?: string;\n}\n\n/**\n * RingCenter displays content in the center of the ring chart.\n *\n * This component renders as pure HTML (not inside SVG foreignObject) to avoid\n * Safari's WebKit bug #23113 where HTML content with CSS transforms/opacity\n * inside foreignObject renders at incorrect positions.\n *\n * The parent RingChart uses CSS Grid stacking to overlay this HTML content\n * on top of the SVG rings.\n */\nexport function RingCenter({\n\tdefaultLabel = \"Total\",\n\tformatOptions = defaultChartStatFlowFormat,\n\tchildren,\n\tclassName = \"\",\n\tvalueClassName = chartCenterValueClassName,\n\tlabelClassName = chartCenterLabelClassName,\n\tprefix,\n\tsuffix,\n}: RingCenterProps) {\n\tconst { data, totalValue, baseInnerRadius } = useRingStable();\n\tconst { hoveredIndex } = useRingHover();\n\n\tconst hoveredData = hoveredIndex === null ? null : data[hoveredIndex];\n\tconst displayValue = hoveredData ? hoveredData.value : totalValue;\n\tconst displayLabel = hoveredData ? hoveredData.label : defaultLabel;\n\n\t// Calculate center area size based on scaled baseInnerRadius\n\t// Leave some padding so text doesn't touch the inner ring\n\tconst centerSize = baseInnerRadius * 2 - 16;\n\n\t// If custom render function is provided, use it\n\tif (children && hoveredData) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\tchartCenterContainerClassName,\n\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{ width: centerSize, height: centerSize }}\n\t\t\t>\n\t\t\t\t{children({\n\t\t\t\t\tvalue: displayValue,\n\t\t\t\t\tlabel: displayLabel,\n\t\t\t\t\tisHovered: hoveredIndex !== null,\n\t\t\t\t\tdata: hoveredData,\n\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Default center content with NumberFlow animations\n\t// Now renders as pure HTML, avoiding Safari's foreignObject bugs\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tchartCenterContainerClassName,\n\t\t\t\t\"flex flex-col items-center justify-center text-center\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={{ width: centerSize, height: centerSize }}\n\t\t>\n\t\t\t<ChartStatFlow\n\t\t\t\tformatOptions={formatOptions}\n\t\t\t\tlabel={displayLabel}\n\t\t\t\tlabelClassName={labelClassName}\n\t\t\t\tprefix={prefix}\n\t\t\t\tsuffix={suffix}\n\t\t\t\tvalue={displayValue}\n\t\t\t\tvalueClassName={valueClassName}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nRingCenter.displayName = \"RingCenter\";\n\nexport default RingCenter;\n"]}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ReactNode, RefObject } from 'react';
|
|
3
|
+
import { Transition } from 'motion/react';
|
|
4
|
+
|
|
5
|
+
/** Subset of `Intl.NumberFormatOptions` supported by NumberFlow */
|
|
6
|
+
interface ChartStatFlowFormat {
|
|
7
|
+
notation?: "standard" | "compact";
|
|
8
|
+
compactDisplay?: "short" | "long";
|
|
9
|
+
minimumFractionDigits?: number;
|
|
10
|
+
maximumFractionDigits?: number;
|
|
11
|
+
minimumIntegerDigits?: number;
|
|
12
|
+
minimumSignificantDigits?: number;
|
|
13
|
+
maximumSignificantDigits?: number;
|
|
14
|
+
style?: "decimal" | "percent" | "currency";
|
|
15
|
+
currency?: string;
|
|
16
|
+
currencyDisplay?: "symbol" | "narrowSymbol" | "code" | "name";
|
|
17
|
+
unit?: string;
|
|
18
|
+
unitDisplay?: "short" | "long" | "narrow";
|
|
19
|
+
}
|
|
20
|
+
declare const defaultChartStatFlowFormat: ChartStatFlowFormat;
|
|
21
|
+
interface ChartStatFlowProps {
|
|
22
|
+
value: number;
|
|
23
|
+
label: string;
|
|
24
|
+
formatOptions?: ChartStatFlowFormat;
|
|
25
|
+
prefix?: string;
|
|
26
|
+
suffix?: string;
|
|
27
|
+
valueClassName?: string;
|
|
28
|
+
labelClassName?: string;
|
|
29
|
+
icon?: ReactNode;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Shared value + label stack using NumberFlow (same layout as pie / ring centers).
|
|
33
|
+
* Parent should provide flex alignment and sizing when needed.
|
|
34
|
+
*/
|
|
35
|
+
declare function ChartStatFlow({ value, label, formatOptions, prefix, suffix, valueClassName, labelClassName, icon, }: ChartStatFlowProps): React.JSX.Element;
|
|
36
|
+
declare namespace ChartStatFlow {
|
|
37
|
+
var displayName: string;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
type GaugeLabelPlacement = "top" | "bottom" | "left" | "right";
|
|
41
|
+
type GaugeLabelAlign = "start" | "center" | "end";
|
|
42
|
+
|
|
43
|
+
type GaugeOrientation = "arc" | "linear";
|
|
44
|
+
interface GaugeProps {
|
|
45
|
+
/** Arc (default) or horizontal linear notch track */
|
|
46
|
+
orientation?: GaugeOrientation;
|
|
47
|
+
/** Fill level 0–100 */
|
|
48
|
+
value: number;
|
|
49
|
+
/** Number of notches */
|
|
50
|
+
totalNotches?: number;
|
|
51
|
+
/** Percentage of the track reserved for gaps between notches */
|
|
52
|
+
spacing?: number;
|
|
53
|
+
notchCornerRadius?: number;
|
|
54
|
+
/** `true` = rectangular notches; `false` = tapered toward center / midline */
|
|
55
|
+
uniformWidth?: boolean;
|
|
56
|
+
startAngle?: number;
|
|
57
|
+
endAngle?: number;
|
|
58
|
+
useGradient?: boolean;
|
|
59
|
+
activeGradient?: readonly [string, string];
|
|
60
|
+
inactiveGradient?: readonly [string, string];
|
|
61
|
+
/** Center statistic — omit to hide the label block */
|
|
62
|
+
centerValue?: number;
|
|
63
|
+
defaultLabel?: string;
|
|
64
|
+
prefix?: string;
|
|
65
|
+
suffix?: string;
|
|
66
|
+
formatOptions?: ChartStatFlowFormat;
|
|
67
|
+
/** Label position for `orientation="linear"`. Arc gauges always overlay center. */
|
|
68
|
+
labelPlacement?: GaugeLabelPlacement;
|
|
69
|
+
/** Cross-axis alignment (start / center / end), same model as chart legend */
|
|
70
|
+
labelAlign?: GaugeLabelAlign;
|
|
71
|
+
inactiveFill?: string;
|
|
72
|
+
activeFill?: string;
|
|
73
|
+
inactiveFillOpacity?: number;
|
|
74
|
+
activeFillOpacity?: number;
|
|
75
|
+
children?: ReactNode;
|
|
76
|
+
className?: string;
|
|
77
|
+
width?: number;
|
|
78
|
+
height?: number;
|
|
79
|
+
minWidth?: number;
|
|
80
|
+
notchLengthPercent?: number;
|
|
81
|
+
/** Linear only — notch width as % of each slot (default 80) */
|
|
82
|
+
notchWidthPercent?: number;
|
|
83
|
+
/** Linear only — bar thickness in px when responsive (default 24) */
|
|
84
|
+
linearHeight?: number;
|
|
85
|
+
enterTransition?: Transition;
|
|
86
|
+
enterStaggerScale?: number;
|
|
87
|
+
/** Studio-only: static paths while scrubbing geometry controls */
|
|
88
|
+
geometryScrubbing?: boolean;
|
|
89
|
+
}
|
|
90
|
+
declare function Gauge({ width: widthProp, height: heightProp, className, minWidth, orientation, linearHeight, ...props }: GaugeProps): React.JSX.Element;
|
|
91
|
+
declare namespace Gauge {
|
|
92
|
+
var displayName: string;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
declare const ringCssVars: {
|
|
96
|
+
background: string;
|
|
97
|
+
foreground: string;
|
|
98
|
+
foregroundMuted: string;
|
|
99
|
+
label: string;
|
|
100
|
+
ringBackground: string;
|
|
101
|
+
ring1: string;
|
|
102
|
+
ring2: string;
|
|
103
|
+
ring3: string;
|
|
104
|
+
ring4: string;
|
|
105
|
+
ring5: string;
|
|
106
|
+
};
|
|
107
|
+
declare const defaultRingColors: string[];
|
|
108
|
+
interface RingData {
|
|
109
|
+
/** Display label for the ring */
|
|
110
|
+
label: string;
|
|
111
|
+
/** Current value */
|
|
112
|
+
value: number;
|
|
113
|
+
/** Maximum value (determines progress percentage) */
|
|
114
|
+
maxValue: number;
|
|
115
|
+
/** Optional color override - falls back to palette */
|
|
116
|
+
color?: string;
|
|
117
|
+
}
|
|
118
|
+
interface RingHoverContextValue {
|
|
119
|
+
hoveredIndex: number | null;
|
|
120
|
+
setHoveredIndex: (index: number | null) => void;
|
|
121
|
+
}
|
|
122
|
+
interface RingStableContextValue {
|
|
123
|
+
data: RingData[];
|
|
124
|
+
size: number;
|
|
125
|
+
center: number;
|
|
126
|
+
strokeWidth: number;
|
|
127
|
+
ringGap: number;
|
|
128
|
+
baseInnerRadius: number;
|
|
129
|
+
animationKey: number;
|
|
130
|
+
isLoaded: boolean;
|
|
131
|
+
enterTransition?: Transition;
|
|
132
|
+
enterStaggerScale: number;
|
|
133
|
+
containerRef: RefObject<HTMLDivElement | null>;
|
|
134
|
+
totalValue: number;
|
|
135
|
+
getColor: (index: number) => string;
|
|
136
|
+
getRingRadii: (index: number) => {
|
|
137
|
+
innerRadius: number;
|
|
138
|
+
outerRadius: number;
|
|
139
|
+
};
|
|
140
|
+
startAngle: number;
|
|
141
|
+
endAngle: number;
|
|
142
|
+
/**
|
|
143
|
+
* Studio geometry scrub — skip Motion path morphing and use plain SVG paths.
|
|
144
|
+
* @default false
|
|
145
|
+
*/
|
|
146
|
+
geometryScrubbing: boolean;
|
|
147
|
+
}
|
|
148
|
+
type RingContextValue = RingStableContextValue & RingHoverContextValue;
|
|
149
|
+
declare function RingProvider({ children, value, }: {
|
|
150
|
+
children: ReactNode;
|
|
151
|
+
value: RingContextValue;
|
|
152
|
+
}): React.JSX.Element;
|
|
153
|
+
declare function useRingStable(): RingStableContextValue;
|
|
154
|
+
declare function useRingHover(): RingHoverContextValue;
|
|
155
|
+
declare function useRing(): RingContextValue;
|
|
156
|
+
|
|
157
|
+
interface RingChartProps {
|
|
158
|
+
/** Data array - each item represents a ring */
|
|
159
|
+
data: RingData[];
|
|
160
|
+
/** Chart size in pixels. If not provided, uses parent container size */
|
|
161
|
+
size?: number;
|
|
162
|
+
/** Stroke width of each ring. Default: 12 */
|
|
163
|
+
strokeWidth?: number;
|
|
164
|
+
/** Gap between rings. Default: 6 */
|
|
165
|
+
ringGap?: number;
|
|
166
|
+
/** Inner radius of the innermost ring. Default: 60 */
|
|
167
|
+
baseInnerRadius?: number;
|
|
168
|
+
/** Animation duration in milliseconds. Default: 1100 */
|
|
169
|
+
animationDuration?: number;
|
|
170
|
+
/** Additional class name for the container */
|
|
171
|
+
className?: string;
|
|
172
|
+
/** Controlled hover state - index of hovered ring */
|
|
173
|
+
hoveredIndex?: number | null;
|
|
174
|
+
/** Callback when hover state changes */
|
|
175
|
+
onHoverChange?: (index: number | null) => void;
|
|
176
|
+
/** Start angle in radians. Default: -PI/2 (top) */
|
|
177
|
+
startAngle?: number;
|
|
178
|
+
/** End angle in radians. Default: 3*PI/2 (full circle) */
|
|
179
|
+
endAngle?: number;
|
|
180
|
+
/** Framer Motion transition for ring enter animation */
|
|
181
|
+
enterTransition?: Transition;
|
|
182
|
+
/** Scales ring stagger delays (1 = default). */
|
|
183
|
+
enterStaggerScale?: number;
|
|
184
|
+
/**
|
|
185
|
+
* High-frequency geometry updates (e.g. studio NumberField scrub).
|
|
186
|
+
* Uses plain SVG paths instead of Motion `d` morphing.
|
|
187
|
+
*/
|
|
188
|
+
geometryScrubbing?: boolean;
|
|
189
|
+
/** Child components (Ring, RingCenter, etc.) */
|
|
190
|
+
children: ReactNode;
|
|
191
|
+
}
|
|
192
|
+
declare function RingChart({ data, size: fixedSize, strokeWidth, ringGap, baseInnerRadius, className, hoveredIndex, onHoverChange, startAngle, endAngle, enterTransition, enterStaggerScale, geometryScrubbing, children, }: RingChartProps): React.JSX.Element;
|
|
193
|
+
|
|
194
|
+
type RingLineCap = "round" | "butt";
|
|
195
|
+
interface RingProps {
|
|
196
|
+
index: number;
|
|
197
|
+
color?: string;
|
|
198
|
+
animate?: boolean;
|
|
199
|
+
showGlow?: boolean;
|
|
200
|
+
lineCap?: RingLineCap;
|
|
201
|
+
}
|
|
202
|
+
declare const Ring: React.NamedExoticComponent<RingProps>;
|
|
203
|
+
|
|
204
|
+
interface RingCenterProps {
|
|
205
|
+
/** Label shown below the value. Default: "Total" when not hovering */
|
|
206
|
+
defaultLabel?: string;
|
|
207
|
+
/** Format options for NumberFlow. Default: standard notation */
|
|
208
|
+
formatOptions?: ChartStatFlowFormat;
|
|
209
|
+
/** Custom render function for complete control over center content */
|
|
210
|
+
children?: (props: {
|
|
211
|
+
value: number;
|
|
212
|
+
label: string;
|
|
213
|
+
isHovered: boolean;
|
|
214
|
+
data: {
|
|
215
|
+
label: string;
|
|
216
|
+
value: number;
|
|
217
|
+
maxValue: number;
|
|
218
|
+
color?: string;
|
|
219
|
+
};
|
|
220
|
+
}) => ReactNode;
|
|
221
|
+
/** Additional class name for the container */
|
|
222
|
+
className?: string;
|
|
223
|
+
/** Class name for the value text. Scales with center size via container queries. */
|
|
224
|
+
valueClassName?: string;
|
|
225
|
+
/** Class name for the label text. Scales with center size via container queries. */
|
|
226
|
+
labelClassName?: string;
|
|
227
|
+
/** Prefix to show before the number (e.g., "$") */
|
|
228
|
+
prefix?: string;
|
|
229
|
+
/** Suffix to show after the number (e.g., "%") */
|
|
230
|
+
suffix?: string;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* RingCenter displays content in the center of the ring chart.
|
|
234
|
+
*
|
|
235
|
+
* This component renders as pure HTML (not inside SVG foreignObject) to avoid
|
|
236
|
+
* Safari's WebKit bug #23113 where HTML content with CSS transforms/opacity
|
|
237
|
+
* inside foreignObject renders at incorrect positions.
|
|
238
|
+
*
|
|
239
|
+
* The parent RingChart uses CSS Grid stacking to overlay this HTML content
|
|
240
|
+
* on top of the SVG rings.
|
|
241
|
+
*/
|
|
242
|
+
declare function RingCenter({ defaultLabel, formatOptions, children, className, valueClassName, labelClassName, prefix, suffix, }: RingCenterProps): React.JSX.Element;
|
|
243
|
+
declare namespace RingCenter {
|
|
244
|
+
var displayName: string;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export { ChartStatFlow, type ChartStatFlowFormat, type ChartStatFlowProps, Gauge, type GaugeLabelAlign, type GaugeLabelPlacement, type GaugeOrientation, type GaugeProps, Ring, RingCenter, type RingCenterProps, RingChart, type RingChartProps, type RingContextValue, type RingData, type RingHoverContextValue, type RingLineCap, type RingProps, RingProvider, type RingStableContextValue, defaultChartStatFlowFormat, defaultRingColors, ringCssVars, useRing, useRingHover, useRingStable };
|