gridsmith-ui 0.4.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +63 -3
  2. package/dist/charts.d.ts +246 -0
  3. package/dist/charts.js +1028 -0
  4. package/dist/charts.js.map +1 -0
  5. package/dist/chunk-CHNY75QI.js +278 -0
  6. package/dist/chunk-CHNY75QI.js.map +1 -0
  7. package/dist/chunk-DPF6776I.js +36 -0
  8. package/dist/chunk-DPF6776I.js.map +1 -0
  9. package/dist/{chunk-6TMNEBBJ.js → chunk-GX6O72IV.js} +44 -35
  10. package/dist/chunk-GX6O72IV.js.map +1 -0
  11. package/dist/{chunk-5XIPPVH7.js → chunk-IUBWNDUK.js} +15 -4
  12. package/dist/chunk-IUBWNDUK.js.map +1 -0
  13. package/dist/chunk-OUYJXVLQ.js +41 -0
  14. package/dist/chunk-OUYJXVLQ.js.map +1 -0
  15. package/dist/chunk-UYGTAVKR.js +93 -0
  16. package/dist/chunk-UYGTAVKR.js.map +1 -0
  17. package/dist/data-grid.d.ts +27 -0
  18. package/dist/data-grid.js +293 -0
  19. package/dist/data-grid.js.map +1 -0
  20. package/dist/editor.d.ts +18 -0
  21. package/dist/editor.js +632 -0
  22. package/dist/editor.js.map +1 -0
  23. package/dist/{feather-432JQGUB.js → feather-U45EQTAU.js} +4 -4
  24. package/dist/feather-U45EQTAU.js.map +1 -0
  25. package/dist/{heroicons-CCKJHFZY.js → heroicons-D3G7QU45.js} +4 -4
  26. package/dist/heroicons-D3G7QU45.js.map +1 -0
  27. package/dist/icons.d.ts +1 -1
  28. package/dist/icons.js +1 -2
  29. package/dist/index.d.ts +430 -133
  30. package/dist/index.js +10535 -98014
  31. package/dist/index.js.map +1 -1
  32. package/dist/kanban.d.ts +25 -0
  33. package/dist/kanban.js +224 -0
  34. package/dist/kanban.js.map +1 -0
  35. package/dist/{lucide-Z74WVRAK.js → lucide-OGUV44TQ.js} +4 -4
  36. package/dist/lucide-OGUV44TQ.js.map +1 -0
  37. package/dist/{phosphor-DYUCR5S2.js → phosphor-QG2ZMEMZ.js} +4 -4
  38. package/dist/phosphor-QG2ZMEMZ.js.map +1 -0
  39. package/dist/resizable.d.ts +39 -0
  40. package/dist/resizable.js +89 -0
  41. package/dist/resizable.js.map +1 -0
  42. package/dist/roots.css +46 -11
  43. package/dist/{tabler-GRXDPAHR.js → tabler-MW2HN55L.js} +4 -4
  44. package/dist/tabler-MW2HN55L.js.map +1 -0
  45. package/dist/use-breakpoint-Cn51IubK.d.ts +30 -0
  46. package/dist/utils.js +1 -2
  47. package/dist/virtualized.d.ts +16 -0
  48. package/dist/virtualized.js +55 -0
  49. package/dist/virtualized.js.map +1 -0
  50. package/package.json +144 -4
  51. package/dist/chunk-5WRI5ZAA.js +0 -29
  52. package/dist/chunk-5WRI5ZAA.js.map +0 -1
  53. package/dist/chunk-5XIPPVH7.js.map +0 -1
  54. package/dist/chunk-6TMNEBBJ.js.map +0 -1
  55. package/dist/feather-432JQGUB.js.map +0 -1
  56. package/dist/heroicons-CCKJHFZY.js.map +0 -1
  57. package/dist/lucide-Z74WVRAK.js.map +0 -1
  58. package/dist/phosphor-DYUCR5S2.js.map +0 -1
  59. package/dist/tabler-GRXDPAHR.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../showcase/src/lib/chart-utils.ts","../../../showcase/src/components/charts/ChartPrimitives.tsx","../../../showcase/src/components/charts/ChartWrapper.tsx","../../../showcase/src/components/charts/BarChart.tsx","../../../showcase/src/components/charts/LineChart.tsx","../../../showcase/src/components/charts/AreaChart.tsx","../../../showcase/src/components/charts/PieChart.tsx","../../../showcase/src/components/charts/CompositeChart.tsx","../../../showcase/src/components/charts/ScatterChart.tsx","../../../showcase/src/components/charts/RadarChart.tsx","../../../showcase/src/components/charts/RadialBarChart.tsx","../../../showcase/src/components/charts/FunnelChart.tsx","../../../showcase/src/components/charts/TreemapChart.tsx","../../../showcase/src/components/charts/SankeyChart.tsx","../../../showcase/src/components/charts/Sparkline.tsx","../../../showcase/src/components/ChartContainer.tsx"],"names":["ChartWrapper","jsx","forwardRef","BarChart","jsxs","RechartsBarChart","LineChart","ResponsiveContainer","RechartsLineChart","CartesianGrid","XAxis","YAxis","Tooltip","Legend","AreaChart","RechartsAreaChart","PieChart","RechartsPieChart","CompositeChart","Bar","Line","ScatterChart","RechartsScatterChart","RadarChart","RechartsRadarChart","RadialBarChart","RechartsRadialBarChart","FunnelChart","RechartsFunnelChart","TreemapChart","SankeyChart","RechartsSankey","Sparkline","useId","Area","HEIGHT_MAP"],"mappings":"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","file":"charts.js","sourcesContent":["import { useState, useLayoutEffect, useSyncExternalStore } from \"react\";\n\nconst CHART_TOKENS = [\n \"--ds-chart-1\",\n \"--ds-chart-2\",\n \"--ds-chart-3\",\n \"--ds-chart-4\",\n \"--ds-chart-5\",\n \"--ds-chart-6\",\n] as const;\n\nconst CHART_TOKENS_SOFT = [\n \"--ds-chart-1-soft\",\n \"--ds-chart-2-soft\",\n \"--ds-chart-3-soft\",\n \"--ds-chart-4-soft\",\n \"--ds-chart-5-soft\",\n \"--ds-chart-6-soft\",\n] as const;\n\nconst FALLBACK_COLORS: Record<string, string> = {\n \"--ds-chart-1\": \"#6366f1\",\n \"--ds-chart-2\": \"#d97706\",\n \"--ds-chart-3\": \"#059669\",\n \"--ds-chart-4\": \"#dc2626\",\n \"--ds-chart-5\": \"#0891b2\",\n \"--ds-chart-6\": \"#7c3aed\",\n \"--ds-chart-1-soft\": \"rgba(99, 102, 241, 0.3)\",\n \"--ds-chart-2-soft\": \"rgba(217, 119, 6, 0.3)\",\n \"--ds-chart-3-soft\": \"rgba(5, 150, 105, 0.3)\",\n \"--ds-chart-4-soft\": \"rgba(220, 38, 38, 0.3)\",\n \"--ds-chart-5-soft\": \"rgba(8, 145, 178, 0.3)\",\n \"--ds-chart-6-soft\": \"rgba(124, 58, 237, 0.3)\",\n \"--ds-bg-surface\": \"#ffffff\",\n \"--ds-border-subtle\": \"#e5e7eb\",\n \"--ds-text-primary\": \"#111827\",\n \"--ds-text-secondary\": \"#6b7280\",\n \"--ds-text-muted\": \"#9ca3af\",\n};\n\ntype Subscriber = () => void;\n\nlet modeVersion = 0;\nconst subscribers = new Set<Subscriber>();\nlet observerAttached = false;\n\nfunction attachObserver() {\n if (observerAttached || typeof document === \"undefined\") return;\n observerAttached = true;\n\n const observer = new MutationObserver((mutations) => {\n for (const m of mutations) {\n if (m.attributeName === \"data-mode\") {\n modeVersion++;\n for (const sub of subscribers) sub();\n break;\n }\n }\n });\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"data-mode\"],\n });\n}\n\nfunction subscribe(cb: Subscriber) {\n attachObserver();\n subscribers.add(cb);\n return () => { subscribers.delete(cb); };\n}\n\nfunction getSnapshot() {\n return modeVersion;\n}\n\nfunction getServerSnapshot() {\n return 0;\n}\n\nexport function resolveToken(token: string): string {\n if (typeof document === \"undefined\") return FALLBACK_COLORS[token] ?? \"#6366f1\";\n const val = getComputedStyle(document.documentElement).getPropertyValue(token).trim();\n return val || FALLBACK_COLORS[token] || \"#6366f1\";\n}\n\nexport function useChartColors(count: number, soft = false): string[] {\n const version = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n const [colors, setColors] = useState<string[]>(() => fallbackColors(count, soft));\n\n useLayoutEffect(() => {\n setColors(resolveColors(count, soft));\n }, [count, soft, version]);\n\n return colors;\n}\n\nfunction fallbackColors(count: number, soft: boolean): string[] {\n const tokens = soft ? CHART_TOKENS_SOFT : CHART_TOKENS;\n const result: string[] = [];\n for (let i = 0; i < count; i++) {\n const token = tokens[i % tokens.length];\n result.push(FALLBACK_COLORS[token] ?? \"#6366f1\");\n }\n return result;\n}\n\nfunction resolveColors(count: number, soft: boolean): string[] {\n const tokens = soft ? CHART_TOKENS_SOFT : CHART_TOKENS;\n const result: string[] = [];\n for (let i = 0; i < count; i++) {\n const token = tokens[i % tokens.length];\n result.push(resolveToken(token));\n }\n return result;\n}\n\nexport function useResolvedToken(token: string): string {\n const version = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n const [value, setValue] = useState(() => FALLBACK_COLORS[token] ?? \"#6366f1\");\n\n useLayoutEffect(() => {\n setValue(resolveToken(token));\n }, [token, version]);\n\n return value;\n}\n\nexport function useReducedMotion(): boolean {\n const [reduced, setReduced] = useState(() => {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n });\n\n useLayoutEffect(() => {\n const mql = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const handler = (e: MediaQueryListEvent) => setReduced(e.matches);\n mql.addEventListener(\"change\", handler);\n return () => mql.removeEventListener(\"change\", handler);\n }, []);\n\n return reduced;\n}\n\nexport const useChartAnimation = (animated?: boolean): boolean => {\n const reduced = useReducedMotion();\n return animated !== false && !reduced;\n};\n","import { Text } from \"recharts\";\nimport { useResolvedToken } from \"../../lib/chart-utils\";\n\ninterface ChartTooltipContentProps {\n active?: boolean;\n payload?: Array<{\n name: string;\n value: number | string;\n color: string;\n dataKey?: string;\n payload?: Record<string, unknown>;\n }>;\n label?: string;\n}\n\nexport function ChartTooltipContent({ active, payload, label }: ChartTooltipContentProps) {\n const bgSurface = useResolvedToken(\"--ds-bg-surface\");\n const borderSubtle = useResolvedToken(\"--ds-border-subtle\");\n const textPrimary = useResolvedToken(\"--ds-text-primary\");\n const textSecondary = useResolvedToken(\"--ds-text-secondary\");\n\n if (!active || !payload?.length) return null;\n\n const showLabel = label != null && label !== \"\" && typeof label !== \"number\";\n\n return (\n <div\n className=\"rounded-[var(--ds-radius-md)] shadow-[var(--ds-shadow-popover)] font-[family-name:var(--ds-font-sans)] text-sm\"\n style={{\n backgroundColor: bgSurface,\n border: `var(--ds-border-width) solid ${borderSubtle}`,\n padding: \"var(--ds-space-2) var(--ds-space-3)\",\n }}\n >\n {showLabel && (\n <p className=\"font-medium mb-ds-1\" style={{ color: textPrimary }}>\n {label}\n </p>\n )}\n {payload.map((entry, i) => {\n const dotColor = (entry.payload?.fill as string) || entry.color || textSecondary;\n const displayName = (typeof entry.payload?.name === \"string\" && entry.payload.name) || entry.name;\n return (\n <div key={i} className=\"flex items-center gap-ds-2\" style={{ marginTop: i > 0 ? 2 : 0 }}>\n <span\n className=\"shrink-0 rounded-[var(--ds-radius-full)]\"\n style={{ width: 8, height: 8, backgroundColor: dotColor }}\n />\n <span style={{ color: textSecondary }}>{displayName}:</span>\n <span className=\"tabular-nums\" style={{ color: textPrimary }}>\n {typeof entry.value === \"number\" ? entry.value.toLocaleString() : entry.value}\n </span>\n </div>\n );\n })}\n </div>\n );\n}\n\ninterface ChartLegendContentProps {\n payload?: Array<{\n value: string;\n color: string;\n dataKey?: string;\n }>;\n}\n\nexport function ChartLegendContent({ payload }: ChartLegendContentProps) {\n const textSecondary = useResolvedToken(\"--ds-text-secondary\");\n\n if (!payload?.length) return null;\n\n return (\n <div className=\"flex flex-wrap justify-center gap-y-ds-1 gap-x-ds-4 font-[family-name:var(--ds-font-sans)] text-sm\">\n {payload.map((entry, i) => (\n <div key={i} className=\"flex items-center gap-ds-1.5\">\n <span\n className=\"shrink-0 rounded-[var(--ds-radius-full)]\"\n style={{ width: 8, height: 8, backgroundColor: entry.color }}\n />\n <span style={{ color: textSecondary }}>{entry.value}</span>\n </div>\n ))}\n </div>\n );\n}\n\nexport function useGridStroke(): string {\n return useResolvedToken(\"--ds-border-subtle\");\n}\n\nexport function useAxisStyle() {\n const textMuted = useResolvedToken(\"--ds-text-muted\");\n\n return {\n tick: {\n fontSize: \"var(--ds-font-size-xs)\",\n fontFamily: \"var(--ds-font-sans)\",\n fill: textMuted,\n },\n };\n}\n\nexport function useRadius(): number {\n const val = useResolvedToken(\"--ds-radius-md\");\n const parsed = parseInt(val, 10);\n return isNaN(parsed) ? 6 : parsed;\n}\n/**\n * Recharts' `tick` prop as an object only passes SVG-valid properties.\n * Props like `maxLines`, `verticalAnchor` are stripped. We must use a\n * function to pass them to the internal Text component.\n */\nexport function xAxisTick(props: Record<string, unknown>) {\n const { x, y, payload, width, visibleTicksCount, ...rest } = props as {\n x: number; y: number; payload: { value: string };\n width?: number; visibleTicksCount?: number;[k: string]: unknown;\n };\n const tickWidth = width && visibleTicksCount ? Math.floor(width / visibleTicksCount) : 100;\n return (\n <Text {...rest} x={x} y={y} width={tickWidth} textAnchor=\"middle\" verticalAnchor=\"start\" maxLines={2}>\n {payload.value}\n </Text>\n );\n}\n\nexport function yAxisTick(props: Record<string, unknown>) {\n const { x, y, payload, ...rest } = props as { x: number; y: number; payload: { value: string };[k: string]: unknown };\n return (\n <Text {...rest} x={x} y={y} textAnchor=\"end\" verticalAnchor=\"middle\" width={200} maxLines={2}>\n {payload.value}\n </Text>\n );\n}\n\n","import { createContext, forwardRef, useContext, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport const ChartContainerContext = createContext(false);\n\nexport function useInsideChartContainer(): boolean {\n return useContext(ChartContainerContext);\n}\n\nconst HEIGHT_MAP: Record<string, string> = {\n sm: \"var(--ds-chart-height-sm)\",\n md: \"var(--ds-chart-height-md)\",\n lg: \"var(--ds-chart-height-lg)\",\n};\n\nexport interface ChartWrapperProps {\n height?: \"sm\" | \"md\" | \"lg\" | number;\n className?: string;\n children: ReactNode;\n \"aria-label\"?: string;\n}\n\nexport const ChartWrapper = forwardRef<HTMLDivElement, ChartWrapperProps>(function ChartWrapper({ height = \"md\", className, children, \"aria-label\": ariaLabel }, ref) {\n const insideContainer = useInsideChartContainer();\n\n if (insideContainer) {\n return (\n <div ref={ref} className={cn(\"h-full w-full\", className)} {...(ariaLabel ? { role: \"img\", \"aria-label\": ariaLabel } : {})}>\n {children}\n </div>\n );\n }\n\n const heightValue = typeof height === \"number\" ? `${height}px` : HEIGHT_MAP[height];\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} style={{ height: heightValue }} {...(ariaLabel ? { role: \"img\", \"aria-label\": ariaLabel } : {})}>\n {children}\n </div>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n BarChart as RechartsBarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent, useGridStroke, useAxisStyle, useRadius, xAxisTick, yAxisTick } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface BarDef {\n dataKey: string;\n label?: string;\n soft?: boolean;\n}\n\nexport interface BarChartProps {\n data: Record<string, unknown>[];\n bars: BarDef[];\n xAxisKey: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n stacked?: boolean;\n horizontal?: boolean;\n showGrid?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n xAxisLabel?: string;\n yAxisLabel?: string;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const BarChart = forwardRef<HTMLDivElement, BarChartProps>(function BarChart({\n data,\n bars,\n xAxisKey,\n height = \"md\",\n stacked = false,\n horizontal = false,\n showGrid = true,\n showTooltip = true,\n showLegend,\n xAxisLabel,\n yAxisLabel,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const solidColors = useChartColors(bars.length, false);\n const softColors = useChartColors(bars.length, true);\n const gridStroke = useGridStroke();\n const axisStyle = useAxisStyle();\n const isAnimated = useChartAnimation(animated);\n const radius = useRadius();\n const legendVisible = showLegend ?? bars.length >= 2;\n\n const layout = horizontal ? \"vertical\" : \"horizontal\";\n\n function getBarRadius(index: number): [number, number, number, number] {\n if (!stacked) {\n return horizontal ? [0, radius, radius, 0] : [radius, radius, 0, 0];\n }\n const isTopmost = index === bars.length - 1;\n if (!isTopmost) return [0, 0, 0, 0];\n return horizontal ? [0, radius, radius, 0] : [radius, radius, 0, 0];\n }\n\n const axisLabelStyle = { fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: axisStyle.tick.fill };\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsBarChart\n data={data}\n layout={layout}\n margin={{ top: 4, right: 4, bottom: 4, left: 4 }}\n accessibilityLayer\n >\n {showGrid && (\n <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} vertical={!horizontal} horizontal />\n )}\n {horizontal ? (\n <>\n <XAxis\n type=\"number\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={xAxisLabel ? { value: xAxisLabel, position: \"insideBottom\", offset: -2, style: axisLabelStyle } : undefined}\n />\n <YAxis\n dataKey={xAxisKey}\n type=\"category\"\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n tick={yAxisTick}\n />\n </>\n ) : (\n <>\n <XAxis\n dataKey={xAxisKey}\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n tick={xAxisTick}\n height=\"auto\"\n label={xAxisLabel ? { value: xAxisLabel, position: \"insideBottom\", offset: -2, style: axisLabelStyle } : undefined}\n />\n <YAxis\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={yAxisLabel ? { value: yAxisLabel, angle: -90, position: \"insideLeft\", style: axisLabelStyle } : undefined}\n />\n </>\n )}\n {showTooltip && <Tooltip content={<ChartTooltipContent />} cursor={{ fill: \"var(--ds-bg-muted)\", opacity: 0.5 }} />}\n {legendVisible && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {bars.map((bar, i) => (\n <Bar\n key={bar.dataKey}\n dataKey={bar.dataKey}\n name={bar.label ?? bar.dataKey}\n fill={bar.soft ? softColors[i] : solidColors[i]}\n radius={getBarRadius(i)}\n stackId={stacked ? \"stack\" : undefined}\n isAnimationActive={isAnimated}\n />\n ))}\n </RechartsBarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n LineChart as RechartsLineChart,\n Line,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent, useGridStroke, useAxisStyle, xAxisTick } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface LineDef {\n dataKey: string;\n label?: string;\n dashed?: boolean;\n}\n\nexport interface LineChartProps {\n data: Record<string, unknown>[];\n lines: LineDef[];\n xAxisKey: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n curved?: boolean;\n showDots?: boolean;\n showGrid?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n xAxisLabel?: string;\n yAxisLabel?: string;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const LineChart = forwardRef<HTMLDivElement, LineChartProps>(function LineChart({\n data,\n lines,\n xAxisKey,\n height = \"md\",\n curved = true,\n showDots = false,\n showGrid = true,\n showTooltip = true,\n showLegend,\n xAxisLabel,\n yAxisLabel,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(lines.length, false);\n const gridStroke = useGridStroke();\n const axisStyle = useAxisStyle();\n const isAnimated = useChartAnimation(animated);\n const legendVisible = showLegend ?? lines.length >= 2;\n const axisLabelStyle = { fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: axisStyle.tick.fill };\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsLineChart data={data} margin={{ top: 4, right: 4, bottom: 4, left: 4 }} accessibilityLayer>\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} />}\n <XAxis\n dataKey={xAxisKey}\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n tick={xAxisTick}\n height=\"auto\"\n label={xAxisLabel ? { value: xAxisLabel, position: \"insideBottom\", offset: -2, style: axisLabelStyle } : undefined}\n />\n <YAxis\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={yAxisLabel ? { value: yAxisLabel, angle: -90, position: \"insideLeft\", style: axisLabelStyle } : undefined}\n />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {legendVisible && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {lines.map((line, i) => (\n <Line\n key={line.dataKey}\n type={curved ? \"monotone\" : \"linear\"}\n dataKey={line.dataKey}\n name={line.label ?? line.dataKey}\n stroke={colors[i]}\n strokeWidth={2}\n strokeDasharray={line.dashed ? \"5 5\" : undefined}\n dot={showDots}\n activeDot={{ r: 5, strokeWidth: 2 }}\n isAnimationActive={isAnimated}\n />\n ))}\n </RechartsLineChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef, useId } from \"react\";\nimport {\n AreaChart as RechartsAreaChart,\n Area,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent, useGridStroke, useAxisStyle, xAxisTick } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface AreaDef {\n dataKey: string;\n label?: string;\n}\n\nexport interface AreaChartProps {\n data: Record<string, unknown>[];\n areas: AreaDef[];\n xAxisKey: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n stacked?: boolean;\n curved?: boolean;\n showGrid?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n gradient?: boolean;\n xAxisLabel?: string;\n yAxisLabel?: string;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const AreaChart = forwardRef<HTMLDivElement, AreaChartProps>(function AreaChart({\n data,\n areas,\n xAxisKey,\n height = \"md\",\n stacked = false,\n curved = true,\n showGrid = true,\n showTooltip = true,\n showLegend,\n gradient = true,\n xAxisLabel,\n yAxisLabel,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const instanceId = useId();\n const solidColors = useChartColors(areas.length, false);\n const softColors = useChartColors(areas.length, true);\n const gridStroke = useGridStroke();\n const axisStyle = useAxisStyle();\n const isAnimated = useChartAnimation(animated);\n const legendVisible = showLegend ?? areas.length >= 2;\n const axisLabelStyle = { fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: axisStyle.tick.fill };\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsAreaChart data={data} margin={{ top: 4, right: 4, bottom: 4, left: 4 }} accessibilityLayer>\n <defs>\n {areas.map((area, i) => (\n <linearGradient key={area.dataKey} id={`gradient-${instanceId}-${area.dataKey}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={softColors[i]} stopOpacity={1} />\n <stop offset=\"95%\" stopColor={softColors[i]} stopOpacity={0.1} />\n </linearGradient>\n ))}\n </defs>\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} />}\n <XAxis\n dataKey={xAxisKey}\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n tick={xAxisTick}\n height=\"auto\"\n label={xAxisLabel ? { value: xAxisLabel, position: \"insideBottom\", offset: -2, style: axisLabelStyle } : undefined}\n />\n <YAxis\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={yAxisLabel ? { value: yAxisLabel, angle: -90, position: \"insideLeft\", style: axisLabelStyle } : undefined}\n />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {legendVisible && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {areas.map((area, i) => (\n <Area\n key={area.dataKey}\n type={curved ? \"monotone\" : \"linear\"}\n dataKey={area.dataKey}\n name={area.label ?? area.dataKey}\n stroke={solidColors[i]}\n strokeWidth={2}\n fill={gradient ? `url(#gradient-${instanceId}-${area.dataKey})` : softColors[i]}\n stackId={stacked ? \"stack\" : undefined}\n isAnimationActive={isAnimated}\n />\n ))}\n </RechartsAreaChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n PieChart as RechartsPieChart,\n Pie,\n Cell,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface PieChartProps {\n data: { name: string; value: number; [key: string]: unknown }[];\n height?: \"sm\" | \"md\" | \"lg\" | number;\n donut?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n showLabels?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const PieChart = forwardRef<HTMLDivElement, PieChartProps>(function PieChart({\n data,\n height = \"md\",\n donut = false,\n showTooltip = true,\n showLegend = true,\n showLabels = false,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(data.length, false);\n const isAnimated = useChartAnimation(animated);\n\n const renderLabel = showLabels\n ? ({ percent }: { percent?: number }) => `${((percent ?? 0) * 100).toFixed(0)}%`\n : false;\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsPieChart accessibilityLayer>\n <Pie\n data={data}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n outerRadius=\"75%\"\n innerRadius={donut ? \"55%\" : 0}\n label={renderLabel}\n labelLine={showLabels}\n isAnimationActive={isAnimated}\n fontSize=\"var(--ds-font-size-xs)\"\n fontFamily=\"var(--ds-font-sans)\"\n >\n {data.map((_, i) => (\n <Cell key={i} fill={colors[i % colors.length]} />\n ))}\n </Pie>\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {showLegend && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n </RechartsPieChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n ComposedChart,\n Bar,\n Line,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent, useGridStroke, useAxisStyle, useRadius, xAxisTick } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\nimport type { BarDef } from \"./BarChart\";\nimport type { LineDef } from \"./LineChart\";\n\nexport interface CompositeChartProps {\n data: Record<string, unknown>[];\n bars: BarDef[];\n lines: LineDef[];\n xAxisKey: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n dualAxis?: boolean;\n showGrid?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n xAxisLabel?: string;\n yAxisLabel?: string;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const CompositeChart = forwardRef<HTMLDivElement, CompositeChartProps>(function CompositeChart({\n data,\n bars,\n lines,\n xAxisKey,\n height = \"md\",\n dualAxis = true,\n showGrid = true,\n showTooltip = true,\n showLegend = true,\n xAxisLabel,\n yAxisLabel,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const barSoftColors = useChartColors(bars.length, true);\n const lineColors = useChartColors(lines.length, false);\n const gridStroke = useGridStroke();\n const axisStyle = useAxisStyle();\n const isAnimated = useChartAnimation(animated);\n const radius = useRadius();\n const axisLabelStyle = { fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: axisStyle.tick.fill };\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <ComposedChart data={data} margin={{ top: 4, right: 4, bottom: 4, left: 4 }} accessibilityLayer>\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} />}\n <XAxis\n dataKey={xAxisKey}\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n tick={xAxisTick}\n height=\"auto\"\n label={xAxisLabel ? { value: xAxisLabel, position: \"insideBottom\", offset: -2, style: axisLabelStyle } : undefined}\n />\n <YAxis\n yAxisId=\"left\"\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={yAxisLabel ? { value: yAxisLabel, angle: -90, position: \"insideLeft\", style: axisLabelStyle } : undefined}\n />\n {dualAxis && (\n <YAxis yAxisId=\"right\" orientation=\"right\" width=\"auto\" {...axisStyle.tick} axisLine={false} tickLine={false} />\n )}\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {showLegend && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {bars.map((bar, i) => (\n <Bar\n key={bar.dataKey}\n dataKey={bar.dataKey}\n name={bar.label ?? bar.dataKey}\n fill={barSoftColors[i]}\n radius={[radius, radius, 0, 0]}\n yAxisId=\"left\"\n isAnimationActive={isAnimated}\n />\n ))}\n {lines.map((line, i) => (\n <Line\n key={line.dataKey}\n type=\"monotone\"\n dataKey={line.dataKey}\n name={line.label ?? line.dataKey}\n stroke={lineColors[i]}\n strokeWidth={2}\n strokeDasharray={line.dashed ? \"5 5\" : undefined}\n dot={false}\n yAxisId={dualAxis ? \"right\" : \"left\"}\n isAnimationActive={isAnimated}\n />\n ))}\n </ComposedChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n ScatterChart as RechartsScatterChart,\n Scatter,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n ZAxis,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent, useGridStroke, useAxisStyle } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface ScatterSeries {\n name: string;\n points: { x: number; y: number; z?: number }[];\n}\n\nexport interface ScatterChartProps {\n data: ScatterSeries[];\n xLabel?: string;\n yLabel?: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n showGrid?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const ScatterChart = forwardRef<HTMLDivElement, ScatterChartProps>(function ScatterChart({\n data,\n xLabel,\n yLabel,\n height = \"md\",\n showGrid = true,\n showTooltip = true,\n showLegend,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(data.length, false);\n const gridStroke = useGridStroke();\n const axisStyle = useAxisStyle();\n const isAnimated = useChartAnimation(animated);\n const legendVisible = showLegend ?? data.length >= 2;\n const axisLabelStyle = { fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: axisStyle.tick.fill };\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsScatterChart\n margin={{ top: 8, right: 8, bottom: xLabel ? 20 : 4, left: yLabel ? 20 : 4 }}\n accessibilityLayer\n >\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} />}\n <XAxis\n type=\"number\"\n dataKey=\"x\"\n name={xLabel ?? \"x\"}\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={xLabel ? { value: xLabel, position: \"bottom\", offset: 0, style: { ...axisLabelStyle, textAnchor: \"middle\" } } : undefined}\n />\n <YAxis\n type=\"number\"\n dataKey=\"y\"\n name={yLabel ?? \"y\"}\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={yLabel ? { value: yLabel, angle: -90, position: \"left\", offset: 0, style: { ...axisLabelStyle, textAnchor: \"middle\" } } : undefined}\n />\n <ZAxis type=\"number\" dataKey=\"z\" range={[40, 400]} />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {legendVisible && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {data.map((series, i) => (\n <Scatter\n key={series.name}\n name={series.name}\n data={series.points}\n fill={colors[i]}\n isAnimationActive={isAnimated}\n />\n ))}\n </RechartsScatterChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n RadarChart as RechartsRadarChart,\n Radar,\n PolarGrid,\n PolarAngleAxis,\n PolarRadiusAxis,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface RadarDataKey {\n key: string;\n label?: string;\n}\n\nexport interface RadarChartProps {\n data: Record<string, unknown>[];\n dataKeys: RadarDataKey[];\n axisKey: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n filled?: boolean;\n showDots?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const RadarChart = forwardRef<HTMLDivElement, RadarChartProps>(function RadarChart({\n data,\n dataKeys,\n axisKey,\n height = \"md\",\n filled = true,\n showDots = true,\n showTooltip = true,\n showLegend,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const solidColors = useChartColors(dataKeys.length, false);\n const softColors = useChartColors(dataKeys.length, true);\n const isAnimated = useChartAnimation(animated);\n const legendVisible = showLegend ?? dataKeys.length >= 2;\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsRadarChart data={data} cx=\"50%\" cy=\"50%\" outerRadius=\"75%\" accessibilityLayer>\n <PolarGrid stroke=\"var(--ds-border-subtle)\" />\n <PolarAngleAxis\n dataKey={axisKey}\n tick={{ fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: \"var(--ds-text-muted)\" }}\n />\n <PolarRadiusAxis\n tick={{ fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: \"var(--ds-text-muted)\" }}\n axisLine={false}\n />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {legendVisible && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {dataKeys.map((dk, i) => (\n <Radar\n key={dk.key}\n name={dk.label ?? dk.key}\n dataKey={dk.key}\n stroke={solidColors[i]}\n fill={filled ? softColors[i] : \"transparent\"}\n strokeWidth={2}\n dot={showDots ? { r: 3, fill: solidColors[i] } : false}\n isAnimationActive={isAnimated}\n />\n ))}\n </RechartsRadarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n RadialBarChart as RechartsRadialBarChart,\n RadialBar,\n Legend,\n Tooltip,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface RadialBarChartProps {\n data: { name: string; value: number; max?: number; [key: string]: unknown }[];\n height?: \"sm\" | \"md\" | \"lg\" | number;\n showTooltip?: boolean;\n showLegend?: boolean;\n showLabels?: boolean;\n startAngle?: number;\n endAngle?: number;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const RadialBarChart = forwardRef<HTMLDivElement, RadialBarChartProps>(function RadialBarChart({\n data,\n height = \"md\",\n showTooltip = true,\n showLegend = true,\n showLabels = false,\n startAngle = 90,\n endAngle = -270,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(data.length, false);\n const isAnimated = useChartAnimation(animated);\n\n const chartData = data.map((d, i) => ({\n ...d,\n fill: colors[i % colors.length],\n }));\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsRadialBarChart\n data={chartData}\n cx=\"50%\"\n cy=\"50%\"\n innerRadius=\"20%\"\n outerRadius=\"90%\"\n startAngle={startAngle}\n endAngle={endAngle}\n accessibilityLayer\n >\n <RadialBar\n dataKey=\"value\"\n background={{ fill: \"var(--ds-bg-muted)\" }}\n label={showLabels ? { position: \"insideStart\", fill: \"var(--ds-text-primary)\", fontSize: \"var(--ds-font-size-xs)\" } : false}\n isAnimationActive={isAnimated}\n />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {showLegend && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n </RechartsRadialBarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n FunnelChart as RechartsFunnelChart,\n Funnel,\n Tooltip,\n Legend,\n LabelList,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface FunnelChartProps {\n data: { name: string; value: number; [key: string]: unknown }[];\n height?: \"sm\" | \"md\" | \"lg\" | number;\n showTooltip?: boolean;\n showLegend?: boolean;\n showLabels?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const FunnelChart = forwardRef<HTMLDivElement, FunnelChartProps>(function FunnelChart({\n data,\n height = \"md\",\n showTooltip = true,\n showLegend = true,\n showLabels = true,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(data.length, false);\n const isAnimated = useChartAnimation(animated);\n\n const chartData = data.map((d, i) => ({\n ...d,\n fill: colors[i % colors.length],\n }));\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsFunnelChart accessibilityLayer>\n <Funnel dataKey=\"value\" data={chartData} isAnimationActive={isAnimated}>\n {showLabels && (\n <LabelList\n dataKey=\"name\"\n position=\"right\"\n fill=\"var(--ds-text-primary)\"\n fontSize=\"var(--ds-font-size-sm)\"\n fontFamily=\"var(--ds-font-sans)\"\n />\n )}\n </Funnel>\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {showLegend && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n </RechartsFunnelChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n Treemap,\n Tooltip,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, useRadius } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface TreemapNode {\n name: string;\n value?: number;\n children?: TreemapNode[];\n [key: string]: unknown;\n}\n\nexport interface TreemapChartProps {\n data: TreemapNode[];\n height?: \"sm\" | \"md\" | \"lg\" | number;\n showTooltip?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\ninterface TreemapContentProps {\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n name?: string;\n depth?: number;\n colors: string[];\n radius: number;\n index?: number;\n}\n\nfunction contrastColor(hex: string): string {\n const c = hex.replace(\"#\", \"\");\n if (c.length < 6) return \"#ffffff\";\n const r = parseInt(c.substring(0, 2), 16);\n const g = parseInt(c.substring(2, 4), 16);\n const b = parseInt(c.substring(4, 6), 16);\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n return luminance > 0.55 ? \"#1f2937\" : \"#ffffff\";\n}\n\nfunction TreemapContent({ x = 0, y = 0, width = 0, height: h = 0, name, depth, colors, radius, index = 0 }: TreemapContentProps) {\n const fill = colors[index % colors.length];\n const showLabel = width > 40 && h > 20;\n const labelColor = contrastColor(fill);\n\n return (\n <g>\n <rect\n x={x}\n y={y}\n width={width}\n height={h}\n fill={fill}\n stroke=\"var(--ds-bg-surface)\"\n strokeWidth={2}\n rx={depth === 1 ? radius : 0}\n style={{ opacity: depth === 1 ? 1 : 0.85 }}\n />\n {showLabel && (\n <text\n x={x + width / 2}\n y={y + h / 2}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fill={labelColor}\n stroke=\"none\"\n fontSize=\"var(--ds-font-size-xs)\"\n fontFamily=\"var(--ds-font-sans)\"\n style={{ pointerEvents: \"none\" }}\n >\n {name}\n </text>\n )}\n </g>\n );\n}\n\nfunction addFillToNodes(nodes: TreemapNode[], colors: string[], counter = { i: 0 }): TreemapNode[] {\n return nodes.map((node) => {\n if (node.children) {\n return { ...node, children: addFillToNodes(node.children, colors, counter) };\n }\n const fill = colors[counter.i % colors.length];\n counter.i++;\n return { ...node, fill };\n });\n}\n\nexport const TreemapChart = forwardRef<HTMLDivElement, TreemapChartProps>(function TreemapChart({\n data,\n height = \"md\",\n showTooltip = true,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(6, false);\n const isAnimated = useChartAnimation(animated);\n const radius = useRadius();\n\n const chartData = addFillToNodes(data, colors);\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <Treemap\n data={chartData}\n dataKey=\"value\"\n nameKey=\"name\"\n aspectRatio={4 / 3}\n stroke=\"var(--ds-bg-surface)\"\n isAnimationActive={isAnimated}\n content={<TreemapContent colors={colors} radius={radius} />}\n >\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n </Treemap>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n Sankey as RechartsSankey,\n Tooltip,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useResolvedToken } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface SankeyChartProps {\n data: {\n nodes: { name: string }[];\n links: { source: number; target: number; value: number }[];\n };\n height?: \"sm\" | \"md\" | \"lg\" | number;\n showTooltip?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const SankeyChart = forwardRef<HTMLDivElement, SankeyChartProps>(function SankeyChart({\n data,\n height = \"md\",\n showTooltip = true,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(data.nodes.length, false);\n const linkStroke = useResolvedToken(\"--ds-border-subtle\");\n\n const nodesWithColor = data.nodes.map((node, i) => ({\n ...node,\n fill: colors[i % colors.length],\n }));\n\n const sankeyData = {\n nodes: nodesWithColor,\n links: data.links,\n };\n\n if (!data?.nodes?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsSankey\n data={sankeyData}\n nodeWidth={10}\n nodePadding={24}\n margin={{ top: 8, right: 8, bottom: 8, left: 8 }}\n link={{ stroke: linkStroke, strokeOpacity: 0.4 }}\n >\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n </RechartsSankey>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef, useId } from \"react\";\nimport {\n LineChart,\n Line,\n AreaChart,\n Area,\n BarChart,\n Bar,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\nimport { useResolvedToken, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent } from \"./ChartPrimitives\";\nimport { useInsideChartContainer } from \"./ChartWrapper\";\n\nexport interface SparklineProps {\n data: number[];\n variant?: \"line\" | \"area\" | \"bar\";\n color?: 1 | 2 | 3 | 4 | 5 | 6;\n height?: number;\n width?: number | \"100%\";\n showTooltip?: boolean;\n curved?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const Sparkline = forwardRef<HTMLDivElement, SparklineProps>(function Sparkline({\n data,\n variant = \"line\",\n color = 1,\n height = 40,\n width = \"100%\",\n showTooltip = false,\n curved = true,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const instanceId = useId();\n const isAnimated = useChartAnimation(animated);\n const insideContainer = useInsideChartContainer();\n\n const tokenName = `--ds-chart-${color}` as const;\n const softTokenName = `--ds-chart-${color}-soft` as const;\n const chartColor = useResolvedToken(tokenName);\n const softColor = useResolvedToken(softTokenName);\n const chartData = data.map((value, i) => ({ value, index: i }));\n\n const containerStyle = insideContainer\n ? { width: \"100%\", height: \"100%\" }\n : { width: typeof width === \"number\" ? `${width}px` : width, height: `${height}px` };\n\n if (!data?.length) return null;\n\n if (variant === \"bar\") {\n return (\n <div ref={ref} style={containerStyle} className={className} {...(ariaLabel ? { role: \"img\", \"aria-label\": ariaLabel } : {})}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={chartData} margin={{ top: 0, right: 0, bottom: 0, left: 0 }}>\n <XAxis dataKey=\"index\" hide />\n <YAxis hide />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} cursor={false} />}\n <Bar\n dataKey=\"value\"\n fill={chartColor}\n radius={[2, 2, 0, 0]}\n isAnimationActive={isAnimated}\n />\n </BarChart>\n </ResponsiveContainer>\n </div>\n );\n }\n\n if (variant === \"area\") {\n const gradientId = `sparkline-gradient-${instanceId}-${color}`;\n return (\n <div ref={ref} style={containerStyle} className={className} {...(ariaLabel ? { role: \"img\", \"aria-label\": ariaLabel } : {})}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={chartData} margin={{ top: 2, right: 2, bottom: 2, left: 2 }}>\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={softColor} stopOpacity={1} />\n <stop offset=\"95%\" stopColor={softColor} stopOpacity={0.1} />\n </linearGradient>\n </defs>\n <XAxis dataKey=\"index\" hide />\n <YAxis hide domain={[\"dataMin - 1\", \"dataMax + 1\"]} />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} cursor={false} />}\n <Area\n type={curved ? \"monotone\" : \"linear\"}\n dataKey=\"value\"\n stroke={chartColor}\n strokeWidth={1.5}\n fill={`url(#${gradientId})`}\n dot={false}\n activeDot={showTooltip ? { r: 3, fill: chartColor } : false}\n isAnimationActive={isAnimated}\n />\n </AreaChart>\n </ResponsiveContainer>\n </div>\n );\n }\n\n return (\n <div ref={ref} style={containerStyle} className={className} {...(ariaLabel ? { role: \"img\", \"aria-label\": ariaLabel } : {})}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart data={chartData} margin={{ top: 2, right: 2, bottom: 2, left: 2 }}>\n <XAxis dataKey=\"index\" hide />\n <YAxis hide domain={[\"dataMin - 1\", \"dataMax + 1\"]} />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} cursor={false} />}\n <Line\n type={curved ? \"monotone\" : \"linear\"}\n dataKey=\"value\"\n stroke={chartColor}\n strokeWidth={1.5}\n dot={false}\n activeDot={showTooltip ? { r: 3, fill: chartColor } : false}\n isAnimationActive={isAnimated}\n />\n </LineChart>\n </ResponsiveContainer>\n </div>\n );\n});\n","import type { ReactNode } from \"react\";\nimport { cn, GLASS_SURFACE } from \"../lib/utils\";\nimport { Skeleton } from \"./Skeleton\";\nimport { ChartContainerContext } from \"./charts/ChartWrapper\";\n\nconst HEIGHT_MAP = {\n sm: \"var(--ds-chart-height-sm)\",\n md: \"var(--ds-chart-height-md)\",\n lg: \"var(--ds-chart-height-lg)\",\n} as const;\n\ninterface ChartContainerProps {\n height?: \"sm\" | \"md\" | \"lg\";\n title?: string;\n loading?: boolean;\n emptyState?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nexport function ChartContainer({\n height = \"md\",\n title,\n loading = false,\n emptyState,\n children,\n className,\n}: ChartContainerProps) {\n return (\n <div\n className={cn(\n \"rounded-[var(--ds-radius-md)]\",\n \"border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]\",\n GLASS_SURFACE,\n \"p-ds-4\",\n className\n )}\n >\n {title && (\n <p className=\"text-sm font-medium text-[var(--ds-text-primary)] mb-ds-4\">\n {title}\n </p>\n )}\n <div style={{ height: HEIGHT_MAP[height] }} className=\"relative\">\n {loading ? (\n <div className=\"flex flex-col justify-end h-full gap-ds-2 px-ds-2\">\n <div className=\"flex items-end h-full gap-ds-1\">\n {[65, 40, 80, 55, 72, 45, 60].map((h, i) => (\n <Skeleton\n key={i}\n variant=\"custom\"\n className=\"flex-1\"\n height={`${h}%`}\n />\n ))}\n </div>\n <Skeleton variant=\"text\" lines={1} className=\"w-full\" />\n </div>\n ) : children ? (\n <ChartContainerContext.Provider value={true}>\n <div className=\"h-full w-full\">{children}</div>\n </ChartContainerContext.Provider>\n ) : emptyState ? (\n <div className=\"h-full w-full flex items-center justify-center\">\n {emptyState}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"]}
@@ -0,0 +1,278 @@
1
+ import { cn, GLASS_DROPDOWN } from './chunk-IUBWNDUK.js';
2
+ import { isValidElement, cloneElement, useState, useRef, useCallback, useLayoutEffect, useEffect } from 'react';
3
+ import { createPortal } from 'react-dom';
4
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
5
+
6
+ function mergeRefs(...refs) {
7
+ const filtered = refs.filter(Boolean);
8
+ if (filtered.length === 0) return void 0;
9
+ if (filtered.length === 1) return filtered[0];
10
+ return (node) => {
11
+ for (const ref of filtered) {
12
+ if (typeof ref === "function") ref(node);
13
+ else if (ref && typeof ref === "object") ref.current = node;
14
+ }
15
+ };
16
+ }
17
+ function Slot({ children, ref, ...slotProps }) {
18
+ if (!isValidElement(children)) {
19
+ console.warn("Slot: expected a single React element child.");
20
+ return null;
21
+ }
22
+ const childProps = children.props;
23
+ const slotRecord = slotProps;
24
+ const mergedProps = { ...slotProps };
25
+ for (const key of Object.keys(childProps)) {
26
+ if (key === "style") {
27
+ mergedProps.style = { ...slotProps.style ?? {}, ...childProps.style };
28
+ } else if (key === "className") {
29
+ mergedProps.className = [slotProps.className, childProps.className].filter(Boolean).join(" ");
30
+ } else if (key.startsWith("on") && typeof slotRecord[key] === "function") {
31
+ const slotHandler = slotRecord[key];
32
+ const childHandler = childProps[key];
33
+ mergedProps[key] = (...args) => {
34
+ childHandler?.(...args);
35
+ slotHandler?.(...args);
36
+ };
37
+ } else {
38
+ mergedProps[key] = childProps[key] ?? slotRecord[key];
39
+ }
40
+ }
41
+ if (ref) {
42
+ const childRef = children.ref ?? childProps.ref;
43
+ mergedProps.ref = mergeRefs(ref, childRef);
44
+ }
45
+ return cloneElement(children, mergedProps);
46
+ }
47
+ var VIEWPORT_PADDING = 8;
48
+ function usePosition(triggerRef, floatingRef, open, options = {}) {
49
+ const { side = "bottom", align = "center", offset = 8, flip = true } = options;
50
+ const [pos, setPos] = useState({ top: 0, left: 0, placement: side });
51
+ const rafId2 = useRef(0);
52
+ const compute = useCallback(() => {
53
+ const trigger = triggerRef.current;
54
+ const floating = floatingRef.current;
55
+ if (!trigger || !floating) return;
56
+ const tRect = trigger.getBoundingClientRect();
57
+ const fRect = floating.getBoundingClientRect();
58
+ const vw = window.innerWidth;
59
+ const vh = window.innerHeight;
60
+ let placement = side;
61
+ if (flip) {
62
+ if (placement === "bottom" && tRect.bottom + offset + fRect.height > vh - VIEWPORT_PADDING && tRect.top - offset - fRect.height > VIEWPORT_PADDING) {
63
+ placement = "top";
64
+ } else if (placement === "top" && tRect.top - offset - fRect.height < VIEWPORT_PADDING && tRect.bottom + offset + fRect.height < vh - VIEWPORT_PADDING) {
65
+ placement = "bottom";
66
+ } else if (placement === "right" && tRect.right + offset + fRect.width > vw - VIEWPORT_PADDING && tRect.left - offset - fRect.width > VIEWPORT_PADDING) {
67
+ placement = "left";
68
+ } else if (placement === "left" && tRect.left - offset - fRect.width < VIEWPORT_PADDING && tRect.right + offset + fRect.width < vw - VIEWPORT_PADDING) {
69
+ placement = "right";
70
+ }
71
+ }
72
+ let top;
73
+ let left;
74
+ if (placement === "bottom" || placement === "top") {
75
+ top = placement === "bottom" ? tRect.bottom + offset : tRect.top - fRect.height - offset;
76
+ switch (align) {
77
+ case "start":
78
+ left = tRect.left;
79
+ break;
80
+ case "end":
81
+ left = tRect.right - fRect.width;
82
+ break;
83
+ default:
84
+ left = tRect.left + (tRect.width - fRect.width) / 2;
85
+ }
86
+ } else {
87
+ left = placement === "right" ? tRect.right + offset : tRect.left - fRect.width - offset;
88
+ switch (align) {
89
+ case "start":
90
+ top = tRect.top;
91
+ break;
92
+ case "end":
93
+ top = tRect.bottom - fRect.height;
94
+ break;
95
+ default:
96
+ top = tRect.top + (tRect.height - fRect.height) / 2;
97
+ }
98
+ }
99
+ left = Math.max(VIEWPORT_PADDING, Math.min(left, vw - fRect.width - VIEWPORT_PADDING));
100
+ top = Math.max(VIEWPORT_PADDING, Math.min(top, vh - fRect.height - VIEWPORT_PADDING));
101
+ setPos({ top, left, placement });
102
+ }, [triggerRef, floatingRef, side, align, offset, flip]);
103
+ useLayoutEffect(() => {
104
+ if (!open) return;
105
+ compute();
106
+ const onUpdate = () => {
107
+ cancelAnimationFrame(rafId2.current);
108
+ rafId2.current = requestAnimationFrame(compute);
109
+ };
110
+ window.addEventListener("scroll", onUpdate, true);
111
+ window.addEventListener("resize", onUpdate);
112
+ return () => {
113
+ cancelAnimationFrame(rafId2.current);
114
+ window.removeEventListener("scroll", onUpdate, true);
115
+ window.removeEventListener("resize", onUpdate);
116
+ };
117
+ }, [open, compute]);
118
+ return pos;
119
+ }
120
+ function Tooltip({ content, children, side = "top", delay = 300, className, container }) {
121
+ const [open, setOpen] = useState(false);
122
+ const triggerRef = useRef(null);
123
+ const floatingRef = useRef(null);
124
+ const timeoutRef = useRef(void 0);
125
+ const id = useRef(`tooltip-${Math.random().toString(36).slice(2, 8)}`).current;
126
+ const pos = usePosition(triggerRef, floatingRef, open, { side, offset: 6, flip: true });
127
+ const show = useCallback(() => {
128
+ timeoutRef.current = setTimeout(() => setOpen(true), delay);
129
+ }, [delay]);
130
+ const hide = useCallback(() => {
131
+ clearTimeout(timeoutRef.current);
132
+ setOpen(false);
133
+ }, []);
134
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
135
+ /* @__PURE__ */ jsx(
136
+ Slot,
137
+ {
138
+ ref: triggerRef,
139
+ onMouseEnter: show,
140
+ onMouseLeave: hide,
141
+ onFocus: show,
142
+ onBlur: hide,
143
+ "aria-describedby": open ? id : void 0,
144
+ children
145
+ }
146
+ ),
147
+ open && createPortal(
148
+ /* @__PURE__ */ jsx(
149
+ "div",
150
+ {
151
+ ref: floatingRef,
152
+ id,
153
+ role: "tooltip",
154
+ className: cn(
155
+ "fixed z-[var(--ds-z-tooltip)] pointer-events-none",
156
+ "px-ds-2.5 py-ds-1.5 text-xs",
157
+ "max-w-[280px] break-words",
158
+ "bg-[var(--ds-bg-surface-elevated)] text-[var(--ds-text-primary)]",
159
+ GLASS_DROPDOWN,
160
+ "border-[length:var(--ds-border-width)] border-[var(--ds-border-default)]",
161
+ "rounded-[var(--ds-radius-sm)]",
162
+ className
163
+ ),
164
+ style: { top: pos.top, left: pos.left },
165
+ children: content
166
+ }
167
+ ),
168
+ container ?? document.body
169
+ )
170
+ ] });
171
+ }
172
+ var registry = /* @__PURE__ */ new WeakMap();
173
+ var sharedObserver = null;
174
+ var rafId = null;
175
+ var pendingElements = /* @__PURE__ */ new Set();
176
+ function getSharedObserver() {
177
+ if (sharedObserver) return sharedObserver;
178
+ sharedObserver = new ResizeObserver((entries) => {
179
+ for (const entry of entries) {
180
+ pendingElements.add(entry.target);
181
+ }
182
+ if (rafId === null) {
183
+ rafId = requestAnimationFrame(flush);
184
+ }
185
+ });
186
+ return sharedObserver;
187
+ }
188
+ function flush() {
189
+ rafId = null;
190
+ for (const el of pendingElements) {
191
+ const callbacks = registry.get(el);
192
+ if (callbacks) {
193
+ for (const cb of callbacks) cb();
194
+ }
195
+ }
196
+ pendingElements.clear();
197
+ }
198
+ function observe(el, callback) {
199
+ let set = registry.get(el);
200
+ if (!set) {
201
+ set = /* @__PURE__ */ new Set();
202
+ registry.set(el, set);
203
+ }
204
+ set.add(callback);
205
+ if (set.size === 1) {
206
+ getSharedObserver().observe(el);
207
+ }
208
+ }
209
+ function unobserve(el, callback) {
210
+ const set = registry.get(el);
211
+ if (!set) return;
212
+ set.delete(callback);
213
+ if (set.size === 0) {
214
+ registry.delete(el);
215
+ getSharedObserver().unobserve(el);
216
+ }
217
+ }
218
+ var TOLERANCE = 1;
219
+ function checkOverflow(el, lines) {
220
+ if (lines <= 1) {
221
+ return el.scrollWidth - el.clientWidth > TOLERANCE;
222
+ }
223
+ return el.scrollHeight - el.clientHeight > TOLERANCE;
224
+ }
225
+ function useTextOverflow(options = {}) {
226
+ const { lines = 1, disabled = false, content } = options;
227
+ const [isTruncated, setIsTruncated] = useState(false);
228
+ const elementRef = useRef(null);
229
+ const checkRef = useRef(null);
230
+ const registeredRef = useRef(null);
231
+ const doCheck = useCallback(() => {
232
+ if (!elementRef.current || disabled) {
233
+ setIsTruncated(false);
234
+ return;
235
+ }
236
+ const next = checkOverflow(elementRef.current, lines);
237
+ setIsTruncated((prev) => prev !== next ? next : prev);
238
+ }, [lines, disabled]);
239
+ checkRef.current = doCheck;
240
+ useEffect(() => {
241
+ if (disabled) {
242
+ setIsTruncated(false);
243
+ } else if (elementRef.current) {
244
+ const next = checkOverflow(elementRef.current, lines);
245
+ setIsTruncated((prev) => prev !== next ? next : prev);
246
+ }
247
+ }, [content, lines, disabled]);
248
+ const ref = useCallback(
249
+ (node) => {
250
+ const prev = elementRef.current;
251
+ if (prev && registeredRef.current) {
252
+ unobserve(prev, registeredRef.current);
253
+ registeredRef.current = null;
254
+ }
255
+ elementRef.current = node;
256
+ if (node && !disabled) {
257
+ const wrapper = () => checkRef.current?.();
258
+ registeredRef.current = wrapper;
259
+ observe(node, wrapper);
260
+ const initial = checkOverflow(node, lines);
261
+ setIsTruncated(initial);
262
+ }
263
+ },
264
+ [lines, disabled]
265
+ );
266
+ useEffect(() => {
267
+ return () => {
268
+ if (elementRef.current && registeredRef.current) {
269
+ unobserve(elementRef.current, registeredRef.current);
270
+ }
271
+ };
272
+ }, []);
273
+ return { ref, isTruncated };
274
+ }
275
+
276
+ export { Slot, Tooltip, usePosition, useTextOverflow };
277
+ //# sourceMappingURL=chunk-CHNY75QI.js.map
278
+ //# sourceMappingURL=chunk-CHNY75QI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../showcase/src/lib/slot.tsx","../../../showcase/src/lib/use-position.ts","../../../showcase/src/components/Tooltip.tsx","../../../showcase/src/lib/use-text-overflow.ts"],"names":["rafId","useState","useRef","useCallback","jsx"],"mappings":"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","file":"chunk-CHNY75QI.js","sourcesContent":["import {\n type ReactNode,\n type ReactElement,\n type HTMLAttributes,\n type Ref,\n isValidElement,\n cloneElement,\n createElement,\n Children,\n} from \"react\";\n\ntype SlotProps = HTMLAttributes<HTMLElement> & {\n children?: ReactNode;\n ref?: Ref<HTMLElement>;\n};\n\nfunction mergeRefs(...refs: (Ref<HTMLElement> | undefined)[]): Ref<HTMLElement> | undefined {\n const filtered = refs.filter(Boolean) as Ref<HTMLElement>[];\n if (filtered.length === 0) return undefined;\n if (filtered.length === 1) return filtered[0];\n return (node: HTMLElement | null) => {\n for (const ref of filtered) {\n if (typeof ref === \"function\") ref(node);\n else if (ref && typeof ref === \"object\") (ref as { current: HTMLElement | null }).current = node;\n }\n };\n}\n\n/**\n * Merges its own props onto its single React element child instead of\n * rendering a wrapper DOM node. Used by trigger-based components\n * (Tooltip, HoverCard, Popover, DropdownMenu) via the `asChild` prop\n * to let consumers control the rendered element.\n *\n * Follows the same contract as Radix UI's Slot / `asChild` pattern.\n */\nexport function Slot({ children, ref, ...slotProps }: SlotProps) {\n if (!isValidElement(children)) {\n console.warn(\"Slot: expected a single React element child.\");\n return null;\n }\n\n const childProps = children.props as Record<string, unknown>;\n const slotRecord = slotProps as Record<string, unknown>;\n\n const mergedProps: Record<string, unknown> = { ...slotProps };\n for (const key of Object.keys(childProps)) {\n if (key === \"style\") {\n mergedProps.style = { ...(slotProps.style ?? {}), ...(childProps.style as object) };\n } else if (key === \"className\") {\n mergedProps.className = [slotProps.className, childProps.className].filter(Boolean).join(\" \");\n } else if (key.startsWith(\"on\") && typeof slotRecord[key] === \"function\") {\n const slotHandler = slotRecord[key] as (...args: unknown[]) => void;\n const childHandler = childProps[key] as (...args: unknown[]) => void;\n mergedProps[key] = (...args: unknown[]) => {\n childHandler?.(...args);\n slotHandler?.(...args);\n };\n } else {\n mergedProps[key] = childProps[key] ?? slotRecord[key];\n }\n }\n\n if (ref) {\n const childRef = (children as ReactElement & { ref?: Ref<HTMLElement> }).ref ?? (childProps.ref as Ref<HTMLElement> | undefined);\n mergedProps.ref = mergeRefs(ref, childRef);\n }\n\n return cloneElement(children as ReactElement, mergedProps);\n}\n\n/**\n * Renders either a Slot (when `asChild` is true — merging props onto\n * the consumer's child element) or the given `fallback` tag (default\n * behaviour, rendering a wrapper element with the given props).\n */\nexport function Slottable({\n asChild,\n fallback: Tag = \"span\",\n children,\n ref,\n ...rest\n}: {\n asChild?: boolean;\n fallback?: keyof HTMLElementTagNameMap;\n children?: ReactNode;\n ref?: Ref<HTMLElement>;\n} & HTMLAttributes<HTMLElement>) {\n if (asChild) {\n const child = Children.only(children);\n return <Slot ref={ref} {...rest}>{child}</Slot>;\n }\n return createElement(Tag, { ref, ...rest } as Record<string, unknown>, children);\n}\n","import { useState, useCallback, useLayoutEffect, useRef, type RefObject } from \"react\";\n\nexport type Side = \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type Align = \"start\" | \"center\" | \"end\";\n\ninterface PositionOptions {\n side?: Side;\n align?: Align;\n offset?: number;\n flip?: boolean;\n}\n\ninterface PositionResult {\n top: number;\n left: number;\n placement: Side;\n}\n\nconst VIEWPORT_PADDING = 8;\n\nexport function usePosition(\n triggerRef: RefObject<HTMLElement | null>,\n floatingRef: RefObject<HTMLElement | null>,\n open: boolean,\n options: PositionOptions = {}\n): PositionResult {\n const { side = \"bottom\", align = \"center\", offset = 8, flip = true } = options;\n const [pos, setPos] = useState<PositionResult>({ top: 0, left: 0, placement: side });\n const rafId = useRef(0);\n\n const compute = useCallback(() => {\n const trigger = triggerRef.current;\n const floating = floatingRef.current;\n if (!trigger || !floating) return;\n\n const tRect = trigger.getBoundingClientRect();\n const fRect = floating.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n let placement = side;\n\n if (flip) {\n if (placement === \"bottom\" && tRect.bottom + offset + fRect.height > vh - VIEWPORT_PADDING && tRect.top - offset - fRect.height > VIEWPORT_PADDING) {\n placement = \"top\";\n } else if (placement === \"top\" && tRect.top - offset - fRect.height < VIEWPORT_PADDING && tRect.bottom + offset + fRect.height < vh - VIEWPORT_PADDING) {\n placement = \"bottom\";\n } else if (placement === \"right\" && tRect.right + offset + fRect.width > vw - VIEWPORT_PADDING && tRect.left - offset - fRect.width > VIEWPORT_PADDING) {\n placement = \"left\";\n } else if (placement === \"left\" && tRect.left - offset - fRect.width < VIEWPORT_PADDING && tRect.right + offset + fRect.width < vw - VIEWPORT_PADDING) {\n placement = \"right\";\n }\n }\n\n let top: number;\n let left: number;\n\n if (placement === \"bottom\" || placement === \"top\") {\n top = placement === \"bottom\" ? tRect.bottom + offset : tRect.top - fRect.height - offset;\n\n switch (align) {\n case \"start\":\n left = tRect.left;\n break;\n case \"end\":\n left = tRect.right - fRect.width;\n break;\n default:\n left = tRect.left + (tRect.width - fRect.width) / 2;\n }\n } else {\n left = placement === \"right\" ? tRect.right + offset : tRect.left - fRect.width - offset;\n\n switch (align) {\n case \"start\":\n top = tRect.top;\n break;\n case \"end\":\n top = tRect.bottom - fRect.height;\n break;\n default:\n top = tRect.top + (tRect.height - fRect.height) / 2;\n }\n }\n\n left = Math.max(VIEWPORT_PADDING, Math.min(left, vw - fRect.width - VIEWPORT_PADDING));\n top = Math.max(VIEWPORT_PADDING, Math.min(top, vh - fRect.height - VIEWPORT_PADDING));\n\n setPos({ top, left, placement });\n }, [triggerRef, floatingRef, side, align, offset, flip]);\n\n useLayoutEffect(() => {\n if (!open) return;\n\n compute();\n\n const onUpdate = () => {\n cancelAnimationFrame(rafId.current);\n rafId.current = requestAnimationFrame(compute);\n };\n\n window.addEventListener(\"scroll\", onUpdate, true);\n window.addEventListener(\"resize\", onUpdate);\n\n return () => {\n cancelAnimationFrame(rafId.current);\n window.removeEventListener(\"scroll\", onUpdate, true);\n window.removeEventListener(\"resize\", onUpdate);\n };\n }, [open, compute]);\n\n return pos;\n}\n","import { useState, useRef, useCallback, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn, GLASS_DROPDOWN } from \"../lib/utils\";\nimport { Slot } from \"../lib/slot\";\nimport { usePosition, type Side } from \"../lib/use-position\";\n\ninterface TooltipProps {\n content: ReactNode;\n children: ReactNode;\n side?: Side;\n delay?: number;\n className?: string;\n container?: Element | DocumentFragment;\n}\n\nexport function Tooltip({ content, children, side = \"top\", delay = 300, className, container }: TooltipProps) {\n const [open, setOpen] = useState(false);\n const triggerRef = useRef<HTMLElement>(null);\n const floatingRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const id = useRef(`tooltip-${Math.random().toString(36).slice(2, 8)}`).current;\n\n const pos = usePosition(triggerRef, floatingRef, open, { side, offset: 6, flip: true });\n\n const show = useCallback(() => {\n timeoutRef.current = setTimeout(() => setOpen(true), delay);\n }, [delay]);\n\n const hide = useCallback(() => {\n clearTimeout(timeoutRef.current);\n setOpen(false);\n }, []);\n\n return (\n <>\n <Slot\n ref={triggerRef}\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocus={show}\n onBlur={hide}\n aria-describedby={open ? id : undefined}\n >\n {children}\n </Slot>\n {open && createPortal(\n <div\n ref={floatingRef}\n id={id}\n role=\"tooltip\"\n className={cn(\n \"fixed z-[var(--ds-z-tooltip)] pointer-events-none\",\n \"px-ds-2.5 py-ds-1.5 text-xs\",\n \"max-w-[280px] break-words\",\n \"bg-[var(--ds-bg-surface-elevated)] text-[var(--ds-text-primary)]\",\n GLASS_DROPDOWN,\n \"border-[length:var(--ds-border-width)] border-[var(--ds-border-default)]\",\n \"rounded-[var(--ds-radius-sm)]\",\n className\n )}\n style={{ top: pos.top, left: pos.left }}\n >\n {content}\n </div>,\n container ?? document.body\n )}\n </>\n );\n}\n","import { useState, useCallback, useRef, useEffect } from \"react\";\n\n// ─── Shared ResizeObserver (singleton per document) ────────────────────────────\n// All useTextOverflow instances share a single ResizeObserver. This avoids the\n// performance cost of 80+ independent observers on pages with many truncated elements.\n\ntype OverflowCallback = () => void;\n\nconst registry = new WeakMap<Element, Set<OverflowCallback>>();\nlet sharedObserver: ResizeObserver | null = null;\nlet rafId: number | null = null;\nconst pendingElements = new Set<Element>();\n\nfunction getSharedObserver(): ResizeObserver {\n if (sharedObserver) return sharedObserver;\n sharedObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n pendingElements.add(entry.target);\n }\n if (rafId === null) {\n rafId = requestAnimationFrame(flush);\n }\n });\n return sharedObserver;\n}\n\nfunction flush() {\n rafId = null;\n for (const el of pendingElements) {\n const callbacks = registry.get(el);\n if (callbacks) {\n for (const cb of callbacks) cb();\n }\n }\n pendingElements.clear();\n}\n\nfunction observe(el: Element, callback: OverflowCallback) {\n let set = registry.get(el);\n if (!set) {\n set = new Set();\n registry.set(el, set);\n }\n set.add(callback);\n if (set.size === 1) {\n getSharedObserver().observe(el);\n }\n}\n\nfunction unobserve(el: Element, callback: OverflowCallback) {\n const set = registry.get(el);\n if (!set) return;\n set.delete(callback);\n if (set.size === 0) {\n registry.delete(el);\n getSharedObserver().unobserve(el);\n }\n}\n\n// ─── Overflow detection ────────────────────────────────────────────────────────\n\nconst TOLERANCE = 1; // px — accounts for integer rounding in scrollWidth/clientWidth\n\nfunction checkOverflow(el: HTMLElement, lines: number): boolean {\n if (lines <= 1) {\n return el.scrollWidth - el.clientWidth > TOLERANCE;\n }\n return el.scrollHeight - el.clientHeight > TOLERANCE;\n}\n\n// ─── Hook ──────────────────────────────────────────────────────────────────────\n\nexport interface UseTextOverflowOptions {\n /** Number of visible lines before truncation. 1 = single-line ellipsis, >1 = line-clamp. */\n lines?: number;\n /** Disable overflow detection (e.g. when component is hidden) */\n disabled?: boolean;\n /** Content key — triggers re-check when this value changes (use for dynamic text content) */\n content?: unknown;\n}\n\nexport interface UseTextOverflowResult {\n /** Callback ref — attach to the element that has truncation CSS applied */\n ref: (node: HTMLElement | null) => void;\n /** True when the element's text is currently overflowing/truncated */\n isTruncated: boolean;\n}\n\n/**\n * Detects whether an element's text content is overflowing (truncated).\n * Uses a single shared ResizeObserver for all instances on the page.\n *\n * @example\n * const { ref, isTruncated } = useTextOverflow({ lines: 1 });\n * return (\n * <Tooltip content={fullText} disabled={!isTruncated}>\n * <span ref={ref} className=\"truncate\">{fullText}</span>\n * </Tooltip>\n * );\n */\nexport function useTextOverflow(options: UseTextOverflowOptions = {}): UseTextOverflowResult {\n const { lines = 1, disabled = false, content } = options;\n const [isTruncated, setIsTruncated] = useState(false);\n const elementRef = useRef<HTMLElement | null>(null);\n // Separate refs: one for the latest check logic, one for the observer-registered function\n const checkRef = useRef<OverflowCallback | null>(null);\n const registeredRef = useRef<OverflowCallback | null>(null);\n\n const doCheck = useCallback(() => {\n if (!elementRef.current || disabled) {\n setIsTruncated(false);\n return;\n }\n const next = checkOverflow(elementRef.current, lines);\n setIsTruncated((prev) => (prev !== next ? next : prev));\n }, [lines, disabled]);\n\n // Keep the check logic ref current so the stable wrapper always uses the latest\n checkRef.current = doCheck;\n\n // Re-check when content changes (handles dynamic text like Dropdown selection)\n // or when disabled state changes\n useEffect(() => {\n if (disabled) {\n setIsTruncated(false);\n } else if (elementRef.current) {\n const next = checkOverflow(elementRef.current, lines);\n setIsTruncated((prev) => (prev !== next ? next : prev));\n }\n }, [content, lines, disabled]);\n\n const ref = useCallback(\n (node: HTMLElement | null) => {\n const prev = elementRef.current;\n\n // Unregister previous element using the SAME function we registered with\n if (prev && registeredRef.current) {\n unobserve(prev, registeredRef.current);\n registeredRef.current = null;\n }\n\n elementRef.current = node;\n\n if (node && !disabled) {\n // Stable wrapper that delegates to the latest check logic\n const wrapper: OverflowCallback = () => checkRef.current?.();\n registeredRef.current = wrapper;\n observe(node, wrapper);\n // Initial check on mount\n const initial = checkOverflow(node, lines);\n setIsTruncated(initial);\n }\n },\n [lines, disabled],\n );\n\n // Cleanup on unmount — uses the registered wrapper, not the check function\n useEffect(() => {\n return () => {\n if (elementRef.current && registeredRef.current) {\n unobserve(elementRef.current, registeredRef.current);\n }\n };\n }, []);\n\n return { ref, isTruncated };\n}\n"]}
@@ -0,0 +1,36 @@
1
+ import { createContext, createElement, useContext, useMemo, useState, useEffect } from 'react';
2
+
3
+ // ../../showcase/src/lib/use-breakpoint.ts
4
+ var DEFAULT_BREAKPOINTS = { sm: 640, md: 768, lg: 1024, xl: 1280 };
5
+ var BreakpointWidthCtx = createContext(null);
6
+ function BreakpointWidthProvider({ width, children }) {
7
+ return createElement(BreakpointWidthCtx, { value: width }, children);
8
+ }
9
+ function readBpFromCSS(key) {
10
+ if (typeof window === "undefined") return DEFAULT_BREAKPOINTS[key];
11
+ const raw = getComputedStyle(document.documentElement).getPropertyValue(`--ds-bp-${key}`).trim();
12
+ const px = parseInt(raw, 10);
13
+ return isNaN(px) ? DEFAULT_BREAKPOINTS[key] : px;
14
+ }
15
+ function useBreakpoint(key) {
16
+ const overrideWidth = useContext(BreakpointWidthCtx);
17
+ const px = useMemo(() => readBpFromCSS(key), [key]);
18
+ const [matches, setMatches] = useState(() => {
19
+ if (overrideWidth !== null) return overrideWidth <= px;
20
+ return typeof window !== "undefined" ? window.matchMedia(`(max-width: ${px}px)`).matches : false;
21
+ });
22
+ useEffect(() => {
23
+ if (overrideWidth !== null) return;
24
+ const mql = window.matchMedia(`(max-width: ${px}px)`);
25
+ const handler = (e) => setMatches(e.matches);
26
+ mql.addEventListener("change", handler);
27
+ setMatches(mql.matches);
28
+ return () => mql.removeEventListener("change", handler);
29
+ }, [px, overrideWidth]);
30
+ if (overrideWidth !== null) return overrideWidth <= px;
31
+ return matches;
32
+ }
33
+
34
+ export { BreakpointWidthProvider, useBreakpoint };
35
+ //# sourceMappingURL=chunk-DPF6776I.js.map
36
+ //# sourceMappingURL=chunk-DPF6776I.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../showcase/src/lib/use-breakpoint.ts"],"names":[],"mappings":";;;AAEA,IAAM,mBAAA,GAAsB,EAAE,EAAA,EAAI,GAAA,EAAK,IAAI,GAAA,EAAK,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,IAAA,EAAK;AAInE,IAAM,kBAAA,GAAqB,cAA6B,IAAI,CAAA;AAOrD,SAAS,uBAAA,CAAwB,EAAE,KAAA,EAAO,QAAA,EAAS,EAAkD;AAC1G,EAAA,OAAO,cAAc,kBAAA,EAAoB,EAAE,KAAA,EAAO,KAAA,IAAS,QAAQ,CAAA;AACrE;AAEA,SAAS,cAAc,GAAA,EAA4B;AACjD,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,oBAAoB,GAAG,CAAA;AACjE,EAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,QAAA,CAAS,eAAe,CAAA,CAClD,iBAAiB,CAAA,QAAA,EAAW,GAAG,CAAA,CAAE,CAAA,CACjC,IAAA,EAAK;AACR,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,GAAA,EAAK,EAAE,CAAA;AAC3B,EAAA,OAAO,KAAA,CAAM,EAAE,CAAA,GAAI,mBAAA,CAAoB,GAAG,CAAA,GAAI,EAAA;AAChD;AAUO,SAAS,cAAc,GAAA,EAA6B;AACzD,EAAA,MAAM,aAAA,GAAgB,WAAW,kBAAkB,CAAA;AACnD,EAAA,MAAM,EAAA,GAAK,QAAQ,MAAM,aAAA,CAAc,GAAG,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAElD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,MAAM;AAC3C,IAAA,IAAI,aAAA,KAAkB,IAAA,EAAM,OAAO,aAAA,IAAiB,EAAA;AACpD,IAAA,OAAO,OAAO,WAAW,WAAA,GACrB,MAAA,CAAO,WAAW,CAAA,YAAA,EAAe,EAAE,CAAA,GAAA,CAAK,CAAA,CAAE,OAAA,GAC1C,KAAA;AAAA,EACN,CAAC,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,kBAAkB,IAAA,EAAM;AAC5B,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,CAAA,YAAA,EAAe,EAAE,CAAA,GAAA,CAAK,CAAA;AACpD,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAA2B,UAAA,CAAW,EAAE,OAAO,CAAA;AAChE,IAAA,GAAA,CAAI,gBAAA,CAAiB,UAAU,OAAO,CAAA;AACtC,IAAA,UAAA,CAAW,IAAI,OAAO,CAAA;AACtB,IAAA,OAAO,MAAM,GAAA,CAAI,mBAAA,CAAoB,QAAA,EAAU,OAAO,CAAA;AAAA,EACxD,CAAA,EAAG,CAAC,EAAA,EAAI,aAAa,CAAC,CAAA;AAEtB,EAAA,IAAI,aAAA,KAAkB,IAAA,EAAM,OAAO,aAAA,IAAiB,EAAA;AACpD,EAAA,OAAO,OAAA;AACT","file":"chunk-DPF6776I.js","sourcesContent":["import { useState, useEffect, useMemo, createContext, useContext, createElement, type ReactNode } from \"react\";\n\nconst DEFAULT_BREAKPOINTS = { sm: 640, md: 768, lg: 1024, xl: 1280 } as const;\n\nexport type BreakpointKey = keyof typeof DEFAULT_BREAKPOINTS;\n\nconst BreakpointWidthCtx = createContext<number | null>(null);\n\n/**\n * Provides an override container width for all `useBreakpoint` calls within\n * this subtree. Used by the builder's viewport preview to make components\n * respond to the constrained canvas width instead of the browser viewport.\n */\nexport function BreakpointWidthProvider({ width, children }: { width: number | null; children: ReactNode }) {\n return createElement(BreakpointWidthCtx, { value: width }, children);\n}\n\nfunction readBpFromCSS(key: BreakpointKey): number {\n if (typeof window === \"undefined\") return DEFAULT_BREAKPOINTS[key];\n const raw = getComputedStyle(document.documentElement)\n .getPropertyValue(`--ds-bp-${key}`)\n .trim();\n const px = parseInt(raw, 10);\n return isNaN(px) ? DEFAULT_BREAKPOINTS[key] : px;\n}\n\n/**\n * Reactive breakpoint check that reads `--ds-bp-*` CSS variables.\n * Returns true when the viewport (or override container) is at or below the\n * named breakpoint.\n *\n * @example\n * const isMobile = useBreakpoint(\"md\"); // true when ≤768px\n */\nexport function useBreakpoint(key: BreakpointKey): boolean {\n const overrideWidth = useContext(BreakpointWidthCtx);\n const px = useMemo(() => readBpFromCSS(key), [key]);\n\n const [matches, setMatches] = useState(() => {\n if (overrideWidth !== null) return overrideWidth <= px;\n return typeof window !== \"undefined\"\n ? window.matchMedia(`(max-width: ${px}px)`).matches\n : false;\n });\n\n useEffect(() => {\n if (overrideWidth !== null) return;\n const mql = window.matchMedia(`(max-width: ${px}px)`);\n const handler = (e: MediaQueryListEvent) => setMatches(e.matches);\n mql.addEventListener(\"change\", handler);\n setMatches(mql.matches);\n return () => mql.removeEventListener(\"change\", handler);\n }, [px, overrideWidth]);\n\n if (overrideWidth !== null) return overrideWidth <= px;\n return matches;\n}\n"]}