@zentauri-ui/zentauri-components 1.5.0 → 1.5.21

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 (69) hide show
  1. package/README.md +5 -6
  2. package/cli/registry.json +2 -0
  3. package/dist/charts/area/Area.d.ts.map +1 -1
  4. package/dist/charts/area/index.d.ts +1 -1
  5. package/dist/charts/area/index.d.ts.map +1 -1
  6. package/dist/charts/area.js +10 -10
  7. package/dist/charts/area.js.map +1 -1
  8. package/dist/charts/area.mjs +3 -3
  9. package/dist/charts/area.mjs.map +1 -1
  10. package/dist/charts/bar/index.d.ts +1 -1
  11. package/dist/charts/bar/index.d.ts.map +1 -1
  12. package/dist/charts/bar.js +9 -8
  13. package/dist/charts/bar.js.map +1 -1
  14. package/dist/charts/bar.mjs +3 -2
  15. package/dist/charts/bar.mjs.map +1 -1
  16. package/dist/charts/bubble/Bubble.d.ts.map +1 -1
  17. package/dist/charts/bubble/index.d.ts +1 -1
  18. package/dist/charts/bubble/index.d.ts.map +1 -1
  19. package/dist/charts/bubble.js +12 -18
  20. package/dist/charts/bubble.js.map +1 -1
  21. package/dist/charts/bubble.mjs +7 -13
  22. package/dist/charts/bubble.mjs.map +1 -1
  23. package/dist/charts/line/index.d.ts +1 -1
  24. package/dist/charts/line/index.d.ts.map +1 -1
  25. package/dist/charts/line.js +9 -8
  26. package/dist/charts/line.js.map +1 -1
  27. package/dist/charts/line.mjs +3 -2
  28. package/dist/charts/line.mjs.map +1 -1
  29. package/dist/charts/pie/Pie.d.ts +6 -0
  30. package/dist/charts/pie/Pie.d.ts.map +1 -0
  31. package/dist/charts/pie/index.d.ts +4 -0
  32. package/dist/charts/pie/index.d.ts.map +1 -0
  33. package/dist/charts/pie.js +104 -0
  34. package/dist/charts/pie.js.map +1 -0
  35. package/dist/charts/pie.mjs +91 -0
  36. package/dist/charts/pie.mjs.map +1 -0
  37. package/dist/charts/shared/chart-frame.d.ts +0 -3
  38. package/dist/charts/shared/chart-frame.d.ts.map +1 -1
  39. package/dist/charts/shared/colors.d.ts +4 -0
  40. package/dist/charts/shared/colors.d.ts.map +1 -1
  41. package/dist/charts/shared/types.d.ts +20 -1
  42. package/dist/charts/shared/types.d.ts.map +1 -1
  43. package/dist/charts/shared/variants.d.ts +25 -0
  44. package/dist/charts/shared/variants.d.ts.map +1 -1
  45. package/dist/{chunk-CIN5JDN4.js → chunk-MTJRPLMG.js} +69 -30
  46. package/dist/chunk-MTJRPLMG.js.map +1 -0
  47. package/dist/chunk-MWR5DIA5.mjs +21 -0
  48. package/dist/chunk-MWR5DIA5.mjs.map +1 -0
  49. package/dist/chunk-PVTTWOYV.js +24 -0
  50. package/dist/chunk-PVTTWOYV.js.map +1 -0
  51. package/dist/{chunk-IQZROQNJ.mjs → chunk-SPX2QDIB.mjs} +70 -29
  52. package/dist/chunk-SPX2QDIB.mjs.map +1 -0
  53. package/dist/ui/buttons/variants.d.ts +1 -1
  54. package/dist/ui/pagination/pagination.d.ts +1 -1
  55. package/dist/ui/pagination/variants.d.ts +1 -1
  56. package/package.json +1 -1
  57. package/src/charts/area/Area.tsx +0 -1
  58. package/src/charts/area/index.ts +8 -1
  59. package/src/charts/bar/index.ts +8 -1
  60. package/src/charts/bubble/Bubble.tsx +3 -10
  61. package/src/charts/bubble/index.ts +8 -1
  62. package/src/charts/line/index.ts +8 -1
  63. package/src/charts/pie/Pie.tsx +101 -0
  64. package/src/charts/pie/index.ts +9 -0
  65. package/src/charts/shared/chart-frame.tsx +27 -5
  66. package/src/charts/shared/types.ts +23 -1
  67. package/src/charts/shared/variants.ts +45 -8
  68. package/dist/chunk-CIN5JDN4.js.map +0 -1
  69. package/dist/chunk-IQZROQNJ.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/charts/shared/variants.ts","../src/charts/shared/chart-frame.tsx"],"names":["cva","jsx","cn","ResponsiveContainer","jsxs","Fragment","CartesianGrid","Tooltip","Legend"],"mappings":"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","file":"chunk-MTJRPLMG.js","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nexport const chartVariants = cva(\n [\n \"relative w-full min-w-0 overflow-hidden rounded-xl\",\n \"h-[var(--chart-height)] min-h-64 sm:min-h-72 md:min-h-80\",\n \"[&_.recharts-default-tooltip]:rounded-lg [&_.recharts-default-tooltip]:border [&_.recharts-default-tooltip]:border-slate-200\",\n \"[&_.recharts-default-tooltip]:bg-white/95 [&_.recharts-default-tooltip]:shadow-lg\",\n \"[&_.recharts-default-tooltip]:text-slate-900\",\n ],\n {\n variants: {\n appearance: {\n default:\n \"bg-white text-slate-600 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n muted:\n \"bg-slate-50 text-slate-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n outline:\n \"border border-slate-200 bg-white text-slate-600 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n glass:\n \"border border-white/15 bg-white/10 text-slate-100 backdrop-blur-md [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n sky: \"bg-sky-50 text-sky-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n emerald:\n \"bg-emerald-50 text-emerald-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n violet:\n \"bg-violet-50 text-violet-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n amber:\n \"bg-amber-50 text-amber-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n rose: \"bg-rose-50 text-rose-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n slate:\n \"bg-slate-50 text-slate-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n gray: \"bg-gray-50 text-gray-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n indigo:\n \"bg-indigo-50 text-indigo-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n \"gradient-cyan-violet\":\n \"bg-gradient-to-r from-cyan-500 to-violet-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-emerald-violet\":\n \"bg-gradient-to-r from-emerald-500 to-violet-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-amber-rose\":\n \"bg-gradient-to-r from-amber-500 to-rose-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-slate-gray\":\n \"bg-gradient-to-r from-slate-500 to-gray-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-indigo-purple\":\n \"bg-gradient-to-r from-indigo-500 to-purple-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-cyan-blue\":\n \"bg-gradient-to-r from-cyan-500 to-blue-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-emerald-blue\":\n \"bg-gradient-to-r from-emerald-500 to-blue-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-amber-blue\":\n \"bg-gradient-to-r from-amber-500 to-blue-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n },\n density: {\n compact: \"p-2 sm:p-3\",\n comfortable: \"p-3 sm:p-4\",\n spacious: \"p-4 sm:p-5 md:p-6\",\n },\n },\n defaultVariants: {\n appearance: \"default\",\n density: \"comfortable\",\n },\n },\n);\n\nexport const chartPalette = {\n glass: { stroke: \"#0f172a\", fill: \"#0f172a\", textColor: \"#0f172a\" },\n outline: { stroke: \"#0f172a\", fill: \"#0f172a\", textColor: \"#0f172a\" },\n muted: { stroke: \"#0f172a\", fill: \"#0f172a\", textColor: \"#0f172a\" },\n default: { stroke: \"#0f172a\", fill: \"#0f172a\", textColor: \"#0f172a\" },\n sky: { stroke: \"#0f172a\", fill: \"#0f172a\", textColor: \"#0f172a\" },\n cyan: { stroke: \"#0891b2\", fill: \"#67e8f9\", textColor: \"#0891b2\" },\n emerald: { stroke: \"#059669\", fill: \"#6ee7b7\", textColor: \"#059669\" },\n violet: { stroke: \"#7c3aed\", fill: \"#c4b5fd\", textColor: \"#7c3aed\" },\n amber: { stroke: \"#d97706\", fill: \"#fcd34d\", textColor: \"#d97706\" },\n rose: { stroke: \"#e11d48\", fill: \"#fda4af\", textColor: \"#e11d48\" },\n slate: { stroke: \"#475569\", fill: \"#cbd5e1\", textColor: \"#475569\" },\n gray: { stroke: \"#6b7280\", fill: \"#d1d5db\", textColor: \"#6b7280\" },\n white: { stroke: \"#ffffff\", fill: \"#ffffff\", textColor: \"#ffffff\" },\n indigo: { stroke: \"#6366f1\", fill: \"#c7d2fe\", textColor: \"#6366f1\" },\n \"gradient-cyan-violet\": {\n stroke: \"#0891b2\",\n fill: \"#67e8f9\",\n textColor: \"#0891b2\",\n },\n \"gradient-emerald-violet\": {\n stroke: \"#059669\",\n fill: \"#6ee7b7\",\n textColor: \"#059669\",\n },\n \"gradient-amber-rose\": {\n stroke: \"#d97706\",\n fill: \"#fcd34d\",\n textColor: \"#d97706\",\n },\n \"gradient-slate-gray\": {\n stroke: \"#475569\",\n fill: \"#cbd5e1\",\n textColor: \"#475569\",\n },\n \"gradient-indigo-purple\": {\n stroke: \"#6366f1\",\n fill: \"#c7d2fe\",\n textColor: \"#6366f1\",\n },\n \"gradient-cyan-blue\": {\n stroke: \"#0891b2\",\n fill: \"#67e8f9\",\n textColor: \"#0891b2\",\n },\n \"gradient-emerald-blue\": {\n stroke: \"#059669\",\n fill: \"#6ee7b7\",\n textColor: \"#059669\",\n },\n \"gradient-amber-blue\": {\n stroke: \"#d97706\",\n fill: \"#fcd34d\",\n textColor: \"#d97706\",\n },\n} as const;\n\nexport const chartColorValues = Object.keys(chartPalette) as Array<\n keyof typeof chartPalette\n>;\n","import type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport { CartesianGrid, Legend, ResponsiveContainer, Tooltip } from \"recharts\";\n\nimport { cn } from \"../../lib/utils\";\nimport { chartVariants } from \"./variants\";\nimport { VariantProps } from \"class-variance-authority\";\n\n/** Chart-level props that may be forwarded from *Chart `...rest` and must not reach a DOM node. */\nconst CHART_ONLY_DIV_PROP_KEYS = new Set([\n \"data\",\n \"margin\",\n \"series\",\n \"showGrid\",\n \"showLegend\",\n \"showTooltip\",\n \"stacked\",\n \"strokeDasharray\",\n \"syncId\",\n \"tooltipColor\",\n \"xKey\",\n]);\n\nfunction filterDivProps(\n props: HTMLAttributes<HTMLDivElement>,\n): HTMLAttributes<HTMLDivElement> {\n const entries = Object.entries(props).filter(\n ([key]) => !CHART_ONLY_DIV_PROP_KEYS.has(key),\n );\n return Object.fromEntries(entries) as HTMLAttributes<HTMLDivElement>;\n}\n\ntype ChartFrameProps = HTMLAttributes<HTMLDivElement> & {\n appearance?: VariantProps<typeof chartVariants>[\"appearance\"];\n containerStyle?: CSSProperties;\n density?: \"compact\" | \"comfortable\" | \"spacious\" | null;\n emptyState?: ReactNode;\n hasData: boolean;\n height: number;\n style?: CSSProperties;\n children: ReactNode;\n};\n\nexport const defaultChartMargin = { top: 16, right: 16, bottom: 8, left: 0 };\n\nexport function ChartFrame({\n appearance,\n children,\n className,\n containerStyle,\n density,\n emptyState = null,\n hasData,\n height,\n style,\n ...props\n}: ChartFrameProps) {\n const divProps = filterDivProps(props);\n const chartStyle = {\n \"--chart-height\": `${height}px`,\n ...style,\n } as CSSProperties;\n\n if (!hasData) {\n return (\n <div\n className={cn(chartVariants({ appearance, density }), className)}\n style={chartStyle}\n {...divProps}\n >\n <div className=\"flex h-full min-h-48 items-center justify-center text-sm text-slate-500\">\n {emptyState}\n </div>\n </div>\n );\n }\n\n return (\n <div\n className={cn(chartVariants({ appearance, density }), className)}\n style={chartStyle}\n {...divProps}\n >\n <ResponsiveContainer\n width=\"100%\"\n height=\"100%\"\n debounce={80}\n style={containerStyle}\n >\n {children}\n </ResponsiveContainer>\n </div>\n );\n}\n\nexport function ChartDecorators({\n axis,\n showGrid,\n showLegend,\n showTooltip,\n tooltipColor = \"#0f172a\",\n}: {\n axis: ReactNode;\n showGrid: boolean;\n showLegend: boolean;\n showTooltip: boolean;\n tooltipColor?: string;\n}) {\n return (\n <>\n {showGrid ? (\n <CartesianGrid\n strokeDasharray=\"3 3\"\n stroke=\"currentColor\"\n opacity={0.16}\n />\n ) : null}\n {axis}\n {showTooltip ? (\n <Tooltip\n cursor={{ opacity: 0.12 }}\n contentStyle={{ color: tooltipColor }}\n labelStyle={{ color: tooltipColor }}\n itemStyle={{ color: tooltipColor }}\n />\n ) : null}\n {showLegend ? <Legend /> : null}\n </>\n );\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import { chartPalette } from './chunk-SPX2QDIB.mjs';
2
+
3
+ // src/charts/shared/colors.ts
4
+ function resolveColor(color, index) {
5
+ if (color && color in chartPalette) {
6
+ return chartPalette[color];
7
+ }
8
+ if (color) {
9
+ return { stroke: color, fill: color };
10
+ }
11
+ const paletteValues = Object.values(chartPalette);
12
+ return paletteValues[index % paletteValues.length] ?? chartPalette.cyan;
13
+ }
14
+ function getSeriesFill(series, index, opacity = 0.18) {
15
+ const color = resolveColor(series.color, index);
16
+ return series.fill ?? `${color.fill}${Math.round(opacity * 255).toString(16).padStart(2, "0")}`;
17
+ }
18
+
19
+ export { getSeriesFill, resolveColor };
20
+ //# sourceMappingURL=chunk-MWR5DIA5.mjs.map
21
+ //# sourceMappingURL=chunk-MWR5DIA5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/charts/shared/colors.ts"],"names":[],"mappings":";;;AAGO,SAAS,YAAA,CACd,OACA,KAAA,EACA;AACA,EAAA,IAAI,KAAA,IAAS,SAAS,YAAA,EAAc;AAClC,IAAA,OAAO,aAAa,KAAmB,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM;AAAA,EACtC;AAEA,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA;AAChD,EAAA,OAAO,aAAA,CAAc,KAAA,GAAQ,aAAA,CAAc,MAAM,KAAK,YAAA,CAAa,IAAA;AACrE;AAEO,SAAS,aAAA,CACd,MAAA,EACA,KAAA,EACA,OAAA,GAAU,IAAA,EACV;AACA,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,MAAA,CAAO,KAAA,EAAO,KAAK,CAAA;AAC9C,EAAA,OACE,OAAO,IAAA,IACP,CAAA,EAAG,KAAA,CAAM,IAAI,GAAG,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,GAAG,EACrC,QAAA,CAAS,EAAE,EACX,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAEvB","file":"chunk-MWR5DIA5.mjs","sourcesContent":["import type { ChartColor, ChartSeries } from \"./types\";\nimport { chartPalette } from \"./variants\";\n\nexport function resolveColor(\n color: ChartColor | string | undefined,\n index: number,\n) {\n if (color && color in chartPalette) {\n return chartPalette[color as ChartColor];\n }\n if (color) {\n return { stroke: color, fill: color };\n }\n\n const paletteValues = Object.values(chartPalette);\n return paletteValues[index % paletteValues.length] ?? chartPalette.cyan;\n}\n\nexport function getSeriesFill(\n series: ChartSeries,\n index: number,\n opacity = 0.18,\n) {\n const color = resolveColor(series.color, index);\n return (\n series.fill ??\n `${color.fill}${Math.round(opacity * 255)\n .toString(16)\n .padStart(2, \"0\")}`\n );\n}\n"]}
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ var chunkMTJRPLMG_js = require('./chunk-MTJRPLMG.js');
4
+
5
+ // src/charts/shared/colors.ts
6
+ function resolveColor(color, index) {
7
+ if (color && color in chunkMTJRPLMG_js.chartPalette) {
8
+ return chunkMTJRPLMG_js.chartPalette[color];
9
+ }
10
+ if (color) {
11
+ return { stroke: color, fill: color };
12
+ }
13
+ const paletteValues = Object.values(chunkMTJRPLMG_js.chartPalette);
14
+ return paletteValues[index % paletteValues.length] ?? chunkMTJRPLMG_js.chartPalette.cyan;
15
+ }
16
+ function getSeriesFill(series, index, opacity = 0.18) {
17
+ const color = resolveColor(series.color, index);
18
+ return series.fill ?? `${color.fill}${Math.round(opacity * 255).toString(16).padStart(2, "0")}`;
19
+ }
20
+
21
+ exports.getSeriesFill = getSeriesFill;
22
+ exports.resolveColor = resolveColor;
23
+ //# sourceMappingURL=chunk-PVTTWOYV.js.map
24
+ //# sourceMappingURL=chunk-PVTTWOYV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/charts/shared/colors.ts"],"names":["chartPalette"],"mappings":";;;;;AAGO,SAAS,YAAA,CACd,OACA,KAAA,EACA;AACA,EAAA,IAAI,KAAA,IAAS,SAASA,6BAAA,EAAc;AAClC,IAAA,OAAOA,8BAAa,KAAmB,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM;AAAA,EACtC;AAEA,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,MAAA,CAAOA,6BAAY,CAAA;AAChD,EAAA,OAAO,aAAA,CAAc,KAAA,GAAQ,aAAA,CAAc,MAAM,KAAKA,6BAAA,CAAa,IAAA;AACrE;AAEO,SAAS,aAAA,CACd,MAAA,EACA,KAAA,EACA,OAAA,GAAU,IAAA,EACV;AACA,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,MAAA,CAAO,KAAA,EAAO,KAAK,CAAA;AAC9C,EAAA,OACE,OAAO,IAAA,IACP,CAAA,EAAG,KAAA,CAAM,IAAI,GAAG,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,GAAG,EACrC,QAAA,CAAS,EAAE,EACX,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAEvB","file":"chunk-PVTTWOYV.js","sourcesContent":["import type { ChartColor, ChartSeries } from \"./types\";\nimport { chartPalette } from \"./variants\";\n\nexport function resolveColor(\n color: ChartColor | string | undefined,\n index: number,\n) {\n if (color && color in chartPalette) {\n return chartPalette[color as ChartColor];\n }\n if (color) {\n return { stroke: color, fill: color };\n }\n\n const paletteValues = Object.values(chartPalette);\n return paletteValues[index % paletteValues.length] ?? chartPalette.cyan;\n}\n\nexport function getSeriesFill(\n series: ChartSeries,\n index: number,\n opacity = 0.18,\n) {\n const color = resolveColor(series.color, index);\n return (\n series.fill ??\n `${color.fill}${Math.round(opacity * 255)\n .toString(16)\n .padStart(2, \"0\")}`\n );\n}\n"]}
@@ -48,6 +48,11 @@ var chartVariants = cva(
48
48
  }
49
49
  );
50
50
  var chartPalette = {
51
+ glass: { stroke: "#0f172a", fill: "#0f172a", textColor: "#0f172a" },
52
+ outline: { stroke: "#0f172a", fill: "#0f172a", textColor: "#0f172a" },
53
+ muted: { stroke: "#0f172a", fill: "#0f172a", textColor: "#0f172a" },
54
+ default: { stroke: "#0f172a", fill: "#0f172a", textColor: "#0f172a" },
55
+ sky: { stroke: "#0f172a", fill: "#0f172a", textColor: "#0f172a" },
51
56
  cyan: { stroke: "#0891b2", fill: "#67e8f9", textColor: "#0891b2" },
52
57
  emerald: { stroke: "#059669", fill: "#6ee7b7", textColor: "#059669" },
53
58
  violet: { stroke: "#7c3aed", fill: "#c4b5fd", textColor: "#7c3aed" },
@@ -57,16 +62,67 @@ var chartPalette = {
57
62
  gray: { stroke: "#6b7280", fill: "#d1d5db", textColor: "#6b7280" },
58
63
  white: { stroke: "#ffffff", fill: "#ffffff", textColor: "#ffffff" },
59
64
  indigo: { stroke: "#6366f1", fill: "#c7d2fe", textColor: "#6366f1" },
60
- "gradient-cyan-violet": { stroke: "#0891b2", fill: "#67e8f9", textColor: "#0891b2" },
61
- "gradient-emerald-violet": { stroke: "#059669", fill: "#6ee7b7", textColor: "#059669" },
62
- "gradient-amber-rose": { stroke: "#d97706", fill: "#fcd34d", textColor: "#d97706" },
63
- "gradient-slate-gray": { stroke: "#475569", fill: "#cbd5e1", textColor: "#475569" },
64
- "gradient-indigo-purple": { stroke: "#6366f1", fill: "#c7d2fe", textColor: "#6366f1" },
65
- "gradient-cyan-blue": { stroke: "#0891b2", fill: "#67e8f9", textColor: "#0891b2" },
66
- "gradient-emerald-blue": { stroke: "#059669", fill: "#6ee7b7", textColor: "#059669" },
67
- "gradient-amber-blue": { stroke: "#d97706", fill: "#fcd34d", textColor: "#d97706" }
65
+ "gradient-cyan-violet": {
66
+ stroke: "#0891b2",
67
+ fill: "#67e8f9",
68
+ textColor: "#0891b2"
69
+ },
70
+ "gradient-emerald-violet": {
71
+ stroke: "#059669",
72
+ fill: "#6ee7b7",
73
+ textColor: "#059669"
74
+ },
75
+ "gradient-amber-rose": {
76
+ stroke: "#d97706",
77
+ fill: "#fcd34d",
78
+ textColor: "#d97706"
79
+ },
80
+ "gradient-slate-gray": {
81
+ stroke: "#475569",
82
+ fill: "#cbd5e1",
83
+ textColor: "#475569"
84
+ },
85
+ "gradient-indigo-purple": {
86
+ stroke: "#6366f1",
87
+ fill: "#c7d2fe",
88
+ textColor: "#6366f1"
89
+ },
90
+ "gradient-cyan-blue": {
91
+ stroke: "#0891b2",
92
+ fill: "#67e8f9",
93
+ textColor: "#0891b2"
94
+ },
95
+ "gradient-emerald-blue": {
96
+ stroke: "#059669",
97
+ fill: "#6ee7b7",
98
+ textColor: "#059669"
99
+ },
100
+ "gradient-amber-blue": {
101
+ stroke: "#d97706",
102
+ fill: "#fcd34d",
103
+ textColor: "#d97706"
104
+ }
68
105
  };
69
106
  var chartColorValues = Object.keys(chartPalette);
107
+ var CHART_ONLY_DIV_PROP_KEYS = /* @__PURE__ */ new Set([
108
+ "data",
109
+ "margin",
110
+ "series",
111
+ "showGrid",
112
+ "showLegend",
113
+ "showTooltip",
114
+ "stacked",
115
+ "strokeDasharray",
116
+ "syncId",
117
+ "tooltipColor",
118
+ "xKey"
119
+ ]);
120
+ function filterDivProps(props) {
121
+ const entries = Object.entries(props).filter(
122
+ ([key]) => !CHART_ONLY_DIV_PROP_KEYS.has(key)
123
+ );
124
+ return Object.fromEntries(entries);
125
+ }
70
126
  var defaultChartMargin = { top: 16, right: 16, bottom: 8, left: 0 };
71
127
  function ChartFrame({
72
128
  appearance,
@@ -80,6 +136,7 @@ function ChartFrame({
80
136
  style,
81
137
  ...props
82
138
  }) {
139
+ const divProps = filterDivProps(props);
83
140
  const chartStyle = {
84
141
  "--chart-height": `${height}px`,
85
142
  ...style
@@ -90,7 +147,7 @@ function ChartFrame({
90
147
  {
91
148
  className: cn(chartVariants({ appearance, density }), className),
92
149
  style: chartStyle,
93
- ...props,
150
+ ...divProps,
94
151
  children: /* @__PURE__ */ jsx("div", { className: "flex h-full min-h-48 items-center justify-center text-sm text-slate-500", children: emptyState })
95
152
  }
96
153
  );
@@ -100,7 +157,7 @@ function ChartFrame({
100
157
  {
101
158
  className: cn(chartVariants({ appearance, density }), className),
102
159
  style: chartStyle,
103
- ...props,
160
+ ...divProps,
104
161
  children: /* @__PURE__ */ jsx(
105
162
  ResponsiveContainer,
106
163
  {
@@ -144,22 +201,6 @@ function ChartDecorators({
144
201
  ] });
145
202
  }
146
203
 
147
- // src/charts/shared/colors.ts
148
- function resolveColor(color, index) {
149
- if (color && color in chartPalette) {
150
- return chartPalette[color];
151
- }
152
- if (color) {
153
- return { stroke: color, fill: color };
154
- }
155
- const paletteValues = Object.values(chartPalette);
156
- return paletteValues[index % paletteValues.length] ?? chartPalette.cyan;
157
- }
158
- function getSeriesFill(series, index, opacity = 0.18) {
159
- const color = resolveColor(series.color, index);
160
- return series.fill ?? `${color.fill}${Math.round(opacity * 255).toString(16).padStart(2, "0")}`;
161
- }
162
-
163
- export { ChartDecorators, ChartFrame, chartColorValues, chartPalette, chartVariants, defaultChartMargin, getSeriesFill, resolveColor };
164
- //# sourceMappingURL=chunk-IQZROQNJ.mjs.map
165
- //# sourceMappingURL=chunk-IQZROQNJ.mjs.map
204
+ export { ChartDecorators, ChartFrame, chartColorValues, chartPalette, chartVariants, defaultChartMargin };
205
+ //# sourceMappingURL=chunk-SPX2QDIB.mjs.map
206
+ //# sourceMappingURL=chunk-SPX2QDIB.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/charts/shared/variants.ts","../src/charts/shared/chart-frame.tsx"],"names":[],"mappings":"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","file":"chunk-SPX2QDIB.mjs","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nexport const chartVariants = cva(\n [\n \"relative w-full min-w-0 overflow-hidden rounded-xl\",\n \"h-[var(--chart-height)] min-h-64 sm:min-h-72 md:min-h-80\",\n \"[&_.recharts-default-tooltip]:rounded-lg [&_.recharts-default-tooltip]:border [&_.recharts-default-tooltip]:border-slate-200\",\n \"[&_.recharts-default-tooltip]:bg-white/95 [&_.recharts-default-tooltip]:shadow-lg\",\n \"[&_.recharts-default-tooltip]:text-slate-900\",\n ],\n {\n variants: {\n appearance: {\n default:\n \"bg-white text-slate-600 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n muted:\n \"bg-slate-50 text-slate-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n outline:\n \"border border-slate-200 bg-white text-slate-600 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n glass:\n \"border border-white/15 bg-white/10 text-slate-100 backdrop-blur-md [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n sky: \"bg-sky-50 text-sky-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n emerald:\n \"bg-emerald-50 text-emerald-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n violet:\n \"bg-violet-50 text-violet-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n amber:\n \"bg-amber-50 text-amber-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n rose: \"bg-rose-50 text-rose-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n slate:\n \"bg-slate-50 text-slate-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n gray: \"bg-gray-50 text-gray-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n indigo:\n \"bg-indigo-50 text-indigo-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900\",\n \"gradient-cyan-violet\":\n \"bg-gradient-to-r from-cyan-500 to-violet-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-emerald-violet\":\n \"bg-gradient-to-r from-emerald-500 to-violet-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-amber-rose\":\n \"bg-gradient-to-r from-amber-500 to-rose-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-slate-gray\":\n \"bg-gradient-to-r from-slate-500 to-gray-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-indigo-purple\":\n \"bg-gradient-to-r from-indigo-500 to-purple-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-cyan-blue\":\n \"bg-gradient-to-r from-cyan-500 to-blue-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-emerald-blue\":\n \"bg-gradient-to-r from-emerald-500 to-blue-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n \"gradient-amber-blue\":\n \"bg-gradient-to-r from-amber-500 to-blue-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white\",\n },\n density: {\n compact: \"p-2 sm:p-3\",\n comfortable: \"p-3 sm:p-4\",\n spacious: \"p-4 sm:p-5 md:p-6\",\n },\n },\n defaultVariants: {\n appearance: \"default\",\n density: \"comfortable\",\n },\n },\n);\n\nexport const chartPalette = {\n glass: { stroke: \"#0f172a\", fill: \"#0f172a\", textColor: \"#0f172a\" },\n outline: { stroke: \"#0f172a\", fill: \"#0f172a\", textColor: \"#0f172a\" },\n muted: { stroke: \"#0f172a\", fill: \"#0f172a\", textColor: \"#0f172a\" },\n default: { stroke: \"#0f172a\", fill: \"#0f172a\", textColor: \"#0f172a\" },\n sky: { stroke: \"#0f172a\", fill: \"#0f172a\", textColor: \"#0f172a\" },\n cyan: { stroke: \"#0891b2\", fill: \"#67e8f9\", textColor: \"#0891b2\" },\n emerald: { stroke: \"#059669\", fill: \"#6ee7b7\", textColor: \"#059669\" },\n violet: { stroke: \"#7c3aed\", fill: \"#c4b5fd\", textColor: \"#7c3aed\" },\n amber: { stroke: \"#d97706\", fill: \"#fcd34d\", textColor: \"#d97706\" },\n rose: { stroke: \"#e11d48\", fill: \"#fda4af\", textColor: \"#e11d48\" },\n slate: { stroke: \"#475569\", fill: \"#cbd5e1\", textColor: \"#475569\" },\n gray: { stroke: \"#6b7280\", fill: \"#d1d5db\", textColor: \"#6b7280\" },\n white: { stroke: \"#ffffff\", fill: \"#ffffff\", textColor: \"#ffffff\" },\n indigo: { stroke: \"#6366f1\", fill: \"#c7d2fe\", textColor: \"#6366f1\" },\n \"gradient-cyan-violet\": {\n stroke: \"#0891b2\",\n fill: \"#67e8f9\",\n textColor: \"#0891b2\",\n },\n \"gradient-emerald-violet\": {\n stroke: \"#059669\",\n fill: \"#6ee7b7\",\n textColor: \"#059669\",\n },\n \"gradient-amber-rose\": {\n stroke: \"#d97706\",\n fill: \"#fcd34d\",\n textColor: \"#d97706\",\n },\n \"gradient-slate-gray\": {\n stroke: \"#475569\",\n fill: \"#cbd5e1\",\n textColor: \"#475569\",\n },\n \"gradient-indigo-purple\": {\n stroke: \"#6366f1\",\n fill: \"#c7d2fe\",\n textColor: \"#6366f1\",\n },\n \"gradient-cyan-blue\": {\n stroke: \"#0891b2\",\n fill: \"#67e8f9\",\n textColor: \"#0891b2\",\n },\n \"gradient-emerald-blue\": {\n stroke: \"#059669\",\n fill: \"#6ee7b7\",\n textColor: \"#059669\",\n },\n \"gradient-amber-blue\": {\n stroke: \"#d97706\",\n fill: \"#fcd34d\",\n textColor: \"#d97706\",\n },\n} as const;\n\nexport const chartColorValues = Object.keys(chartPalette) as Array<\n keyof typeof chartPalette\n>;\n","import type { CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport { CartesianGrid, Legend, ResponsiveContainer, Tooltip } from \"recharts\";\n\nimport { cn } from \"../../lib/utils\";\nimport { chartVariants } from \"./variants\";\nimport { VariantProps } from \"class-variance-authority\";\n\n/** Chart-level props that may be forwarded from *Chart `...rest` and must not reach a DOM node. */\nconst CHART_ONLY_DIV_PROP_KEYS = new Set([\n \"data\",\n \"margin\",\n \"series\",\n \"showGrid\",\n \"showLegend\",\n \"showTooltip\",\n \"stacked\",\n \"strokeDasharray\",\n \"syncId\",\n \"tooltipColor\",\n \"xKey\",\n]);\n\nfunction filterDivProps(\n props: HTMLAttributes<HTMLDivElement>,\n): HTMLAttributes<HTMLDivElement> {\n const entries = Object.entries(props).filter(\n ([key]) => !CHART_ONLY_DIV_PROP_KEYS.has(key),\n );\n return Object.fromEntries(entries) as HTMLAttributes<HTMLDivElement>;\n}\n\ntype ChartFrameProps = HTMLAttributes<HTMLDivElement> & {\n appearance?: VariantProps<typeof chartVariants>[\"appearance\"];\n containerStyle?: CSSProperties;\n density?: \"compact\" | \"comfortable\" | \"spacious\" | null;\n emptyState?: ReactNode;\n hasData: boolean;\n height: number;\n style?: CSSProperties;\n children: ReactNode;\n};\n\nexport const defaultChartMargin = { top: 16, right: 16, bottom: 8, left: 0 };\n\nexport function ChartFrame({\n appearance,\n children,\n className,\n containerStyle,\n density,\n emptyState = null,\n hasData,\n height,\n style,\n ...props\n}: ChartFrameProps) {\n const divProps = filterDivProps(props);\n const chartStyle = {\n \"--chart-height\": `${height}px`,\n ...style,\n } as CSSProperties;\n\n if (!hasData) {\n return (\n <div\n className={cn(chartVariants({ appearance, density }), className)}\n style={chartStyle}\n {...divProps}\n >\n <div className=\"flex h-full min-h-48 items-center justify-center text-sm text-slate-500\">\n {emptyState}\n </div>\n </div>\n );\n }\n\n return (\n <div\n className={cn(chartVariants({ appearance, density }), className)}\n style={chartStyle}\n {...divProps}\n >\n <ResponsiveContainer\n width=\"100%\"\n height=\"100%\"\n debounce={80}\n style={containerStyle}\n >\n {children}\n </ResponsiveContainer>\n </div>\n );\n}\n\nexport function ChartDecorators({\n axis,\n showGrid,\n showLegend,\n showTooltip,\n tooltipColor = \"#0f172a\",\n}: {\n axis: ReactNode;\n showGrid: boolean;\n showLegend: boolean;\n showTooltip: boolean;\n tooltipColor?: string;\n}) {\n return (\n <>\n {showGrid ? (\n <CartesianGrid\n strokeDasharray=\"3 3\"\n stroke=\"currentColor\"\n opacity={0.16}\n />\n ) : null}\n {axis}\n {showTooltip ? (\n <Tooltip\n cursor={{ opacity: 0.12 }}\n contentStyle={{ color: tooltipColor }}\n labelStyle={{ color: tooltipColor }}\n itemStyle={{ color: tooltipColor }}\n />\n ) : null}\n {showLegend ? <Legend /> : null}\n </>\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  export declare const buttonVariants: (props?: ({
2
- appearance?: "default" | "outline" | "glass" | "sky" | "emerald" | "violet" | "amber" | "rose" | "gray" | "indigo" | "orange" | "pink" | "purple" | "teal" | "yellow" | "link" | "secondary" | "destructive" | "ghost" | "gradient-blue" | "gradient-green" | "gradient-red" | "gradient-yellow" | "gradient-purple" | "gradient-teal" | "gradient-indigo" | "gradient-pink" | "gradient-orange" | null | undefined;
2
+ appearance?: "default" | "outline" | "glass" | "sky" | "emerald" | "violet" | "amber" | "rose" | "gray" | "indigo" | "link" | "orange" | "pink" | "purple" | "teal" | "yellow" | "secondary" | "destructive" | "ghost" | "gradient-blue" | "gradient-green" | "gradient-red" | "gradient-yellow" | "gradient-purple" | "gradient-teal" | "gradient-indigo" | "gradient-pink" | "gradient-orange" | null | undefined;
3
3
  size?: "icon" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | "6xl" | "7xl" | "8xl" | "9xl" | "10xl" | null | undefined;
4
4
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5
5
  //# sourceMappingURL=variants.d.ts.map
@@ -1,5 +1,5 @@
1
1
  export declare const Pagination: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLElement>, HTMLElement>, "ref">, "onChange"> & import("class-variance-authority").VariantProps<(props?: ({
2
- appearance?: "default" | "outline" | "glass" | "sky" | "emerald" | "violet" | "amber" | "rose" | "gray" | "indigo" | "orange" | "pink" | "purple" | "teal" | "yellow" | "link" | "secondary" | "destructive" | "ghost" | "gradient-blue" | "gradient-green" | "gradient-red" | "gradient-yellow" | "gradient-purple" | "gradient-teal" | "gradient-indigo" | "gradient-pink" | "gradient-orange" | null | undefined;
2
+ appearance?: "default" | "outline" | "glass" | "sky" | "emerald" | "violet" | "amber" | "rose" | "gray" | "indigo" | "link" | "orange" | "pink" | "purple" | "teal" | "yellow" | "secondary" | "destructive" | "ghost" | "gradient-blue" | "gradient-green" | "gradient-red" | "gradient-yellow" | "gradient-purple" | "gradient-teal" | "gradient-indigo" | "gradient-pink" | "gradient-orange" | null | undefined;
3
3
  size?: "icon" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | "6xl" | "7xl" | "8xl" | "9xl" | "10xl" | null | undefined;
4
4
  } & import("class-variance-authority/types").ClassProp) | undefined) => string> & {
5
5
  pageCount: number;
@@ -3,7 +3,7 @@
3
3
  * `components/ui/buttons/variants.ts` for consistent design-system tokens.
4
4
  */
5
5
  export declare const paginationListVariants: (props?: ({
6
- appearance?: "default" | "outline" | "glass" | "sky" | "emerald" | "violet" | "amber" | "rose" | "gray" | "indigo" | "orange" | "pink" | "purple" | "teal" | "yellow" | "link" | "secondary" | "destructive" | "ghost" | "gradient-blue" | "gradient-green" | "gradient-red" | "gradient-yellow" | "gradient-purple" | "gradient-teal" | "gradient-indigo" | "gradient-pink" | "gradient-orange" | null | undefined;
6
+ appearance?: "default" | "outline" | "glass" | "sky" | "emerald" | "violet" | "amber" | "rose" | "gray" | "indigo" | "link" | "orange" | "pink" | "purple" | "teal" | "yellow" | "secondary" | "destructive" | "ghost" | "gradient-blue" | "gradient-green" | "gradient-red" | "gradient-yellow" | "gradient-purple" | "gradient-teal" | "gradient-indigo" | "gradient-pink" | "gradient-orange" | null | undefined;
7
7
  size?: "icon" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | "6xl" | "7xl" | "8xl" | "9xl" | "10xl" | null | undefined;
8
8
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
9
9
  export declare const paginationEllipsisVariants: (props?: ({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zentauri-ui/zentauri-components",
3
- "version": "1.5.0",
3
+ "version": "1.5.21",
4
4
  "description": "React + Tailwind UI kit with charts, ESM/CJS builds, per-entry exports, and a zentauri-components / zentauri-ui CLI to vendor UI or hook source into your app",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -80,7 +80,6 @@ export function AreaChart<
80
80
  {series.map((item, index) => {
81
81
  const color = resolveColor(item.color, index);
82
82
  const fill = getSeriesFill(item, index)
83
- console.log(fill)
84
83
  return (
85
84
  <Area
86
85
  key={item.dataKey}
@@ -1,7 +1,14 @@
1
1
  "use client";
2
2
 
3
3
  export { AreaChart } from "./Area";
4
- export type { AreaChartProps } from "../shared/types";
4
+ export type {
5
+ AreaChartProps,
6
+ ChartColor,
7
+ ChartDatum,
8
+ ChartMargin,
9
+ ChartSeries,
10
+ ChartSharedStatic,
11
+ } from "../shared/types";
5
12
  export {
6
13
  chartColorValues,
7
14
  chartPalette,
@@ -1,7 +1,14 @@
1
1
  "use client";
2
2
 
3
3
  export { BarChart } from "./Bar";
4
- export type { BarChartProps } from "../shared/types";
4
+ export type {
5
+ BarChartProps,
6
+ ChartColor,
7
+ ChartDatum,
8
+ ChartMargin,
9
+ ChartSeries,
10
+ ChartSharedStatic,
11
+ } from "../shared/types";
5
12
  export {
6
13
  chartColorValues,
7
14
  chartPalette,
@@ -59,7 +59,7 @@ export function BubbleChart<
59
59
  <>
60
60
  <XAxis
61
61
  dataKey={xAxisKey}
62
- type="number"
62
+ type={typeof data[0]?.[xAxisKey] === "number" ? "number" : "category"}
63
63
  minTickGap={24}
64
64
  tickLine={false}
65
65
  tickMargin={10}
@@ -68,7 +68,7 @@ export function BubbleChart<
68
68
  />
69
69
  <YAxis
70
70
  dataKey="__chartY"
71
- type="number"
71
+ type={typeof data[0]?.[xAxisKey] === "number" ? "number" : "category"}
72
72
  width={40}
73
73
  tickLine={false}
74
74
  tickMargin={8}
@@ -94,14 +94,7 @@ export function BubbleChart<
94
94
  }))}
95
95
  name={item.name}
96
96
  fill={item.fill ?? color.stroke}
97
- >
98
- {data.map((_entry, cellIndex) => (
99
- <Bar
100
- key={`${item.dataKey}-${cellIndex}`}
101
- fill={item.fill ?? color.stroke}
102
- />
103
- ))}
104
- </Scatter>
97
+ />
105
98
  );
106
99
  })}
107
100
  <ZAxis dataKey="__chartZ" range={[64, 720]} />
@@ -1,7 +1,14 @@
1
1
  "use client";
2
2
 
3
3
  export { BubbleChart } from "./Bubble";
4
- export type { BubbleChartProps } from "../shared/types";
4
+ export type {
5
+ BubbleChartProps,
6
+ ChartColor,
7
+ ChartDatum,
8
+ ChartMargin,
9
+ ChartSeries,
10
+ ChartSharedStatic,
11
+ } from "../shared/types";
5
12
  export {
6
13
  chartColorValues,
7
14
  chartPalette,
@@ -1,7 +1,14 @@
1
1
  "use client";
2
2
 
3
3
  export { LineChart } from "./Line";
4
- export type { LineChartProps } from "../shared/types";
4
+ export type {
5
+ ChartColor,
6
+ ChartDatum,
7
+ ChartMargin,
8
+ ChartSeries,
9
+ ChartSharedStatic,
10
+ LineChartProps,
11
+ } from "../shared/types";
5
12
  export {
6
13
  chartColorValues,
7
14
  chartPalette,
@@ -0,0 +1,101 @@
1
+ "use client";
2
+
3
+ import {
4
+ Legend,
5
+ Pie,
6
+ PieLabelRenderProps,
7
+ PieChart as RechartsPieChart,
8
+ Tooltip,
9
+ } from "recharts";
10
+
11
+ import { ChartFrame } from "../shared/chart-frame";
12
+ import type { PieChartProps } from "../shared/types";
13
+
14
+ const RADIAN = Math.PI / 180;
15
+
16
+ const renderCustomizedLabel = ({ cx, cy, midAngle, innerRadius, outerRadius, percent }: PieLabelRenderProps) => {
17
+ if (cx == null || cy == null || innerRadius == null || outerRadius == null) {
18
+ return null;
19
+ }
20
+ const radius = innerRadius + (outerRadius - innerRadius) * 0.5;
21
+ const ncx = Number(cx);
22
+ const x = ncx + radius * Math.cos(-(midAngle ?? 0) * RADIAN);
23
+ const ncy = Number(cy);
24
+ const y = ncy + radius * Math.sin(-(midAngle ?? 0) * RADIAN);
25
+
26
+ return (
27
+ <text x={x} y={y} fill="white" textAnchor={x > ncx ? 'start' : 'end'} dominantBaseline="central">
28
+ {`${((percent ?? 0) * 100).toFixed(0)}%`}
29
+ </text>
30
+ );
31
+ };
32
+
33
+ const DEFAULT_COLORS = ['#0088FE', '#00C49F', '#FFBB28', '#FF8042'];
34
+
35
+ export function PieChart<
36
+ TDatum extends Record<string, number | string | null | undefined>,
37
+ >({
38
+ appearance,
39
+ className,
40
+ containerStyle,
41
+ cornerRadius = 10,
42
+ data,
43
+ dataKey,
44
+ density,
45
+ emptyState = null,
46
+ height = 320,
47
+ label = false,
48
+ labelLine = false,
49
+ nameKey,
50
+ paddingAngle = 2,
51
+ showLegend = true,
52
+ showTooltip = true,
53
+ tooltipColor = "#0f172a",
54
+ stroke,
55
+ colors = DEFAULT_COLORS,
56
+ innerRadius,
57
+ outerRadius,
58
+ style,
59
+ ...props
60
+ }: PieChartProps<TDatum>) {
61
+ const hasData = data.length > 0;
62
+
63
+ return (
64
+ <ChartFrame
65
+ appearance={appearance}
66
+ className={className}
67
+ containerStyle={containerStyle}
68
+ density={density}
69
+ emptyState={emptyState}
70
+ hasData={hasData}
71
+ height={height}
72
+ style={style}
73
+ {...props}
74
+ >
75
+ <RechartsPieChart>
76
+ {showTooltip ? (
77
+ <Tooltip
78
+ contentStyle={{ color: tooltipColor }}
79
+ labelStyle={{ color: tooltipColor }}
80
+ itemStyle={{ color: tooltipColor }}
81
+ />
82
+ ) : null}
83
+ {showLegend ? <Legend color="currentColor" /> : null}
84
+ <Pie
85
+ data={data}
86
+ dataKey={String(dataKey)}
87
+ nameKey={String(nameKey)}
88
+ innerRadius={innerRadius}
89
+ outerRadius={outerRadius}
90
+ paddingAngle={paddingAngle}
91
+ cornerRadius={cornerRadius}
92
+ labelLine={labelLine}
93
+ label={label ? renderCustomizedLabel : undefined}
94
+ stroke={stroke}
95
+ />
96
+ </RechartsPieChart>
97
+ </ChartFrame>
98
+ );
99
+ }
100
+
101
+ PieChart.displayName = "PieChart";
@@ -0,0 +1,9 @@
1
+ "use client";
2
+
3
+ export { PieChart } from "./Pie";
4
+ export type { PieChartProps } from "../shared/types";
5
+ export {
6
+ chartColorValues,
7
+ chartPalette,
8
+ chartVariants,
9
+ } from "../shared/variants";
@@ -5,6 +5,30 @@ import { cn } from "../../lib/utils";
5
5
  import { chartVariants } from "./variants";
6
6
  import { VariantProps } from "class-variance-authority";
7
7
 
8
+ /** Chart-level props that may be forwarded from *Chart `...rest` and must not reach a DOM node. */
9
+ const CHART_ONLY_DIV_PROP_KEYS = new Set([
10
+ "data",
11
+ "margin",
12
+ "series",
13
+ "showGrid",
14
+ "showLegend",
15
+ "showTooltip",
16
+ "stacked",
17
+ "strokeDasharray",
18
+ "syncId",
19
+ "tooltipColor",
20
+ "xKey",
21
+ ]);
22
+
23
+ function filterDivProps(
24
+ props: HTMLAttributes<HTMLDivElement>,
25
+ ): HTMLAttributes<HTMLDivElement> {
26
+ const entries = Object.entries(props).filter(
27
+ ([key]) => !CHART_ONLY_DIV_PROP_KEYS.has(key),
28
+ );
29
+ return Object.fromEntries(entries) as HTMLAttributes<HTMLDivElement>;
30
+ }
31
+
8
32
  type ChartFrameProps = HTMLAttributes<HTMLDivElement> & {
9
33
  appearance?: VariantProps<typeof chartVariants>["appearance"];
10
34
  containerStyle?: CSSProperties;
@@ -12,9 +36,6 @@ type ChartFrameProps = HTMLAttributes<HTMLDivElement> & {
12
36
  emptyState?: ReactNode;
13
37
  hasData: boolean;
14
38
  height: number;
15
- showGrid?: boolean;
16
- showLegend?: boolean;
17
- showTooltip?: boolean;
18
39
  style?: CSSProperties;
19
40
  children: ReactNode;
20
41
  };
@@ -33,6 +54,7 @@ export function ChartFrame({
33
54
  style,
34
55
  ...props
35
56
  }: ChartFrameProps) {
57
+ const divProps = filterDivProps(props);
36
58
  const chartStyle = {
37
59
  "--chart-height": `${height}px`,
38
60
  ...style,
@@ -43,7 +65,7 @@ export function ChartFrame({
43
65
  <div
44
66
  className={cn(chartVariants({ appearance, density }), className)}
45
67
  style={chartStyle}
46
- {...props}
68
+ {...divProps}
47
69
  >
48
70
  <div className="flex h-full min-h-48 items-center justify-center text-sm text-slate-500">
49
71
  {emptyState}
@@ -56,7 +78,7 @@ export function ChartFrame({
56
78
  <div
57
79
  className={cn(chartVariants({ appearance, density }), className)}
58
80
  style={chartStyle}
59
- {...props}
81
+ {...divProps}
60
82
  >
61
83
  <ResponsiveContainer
62
84
  width="100%"
@@ -3,7 +3,7 @@ import type { CSSProperties, HTMLAttributes, ReactNode } from "react";
3
3
 
4
4
  import type { chartPalette, chartVariants } from "./variants";
5
5
 
6
- export type ChartType = "area" | "bar" | "bubble" | "line";
6
+ export type ChartType = "area" | "bar" | "bubble" | "line" | "pie";
7
7
 
8
8
  export type ChartColor = keyof typeof chartPalette;
9
9
 
@@ -58,3 +58,25 @@ export type LineChartProps<TDatum extends ChartDatum = ChartDatum> =
58
58
 
59
59
  export type BubbleChartProps<TDatum extends ChartDatum = ChartDatum> =
60
60
  BaseChartProps<TDatum>;
61
+
62
+ export type PieChartProps<TDatum extends ChartDatum = ChartDatum> =
63
+ ChartSharedStatic &
64
+ Omit<HTMLAttributes<HTMLDivElement>, "children"> & {
65
+ data: TDatum[];
66
+ dataKey: keyof TDatum & string;
67
+ nameKey: keyof TDatum & string;
68
+ height?: number;
69
+ showLegend?: boolean;
70
+ showTooltip?: boolean;
71
+ tooltipColor?: string;
72
+ emptyState?: ReactNode;
73
+ containerStyle?: CSSProperties;
74
+ paddingAngle?: number;
75
+ cornerRadius?: number;
76
+ label?: boolean;
77
+ labelLine?: boolean;
78
+ stroke?: string;
79
+ colors?: string[];
80
+ innerRadius?: number | string;
81
+ outerRadius?: number | string;
82
+ };